(原创)verilog2001中generate的精妙用法

verilog2001中有generate这个语法,近日有用到,简单归纳如下:

语法:

1。genvar后面的for,变量必须是genvar变量;generate+if,不如`ifdef `else `endif;

2。for里必须有begin,哪怕只有一句;

3。begin必须有名称,原因见4;

4。这里例化的模块名称是inst[j].unit;

5。generate语句可以看作是标准化为块的综合指令。

应用实例:

generate可以用for,case,if。其中,generate实例化多个器件很简洁。

案例

generate

  genvar j ;

  for(j=0;j<=INST_NUM;j=j+1)

  begin : inst

      dff #(PARAMETER) unit(

                                        .clk(clk),

                                        .ena(ena),

                                        .in(in),

                                        .out(out)

                                        ) ;

 end

endgenerate

 

generate还可以进行多个assign赋值!

案例

module anytest_v(
    input clk,
    input[7:0] datain,
    output[7:0] dataout,
    output finish
    );

wire[7:0] mem[31:0];
wire[32*8-1:0] xxx;
//reg[7:0] i;
generate
      genvar i;
      for(i=0;i<=31;i=i+1) 
      begin :wiertech
            assign mem[i]= 8'b0; 
      end
endgenerate
endmodule

 

 

其他相关文章,请看我大哥的这篇笔记(筆記) 如何將memory轉成vector? (SOC) (Verilog)   真 OO无双

posted @ 2008-12-24 22:50  安达米特  阅读(3712)  评论(0编辑  收藏  举报