我有一个FPGA逻辑,其中包含Logic-A和Logic-B功能。 我需要在 DO 文件 (TCL( 中创建两个线程,用于将数据驱动到 FPGA 输入。
线程 1:FPGA 输入。
'#sim:/tb_uut/uut/DATA_IN 1F 00'
线程 2:在逻辑 B 中提供输入以B_IN,当A_IN为高时,否则忽略B_IN。
'#If { [examine sim:/tb_uut/Logic_B/A_IN]==1} { #sim:/tb_uut/Logic_B/B_IN 1 0 #}'
在这里,我需要监视A_IN的值,直到变高。 我能够通过访问B_IN在合成后模拟期间驱动B_in。 我无法创建两个不同的线程来连续监控A_IN并将DATA_IN驱动到 FPGA。
如何在TCL中创建线程?
线程是否在 10.5c 模型中支持?
如何使用DO和VHDL文件独立提供输入?
您不能在ModelSim中使用TCL线程,它不受支持。这也不是 VHDL 模拟并行执行操作的方法。
相反,请注册一个 TCL 回调,该回调在您正在监视的信号发生变化时执行。您可以在监控第一个信号的同时继续驱动另一个信号。请参阅《ModelSim 命令参考手册》中的"when"命令。
我构建了这个示例,演示了如何在ModelSim TCL脚本中使用"when"命令。
在 TCL 脚本中:
when -label MyLabel {A_IN == '1'} {
echo "Hello from TCL at $now ns"
}
run -all
VHDL流程:
process
begin
wait for 10 ns;
A_IN <= '1';
wait for 10 ns;
A_IN <= '0';
wait for 10 ns;
A_IN <= '1';
wait for 10 ns;
A_IN <= '0';
report "VHDL simulation finished";
finish;
end process;
运行 TCL 脚本后输出到 ModelSim 控制台:
VSIM 1> do run.do
# Hello from TCL at 10 ns
# Hello from TCL at 30 ns
# ** Note: VHDL simulation finished
# Time: 40 ns Iteration: 0 Instance: /ent