0

我想使用 D FlipFlop 构建一个 4 位移位寄存器,但我不明白这个图。 在此处输入图像描述

这个代码是给我的移位寄存器

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,但我找不到使用所有变量的方法。

4

1 回答 1

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

这很好,它完全符合您的图表要求。

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

不是很好。这将 的输入连接到D,而图表将其连接到。您可以尝试执行以下操作:FF2SinQ(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));
于 2015-05-10T13:35:20.530 回答