亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> VHDL

优雅结束 VHDL 测试平台仿真

当 VHDL 测试平台达到预期执行末尾,您会希望仿真器干净停止,并尽可能将控制权返回给调用脚本。本文回顾主流 VHDL 仿真器中停止仿真的常用可靠技术,提供 ModelSim、Vivado 和 Tcl 脚本的代码示例。

1. 使用 finish 过程 (VHDL‑2008)

std.env 包的 finish 例程是结束无错误完成测试平台最直接的方式。仅以 VHDL‑2008 编译测试平台;RTL 可保持早期标准。

use std.env.finish; ... SEQUENCER_PROC : process begin -- Insert testbench logic here wait until stop_condition; report "Calling 'finish'"; finish; end process;

默认情况下,finish 会在 GUI 中弹窗确认终止。若偏好自动退出——尤其是批处理模式——给 vsim 加 -onfinish stop 开关:

vsim -onfinish stop work.using_finish_tb

批处理模式 (vsim -c) 下,仿真器干净退出并将控制权返回 Shell,适合回归脚本:

jonas@ubuntu:~/stop_tb$ vsim -c -do 'vsim work.using_finish_tb; run -all' # … # ** Note: Calling 'finish' # Time: 1 ms Iteration: 0 Instance: /using_finish_tb # End time: 22:58:31 on Jun 21,2020, Elapsed time: 0:00:00 # Errors: 0, Warnings: 8 jonas@ubuntu:~/stop_tb$

存在两个重载:procedure FINISH; 和 procedure FINISH (STATUS : INTEGER);。状态值仿真器相关,不建议依赖它作为退出码。ModelSim 可在 Tcl 脚本用 exit -code <value> 显式设置 Shell 退出码。

2. 使用 stop 过程 (VHDL‑2008)

stop 例程暂停仿真——适合人工检查或稍后恢复。表现如断点。

use std.env.stop; ... SEQUENCER_PROC : process begin wait until stop_condition; report "Calling 'stop'"; stop; end process;

脚本驱动工作流中,stop 会进入 Tcl Shell,除非手动发 exit 否则脚本挂起。因此 finish 通常更适合自动化运行。

3. 利用断言失败

部分设计者故意引发断言失败终止测试平台。此法适用于所有 VHDL 版本,无需额外导入:

SEQUENCER_PROC : process begin wait until stop_condition; assert false report "Test: OK" severity failure; end process;

虽保证仿真器终止,但控制台会报告 failure 即使测试成功,会误导将失败视为错误的自动化回归工具。

4. 用 Tcl 回调控制终止

为更灵活控制——如检查信号或清理——可将 VHDL 信号绑定到 Tcl 回调。VHDL 测试平台在所有测试用例完成时置位布尔 stop_condition。

signal stop_condition : boolean; begin -- Example: toggle after 1 ms stop_condition <= not stop_condition after 1 ms; SEQUENCER_PROC : process begin -- testbench logic wait; -- keep the process dormant end process; 

ModelSim

when {stop_condition} { stop echo "Test: OK" } run -all

stop_condition 变真时回调运行,打印消息并暂停仿真。可用 exit 替代 stop 立即退出仿真器。

Vivado

set sim_fileset sim_1 launch_simulation -simset [get_filesets $sim_fileset] add_condition -notrace stop_condition { stop puts "Test: OK" } run all

-notrace 标志抑制命令回显,保持控制台整洁。

最终建议

跨所有主流仿真器,VHDL‑2008 finish 过程仍是最可移植、最脚本友好的选择。它在 GUI 和批处理环境下都能干净终止仿真,无残留交互提示。

不过,Tcl 回调在需要暂停仿真并即时检查/操作信号时提供强大调试能力。

下载示例工程

ModelSim 用户提交邮箱可收到包含四个演示测试平台的 Zip 包。(Vivado 用户稍加修改即可复现示例。)

VHDL

  1. 战胜锈蚀:保护金属资产的五大实证策略
  2. VHDL 字符串列表创建:最佳实践与示例
  3. 基于 Tcl 驱动的 VHDL 密码锁模块测试平台
  4. VHDL 实现 PWM 控制器:设计、仿真与 FPGA 演示
  5. VHDL 生成随机数:从均匀分布到 OSVVM
  6. 基于Tcl的交互式测试平台增强硬件验证
  7. 构建VHDL自检测试平台实战指南
  8. 用VHDL受保护类型和访问指针实现动态链表
  9. 利用进程内过程简化VHDL状态机设计
  10. 使用VHDL不纯函数提升FSM可读性与可维护性
  11. 掌握VHDL函数:高效设计实战指南
  12. 用VHDL设计有限状态机:红绿灯实战范例