2016-09-17 8 views
0

図に示す回路図を持つVHDLに3ビットカウンタを実装したいと思います。 OUTフォーマルモード信号「Q」に関連付けられているVHDL 3ビットカウンタ:エラーメッセージ3363,1408

は--Actual型変換や関数呼び出し

ではないかもしれない:私は次のエラーメッセージを持ってコードを実装

http://i.stack.imgur.com/OoD7F.jpg

- 動作モードのフォーマルに関連付けることはできません。

Dフリップフロップの出力と信号を関連付けるために、これら3つのエラーメッセージがあります。

:ここFF3 QでFF2 QでFF1 Qで

=>ないQ0

=>ないQ1

=>ない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; 
+0

概略フリップフロップ2つの出力を提供され、VHDLのフリップフロップは、一つだけを提供しています。エラーメッセージは最終的にはこの間違いの結果です。 –

答えて

0

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; 
+0

次の場合を除いて、あなたは正しいです:not_q0 <= not q0。 not_q1 <= not q1 not_q2 <= not q2 – user2699101

+0

'D =>(q0ではない)'は、 'D'が入力ポートであるため実行できます。 – Thanushan