Структурный 4-битный кольцевой счетчик с D-триггером. VHDL / GHDL - PullRequest
0 голосов
/ 07 января 2012

Я не знаю, как это сделать со структурным программированием ...

"Двоичный счетчик (с сигналом сброса) из 4 битов, выполненных из 4-х D триггеров."

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

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

                    --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;

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 07 января 2012

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

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

0 голосов
/ 30 апреля 2015

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

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

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

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

Счетчик Джонсона также является кольцевым счетчиком, см. Этот Код VHDL для Счетчика Джонсона , который использует стиль структурного моделирования

...