Обычно я делаю это с помощью команд TCL и симулятора, чтобы убедиться, что все сигналы инициализируются на допустимое значение во время сброса, но я хочу знать, есть ли способ выполнить sh в чистом VHDL.
Вот пример на основе TCL. Очень удобно использовать циклы *
и foreach
вместе с командой симулятора find
для захвата всех имен сигналов. Я просто вызываю процедуру check_sigs
всякий раз, когда хочу проверить правильность всех сигналов.
# List of all signals to inspect
set sig_list {
/tb/POR
/tb/GSM/POR_SD_0/*
/tb/GSM/*
/tb/GSM/CLOCK_Condition/*
/tb/GSM/HB_Timer_Local/*
/tb/GSM/HB_Timer_Remote/*
/tb/GSM/HB_Monitor_Local/*
/tb/GSM/HB_Monitor_Remote/*
}
proc check_sigs {} {
foreach sig_set $::sig_list {
foreach sig [find sig $sig_set] {
if {[exa -decimal $sig] == "X" || [exa -decimal $sig] == "U"} {
...
report error here, etc
...
}
}
}
}
Я знаю, что могу использовать иерархические имена в VHDL-2008 , но это будет слишком обременительно так записывать каждый сигнал.
Кто-нибудь знает способ сделать это с помощью чистого VHDL?