我想在verilog模块中创建一组具有不同周期和执行时间的周期性任务,该任务将创建,因此将执行某些操作并且应在一定时间后执行...
所以,在c等高级语言中
func()
{
for(;;)
}
and sleep()
我认为,我会使用func()作为操作,并在sleep()之后...再次调用此func()... 这是在verilog中这样做的正确方法吗?并且我还可以在模拟之后测量测试平台中的执行时间和周期... 任何建议都会非常有用
问候
答案 0 :(得分:1)
像...一样的东西。
`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
个时钟脉冲数。