unit-testing - 我可以在我的测试台中将模拟器输出捕获到控制台吗?
问题描述
我有一个测试台来测试我的 VHDL 设备 (DUT),但 DUT 调试输出的一部分是到控制台的 ASSERT/REPORT 消息,我想检查它的正确性但我无法更改 DUT。我能想到的唯一方法是对输出日志文件进行后处理。
有什么方法可以在测试台中捕获控制台输出,这样我就可以直接检查 DUT 输出了吗?
解决方案
我这样做是作为测试平台的一部分。但是,我使用 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 包用户指南和脚本包用户指南。
推荐阅读
- docker - Docker 中的绑定挂载和主机卷是否相同?
- python - 不同Django应用中不同模型的同名
- excel - 如果单元格字体颜色隐藏行和列
- max - Power Query 表中哪一列的最大值
- javascript - 将上传的文件保存到应用程序目录(服务器端)
- python - AttributeError:“NoneType”对象没有属性“日期”
- java - ImportFromFile 和 InputMismatchException 的问题
- shell - 如何处理或 excape EOF 内的变量以写入文件内容?
- amazon-web-services - 如何将 AWS Redis 缓存迁移到 Azure Cache for Redis 基本版本
- python-3.x - 在 docker 内运行的 py4j 生成绑定错误