Как написать приложение Thread в файле DO Model-sim 10.5c с помощью TCL?

У меня есть логика FPGA, которая содержит функции Logic-A и Logic-B. Мне нужно создать два потока в файле DO (TCL) для передачи данных на входы FPGA.

Поток 1: входы FPGA.

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

Поток 2: Предоставьте входные данные для B_IN в логике B, когда 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?

1 ответ

Решение

Вы не можете использовать потоки TCL в ModelSim, это не поддерживается. Это также не способ делать что-то параллельно для моделирования VHDL.

Вместо этого зарегистрируйте обратный вызов TCL, который выполняется при изменении отслеживаемого сигнала. Вы можете продолжать управлять другим сигналом, контролируя первый. См. Команду "when" в Справочном руководстве по командам ModelSim.

Я построил этот пример, который демонстрирует, как вы можете использовать команду "when" в сценарии ModelSim TCL.

В сценарии 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;

Вывод на консоль ModelSim после запуска сценария TCL:

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
Другие вопросы по тегам