通常,我使用TCL和模拟器命令执行此操作,以确保在重置期间将所有信号初始化为有效值,但我想知道是否有办法在纯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
...
}
}
}
}
我知道我可以使用hierarchical names in VHDL-2008,但是那样写每个信号太麻烦了。
有人知道使用纯VHDL做到这一点的方法吗?
层次名称是访问内部信号的唯一方法。而且没有通配符,因此您将需要手动获取每个通配符。也许您可以在每个具有复位的块中放入一个断言?还是使用不允许使用“ X”或“ U”值或多个驱动程序的类型呢?