带触发器的 4 位移位寄存器
4-bit Shift register with flip flop
我想用 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,但我找不到使用所有变量的方法。
FF1: flipflop port map(Sin,Clock,Enable, Q(3));
这很好,它完全符合您的图表要求。
FF2: flipflop port map(Sin,Clock,Enable, Q(2));
这样不好。这将 FF2
的输入 D
连接到 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));
我想用 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,但我找不到使用所有变量的方法。
FF1: flipflop port map(Sin,Clock,Enable, Q(3));
这很好,它完全符合您的图表要求。
FF2: flipflop port map(Sin,Clock,Enable, Q(2));
这样不好。这将 FF2
的输入 D
连接到 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));