如何使用TCL在Model-sim 10.5c的DO文件中编写Thread应用程序?

How to write Thread application in DO file of Model-sim 10.5c using TCL?

我有一个 FPGA 逻辑,其中包含逻辑 A 和逻辑 B 功能。 我需要在 DO 文件 (TCL) 中创建两个线程以将数据驱动到 FPGA 输入。

线程 1:FPGA 输入。

'#sim:/tb_uut/uut/DATA_IN 1F 00'

线程 2:当 A_IN 为高电平时,为逻辑 B 中的 B_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,我能够在 post 综合模拟期间驱动 B_in。 我无法创建两个不同的线程来持续监控 A_IN 并将 DATA_IN 驱动到 FPGA。

如何在TCL中创建线程?

modelsim 10.5c 是否支持线程?

如何使用 DO 和 VHDL 文件独立提供输入?

您不能在 ModelSim 中使用 TCL 线程,它不受支持。这也不是并行执行 VHDL 仿真的方法。

相反,注册一个 TCL 回调,它在您监视的信号发生变化时执行。您可以在监视第一个信号的同时继续驱动另一个信号。参考ModelSim Command Reference Manual中的"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