2014-01-27 3 views
0

Я новичок в VHDL, и я только что возился с Quartus II 9.0 и решил создать компонент типа регистров. Я думаю, что моя логика правильная, но я не получаю никакого результата, когда запускаю симуляцию. Я создал форму сигнала для проверки возможных ситуаций (используемый поиск узла для перечисления всех входов и выходов, сгенерированный список соединений функционального моделирования), но я не получаю никакого вывода для Q. Даже не простой случай, когда clr = 1 и все Q должны быть устанавливается в 0.Почему мой код не выводит результат?

library ieee; 
USE ieee.std_logic_1164.ALL; 
USE ieee.std_logic_arith.ALL; 
USE ieee.std_logic_unsigned.ALL; 

ENTITY Register32 IS PORT ( 
    d  : IN STD_LOGIC_VECTOR(31 DOWNTO 0); -- input. 
    ld : IN STD_LOGIC; -- load/enable. 
    clr : IN STD_LOGIC; -- async. clear. 
    clk : IN STD_LOGIC; -- clock. 
    Q  : OUT STD_LOGIC_VECTOR (31 DOWNTO 0)); -- output. 
END Register32; 

ARCHITECTURE description OF Register32 IS 
BEGIN 

    process (clk) begin 
     if (clr = '1') then 
      Q <= (others => '0'); 
     else 
      if (rising_edge(clk)) then 
       if (ld = '1') then 
        Q <= d; 
       end if; 
      end if; 
     end if; 
    end process; 

END description; 

ответ

3

Когда clr асинхронный, то он должен быть включен в список чувствительности процесса , так как обновление Q должны немедленно реагировать на изменения в clr. Quartus II, вероятно, дал вам предупреждение об этом, если вы погрузитесь в предупреждения .

clr отсутствует в списке чувствительности не то, что видно, если clk это работает, но если ваш текущий испытательный стенд только пытается clr до сих пор, это может быть причиной того, что вы не видите никаких изменений Q.

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