verilog之時鍾信號的編寫2
1、時鍾信號的特點
時鍾信號除了可以根據時序一個個變化列舉出來,還可以利用其循環的變化的特點,使用循環執行語句always來實現。這種方法實現的時鍾信號可以一直執行且不需要關注每個變化點的延時。
2、基於begin-end塊的時鍾信號
initial begin clk=0; clk1=0; clk2=0; end //way1 always #1 clk=~clk; //way2 always begin #1 clk1=~clk1; #1 clk2=~clk2; end
方法1是最方便的時鍾信號,只有一條執行語句,甚至不需要使用塊來封裝。
方法2則是使用begin-end來實現兩個時鍾信號clk1和clk2,可以簡單地分析出clk2的周期是clk1的兩倍。clk1是2系統周期,clk2是4系統周期。占空比就是50%,一條語句是無法實現其他占空比的時鍾信號的。
3、基於fork-join塊的時鍾信號
initial begin clk=1; clk1=1; end always fork #1 clk=~clk; #2 clk1=~clk1; #3 ; #50 ; join
可以觀察到fork-join的時鍾信號的周期是最大延時的兩倍。每個時鍾信號的周期都是一致的。其他延時只會改變時鍾信號的相位。從這里也可以看出fork-join的塊的工作原理:先找到最大延時,其他延時執行語句在其子期間中顯示。使用fork-join可以仿真有時鍾延時的信號輸入。
4、小結
使用循環執行語句來實現時鍾信號是常用的方法。一般的時鍾信號的激勵也是利用循環執行來模擬的。