[SystemVerilog语法拾遗] 一文讲清楚SystemVerilog中的阻塞赋值与非阻塞赋值

如题所述

引言

我们设计的硬件和仿真环境是基于并行概念的,但实际在CPU上执行时是串行过程。IEEE为并行到串行转换定义了调度机制。然而,标准并未规定并行事件的执行顺序,导致不确定性和不同仿真器结果的差异性。作为合格工程师,理解SV仿真器的调度机制、确定性和不确定性是基础。

本文将结合SystemVerilog标准理解调度顺序的基本概念,并从Clifford Cummings的大作中阐述阻塞赋值和非阻塞赋值的使用原则,最后通过项目实例解释UVM中driver和monitor为何分别使用这两种赋值。

IEEE SystemVerilog标准相关内容介绍

SystemVerilog是一种并发语言,执行由并行执行的语句块和进程定义。了解哪些执行顺序是确定的、哪些是不确定的至关重要。SystemVerilog基于离散事件执行模型,由一系列进程组成,这些进程响应变化并产生输出。每个变化被认为是更新事件,而进程对这些事件敏感。

SystemVerilog中事件调度流程涉及多个区域,包括Active Region、Inactive Region、NBA Region,这些区域用于执行事件并提供特定类型的执行顺序。时间是仿真过程的关键因素,不同类型的事件在时间片内交替执行。

Nonblocking Assignments in Verilog Synthesis, Coding Style That Kill!

Cummings提出了使用阻塞赋值和非阻塞赋值时应遵循的八大原则,涵盖了模型设计、latch建模、always块使用等。

遵循原则的重要性在于,即使综合结果不受影响,前仿结果可能因不确定调度而引发EDA工具问题,增加调试难度。

阻塞赋值确保赋值操作顺序执行,非阻塞赋值则在多个事件区域并发执行。在时序电路中,通常使用阻塞赋值以确保采样事件的确定性。而在UVM环境中,driver采用非阻塞赋值驱动DUT接口,monitor则使用阻塞赋值采样信号,因为它们不驱动信号。

总结

本文综述了SystemVerilog中阻塞赋值与非阻塞赋值的定义、调度机制以及在UVM环境中的应用,强调了遵循相关原则的重要性。通过本文,读者将更了解如何避免赋值相关问题,无论是设计硬件模型还是搭建验证环境。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜