unit-testing - 我可以在我的测试台中捕获模拟器输出到控制台吗?

标签 unit-testing vhdl simulator

我有一个测试平台来测试我的 VHDL 设备 (DUT),但 DUT 调试输出的一部分是发送到控制台的 ASSERT/REPORT 消息,我想检查它的正确性,但我无法更改 DUT。我能想到的唯一方法是对输出日志文件进行后处理。

有什么方法可以在测试台中捕获控制台输出,以便我可以直接检查 DUT 输出?

最佳答案

我将此作为测试台的一部分。但是,我没有使用 Assert,而是使用 OSVVM 警报、日志和打印。 OSVVM 位于 osvvm.org 和 github 上。

我使用 AffirmIf 进行 self 检查/结果检查,而不是 Assert。我使用 AlertIf 进行参数检查。

第 1 步是获取 OSVVM。获得代码后,使用脚本对其进行编译。在 Mentor 或 Aldec 中,通过执行以下操作运行脚本:

vlib osvvm
vmap osvvm osvvm
do $PATH_TO_OSVVM/osvvm.do $PATH_TO_OSVVM

通过执行以下操作,使用 VHDL-2008 并在您的程序中包含所有 OSVVM:

library osvvm;
  context osvvm.OsvvmContext;

然后而不是:

assert Data /= expected report "..." severity error;

做:

AffirmIf(Data = Expected, "...") ; 

断言和 AffirmIf/AlertIf 都打印。然而,AffirmIf/AlertIf 的优势在于它在内部保留错误计数,您可以通过以下方式在测试结束时获得通过失败:

ReportAlerts;

OSVVM AffirmIf/AlertIf/Log/Print 的下一个优势是,如果您想要将结果保存在文件中,您只需执行以下操作:

TranscriptOpen("./results/Test1.txt");

如果您既要打印到屏幕又要打印到文件,请执行以下操作:

SetTranscriptMirror(TRUE);

这应该让你开始。我将把剩下的留给用户指南。首先查看 AlertLog 包用户指南和 transcript 包用户指南。

关于unit-testing - 我可以在我的测试台中捕获模拟器输出到控制台吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53083437/

相关文章:

VHDL:将数值放入 STD_LOGIC_VECTOR 变量的代码

c# - 可测试代码 : Attach event handler in constructor

unit-testing - Grails Spock单元测试的重定向和渲染

unit-testing - 升级到 .NET Core 3.1 后,Moq 验证未按预期工作

java - org.mockito.Mockito.times(1) 有方便的方法吗?

ios - 为什么远程命令中心不显示在模拟器中?

vhdl - VHDL编码..从整数到bit_vector的转换

floating-point - 使用 Altera Quartus II 将 *.vhdl 编译成库

testing - PSTN调用模拟测试平台

ios - Xcode 模拟器不显示额外安装的 iOS 版本