(十三)SV仿真时序的调度

一、调度作用

为了解决在仿真中产生的竞争冒险现象,程序在软件中是顺序执行的,所以规定了仿真的程序事件调度机制。

事件event:

程序中数值的变化就叫一个事件,功能仿真是一种事件驱动的仿真,整个仿真过程都是围绕事件来组织的,分为更新事件和求值事件。

仿真时间simulation time:

指波形中看到的时间,不是仿真软件在电脑中运行的时间,是仿真时间维护的时间值,用来对仿真电路的真实时间进行建模,当仿真时间推进到某一个时间点时,该时间点就被称为当前仿真时间(current time)而以后的任何时间都被称为将来仿真时间(future time)

层次化事件队列:

仿真时,仿真器对一个仿真时刻(即最小的一个仿真时间刻度也叫时间片timeslot)内语句的执行是按照一定的事件顺序执行的,即所有的事件都是按照一定的队列执行,这个队列在Verilog和System Verilog称之为层次化事件队列。

二、Verilog的事件调度(共四个域)

  • Active Region:阻塞赋值;计算非阻塞赋值的右侧表达式(RHS);并且把相应的更新事件调度至NBA Region(NBA即nonblocking assignment,非阻塞赋值);连续赋值;调用$display系统函数,primitive计算。
  • Inactive Region:#0延迟下的阻塞赋值。
  • NBA Region:更新非阻塞赋值的左侧表达式(LHS)。
  • Postponed Region:  调用$monitor和$strobe系统函数。
  • 在同一个域中的代码的执行顺序是不确定的,仿真结果和仿真器相关。

说明:

 阻塞赋值

  1. RHS的表达式计算和LHS的赋值更新,这两个动作之间不能插入其他动作,即所谓计算完毕,立即更新,阻塞赋值属于active event。
  2. 多个阻塞赋值语句,只有上一句完全执行完毕后,才会执行下一语句,因为在分层事件队列中,只有将活跃事件中排在前面的事件调出,并执行完毕后,才能够执行下面的事件。

非阻塞赋值

  1. 非阻塞赋值分成了两个步骤,先计算RHS,再更新LHS,中间会去完成其它事件的调度和计算 ,计算RHS表达式,得到新值后并不立即赋值,而是放在事件队列中等待,直到当前仿真时刻的后期才执行。

三、SV的事件调度

SV中约定了一种schedule(即事件执行顺序),使RTL代码和验证代码在同一时刻(time slot) 操作,按照一定的顺序执行。SV中,为了区分验证和RTL事件,testbench代码都包含在program模块中,program同module的形式很类似,只是它不包含任何的层次结构,也就是说, program内部不能再包含module,interface, program。以下框图是扣除了调用其他语言函数接口的PLI执行顺序的。

Active Region、Inactive Region、NBA Region统称为Active Region set,这是专门为RTL代码执行所设立的区域集合(set),实际上就是上面介绍的verilog代码的区域,只不过在sv中需要限定一下事件是在module中定义的,而不是program中定义的。在sv中,专门为验证平台所设计的区域集合,Reactive Region set。包含了Reactive Region、Re-Inactive Region、Re-NBA Region、Observed Region则是专门为断言所设计的区域。

  • Preponed Region:这个区域中的数值是上一时间片中最终的稳定值。断言所需的数据就是在这个区域采样的。
  • Observed Region:使用在preponed区域中采样的值来评估并发断言中的属性是否成立,属性评估在任何一个时间片中只发生一次。
  • Reactive Region:所有定义在program内的阻塞赋值;执行断言pass/fail代码;所有定义在program内的非阻塞赋值RHS的计算,并将相应的更新事件调度至Re-NBA Region ;所有program内的连续赋值;执行系统函数$exit及隐式的$exit命令。这与Verilog中的Active Region内执行事件是很类似的,只是加了program的限定。
  • Re-Inactive Region:program内#0延迟的进程。
  • Re-NBA Region:执行Reactive Region调度过来的LHS更新事件。
  • Postponed Region:同下一时钟片中的preponed区域一样的值,代表本时钟片中的最终稳定值,调用$monitor和$strobe系统函数;收集利用strobe采样的功能覆盖率这verilog Postponed Region不同。
  • 在同一个域中的代码的执行顺序是不确定的,仿真结果和仿真器相关。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值