时钟域
激励函数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)