【问题标题】:How to write Thread application in DO file of Model-sim 10.5c using TCL?如何使用 TCL 在 Model-sim 10.5c 的 DO 文件中编写线程应用程序?
【发布时间】:2019-11-22 12:05:28
【问题描述】:

我有一个 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中创建线程?

modelsim 10.5c 是否支持线程?

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

【问题讨论】:

  • 有没有人在理解上述问题时遇到过任何挑战。

标签: tcl fpga modelsim intel-fpga


【解决方案1】:

您不能在 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

【讨论】:

  • 我正在为图片中提到的示例设计执行门级模拟。我有 FPGA 输入 DATA_IN1、DATA_IN2 和 DATA_IN3 以及 Outputs 。 A_IN 和 B_IN 是我的 FPGA 逻辑中 LOGIC_A 和 LOGIC_B 之间的门级网表。当 A_IN 和 B_IN 为高时,我需要监控输出 C_OUT,如果相等,我需要将其中任何一个更改为不同的值,如下所述
  • 这里我在上面进行更改,我收到错误为“找不到匹配'$'的对象”。如何在 50ns 的运行时间内监控 C_OUT 的值,无论是高还是低?
  • set A_IN_test [examine sim:/FGPA_DESIGN/LOGIC_B/A_IN] set B_IN_test [examine sim:/FGPA_DESIGN/LOGIC_B/B_IN] when -label Mylabel {$A_IN_test == 1 &amp;&amp; $B_IN_test == 1} { force -freeze sim:/FGPA_DESIGN/LOGIC_B/B_IN 1 0 -cancel 50ns run -50ns if {[examine sim:/FGPA_DESIGN/LOGIC_B/C_OUT]== 1} { # need to to check C_OUT during run time of 50ns.` puts "B_IN changed to low" } } run -all
猜你喜欢
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2014-03-29
  • 2011-08-09
相关资源
最近更新 更多