5

我正在尝试从由 modelsim 或 ghdl 执行的模拟中转储内部信号。一切正常使用:

对于 modelsim,添加 vhdl 源,然后全部编译:

vsim -novopt work.uut_testbench
vcd file ../uut.vcd;
vcd limit 50000000;
vcd add -r /uut_testbench/uut_core/*;
run 6000
quit -sim

对于 GHDL

ghdl -i --ieee=synopsys --warn-no-vital-generic --workdir=work --work=work ./uut*.vhd 
ghdl -m --ieee=synopsys --warn-no-vital-generic --workdir=work --work=work uut_testbench
./uut_testbench --stop-time=6000ns --vcd=../uut.vcd

我可以看到模拟信号,但不是全部。信号定义为

Type InternalState is (Idle,Valid,Stalled);
Signal sState,sPrevState :InternalState;

从 vcd 中省略。这种行为在 modelsim 和 ghdl 中很常见。

我可以在 ghdl-generated vcd 看到以下行

$comment sstate is not handled $end

Modelsim 只是悄悄地忽略了这些信号

有解决方法吗?选择?

4

3 回答 3

2

试试 Tony Bybell 的 gtkwave,您可以在其中指定枚举替换值(快速入门、别名文件和附加外部反汇编程序下的 gtkwave 手册)。Gtkwave 还与 ghdl 的原生波形格式 (ghw) 兼容。请参阅SourceForge 上的 Gtkwave,有一个手册链接,您可以链接到下载 W32 和 Mac 应用程序的二进制文件。它也应该可以通过几乎任何 Linux 发行版获得。

于 2012-03-12T04:17:06.897 回答
2

正如@user1155120 提到的,GHDL 的本机格式 ( .ghw)确实支持自定义类型,也可以由 GTKWave 读取。

您可以通过 导出此波形类型--wave<=FILENAME>

尽管如此,我还是提出了一个问题.vcd,以支持未来波形中的自定义类型!

于 2018-09-09T10:04:48.160 回答
0

您的模拟器不知道如何使用值更改转储文件中可能的标量或矢量变量来表示您的 InternalState 类型。例如,如果您使用 std_ulogic 向量来表示您的状态,它们将出现在 VCD 文件中。一个好的波形查看器允许您用状态名称替换您的状态编码。正如 user1155120 已经指出的那样,Gtkwave 支持这一点。IEEE Std 1800-2012 在第 21.7 节 VCD 文件及其限制中进行了描述。

于 2016-04-13T12:36:19.837 回答