2015-07-31 2 views
0

Это сводило меня с ума. Вот код, который я до сих пор:Вывод форматирования «if» в процессе тестирования?

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

Целью данного теста является подтверждение того, что, когда на rising_edge (SYS_CLK), если InputSignal = '1', затем выдается импульс (SyncOutputSignal) и соответствует периоду SYS_CLK.

Однако отчет об ошибке выдается каждый раз, когда CLK идет высоко, а InputSignal - высокий.

Короче говоря, мне нужно, чтобы программа дождалась следующего Импульса InputSignal, прежде чем снова проверить утверждение, указанное в моем коде. Есть идеи??

ответ

2

Похоже, вы пытаетесь проверить состояние края на InputSignal. При проверке состояния кромок на оборудовании вы можете сделать простую вещь. Создайте зарегистрированную версию InputSignal (я назвал ее Reg_InputSignal). Затем измените оператор if, чтобы проверить 1 на InputSignal и 0 на Reg_InputSignal. Это условие переднего фронта на 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; 
+0

Как вы создаете зарегистрированную версию InputSignal? Этот новый сигнал (Reg_InputSignal) объявлен исключительно внутри процесса? Или наверху со всеми другими сигнальными объявлениями? Каков синтаксис объявления? – VKkaps

+0

Спасибо! Код работает сейчас! И да, я понимаю, что цифровая логика очень четко, просто ее реализация в VHDL - сложная часть – VKkaps

Смежные вопросы