verilog语法—— generate

1、generate

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

注意事项 :

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

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

2、代码实现

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 < DELAY_CNT; i=i+1) begin : data_vld_in_d
	
	always@(posedge clk or negedge rstn)
	begin
	    if(!rstn)
		   data_vld_dly [i] <= 1'b0 ;
		else begin
		   if(i==0)
		       data_vld_dly [i] <= data_vld_in;
		   else
		       data_vld_dly [i] <= 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

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

最新文章

最新文章