0

通常,我使用 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
        ...
      }
    }
  }
}

我知道我可以在 VHDL-2008 中使用分层名称,但是以这种方式写出每个信号太麻烦了。

有谁知道用纯VHDL做到这一点的方法?

4

1 回答 1

0

分层名称是访问内部信号的唯一方法。并且没有通配符,因此您需要手动获取每个通配符。也许你可以在每个有重置的块内放置一个断言?或者如何使用不允许“X”或“U”值或多个驱动程序的类型?

于 2020-01-07T08:28:16.857 回答