可以動態的生成verilog**,當對向量中的多個位進行重複操作時,或者當進行多個模組的例項引用的重複操作時,或者根據引數的定義來確定程式中是否應該包含某段verilog**的時候,使用生成語句能大大簡化程式的編寫過程。
生成語句生成的例項範圍,關鍵字generate-endgenerate用來指定該範圍。生成例項可以是以下的乙個或多個型別:
(1)模組;(2)使用者定義原語;(3)門級語句;(4)連續賦值語句;(5)initial和always塊。
generate語句有generate-for,generate-if,generate-case三種語句。
用法:generate語法有generate for, genreate if和generate case三種
generate for語句必須有genvar關鍵字定義for的變數
for 的內容必須加begin和end
必須給for語段起個名字
基本結構如下:
genvar 迴圈變數名;
generate
// generate迴圈語句
// generate 條件語句
// generate 分支語句
// 巢狀的generate語句
endgenerate
下面是一道筆試題
以上邏輯不可綜合
generate if()後如果是語句需要加assign,如果是例項化模組不用加
例1:assign語句實現
module test(bin,gray)
; parameter size=8;
output [size-1:0] bin;
input [size-1:0] gray;
genvar i; //genvar i;也可以定義到generate語句裡面
generate
for(i=0;i
begin:bit
assign bin[i]
=^gray[size-1:i]
; end
endgenerate
endmodule
等同於下面語句
assign bin[0]
=^gray[size-1:0]
;assign bin[1]
=^gray[size-1:1]
;assign bin[2]
=^gray[size-1:2]
;assign bin[3]
=^gray[size-1:3]
;assign bin[4]
=^gray[size-1:4]
;assign bin[5]
=^gray[size-1:5]
;assign bin[6]
=^gray[size-1:6]
;assign bin[7]
=^gray[size-1:7]
;
generate if例子:
generate
if(reg_width == write_width) begin : new_data_a_generation
assign new_data_a = merge_update ? merge_wr_data : held_wr_data_a;
endelse begin
assign new_data_a = merge_update ?
}, merge_wr_data} :
}, held_wr_data_a}
;end
endgenerate
generate for的例子
generate
genvar i;
for(i=0;i
begin:shifter
always@(posedge clk)
shifter[i]
<=
(i==0)?din:shifter[i-1]
; end
endgenerate
相當於always@(posedge clk)
shifter[0]
<=din;
always@(posedge clk)
shifter[1]
<=shifter[0]
;always@(posedge clk)
shifter[2]
<=shifter[1]
;always@(posedge clk)
shifter[size]
<=shifter[size-1]
;generate-if,generate-case和generate-for語句類似。
下面是一道筆試題formality 是由synopsys公司開發的一種形式驗證工具,用於兩個design間等價性驗證,下面正確的是全對 一道筆試題
看到一道筆試題,跟自己想的有點出入,就跑了下,看了看原因。我稍微改了下 include int main int argc,char argv 輸出結果 c 5 d 245 press any key to continue vc6.0 debug下的彙編 5 unsigned char a 0xa...
一道筆試題
上次去筆試的時候,有一道題,怎麼也沒做出來,當時也是很緊張,有些思路,但卻沒有做出來。有四個人要過乙個獨木橋,因為天比較黑,而且橋只能允許兩個人同時通過,並且他們只有乙個手電筒。四個人單獨同時橋的時間是1,2,5,8分鐘。問最短的時間是多少?當時我的答案 1和8,1回來,1 5,1回來,1 2 8 ...
一道筆試題
題目是這樣的 判斷乙個小於1000的正整數是否為素數。素數的定義就不說了,以下直接分析解法,畢竟是在寫與專業相關的東西,是給本專業的人看得,所以看的人應該有點基礎吧?求素數的問題是乙個數學上的難題,這是常識,但是本題目限制了最大範圍是在1000以內,所以就可以嘗試找出乙個足夠好的解了。首先給出乙個最...