4-битный сдвиговый регистр с триггером

Я хочу построить 4-битный регистр сдвига, используя D FlipFlop , но я не понимаю эту схему. введите здесь описание изображения

Этот код дан мне для сдвигового регистра

ENTITY shift4 IS
 PORT ( D : IN STD_LOGIC_VECTOR(3 DOWNTO 0) ; 
 Enable : IN STD_LOGIC;
 Sin : IN STD_LOGIC;
 Clock : IN STD_LOGIC;
 Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; 
END shift4 ; 

И я написал этот код для флип-флопа

entity flipflop is
 port ( D_in : in std_logic;
 CLK : in std_logic;
 CLR : in std_logic;
 Q_out : out std_logic
 );
end flipflop; 


architecture behavior of flipflop is
begin
process(CLK)
begin
if CLR='0' then null;
elsif RISING_EDGE(CLK) then
Q_out <= D_in;
end if;
end process ;
end behavior ;

Чего я не понимаю из этой диаграммы, так это того, как я должен использовать D и как портировать триггер карты с этими входами и выходами. я пробовал это

FF1: flipflop port map(Sin,Clock,Enable, Q(3));
FF2: flipflop port map(Sin,Clock,Enable, Q(2));
FF3: flipflop port map(Sin,Clock,Enable, Q(1));
FF4: flipflop port map(Sin,Clock,Enable, Q(0));

Но, очевидно, это не так, потому что я также должен использовать D, но я не могу найти способ использовать все переменные.


person Manolis Pap    schedule 10.05.2015    source источник
comment
Чтобы понять принципиальную схему, рассмотрим, что в D-триггере состояние входа D передается на выход Q по переднему фронту CLK. Когда D впоследствии изменяется, это не влияет на Q до следующего переднего фронта CLK ... поэтому, если вы поместите 1 в Sin, на 1-м переднем фронте CLK он достигнет Q3 (который также является входом для следующего D Триггер-флоп ... на 2-м нарастающем фронте он достигает Q2 ... и т. д. и т. д.   -  person MikeD    schedule 10.05.2015


Ответы (1)


FF1: flipflop port map(Sin,Clock,Enable, Q(3));

Это хорошо, он делает именно то, что просит ваша диаграмма.

FF2: flipflop port map(Sin,Clock,Enable, Q(2));

Это не хорошо. Это соединяет вход D из FF2 с Sin, а диаграмма соединяет его с Q(3). Вы можете попробовать сделать что-то вроде:

FF2: flipflop port map(Q(3),Clock,Enable, Q(2));

Но если ваш инструмент не совместим с VHDL-2008, он потерпит неудачу (безопаснее предположить, что это не так). Это связано с тем, что в VHDL вы не можете прочитать вывод своей сущности. Вместо этого вы должны определить внутренний сигнал, использовать его для всех назначений и присвоить ему Q.

architecture structural of shift4 is
    signal Q_i : std_logic_vector(3 downto 0); -- _i stands for internal
begin
    Q <= Q_i; -- Drive output port from the internal version

    FF1: flipflop(Sin, Clock, Enable, Q_i(3));
person Jonathan Drolet    schedule 10.05.2015
comment
Я понимаю, но как насчет буквы D в сущности shift4? мы вообще не пользуемся - person Manolis Pap; 10.05.2015
comment
Ммм, не видел. Судя по схеме, это бесполезно и не должно быть там. На ваших верхних диаграммах нет входа D, только Sin, Clock, Enable и Q. - person Jonathan Drolet; 10.05.2015