本文共 1804 字,大约阅读时间需要 6 分钟。
调度机制的由来
SystemVerilog(SV)是一种扩展的硬件描述语言(HDL),它不仅适用于硬件设计应用,还显著提高了验证(verif)效率。在这一过程中,仿真调度算法与传统的Verilog兼容,同时引入了新的仿真时间区域(time regions),以更好地支持针对验证需求的新特性。
与传统的软件语言如C/C++不同,SV用于硬件仿真建模,其背后涉及许多并行过程。仿真器运行在CPU上,将仿真时间串行化地一步步推进。虽然 SV标准没有明确规定并行过程的具体执行顺序,这导致多种仿真器可能存在不同的执行结果,从而产生不确定性(nondeterminism)。
为了在编码阶段消除这种不确定性,并更好地理解常见的设计规则,有必要深入研究Verilog/SV的仿真调度算法。同时,混用VHDL和Verilog/SV的仿真也需要了解两者之间的差异。
常见的Design Rules
仿真模型
SV的仿真模型基于离散事件驱动的执行机制。事件驱动仿真的基本概念包括仿真时间(simulation time)、仿真域(simulation regions)和事件处理(event processing)。
仿真Process和Verilog的事件调度器
SystemVerilog的事件调度器
SystemVerilog扩展了事件调度器,将其划分为17个区域,其中9个区域用于SV语句的执行,8个区域用于PLI代码的执行。Preponed region用于信号采样,Observed region用于assertion评估,Re-Active和Re-Inactive regions用于执行assertion动作和testbench程序。
New SV代码块:program、final、clocking
确定性与不确定性
SV标准规定了以下两种确定性执行顺序:
未确定性(Nondeterminism)
SV标准未定义多个process在同一时刻下的执行顺序,这导致不同的仿真器可能对同一行为有不同的结果。
阻塞/非阻塞赋值
阻塞赋值:
非阻塞赋值:
转载地址:http://dxeyk.baihongyu.com/