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

时间:2018-10-31 12:33:41

标签: unit-testing vhdl simulator

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

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

1 个答案:

答案 0 :(得分:1)

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

我使用AffirmIf进行自我检查/结果检查,而不是断言。我使用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软件包用户指南和成绩单软件包用户指南。