我想在VHDL中實現一個3位計數器,該計數器的電路原理圖如圖所示。VHDL 3位計數器:錯誤消息3363,1408
http://i.stack.imgur.com/OoD7F.jpg
當我執行我得到了下面的錯誤消息的代碼:
--Actual與正規模式OUT信號「Q」相關聯的可能不是一個類型轉換或函數調用
- 操作不能與模式OUT的正式關聯。
我得到了這三個錯誤信息,用於關聯D觸發器和信號的輸出。
在FF1 Q =>不Q0在FF2 Q =>不Q1
在FF3 Q =>不Q2這裏
爲3比特計數器的VHDL代碼:
對於d觸發器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;
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;
示意圖觸發器提供2個輸出,該觸發器VHDL提供唯一的一個。錯誤信息最終是這個錯誤的後果。 –