Verilog 仿真基础17 Mar 2025 | 5 分钟阅读 Verilog 是一种硬件描述语言,设计人员不需要模拟其 RTL 设计以将其转换为逻辑门。 ![]() 模拟是一种在不同时间向设计应用不同输入激励的技术,以检查 RTL 代码是否以预期方式运行。 模拟是一种众所周知的设计稳健性验证技术。它类似于实际使用制造的芯片的方式,以及它对不同输入的反应。 例如,上述设计表示一个具有输入 clock 和 signal 的正沿检测器,它们以周期性间隔进行评估以确定输出。 模拟允许我们查看相关信号的时序图,以了解设计描述在 Verilog 中的行为。 ![]() 许多 EDA 公司开发了 仿真器,能够为设计的各种输入计算输出。 Verilog 是根据 离散事件 执行模型定义的。不同的仿真器可以自由使用不同的算法,为用户提供一组一致的结果。 Verilog 代码被分成多个进程和线程,并且可以在模拟中的不同时间进行评估。 示例 在这个例子中,tb(测试平台)是一个用于容纳设计模块的容器。 有两个 信号 或 变量 可以在特定时间分配单独的值。 clk 代表一个在测试平台内生成的时钟。 这是使用 always 语句完成的,在每 5ns 后交替时钟的值。 initial 块包含一组语句,这些语句将不同的值分配给这两个信号。 模拟器在执行上述测试平台后提供以下输出。 模拟波形模拟允许将设计和测试平台信号转储到波形中,该波形可以进行图形表示,以分析和调试 RTL 设计功能。 下面显示的波形是从 EDA 工具获得的,显示了每个信号的时间进程,并且与时序图相同。 ![]() 一个网络或变量的值的每次更改称为 更新事件。进程对 更新事件 敏感,以至于这些进程在更新事件发生时被评估,这称为 评估事件。由于存在多个进程被任意评估的可能性,因此必须在称为 事件队列 的东西中跟踪更改的顺序。 它们按模拟时间排序。将新事件放置在队列中称为 调度。 模拟时间是指由仿真器维护的时间值,用于模拟被仿真电路所需的实际时间。 ![]() 事件队列中的区域Verilog 事件队列分为五个区域,事件可以添加到其中任何一个区域。但是,它只能从活动区域中删除。
模拟周期是处理所有活动事件的地方。标准保证了特定的调度顺序,除了少数情况。 例如,begin-end 块内的语句将仅按它们出现的顺序执行。 事件队列定义了对 b 的赋值应在对 a 的赋值之后发生。 下一个主题Verilog 时间尺度 |
我们请求您订阅我们的新闻通讯以获取最新更新。