Verilog 仿真基础

17 Mar 2025 | 5 分钟阅读

Verilog 是一种硬件描述语言,设计人员不需要模拟其 RTL 设计以将其转换为逻辑门。

Verilog Simulation Basics

模拟是一种在不同时间向设计应用不同输入激励的技术,以检查 RTL 代码是否以预期方式运行。

模拟是一种众所周知的设计稳健性验证技术。它类似于实际使用制造的芯片的方式,以及它对不同输入的反应。

例如,上述设计表示一个具有输入 clocksignal 的正沿检测器,它们以周期性间隔进行评估以确定输出。 模拟允许我们查看相关信号的时序图,以了解设计描述在 Verilog 中的行为。

Verilog Simulation Basics

许多 EDA 公司开发了 仿真器,能够为设计的各种输入计算输出。 Verilog 是根据 离散事件 执行模型定义的。不同的仿真器可以自由使用不同的算法,为用户提供一组一致的结果。

Verilog 代码被分成多个进程和线程,并且可以在模拟中的不同时间进行评估。

示例

在这个例子中,tb(测试平台)是一个用于容纳设计模块的容器。 有两个 信号变量 可以在特定时间分配单独的值。 clk 代表一个在测试平台内生成的时钟。

这是使用 always 语句完成的,在每 5ns 后交替时钟的值。 initial 块包含一组语句,这些语句将不同的值分配给这两个信号。

模拟器在执行上述测试平台后提供以下输出。

模拟波形

模拟允许将设计和测试平台信号转储到波形中,该波形可以进行图形表示,以分析和调试 RTL 设计功能。

下面显示的波形是从 EDA 工具获得的,显示了每个信号的时间进程,并且与时序图相同。

Verilog Simulation Basics

一个网络或变量的值的每次更改称为 更新事件。进程对 更新事件 敏感,以至于这些进程在更新事件发生时被评估,这称为 评估事件。由于存在多个进程被任意评估的可能性,因此必须在称为 事件队列 的东西中跟踪更改的顺序。

它们按模拟时间排序。将新事件放置在队列中称为 调度

模拟时间是指由仿真器维护的时间值,用于模拟被仿真电路所需的实际时间。


Verilog Simulation Basics

事件队列中的区域

Verilog 事件队列分为五个区域,事件可以添加到其中任何一个区域。但是,它只能从活动区域中删除。

事件描述
Active它发生在当前的模拟时间,并且可以以任何顺序处理
不活动它发生在当前的模拟时间,但在所有活动事件完成后进行处理
非阻塞它在之前的某个时间进行评估,但在活动和非活动事件完成后在当前的模拟时间完成分配
Monitor在所有活动、不活动和非阻塞事件完成后处理
Future它发生在未来的某个模拟时间

模拟周期是处理所有活动事件的地方。标准保证了特定的调度顺序,除了少数情况。

例如,begin-end 块内的语句将仅按它们出现的顺序执行。

事件队列定义了对 b 的赋值应在对 a 的赋值之后发生。


下一个主题Verilog 时间尺度