SV中的时间片
硬件电路是并行执行的,但是软件代码只能一行一行从上到下进行,上图是仿真器运行过程,SV为代码的执行定义了调度机制,最大限度的减少不确定性的产生。上图是仿真器在一个时间片上的执行,比如一个上升沿的时间节点,cpu所执行的内容。要区别一下仿真时间和运行时间。下面仔细讲述每一个过程分别执行了什么任务。
①active region set,这一块在verilog中就有定义是专为RTL代码执行所设立的区域:
preponed:这一区域记录上一个时间片所执行完成的稳定结果。断言所需要的数据就是来自于这里。
active:断言数据采样之后进入该区域,执行阻塞赋值语句,连续赋值语句,非阻塞赋值右边式子的计算,原语计算(verilog自带的原语以及用户定义原语UDP)以及调用系统函数(比如$display)。
inactive:只用用到#0的时候才进入该区域。
NBA:把active计算的右边值赋给左侧;
②验证平台新增的区域:observed
observed:使用在preponed屈戌所采集的值来判定段严重的属性是否成立,这一评估在一个时间片只发生一次。
③Reactive region set
reactive:对本区域的断言表达式进行操作,同时也会执行program中的连续赋值,阻塞赋值。非阻塞右边计算等。
re_inactive:同样执行program中的#0;
re_NBA:给非阻塞左边赋值;
SV中的#1 step是指提前一个最小时间片单位进行采样;
用例代码:展示了上述过程的执行过程:
https://mp.weixin.qq.com/s?__biz=MzIzMTg4NDM3Mw==&mid=2247483735&idx=1&sn=6a1d792196485e37699975f7fdd6541e&chksm=e89c126ddfeb9b7bdce1251671225310abb0a12124fa6d0251db7805e9f2358fe2dc96f12573&scene=21#wechat_redirect