Как написать приложение 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