我有一个测试平台来测试我的 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/