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

このテストの目的は、立ち上がりエッジ (SYS_CLK) で InputSignal = '1' の場合に、SYS_CLK の周期と同等のパルス (SyncOutputSignal) が送信されることを確認することです。

ただし、CLK が High になり、InputSignal が High になるたびにエラー レポートが発行されます。

簡単に言うと、コードにリストされている assert ステートメントを再度テストする前に、次の InputSignal Pulse を待つようにプログラムに指示する方法が必要です。何か案は??

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 に答える