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...