3種生成語句其實就是for,if和case。這3種語句的用處都非常打。
for可以用在testbench的激勵設定中,定義一個integer i,在initial塊中就可以用for來定義一個迴圈激勵,只要i滿足一定條件,就有一個對應的激勵產生。
if是最常用的條件語句。最常用在行為級的程式碼書寫中。
比方說
if(!reset_n) // 非同步清零有效
q
else
case的用處更多了。當你知道你想定義的輸出端是什麼的時候,就可以用case來生成輸出訊號。
case最主要的是要有個使能端,根據使能端來確定輸出。
如
case( {s1,s0} ) // 4選1mux
2"b00: y=x[0];
2"b01: y=x[1];
2"b10: y=x[2];
2"b11: y=x[3];
default: y=1"bz;
endcase
提醒:
儘量不要用for語句,因為for語句其實是利用計數器完成的,在編譯過程中可能沒問題,但是綜合到實際電路很容易出問題。
使用if語句,不管有沒有else的內容,都要寫上else,即使後面跟空語句。這樣的話綜合不容易出問題。
3種生成語句其實就是for,if和case。這3種語句的用處都非常打。
for可以用在testbench的激勵設定中,定義一個integer i,在initial塊中就可以用for來定義一個迴圈激勵,只要i滿足一定條件,就有一個對應的激勵產生。
if是最常用的條件語句。最常用在行為級的程式碼書寫中。
比方說
if(!reset_n) // 非同步清零有效
q
else
q
case的用處更多了。當你知道你想定義的輸出端是什麼的時候,就可以用case來生成輸出訊號。
case最主要的是要有個使能端,根據使能端來確定輸出。
如
case( {s1,s0} ) // 4選1mux
2"b00: y=x[0];
2"b01: y=x[1];
2"b10: y=x[2];
2"b11: y=x[3];
default: y=1"bz;
endcase
提醒:
儘量不要用for語句,因為for語句其實是利用計數器完成的,在編譯過程中可能沒問題,但是綜合到實際電路很容易出問題。
使用if語句,不管有沒有else的內容,都要寫上else,即使後面跟空語句。這樣的話綜合不容易出問題。