创建在verilog中设置的定期任务

时间:2013-12-28 06:51:14

标签: verilog periodic-task

我想在verilog模块中创建一组具有不同周期和执行时间的周期性任务,该任务将创建,因此将执行某些操作并且应在一定时间后执行...

所以,在c等高级语言中

func()
{
for(;;)
}
and sleep()

我认为,我会使用func()作为操作,并在sleep()之后...再次调用此func()... 这是在verilog中这样做的正确方法吗?并且我还可以在模拟之后测量测试平台中的执行时间和周期... 任何建议都会非常有用

问候

1 个答案:

答案 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个时钟脉冲数。