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_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 = 8'd7;
17           #10; din = 8'd6;
18           #10; din = 8'd4;
19           #10; din = 8'd7;
20           #10; $finish();
21        end
22 
23 endmodule

 

湯曉東

2014-06-13 晚 於蘇州


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM