加载中…
个人资料
追梦人_小山
追梦人_小山
  • 博客等级:
  • 博客积分:0
  • 博客访问:5,203
  • 关注人气:89
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Verilog2001中generate的用法

(2012-09-24 14:25:22)
标签:

verilog

generate

杂谈

分类: 工作札记
Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,function,continous assignment,initial和always。在generate语句中可以引入if-else和case语句,根据条件不同产生不同的实例化。

为此,Verilog-2001还增加了以下关键字:generate,endgenerate,genvar,localparam。genvar为新增数据类型,存储正的integer。在generate语句中使用的index必须定义成genvar类型。localparam与parameter有些类似,不过其不能通过redefinition改变值。除了可以在generate语句中使用if-else,case外,还能使用for语句进行循环。

1)包含case语句的有条件的generate语句
generate
case ()
: begin:

end
: begin:

end
default: begin:

end
endcase
endgenerate
其中:constant_expression为常数表达式;value为case的取值;label为标号。

2)包含if-else语句的有条件的generate语句
generate
if () begin:
;
end else if () begin:
;
end else begin:
;
end
endgenerate
其中:condition为条件表达式;value为case的取值;label为标号

3)例化多个模块的generate语句
genvar ;
generate
for (
=0; < ; =+1)
begin:

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 j;
      for(j=0;j<=31;j=j+1)  begin :wiertech
            assign mem[j]= 8'b0;
      end

endgenerate

 

endmodule

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有