0

这一直让我发疯。这是我到目前为止的代码:

signal SYS_CLK : std_logic := '0';     --Input
signal InputSignal : std_logic := '0';  --Input

signal SyncOutputSignal : std_logic;     --Output

------------------------------------------------------
stim_proc:process(SYS_CLK)

begin   

      if (rising_edge(SYS_CLK)) then
          if (InputSignal = '1') then
             assert (SyncOutputSignal = '0') report "Bad Pulse..." severity ERROR; 
          end if;
      end if;

end process stim_proc;   

还有一张ISim波形图---> i.imgur.com/G5KvCQe.jpg

此测试的目的是确认当 InputSignal = '1' 在上升沿 (SYS_CLK) 时,会发出一个脉冲 (SyncOutputSignal) 等效且与 SYS_CLK 的周期一致。

但是,每次 CLK 变高且 InputSignal 为高时都会发出错误报告。

长话短说,我需要一种方法来告诉程序在再次测试我的代码中列出的断言语句之前等待下一个 InputSignal 脉冲。有任何想法吗??

4

1 回答 1

2

听起来您正在尝试检查 InputSignal 上的边缘条件。在硬件中检查边缘条件时,您可以做一件简单的事情。创建一个注册版本的 InputSignal(我称之为 Reg_InputSignal)。然后更改您的 if 语句以检查 InputSignal 上的 1 和 Reg_InputSignal 上的 0。这是 InputSignal 的上升沿条件,应该只触发 if 语句 1 个时钟周期。

architecture RTL of Entity_Name is
  signal Reg_InputSignal : std_logic := '0';
begin
stim_proc : process(SYS_CLK)
begin
  if (rising_edge(SYS_CLK)) then
    Reg_InputSignal <= InputSignal;
    if (InputSignal = '1' and Reg_InputSignal = '0') then
      assert (SyncOutputSignal = '0') report "Bad Pulse..." severity error;
    end if;
  end if;
end process stim_proc;
于 2015-07-31T16:45:02.047 回答