码迷,mamicode.com
首页 > 其他好文 > 详细

Verilog中generate语句的用法

时间:2014-06-14 18:42:40      阅读:904      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   code   color   width   

在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_1
2 
3 module buffer_1(
4     input    wire    in,
5     output   wire    out
6 );
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     generate
11         for(i=0; i<8; i=i+1) begin:BLOCK1
12             buffer_1 buffer_1_1(.in(din[i]), .out(dout[i]));
13         end
14     endgenerate
15 
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 stimulate
15       initial begin
16                din = 8d7;
17           #10; din = 8d6;
18           #10; din = 8d4;
19           #10; din = 8d7;
20           #10; $finish();
21        end
22 
23 endmodule

 

汤晓东

2014-06-13 晚 于苏州

Verilog中generate语句的用法,布布扣,bubuko.com

Verilog中generate语句的用法

标签:style   class   blog   code   color   width   

原文地址:http://www.cnblogs.com/txd717/p/3787601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!