跳转到主要内容

verilog语法—— generate

demi 提交于

<font style="line-height: 40px;"><strong>1、generate</strong></font>

generate语句能够生成有规律的代码,较少语句数量,提高效率。

注意事项 :

① genevar 定义的变量 在同一个模块中不能重复使用,用i、m、n表示,否则综合会报warning

② 注意格式 genvar 变量名 ;generate for循环 begin:循环体名称 循环内容end endgenerate

<font style="line-height: 40px;"><strong>2、代码实现</strong></font>

<pre>module data_delay
#( parameter DELAY_CNT =31 )
(
input clk ,
input rstn ,
input data_vld_in ,
input [1024-1:0] data_in ,
output data_vld_out ,
output [1024-1:0] data_out
);
wire rd_en ;
wire wr_en ;
reg [DELAY_CNT-1:0] data_vld_dly ;

assign wr_en = data_vld_in ;
assign rd_en =data_vld_dly[DELAY_CNT-2] ;
assign data_vld_out = data_vld_dly[DELAY_CNT-1] ;

genvar i ;
generate
for(i=0; i &lt; DELAY_CNT; i=i+1) begin : data_vld_in_d

always@(posedge clk or negedge rstn)
begin
if(!rstn)
data_vld_dly [i] &lt;= 1'b0 ;
else begin
if(i==0)
data_vld_dly [i] &lt;= data_vld_in;
else
data_vld_dly [i] &lt;= data_vld_dly[i-1];
end

end
endgenerate
data_delay_fifo_32x1024_wrapper data_delay_fifo_32x1024_wrapper_u0
(
.clk (clk ),
.rstn (rstn ),
.rd_data (data_out ),
.rd_en (rd_en ),
.wr_data (data_in ),
.wr_en (wr_en ),
.empty (empty_nc ),
.full (full_nc ),
.ovf_int (ovf_nc ),
.udf_int (udf_int )
);

endmodule
</pre>

版权声明:本文为CSDN博主「IC小鸽」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/icxiaoge/article/details/84501259