时钟域
激励函数API
以下是 ClockDomain 激励函数的列表:
| 时钟域激励函数 | 描述 | 
|---|---|
| 
 | 分裂一个仿真进程以生成时钟域激励(时钟、复位、softReset、clockEnable 信号) | 
| 
 | 分裂一个仿真进程,该进程将定期打印每秒实时千周期的仿真速度。  | 
| 
 | 翻转时钟信号 | 
| 
 | 清除时钟信号 | 
| 
 | 设置时钟信号 | 
| 
 | 将复位信号设置为有效(电平) | 
| 
 | 将复位信号设置为无效(电平) | 
| 
 | 将时钟使能信号设置为有效(电平) | 
| 
 | 将时钟使能信号设置为有效(电平) | 
| 
 | 将软复位信号设置为有效(电平) | 
| 
 | 将软复位信号设置为有效(电平) | 
等待相关API
以下是 ClockDomain 实用工具函数的列表,您可以用它们来等待来自时钟域的给定事件:
| 时钟域等待函数 | 描述 | 
|---|---|
| 
 | 等待  | 
| 
 | 等待cyclesCount个时钟的上升沿;如果没有另外指定,cycleCount 默认为 1 个周期。注意,cyclesCount = 0 是合法的,该功能对复位/softReset/clockEnable 不敏感 | 
| 
 | 与  | 
| 
 | 与  | 
| 
 | Same as  | 
| 
 | 与  | 
| 
 | 与  | 
| 
 | 与  | 
| 
 | Same as  | 
| 
 | 等待直到时钟域采样并且给定条件为真 | 
| 
 | 与上面定义的 waitSamplingWhere 相同,但阻塞不会超过timeout个周期。如果退出是因为超时,则返回 true | 
警告
等待 API 的所有功能只能直接从线程内部调用,而不能从通过回调函数使用(通过回调API调用)。
回调函数API
以下是 ClockDomain 实用工具函数的列表,您可以用它们来等待来自时钟域的给定事件:
| 时钟域回调函数 | 描述 | 
|---|---|
| 
 | 仅在下一个  | 
| 
 | 每次  | 
| 
 | 每次  | 
| 
 | 每次  | 
| 
 | 每次  | 
| 
 | 每次  | 
| 
 | 与 onSampling 相同,但您可以通过让回调返回 false 来停止它(永远) | 
默认时钟域
您可以访问顶层模块的默认 ClockDomain ,如下所示:
// Example of thread forking to generate a reset, and then toggling the clock each 5 time units.
// dut.clockDomain refers to the implicit clock domain created during component instantiation.
fork {
  dut.clockDomain.assertReset()
  dut.clockDomain.fallingEdge()
  sleep(10)
  while(true) {
    dut.clockDomain.clockToggle()
    sleep(5)
  }
}
请注意,您还可以直接分裂标准复位/时钟产生进程:
dut.clockDomain.forkStimulus(period = 10)
如何等待时钟上升沿的示例:
dut.clockDomain.waitRisingEdge()
新时钟域
如果您的顶层模块中定义了一些未直接集成到其 ClockDomain 中的时钟和复位,您可以直接在测试平台中定义其相应的 ClockDomain :
// In the testbench
ClockDomain(dut.io.coreClk, dut.io.coreReset).forkStimulus(10)