System verilog 系统Verilog时钟块

System verilog 系统Verilog时钟块,system-verilog,System Verilog,我试图用时钟块的演示代码执行一个简单的测试,但遇到了错误 代码可以在“EDA游乐场”找到 错误是这样的: **错误:testbench.sv(38):必须指定默认时钟块才能使用##n计时语句。 **错误:testbench.sv(40):必须指定默认时钟块才能使用##n计时语句 我认为代码中已经指定了时钟块 有什么帮助吗?要解决此错误,请添加默认时钟cb\U计数器在您的计时块之后 第14节涉及时钟模块 // Test program program test_counter; // Syst

我试图用时钟块的演示代码执行一个简单的测试,但遇到了错误

代码可以在“EDA游乐场”找到

错误是这样的: **错误:testbench.sv(38):必须指定默认时钟块才能使用##n计时语句。 **错误:testbench.sv(40):必须指定默认时钟块才能使用##n计时语句

我认为代码中已经指定了时钟块


有什么帮助吗?

要解决此错误,请添加
默认时钟cb\U计数器在您的计时块之后

第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
  //..
如果模拟器允许系统verilog,我会使用
#5ns
,这样它就不依赖于时间步,我发现这对于代码重用来说更具可读性和可靠性

从问题的版本来看,使用了始终块

  timeunit 1ns;
  // Clock generator
  always
  begin
    #5 Clock = 1;
    #5 Clock = 0;
  end

正如错误消息所说,您必须将时钟块定义为默认值:

default clocking cb_counter @(posedge Clock);
完整代码如下:

SV 2012标准规定,只有在为模块/程序/接口定义了默认时钟块的情况下,才能使用
#n
运算符,否则,它将无法知道使用哪个时钟事件进行延迟。

\p>\N延迟不是一个非常有用的功能,除非您可以将它们放在定义时钟块的同一模块或接口中。通常情况并非如此,因为您通常将驱动程序代码放在包中的类中

repeat (N) @cb_counter;

即使通过虚拟接口引用
cb
,这也可以统一工作。

但它们已经有
时间单位1nsrepeat (N) @cb_counter;