首页 > 代码库 > Verilog中generate语句的用法
Verilog中generate语句的用法
在Verilog-2001中新增了语句generate,通过generate循环,可以产生一个对象(比如一个元件或者是一个模块)的多次例化,为可变尺度的设计提供了方便,generate语句一般在循环和条件语句中使用,为此,Verilog-2001增加了四个关键字generate,endgenerate, genvar, localparam,genvar是一个新增的数据类型,用在generate的循环中的标尺变量必须定义为gnevar类型。
- 首先设计一个1bit位宽的buffer_1,这里有几点需要注意的是:
- module头的申明,这里采用了verilog-2005的风格,目前来讲的稍微新一点的仿真/综合工具都是支持的;
- 这种风格相比较verilog-1995/2002等,要简洁明了,便于代码的阅读和维护;
1 //1bit width buffer_12 3 module buffer_1(4 input wire in,5 output wire out6 );7 assign out = ~in;8 9 endmodule
- 在buffer_8中例化buffer_1 8次,这里有几点需要注意:
- 循环变量i必须是genvar类型的,不可以是reg型,integer型;
- for循环之后的的begin最好加上一个标号(BLOCK1);
1 //8bit width buffer 2 3 module buffer_8( 4 input wire[7:0] din, 5 output wire[7:0] dout 6 ); 7 8 // Generate block 9 genvar i;10 generate11 for(i=0; i<8; i=i+1) begin:BLOCK112 buffer_1 buffer_1_1(.in(din[i]), .out(dout[i]));13 end14 endgenerate15 16 endmodule
- 这里给出了一个简单的顶层
1 //testbench 2 module buffer_8_tb; 4 // reg & wire define area 5 reg [7:0] din; 6 wire[7:0] dout; 7 8 // Instance the DUT 9 buffer_8 buffer_8_1(10 .din (din ),11 .dout (dout )12 );13 14 // Generate the stimulate15 initial begin16 din = 8‘d7;17 #10; din = 8‘d6;18 #10; din = 8‘d4;19 #10; din = 8‘d7;20 #10; $finish();21 end22 23 endmodule
汤晓东
2014-06-13 晚 于苏州
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。