vhdl modelsim向命令行返回“ 1”或“ 0”状态

时间:2019-08-20 13:13:16

标签: vhdl modelsim test-bench

我正在尝试创建一个自测试VHDL测试平台,在该平台中,我需要对调用vsim命令的命令行/ shell的状态为真或假(1或0)进行传达,以传达该设备的总体通过/失败状态测试平台。

我的模拟器工具是modelsim。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:1)

您可以使用report语句。

如果您将仿真状态声明为:

signal simulation_status : std_logic;

然后您可以使用:

report "simulation status = " & std_logic'image(simulation_status);

当然,您要等到模拟结束后再报告状态,在测试平台中,您可以创建一个合适的过程来这样做:

process
begin 
    wait for 1000 ns; -- until the end of your simulation
    report "simulation status = " & std_logic'image(simulation_status);
    wait;
end process;

默认情况下,report的严重性为note,但是您也可以使用warningerrorfailure,例如:

report "simulation status = " & std_logic'image(simulation_status) severity failure; 

达到严重程度为report的{​​{1}}时,它将停止模拟。

答案 1 :(得分:1)

执行此操作的通常方法是onbreak命令。在手册中搜索exit命令,该示例提供了示例。基本上,您调用onbreak,执行run -all,然后代码中的断言失败将使您返回tcl并以给定的错误代码退出。

但是,这不是一个好主意。它是特定于模拟器的,几乎没有报告和控制权。更好的解决方案是从您的测试台创建一个日志文件,然后将其与一个或多个已知的优质黄金日志文件进行比较。这很容易编写脚本,可以使您更好地相信测试台确实做了一些事情,而不是在不应完成的时候错误地退出了。

答案 2 :(得分:0)

vsim支持增强的退出命令,因此只需使用exit -force -error_number即可返回错误代码。

批处理文件示例:

vsim -c ...-执行“退出-force -code 3”

如果%ERRORLEVEL%EQU 3转到xxxx:

答案 3 :(得分:0)

VHDL-2008标准未定义如何使用stop(code)finish(code)随附的代码。由模拟器供应商决定。我知道的唯一会返回该值的模拟器就是GHDL。

如果将VUnit与Modelsim或任何其他受支持的模拟器一起使用,您将获得针对各种不同错误情况(VHDL声明,PSL声明,模拟器崩溃,如空指针解引用等)的期望退出代码)。在EdaPlayground上可以找到完整的VHDL错误案例示例。

您也可以将VUnit与SystemVerilog和UVM一起使用,以实现here所示的相同目的。请注意,UVM不提供此类错误检测功能on its own

免责声明:我是VUnit的作者之一。