我正在尝试从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生成的vcd
中看到以下行$comment sstate is not handled $end
Modelsim只是静静地省略了这些信号
有解决方法吗?替代?
答案 0 :(得分:2)
尝试使用Tony Bybell的gtkwave,您可以在其中为值分配枚举替换(快速启动,别名文件和附加外部反汇编程序下的gtkwave手册)。 Gtkwave还兼容ghdl的原生波形格式(ghw)。请参阅Gtkwave on SourceForge,该手册有一个链接,您可以链接到W32和Mac应用程序的下载二进制文件。它也应该可以通过任何Linux发行版获得。
答案 1 :(得分:1)
正如@ user1155120所述,GHDL的本机格式(.vcd
)支持,并且可以由GTKWave读取。
您可以通过--wave<=FILENAME>
导出此波形类型。
尽管如此,将来我还是提交了an issue以支持var total = 0;
buttonAdd.onclick = function () {
var inputTall = document.getElementById("inputTall").value;
var a = parseFloat(inputTall);
total += a;
document.getElementById("pOutput").innerHTML = total;
}
波形中的自定义类型!
答案 2 :(得分:0)
您的模拟器不知道如何在值更改转储文件中使用标量或向量变量来表示您的InternalState类型。 例如,如果您使用std_ulogic向量来表示您的状态,它们将出现在VCD文件中。 一个好的波形查看器允许您用状态名称替换状态编码。 Gtkwave支持这一点,正如user1155120已经指出的那样。 IEEE Std 1800-2012在第21.7节中描述了VCD文件及其局限性。