SV的仿真调度机制

充分理解SV的不同结构体在仿真中执行的先后顺序,有利于理解testbench中对DUT的驱动和采样的顺序,进而避免不合理的驱动和采样方式。

时间片(time-slot)是仿真时间中的一个抽象单位Ts,该单位内所有的线程(always,initial,assertion等)和数据对象的赋值被赋予相应的优先级,依次被执行。这种优先级即如下图所示的调度区域。observerd和reactive专门用于SV验证,其余区域均继承于verilog调度区域。
在这里插入图片描述

  • Active
    从preponed region进入active region后,将执行所有处于该阶段的线程。其中与非阻塞赋值有关的操纵执行完成后,对应的线程进入NBA region,而带有“#0”延时操作的线程直接进入inactive区。
  • inactive
    所有被零延时操作的线程在inactive中被激活,在被执行之前迁往active区,所以#0会延缓线程执行的时间
  • NBA
    该区域是在所有active和inactive均没有其他线程后所到达的调度区,到达该区域后,之前在active的非阻塞赋值生效,如果这些非阻塞触发了别的线程,那么被触发的线程要被迁移至active
  • Observe
    但之前active/inactive/NBA区域全部执行完毕后,即表示设计部分的线程执行完毕,则进入为assertion准备的observed区。由于断言属性中需要监测设计中的变量,且必须等到所有数据对象被赋予最终的数值,所以该区域处在设计区域之后。
    这样做的好处是,避免因采集的变量不稳定导致属性检查错误。该区域同样适用interface和program中的采样操作,使得采样的数据就是该Ts内的最终值。
  • reactive
    数据采样后,assertion须进行属性判断,同时如果该区域对设计区域中的线网和变量赋值,则使被激活的线程再次迁移到active区;经过信号采样后,处于testbench中的线程也在该区域执行。
  • postpone
    在分别经历了与设计、testbench有关的区域后,当前Ts进入与postpone。该区域内的值保持稳定,且与下一个Tsprepone的值一致。同时该区域也作为SV PLI/DPI的回调函数点,使得在SV外部的调用语言(如C)在使用SV变量使仍然可以用到最新的数值。

SystemVerilog调度机制与一些现象的思考----good
SystemVerilog中scheduler(调度)
SystemVerilog LRM 学习笔记 – SV Scheduler仿真调度


Q5:systemverilog引入program块的意义?

A5:引入了Reactive Region set(Reactive、Re-Inactive、Re-NBA),将验证代码和设计代码区域区分,减少了竞争冒险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值