VHDL 3 位计数器:错误消息 3363、1408
VHDL 3 Bit Counter: Error Message 3363, 1408
我想用VHDL实现一个3位计数器,电路原理图如图所示
http://i.stack.imgur.com/OoD7F.jpg
当我执行代码时,我收到以下错误消息:
--实际关联的是Formal OUT模式Signal'Q'可能不是类型转换或函数调用
--Operation not 不能与模式OUT的形式关联。
我得到这三个错误消息,用于关联 D 触发器的输出和信号。
在 FF1 Q => 不是 q0
在 FF2 Q => 不是 q1
FF3 Q => 不是 q2
这是 3 位计数器的 VHDL 代码:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity counter_3bit_alt is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
Qout : out STD_LOGIC_VECTOR (2 downto 0));
end counter_3bit_alt;
architecture Behavioral of counter_3bit_alt is
component D_FlipFlop is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
D : in STD_LOGIC;
Q : out STD_LOGIC);
end component;
signal q0, q1, q2 : std_logic;
begin
FF1 : D_FlipFlop
port map(
clk => clk,
clr => clr,
D => q0,
Q => not q0
);
FF2 : D_FlipFlop
port map(
clk => q0,
clr => clr,
D => q1,
Q => not q1 );
FF3 : D_FlipFlop
port map(
clk => q1,
clr => clr,
D => q2,
Q => not q2
);
Qout <= q2&q1&q0;
end Behavioral;
D 触发器的 VHDL 代码是
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity D_FlipFlop is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
D : in STD_LOGIC;
Q : out STD_LOGIC);
end D_FlipFlop;
architecture Behavioral of D_FlipFlop is
begin
process(clk, clr)
begin
if (clr = '1') then
q <= '0';
elsif(rising_edge(clk)) then
q <= D;
end if;
end process;
end Behavioral;
在D_FlipFlop
端口Q
是一个输出。输出应分配给信号,而不是语句。将输出分配给信号,然后将其反转为端口 D
.
的输入
这是一个建议
signal q0, q1, q2 : std_logic;
signal not_q0, not_q1, not_q2 : std_logic;
begin
FF1 : D_FlipFlop
port map(
clk => clk,
clr => clr,
D => not_q0,
Q => q0
);
not_q0 <= not q0;
FF2 : D_FlipFlop
port map(
clk => q0,
clr => clr,
D => not_q1,
Q => q1
);
not_q1 <= not q1;
FF3 : D_FlipFlop
port map(
clk => q1,
clr => clr,
D => not_q2,
Q => q2
);
not_q2 <= not q2;
Qout <= q2 & q1 & q0;
end Behavioral;
我想用VHDL实现一个3位计数器,电路原理图如图所示
http://i.stack.imgur.com/OoD7F.jpg
当我执行代码时,我收到以下错误消息:
--实际关联的是Formal OUT模式Signal'Q'可能不是类型转换或函数调用
--Operation not 不能与模式OUT的形式关联。
我得到这三个错误消息,用于关联 D 触发器的输出和信号。
在 FF1 Q => 不是 q0
在 FF2 Q => 不是 q1
FF3 Q => 不是 q2
这是 3 位计数器的 VHDL 代码:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity counter_3bit_alt is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
Qout : out STD_LOGIC_VECTOR (2 downto 0));
end counter_3bit_alt;
architecture Behavioral of counter_3bit_alt is
component D_FlipFlop is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
D : in STD_LOGIC;
Q : out STD_LOGIC);
end component;
signal q0, q1, q2 : std_logic;
begin
FF1 : D_FlipFlop
port map(
clk => clk,
clr => clr,
D => q0,
Q => not q0
);
FF2 : D_FlipFlop
port map(
clk => q0,
clr => clr,
D => q1,
Q => not q1 );
FF3 : D_FlipFlop
port map(
clk => q1,
clr => clr,
D => q2,
Q => not q2
);
Qout <= q2&q1&q0;
end Behavioral;
D 触发器的 VHDL 代码是
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity D_FlipFlop is
Port ( clk : in STD_LOGIC;
clr : in STD_LOGIC;
D : in STD_LOGIC;
Q : out STD_LOGIC);
end D_FlipFlop;
architecture Behavioral of D_FlipFlop is
begin
process(clk, clr)
begin
if (clr = '1') then
q <= '0';
elsif(rising_edge(clk)) then
q <= D;
end if;
end process;
end Behavioral;
在D_FlipFlop
端口Q
是一个输出。输出应分配给信号,而不是语句。将输出分配给信号,然后将其反转为端口 D
.
这是一个建议
signal q0, q1, q2 : std_logic;
signal not_q0, not_q1, not_q2 : std_logic;
begin
FF1 : D_FlipFlop
port map(
clk => clk,
clr => clr,
D => not_q0,
Q => q0
);
not_q0 <= not q0;
FF2 : D_FlipFlop
port map(
clk => q0,
clr => clr,
D => not_q1,
Q => q1
);
not_q1 <= not q1;
FF3 : D_FlipFlop
port map(
clk => q1,
clr => clr,
D => not_q2,
Q => q2
);
not_q2 <= not q2;
Qout <= q2 & q1 & q0;
end Behavioral;