有没有办法断言设计中的所有信号在复位期间在上升时钟初始化?

时间:2014-10-17 16:46:59

标签: tags vhdl assert modelsim

仅从测试仪流程(无需更改设计)是否有快速断言所有设计信号在复位期间初始化的方法?

设计使用同步有源低电平复位。

在复位的上升沿,我想断言设计中的每个信号都不是' U'无需呼出每个信号或架构。

使用VHDL 2008,Modelsim 10.1c和HDL Designer。

1 个答案:

答案 0 :(得分:2)

您可以调整this answer中的Modelsim when命令的使用,以便在释放同步重置后在任何信号中查找“U”。因为它存在,它与标量和数组一起使用,但不能检查记录成员。

请注意,复位的上升沿不是自使用同步复位后复位释放的时间。当复位为高时,我会让测试等待时钟的第一个下降沿,以测试'U'。这将确保在重置后驱动程序更新时,您会看到信号的新状态。 when表达式类似于:

"clk'event and clk = '0' and reset = '1' and $sig = [string repeat U [string length [examine $sig]]]"

另一个选择是在testbench中创建一个sentinel信号,当发布reset时求值为true,并在when表达式中测试:

signal reset_inactive : boolean;

process(clk) is
begin
  if rising_edge(clk) then
    if reset = '1' then
      reset_inactive <= true;
    else
      reset_inactive <= false;
    end if;
  end if;
end process;

...
When expression:
"reset_inactive'event and reset_inactive = true and $sig = ..."

一旦完成,最好使用nowait命令取消等待,以避免因设计中的每个信号等待而导致性能下降,因为重置后只需要进行此测试。