[英]System Verilog Clocking block
我正在嘗試使用Clocking塊的演示代碼執行一個簡單的測試,但是遇到了錯誤。
可以在“ EDA游樂場” http://www.edaplayground.com/x/3Ga上找到該代碼。
錯誤顯示:**錯誤:testbench.sv(38):必須指定默認時鍾塊才能使用## n計時語句。 **錯誤:testbench.sv(40):必須指定默認時鍾塊才能使用## n時序語句。
我認為時鍾塊已在代碼中指定。
有幫助嗎?
如錯誤消息所述,您必須將時鍾模塊定義為默認值:
default clocking cb_counter @(posedge Clock);
完整代碼在這里: http : //www.edaplayground.com/x/37_
SV 2012標准規定,只有在為模塊/程序/接口定義了默認時鍾塊的情況下,才可以使用##n
運算符,否則,它將無法知道將哪個時鍾事件用於延遲。
除非可以將## N延遲放在定義時鍾模塊的模塊或接口中,否則它不是一個非常有用的功能。通常不是這種情況,因為通常將驅動程序代碼放在包內的類中。
repeat (N) @cb_counter;
即使通過虛擬接口引用cb
,這也可以統一工作。
要解決該錯誤,請添加default clocking cb_counter;
在您的時鍾塊之后。
SystemVerilog IEEE1800-2012第14節涵蓋了時鍾模塊。
// Test program
program test_counter;
// SystemVerilog "clocking block"
// Clocking outputs are DUT inputs and vice versa
clocking cb_counter @(posedge Clock);
default input #1step output #4;
output negedge Reset;
output Enable, Load, UpDn, Data;
input Q;
endclocking
default clocking cb_counter; //<-- Set default clocking
// Apply the test stimulus
initial begin
//..
下面我已經包括了我創建一個測試平台時鍾,用的方法initial
很容易計算出什么時候會被觸發,相比原來always
趕在第一個觸發我這取決於如何當CLK為初始化而變化。
initial begin
Clk = 0;
forever begin
#5ns Clk = ~Clk;
end
end
如果您的模擬器允許系統驗證日志,我將使用#5ns
以便它不依賴於時間步長,我發現這對於代碼重用而言更具可讀性和可靠性。
問題的版本使用了always塊。
timeunit 1ns;
// Clock generator
always
begin
#5 Clock = 1;
#5 Clock = 0;
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.