Verilog中generate語法和作用

2021-10-08 15:32:15 字數 1983 閱讀 6086

verilog中generate語句的用法

在verilog-2001中新增了語句generate,通過generate迴圈,可以產生乙個物件(比如乙個元件或者是乙個模組)的多次例化,為可變尺度的設計提供了方便,generate語句一般在迴圈和條件語句中使用,為此,verilog-2001增加了四個關鍵字generate,endgenerate, genvar, localparam,genvar是乙個新增的資料型別,用在generate的迴圈中的標尺變數必須定義為gnevar型別;

下面舉例說明generate的用法:

首先設計乙個1bit位寬的buffer_1:

//1bit width buffer_1

module buffer_1(

input wire in,

output wire out

); assign out = ~in;

endmodule

在buffer_8中例化buffer_1 8次,這裡有幾點需要注意:

迴圈變數i必須是genvar型別的,不可以是reg型,integer型;

for迴圈之後的的begin最好加上乙個標號(block1);

//8bit width buffer

module buffer_8(

input wire[7:0] din,

output wire[7:0] dout

);// generate block

genvar i;

generate

for(i=0; i<8; i=i+1) begin:block1

buffer_1 buffer_1_1(.in(din[i]), .out(dout[i]));

endendgenerate

endmodule

這裡給出了乙個簡單的頂層:

//testbench

module buffer_8_tb;

// reg & wire define area

reg [7:0] din;

wire[7:0] dout;

// instance the dut

buffer_8 buffer_8_1(

.din (din ),

.dout (dout )

);// generate the stimulate

initial begin

din = 8'd7;

#10; din = 8'd6;

#10; din = 8'd4;

#10; din = 8'd7;

#10; $finish();

endendmodule

generate語法

定義genvar,作為generate種的迴圈變數。

generate語句中定義的for語句,必須要有begin,為後續增加標籤做準備。

begin必須要有名稱,也就是必須要有標籤,因為標籤會作為generate迴圈的例項名稱。

可以使用在generate語句中的型別主要有

ü module(模組)

ü udp(使用者自定義原語)

ü 門級原語

ü 連續賦值語句

ü initial或always語句

基本結構如下:

genvar 迴圈變數名;

generate

// generate迴圈語句

// generate 條件語句

// generate 分支語句

// 巢狀的generate語句

endgenerate

Verilog中的函式

verilog中的函式 verilog hdl與大多數可程式語言一樣,將使用率很高的 按照軟體工程的思想,寫成函式,這樣,該函式可以被多次呼叫。verilog中函式常用語三種情況 verilog中的函式與c語言中的函式的主要不同之處是 在verilog中,呼叫函式時,需要將乙個或則多個自變數傳給函式...

Python學習筆記 生成器(Generator)

python學習筆記 生成器 generator 擁有迭代序列的一致方式,比如列表裡的物件或檔案裡的行,是python的一項重要特性。這是通過迭代器協議的方式來完成的,一種生成可迭代物件的通用方式。例如,迭代乙個字典會生成字典鍵構成的集合。當我們書寫for key in mydict語句時,pyth...

verilog中的task用法

定義乙個任務。task task demo 任務定義結構開頭,命名為 task demo input 7 0 x,y 輸入埠說明 output 7 0 tmp 輸出埠說明 if x y 給出任務定義的描述語句 tmp x else tmp y endtask 上述 定義了乙個名為 task demo...