資料來源
(1) 硅芯思見:【125】clocking block中的輸入偏差和輸出偏差 (qq.com)
(2) sv綠皮書;
1.輸入偏差與輸出偏差
(1) system verilog的時鍾塊機制(clocking block)可以對指定信號進行基於特定時鍾的同步處理,時鍾塊中的任何信號都將根據指定時鍾被同步驅動或采樣;
(2) clocking block可以對采樣信號和驅動信號指定input偏差和output偏差;
(3) clocking block中默認的input偏差是1step,默認的output偏差為0; 其中,1step可以認為是上一時間槽(time slot)的最后時刻;
注1:#1step中的step與`timescale中的仿真精度一致(出處???);
注2:當input skew大於0時,避免競爭現象,避免到底采樣的是時鍾沿前的數據還是時鍾沿后的數據;
注3:以program定義的代碼被認為是測試平台代碼,會放到reactive區域執行;
注4:$monitor,$storbe以及其他類似的事件都在postponed區域執行;
(4) interface中的clocking block只能用於驗證平台,不能用於RTL設計;
2.示例
2.1input偏差和output偏差為默認值
(1)默認的輸入偏差為1step,默認的輸出偏差為0;
(2)輸入偏差1step可以認為是上一時間槽的最后時刻,指采樣信號事件(cb.sig1)采樣輸入信號(sig1)在時鍾邊沿1step前的穩定值;
注1:采樣輸入信號,使用阻塞賦值;驅動輸出信號,采用非阻塞賦值;
(3)輸出偏差0則表示采樣事件發生后(cb.sig2)立即將對應值驅動或更新到輸出端口(sig2)(對於clocking block的輸出sig2而言,該信號通過cb引用時,可以被驅動,但是不能被讀,否則會報錯);
2.2定義default輸入偏差與輸出偏差
2.3default偏差設置為posedge和negedge
(1)輸入偏差設置為posedge,時鍾采樣到sig1后立即在上升沿將值更新到cb.sig1中;
(2)輸出偏差設置為negedge,cb.sig2的值在采樣后,等到時鍾下降沿將值更新到sig2中;