首页 > 解决方案 > 我可以在我的测试台中将模拟器输出捕获到控制台吗?

问题描述

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

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

标签: unit-testingvhdlsimulator

解决方案


我这样做是作为测试平台的一部分。但是,我使用 OSVVM 警报、日志和打印,而不是 Assert。OSVVM 位于 osvvm.org 和 github。

我使用 AffirmIf 进行自我检查/结果检查,而不是 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, "...") ; 

assert 和 AffirmIf/AlertIf 都打印。但是,AffirmIf/AlertIf 的优势在于它在内部保留了错误计数,并且您可以通过执行以下操作在测试结束时获得通过失败:

ReportAlerts;

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

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

如果您想同时打印到屏幕和文件,还可以执行以下操作:

SetTranscriptMirror(TRUE);

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


推荐阅读