SystemVerilog中scheduler(调度)
虽然设计的代码在仿真器中理论上来说是可以并行执行的,但是在实际仿真中,代码都是运行在CPU上的一些程序而已。SV为代码的执行顺序定义了调度机制,最大限度的减少不确定性的产生。
SV被定义为一种基于离散事件执行模型的语言。换句话说,仿真是离散的,是基于时间片进行且只对特定的时刻点进行仿真的。
这里说的时间片其实没有时间概念,纯粹是工具为了仿真效果而提出的不同任务工作的区域,在一个时钟边沿有效,可以理解为一个时钟边沿上的进程,但不涉及时间的推进,只是进程顺序执行。只有在当前时间片上的所有仿真全部完成,仿真器才会进入下一个时间片。当然,每个时间片还会细分为多个区域,如下图所示:
SV被定义为一种基于离散事件执行模型的语言。换句话说,仿真是离散的,是基于时间片进行且只对特定的时刻点进行仿真的。
这里说的时间片其实没有时间概念,纯粹是工具为了仿真效果而提出的不同任务工作的区域,在一个时钟边沿有效,可以理解为一个时钟边沿上的进程,但不涉及时间的推进,只是进程顺序执行。只有在当前时间片上的所有仿真全部完成,仿真器才会进入下一个时间片。当然,每个时间片还会细分为多个区域,如下图所示:
针对SV的调度机理,提出如下建议:时序逻辑使用非阻塞赋值,这样才可以保证时序逻辑的代码在NBA区域执行。用always块写组合逻辑使用阻塞赋值。这样可以保证代码是在active 区域执行。不要在多个always块中对同一个变量赋值。这样会引起冲突,导致最终结果的不确定性。在设计代码中,在过程赋值时不要使用#0的延迟语句。
欢迎点赞,关注,分享~~, 本文原发于微信公众号【 数字ic小站 】