SV的仿真调度机制以及阻塞非阻塞赋值的区别(用例子说明)

本文深入探讨了Verilog及SystemVerilog中的仿真调度机制,包括为何需要此机制及其如何解决设计与测试平台间的竞争状态问题。通过具体的代码示例,详细解释了阻塞与非阻塞赋值的区别,以及它们在仿真过程中的表现。

一、疑问

1、为什么要有Verilog仿真调度机制

Verilog语言本身就有并发的特性,所有的描述语句(连续赋值语句,行为语句块:always和initial,模块实例化等)均是并行发生的。而我们用于仿真的计算机是串行执行的,所以Verilog中的并行行为其实是用计算机的串行来模拟的(就像多任务操作系统,某时刻只能执行一个,而不同任务之间看起来就像并行执行的)。因此并行性在仿真器中仿真其实也是按照一定的顺序一条一条语句执行的,分时执行,而在并行的进程全部执行完之前,仿真时间是不会往前推进的。

因此,如果不对这些并行的线程的执行顺序做一个安排,就会产生不确定性,使得不同厂家的仿真器出现不同的仿真结果。

2、为什么要进一步扩充Verilog仿真调度机制?

因为在Verilog的仿真调度机制中,存在测试平台和设计之间的竞争状态。比如:在同一个时间片内(如100ns),一个信号同时被读取和写入,那么读取的数值是旧数值还是刚写入的新数值?对设计的输出信号的采样存在着同样的问题。你希望在时钟沿到来之前的最后时刻捕获数据,但是你不能在出现时钟边沿的时候采样,因为设计的输出值可能已经变了,应当在时钟沿到来之前的Tsu时间上采样。

出现竞争的根源在于设计和测试平台的事件(event)混合在同一个时间片(time slot)内,即使在纯RTL程序中也会发生相同的问题。**这就需要将两种事件进行分开调度。**SV中引入一种新的时间片划分方式,如下图。在verilog中,大多数的事件在有效区域(active region)执行。而测试平台的代码在reactive区执行。这样就可以保证设计和验证环境之间有清晰的事件发生顺序,避免两者的竞争问题。

在这里插入图片描述

二、Verilog和SV的仿真调度机制

1、Verilog的仿真调度机制:

在这里插入图片描述

2、SystemVerilog的仿真调度机制:在这里插入图片描述

1、time-slot时间片是仿真时间中的一个抽象单位Ts,该单位中所有的线程(always、initial、assertion等)和数据的阻塞、非阻塞赋值有各自的执行优先级。

2、区域说明:

  • Preponed:当前时间片的入口;
  • active、inactive和NBA区域属于仿真模块中的设计部分的线程,可以参考图8-6分层事件队列的活跃事件、非活跃事件和非阻塞赋值更新事件。注意,在NBA区域中,如果有一些非阻塞触发了别的线程,那么被触发的线程要被迁移到active区域(可以参考下文图7.8的 tb,可以看到有两个active区);
  • Observed区:在设计部分的线程执行完毕后,则进入observed区,主要执行属性断言(property assertion)。由于断言中需要监测设计中的变量,必须等到所有数据被赋予最终值,所以放在了设计区域结束之后,这样可以避免设计采样的变量不稳定而导致断言检查报错。该区域使用接口和程序块中的采样操作,是的采集到的数据是该时间片的最终值。
  • Reactive区:执行testbench代码(线程)。
  • Postpone区:在分别经历了与设计、testbench有关的区域后,当前Ts进入与postpone。该区域内的值保持稳定,且与下一个Tsprepone的值一致。同时该区域也作为SV PLI/DPI的回调函数点,使得在SV外部的调用语言(如C)在使用SV变量使仍然可以用到最新的数值。
    在这里插入图片描述
    3、概念说明
  • #1step:1step是仿真器在时间上进行调度的最小单位,也就是说,在1step的delay里是不存在事件的。注意,step和ps、fs这些时间单位不一样,它是仿真器为了解决采样问题引入的调度的最小单位,为时间片的单位;
    时钟块的默认时序就是在#1step的延时后采样输入信号,而#0延时后驱动输出信号(所以#1step在prezoned区执行,#0延迟在inactive区执行,采样早于驱动)。1step的延时规定了信号在前一个时间片的postponed区域(或者当前时间片的preponed区域)在设计有任何新的动
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hardworking_IC_boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值