Verilog 仿真性能比较

Verilog 仿真性能比较,verilog,system-verilog,uvm,asic,Verilog,System Verilog,Uvm,Asic,以下哪项妨碍了我的测试台的模拟性能?为什么(从system verilog编译器的角度寻找答案): 或 task A; forever @(posedge clk) begin if(dut_if.a==1).. end endtask PS:“a”是模拟过程中在某个时钟边缘断言的dut信号。假定此任务只调用一次。第一个选项将具有更好的性能。我假设在您的使用环境中,这两个选项在功能上都是正确的 第二段代码等待每个时钟,然后检查条件。由于wait在forever循环中,因此该

以下哪项妨碍了我的测试台的模拟性能?为什么(从system verilog编译器的角度寻找答案):

task A;
  forever @(posedge clk) begin 
    if(dut_if.a==1).. 
  end
endtask

PS:“a”是模拟过程中在某个时钟边缘断言的dut信号。假定此任务只调用一次。

第一个选项将具有更好的性能。我假设在您的使用环境中,这两个选项在功能上都是正确的


第二段代码等待每个时钟,然后检查条件。由于wait在forever循环中,因此该代码将导致clk的每个posedge上的上下文切换。另一方面,选项1中的代码只切换一次上下文。

第一个选项的性能更好。我假设在您的使用环境中,这两个选项在功能上都是正确的


第二段代码等待每个时钟,然后检查条件。由于wait在forever循环中,因此该代码将导致clk的每个posedge上的上下文切换。另一方面,选项1中的代码只切换一次上下文。

两者在功能上并不相同。第一个代码段等待直到
a
变高(即完全相同的周期),而第二个代码段等待直到
a
在时钟周期“看到”变高:

       _   _   _   _   _
clk  _| |_| |_| |_| |_| |_
            ______________
a    ______|

           |  |
           1  2
这些数字显示每一个触发的时间。你真正想要的是:

@(posedge clk iff dut_if.a);

这在语义上等同于代码段2。@Coverify的评论也应该适用于这里(更快,因为没有上下文切换)。

两者在功能上并不等同。第一个代码段等待直到
a
变高(即完全相同的周期),而第二个代码段等待直到
a
在时钟周期“看到”变高:

       _   _   _   _   _
clk  _| |_| |_| |_| |_| |_
            ______________
a    ______|

           |  |
           1  2
这些数字显示每一个触发的时间。你真正想要的是:

@(posedge clk iff dut_if.a);

这在语义上等同于代码段2。@Coverify的注释也应适用于此处(更快,因为没有上下文切换)。

这两个选项在功能上并不等同。

但在这种情况下,在模拟性能方面,第二个选项将优于第一个选项

因为,在第一个选项中,工具需要检查每个 而在第二个选项中,工具将只在 posedge,而不是每个时间步


两个选项在功能上并不等同。

但在这种情况下,在模拟性能方面,第二个选项将优于第一个选项

因为,在第一个选项中,工具需要检查每个 而在第二个选项中,工具将只在 posedge,而不是每个时间步


哪个性能更好?这取决于模拟器的实现。在一个真正的事件基模拟器中,情况1会有更好的性能,因为评估代码不会在每个时钟边缘都被唤醒。然而,我怀疑案例2在现实世界中会有更好的性能,因为评估代码与时钟滴答声非常一致


如果您的代码没有建模异步逻辑,我建议您坚持使用案例2。代码更容易理解和理解。让每件事都与时钟保持一致,让你的生活更轻松

哪个性能更好?这取决于模拟器的实现。在一个真正的事件基模拟器中,情况1会有更好的性能,因为评估代码不会在每个时钟边缘都被唤醒。然而,我怀疑案例2在现实世界中会有更好的性能,因为评估代码与时钟滴答声非常一致


如果您的代码没有建模异步逻辑,我建议您坚持使用案例2。代码更容易理解和理解。让每件事都与时钟保持一致,让你的生活更轻松

谢谢你的评论。所以据我所知,永久和始终块一旦转换成低级语言,实际上就是某种中断服务例程,而等待语句就像分支指令一样。如果我错了,请纠正我。如果你能给我指出一些从编译器角度讨论系统verilog的资料,那就太好了。谢谢你的评论。所以据我所知,永久和始终块一旦转换成低级语言,实际上就是某种中断服务例程,而等待语句就像分支指令一样。如果我错了,请纠正我。如果您能给我指出一些从编译器角度讨论系统verilog的源代码,那就太好了。