(十三)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不同。
  • 在同一个域中的代码的执行顺序是不确定的,仿真结果和仿真器相关。
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SystemVerilog和Verilog都是硬件描述语言,用于描述数字电路的行为和结构。它们在仿真调度机制方面有一些相似之处。 在Verilog中,所有的描述语句(连续赋值语句、行为语句块、模块实例化等)都是并行发生的。然而,由于仿真器是串行执行的,Verilog中的并行行为实际上是通过串行执行来模拟的。这意味着在仿真过程中,仿真器会按照一定的顺序逐条执行语句,分时执行。在所有并行进程执行完之前,仿真时间不会向前推进。\[3\] SystemVerilog也具有类似的并行行为和仿真调度机制。它引入了调度器(scheduler)的概念,用于控制并发执行的顺序。调度器根据一定的规则和优先级来决定哪些并发块应该被执行。这样可以模拟出更复杂的并行行为。\[1\]\[2\] 总结来说,SystemVerilog和Verilog都使用了仿真调度机制来模拟并行行为。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、付费专栏及课程。

余额充值