我想在verilog模块中创建一组具有不同周期和执行时间的定期任务,该任务将创建,因此将操作某种操作,并应在一定时间段后执行...
所以,在更高级的语言中,比如在c中
func()
{
for(;;)
}
and sleep()
我想,我会使用那个func()作为操作和睡眠()之后。这个 func() 应该再次调用...这是在Verilog中这样做的正确方法吗?我还可以测量测试平台中的执行时间和周期吗?模拟后..任何建议都会非常有帮助
问候
像...
`timescale 1ns/1ns
always begin
// do stuff
# amount of nanoseconds to wait until next execution
end
例如:此定期任务每 1.5 微秒递增变量counter
。
`timescale 1ns/1ns
integer counter = 0;
always begin
counter = counter + 1;
#1500;
end
如果不需要纳秒精度,请使用具有不同单位的`timescale
。例如,前一个块可以写成这样:
`timescale 1us/1ns
integer counter = 0;
always begin
counter = counter + 1;
#1.5;
end
编辑
重要的是要明确,用#{insert_delay}
表示的模拟延迟无法合成。它们只能用于测试台,以模拟来自驱动程序的延迟。因此,对于您的func()
和sleep()
不在测试平台中,它们需要被建模为某种计数器,该计数器重置然后计算x
时钟脉冲的数量。