SV仿真的调度机制

        sv的仿真调度完全支持Verilog的仿真调度,同时又扩展出来支持新的sv结构体,如程序(program)和断言(assertion)。充分理解sv的不同结构体在仿真中的执行的先后顺序,有利于理解testbench中对DUT的驱动和采样的顺序,进而避免不合理的驱动和采样方式。仿真器一般是基于event驱动方式执行,对各类型的event的发生做出合理安排,就可以保证设计与验证环境之间又清晰的事件发生顺序,避免两者间的竞争问题。

        这里,时间片(time_slot)是仿真时间中的一个抽象单位TS,该单位内所有的线程和数据对象的赋值(阻塞赋值和非阻塞赋值)被赋予相应的优先级,依次被执行。

        active区域:从preponed region进去active region之后,将执行所有处于该调度阶段的线程

,其中,与非阻塞赋值有关的操作执行完毕后,对应的线程进入NBA,而带有#0延时操作的线程进入inactive区域。

inactive区域:所有被进行零延时操作的线程在inactive区域被激活,在被执行之前迁往active区域,因此,零延时的操作会延缓线程的执行时间。

NBA区域:达到该区域后,之前在active区域的非阻塞赋值生效。

Observe区域:这一区域是为了断言准备的。

Reactive区域:经历了信号采样之后,处于testbench区域中的线程也在该区域执行。

如果tb中的数据采样在module内部执行,则可能产生不同的采样结果,可以通过program的采样方式使采样是我们预期的结果。

· 在program执行之前,先进行设计代码相关的仿真调度区域即active,inactive和NBA。

· 设计调度区域执行完后,会通过observed区域,最后至reactive区域,而program会在reactive区域执行,所以program会采用之前已经被阻塞/非阻塞赋值后稳定值进行计算。

由此看来sv介绍program的一个重要部分就是为了将设计和验证的调度区域通过显示的方式来安排。因此,建议将设计部分放置在module中,而将测试采样部分放置在program中。下面是关于program的建议:

·program中不可以出现和硬件行为相关的过程语句和实例,例如always,module,interface,也不应该出现其他program语句。

· 为了使program按照类似软件方式的顺序执行,可以在program内部定义变量,已经发起多个initial块。

· program内部定义的变量赋值的方式应该采用阻塞赋值(软件方式)

· program内部去在驱动外部硬件信号使应该使用非阻塞赋值。

· program中的initial块会在reactive区域执行,而program之外的initial块则会在active区域被执行。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SystemVerilogVerilog都是硬件描述语言,用于描述数字电路的行为和结构。它们在仿真调度机制方面有一些相似之处。 在Verilog中,所有的描述语句(连续赋值语句、行为语句块、模块实例化等)都是并行发生的。然而,由于仿真器是串行执行的,Verilog中的并行行为实际上是通过串行执行来模拟的。这意味着在仿真过程中,仿真器会按照一定的顺序逐条执行语句,分时执行。在所有并行进程执行完之前,仿真时间不会向前推进。\[3\] SystemVerilog也具有类似的并行行为和仿真调度机制。它引入了调度器(scheduler)的概念,用于控制并发执行的顺序。调度器根据一定的规则和优先级来决定哪些并发块应该被执行。这样可以模拟出更复杂的并行行为。\[1\]\[2\] 总结来说,SystemVerilogVerilog都使用了仿真调度机制来模拟并行行为。Verilog中的并行行为是通过串行执行来模拟的,而SystemVerilog引入了调度器来控制并发执行的顺序。 #### 引用[.reference_title] - *1* [SV仿真调度机制](https://blog.csdn.net/weixin_39060517/article/details/115909613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [SV仿真调度机制以及阻塞非阻塞赋值的区别(用例子说明)](https://blog.csdn.net/dinghj3/article/details/122513314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值