如何在VHDL中检查所有组件层次结构上的信号值

问题描述 投票:-1回答:1

通常,我使用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做到这一点的方法吗?

tcl vhdl modelsim questasim
1个回答
0
投票

层次名称是访问内部信号的唯一方法。而且没有通配符,因此您将需要手动获取每个通配符。也许您可以在每个具有复位的块中放入一个断言?还是使用不允许使用“ X”或“ U”值或多个驱动程序的类型呢?

© www.soinside.com 2019 - 2024. All rights reserved.