我可以让ModelSim模拟在信号上显示文本(而不是数值)吗?我有几个州机器状态说,
localparam S_IDLE = 2'b00;
localparam S_START = 2'b01;
localparam S_STOP = 2'b10;
Run Code Online (Sandbox Code Playgroud)
有没有办法显示S_IDLE例如信号而不是00?谢谢.
我正在尝试加快调试速度。在较大的跟踪中,我正在搜索信号的特定值。我在Linux下使用QuestaSim 10.0b。
我已经发现可以使用以下命令在Modelsim / QuestaSim中完成
searchlog -expr { stream == 'h20 } 0
Run Code Online (Sandbox Code Playgroud)
不幸的是,当它的值为“ XX”时,它也与信号“流”匹配,但我只希望它与0x20匹配。如何确定它仅匹配十六进制值,而不匹配未定义的值?
如何从源代码中检测模拟中使用的时间刻度精度?考虑我有一个配置参数(cfg_delay_i),由用户以时间单位给出的一些延迟值作为fs。如果用户给出1000,我的代码在进一步执行之前必须等待1000fs 或 1ps。
#(cfg_delay_i * 1fs );//will wait only if timescale is 1ps/1fs
do_something();
Run Code Online (Sandbox Code Playgroud)
如果时间刻度精度为1fs,则不会有任何问题,但如果精度高于该精度,则不会等待,它将作为0 delay工作。所以我想编写一个代码来确定用户使用的时间刻度并相应地给出延迟。我预期的伪代码如下所示,
if(timeprecision == 1fs )#(cfg_delay_i * 1fs ) ;
else if(timeprecision == 1ps )#(cfg_delay_i/1000 * 1ps ) ;
Run Code Online (Sandbox Code Playgroud)
请帮助我确定内部时间刻度单位和精度的逻辑。
我正在尝试从由 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
Run Code Online (Sandbox Code Playgroud)
对于 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
Run Code Online (Sandbox Code Playgroud)
我可以看到模拟信号,但不是全部。信号定义为
Type InternalState is (Idle,Valid,Stalled);
Signal sState,sPrevState :InternalState;
Run Code Online (Sandbox Code Playgroud)
从 vcd 中省略。这种行为对于modelsim 和ghdl 很常见。
我可以在 ghdl 生成的 vcd 中看到以下行
$comment sstate is not handled $end
Run Code Online (Sandbox Code Playgroud)
Modelsim 只是悄悄地忽略了这些信号
有解决方法吗?选择?
我目前正在使用 Modelsim 10.1 和 ISE 13.4 并运行一个非常简单的测试平台。所有代码都是VHDL。
前assert几天我在使用 VHDL 的声明时遇到了麻烦:错误和警告被输出到抄本。但是,消息查看器中没有消息,波形窗口中也没有消息指示器。如果这很重要,我会从 ISE 内部开始我的模拟。
我想我可能缺少一个开关来打开消息记录或其他东西,但数小时的谷歌搜索没有带来任何东西。是否有任何设置会阻止消息被记录到消息查看器,尽管它会被打印到脚本中?
我已经找到了Simulate->Runtime Options-->Message Severity。但是,那里的一切都未经检查。勾选任何复选框会产生不打印到抄本的预期行为,但消息查看器中仍然没有任何消息的迹象。
谢谢你的时间,
罗伯特
编辑:
好吧,经过一番折腾,终于找到了。
必须将msgmode和displaymsgmode选项设置为至少both具有良好的消息指示器。这似乎是在我公司早期 ModelSim 版本的默认配置中完成的。
我希望像我这样无知的人发现这个答案有帮助:)
有没有办法告诉模拟器(我正在使用 Modelsim)将信号拉到弱的“H”,当它不是由任一双向接口驱动时?
例如,如果我有一个 I2C 信号 I2C_SDA,它被声明为 2 个模块的输入输出。一个是我的实际 UUT,另一个是测试台。两者都有这样的声明:
io_i2c_sda <= r_I2C_DATA when r_I2C_DATA_EN = '1' else 'Z';
Run Code Online (Sandbox Code Playgroud)
所以两端都是三态的。这在模拟中工作正常,除了线路一直是蓝色('Z'),两端都没有传输。当两端都没有传输时,如何将这条线拉到代码中的“H”?
我无法使以下报告语句起作用:
report "ERROR: instruction address '" & CONV_INTEGER(a(7 downto 2)) & "' out of memory range." severity failure;
Run Code Online (Sandbox Code Playgroud)
哪里a是 类型in std_logic_vector(31 downto 0)。
我得到的错误是:
No feasible entries for infix operator "&".
Run Code Online (Sandbox Code Playgroud)
我想打印出一个字符串,连接整数值,然后连接另一个字符串。
我究竟做错了什么?
我想在 Quartus 中运行一个仿真。所以我在“分配”菜单中分配了一个测试平台。我的测试平台包括我的 DUT(D) 和一个额外的组件 (E),它仅用于仿真(因此该组件包含不可合成的语句)。如果我从 Testbench 中删除 E,我的模拟就会运行,但是当我想在我的 Testbench 中包含 E 时,我从 modelsim 收到错误:
my_testbench.vhd(197): (vcom-1195) cannot find expanded name "mylib.only_for_simulation".
Run Code Online (Sandbox Code Playgroud)
我怎样才能让 Quartus/Modelsim 编译 E 文件?
测试VHDL代码逻辑的标准方法是在 VHDL 中编写一个测试平台并使用一个模拟器,如ModelSim:其中,我已经做过很多次了。
我听说工程师现在不是用 VHDL 编写测试平台,而是使用 Python 来测试 VHDL 代码。
问题:
这是怎么做的?
在 Python 中编写测试平台时,您可以使用标准的 Python 编码/模块还是仅使用像 myHDL 这样的模块?
是否有参考资料、论文或教程说明如何执行此操作?我检查了 Xilinx、Altera 和 Modelsim 网站,但找不到任何内容。
我在网上找到的关于将 Python 用于 FPGA 的唯一内容是一些软件包:myHDL 是引用最多的软件包。