2012-01-06 6 views
0

Я не знаю, как это сделать со структурным программированием ...Структурный 4-битный кольцевой счетчик с D-флип-флопом. VHDL/GHDL

«Бинарный счетчик (с сигналом сброса) из 4 бит, состоящий из 4-х шлемов».

Как подключить/отключить?

Вот объявления сущностей. Ядро проблемы находится в последних строках.

    --FFD 
      entity FFD is 
      port(CLK, D, reset : in STD_LOGIC; 
       Q : out STD_LOGIC 
       ); 
      end FFD; 

      architecture behaviour of FFD is 
      begin 
       process(CLK, reset) 
       begin 
       if reset='1' then Q<='0'; 
       elsif (clk'event and clk='1') then Q<=D; 
       else null; 
       end if; 
       end process; 
      end behaviour; 
     ---------------------------------------------------------- 

     --counter 

     library IEEE; 
     use IEEE.std_logic_1164.all; 
     use IEEE.numeric_std.all; 

      entity counter is 
      port(clk : in std_logic; 
       reset : in std_logic; 
       count : out std_logic_vector(3 downto 0)); 
      end entity counter; 

       architecture rtl of counter is 

      -- 
      component FFD 
      port (CLK, D, reset : in STD_LOGIC; 
         Q : out STD_LOGIC); 
      end component; 

      signal q0,q1,q2: std_logic:='0'; 
      signal q3: std_logic:='1'; 

      begin 
      -- 

      --- 
      inst1: FFD port map (CLK=>clk, D=>q3, reset=>reset, Q=>q0); 
      inst2: FFD port map (CLK=>clk, D=>q0, reset=>reset, Q=>q1); 
      inst3: FFD port map (CLK=>clk, D=>q1, reset=>reset, Q=>q2); 
      inst4: FFD port map (CLK=>clk, D=>q2, reset=>reset, Q=>q3); 
      inst5: count<=q3&q2&q1&q0; 
      end architecture rtl; 

Моя проблема в последних строках.

Спасибо!

ответ

3

Нет проблем с вашими подключениями (они правильно образуют счетчик звонков), но вы не увидите многого. После сброса все ваши триггеры содержат нуль, который будет циркулировать вокруг кольца с каждым тактовым импульсом, но на самом деле не приведет к изменению выходов. Назначение значения по умолчанию «1» для q3 при объявлении сигнала будет отменено фактическим выходом триггера, как только ваша схема начнет работать (или имитирует), и, как правило, это неправильный способ инициализации аппаратного обеспечения ,

Вам необходимо убедиться, что при утверждении сигнала сброса ваше оборудование переходит в соответствующее состояние (то есть: один бит установлен, все остальные очищены). Один из способов сделать это - использовать FF с установленным входом для Q3. Если у вас нет флип-флопа с сигналом с набором (вместо сброса), вы можете имитировать его, помещая инверторы на входе и выходе, что обеспечит «1» для синхронизации по вашему счетчику, когда вы примените сброс. Вы также можете создать некоторые промежуточные сигналы и создать мультиплексор для входов D для сборки счетчика нагрузки или любого другого решения ...

0

Я думаю, что проблема в другом месте.

Я думаю, что ваш D-флоп-выход Q должен иметь направление порта как inout (или buffer), а не out. Это связано с тем, что выход также действует как вход. я думаю, что это необходимо тщательно наблюдать при выполнении структурного моделирования.

порт (CLK, D, сброс: в STD_LOGIC; Q: inout STD_LOGIC);

но, пожалуйста, проверьте я не уверен,

счетчик Джонсон также кольцевой счетчик, посмотреть VHDL code for Johnson Counter, который использует структурный стиль моделирования

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

  • Нет связанных вопросов^_^