0

このコードでは、16ビットの数値を乗算して32ビットの出力を取得しようとしています。コードにエラーがあります。ラインで

    c<=c+a;

コンパイラがエラーを出します:「モード出力のポート'c'を読み取れません。私の間違いは何ですか?ありがとうございます。

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;

    entity circ is
    port (  a    :in std_logic_vector (15 downto 0);
    b    :in std_logic_vector (15 downto 0);
    c    :out  std_logic_vector (31 downto 0)
        );

    end entity;

    architecture data of circ is
    begin
process(a,b)
begin
c<= '0';   
for i in 15 to 0 loop
if (b(i) = '1') then
c<=c+a;
end if;
END LOOP;

end process;
    end data;
4

1 に答える 1

1

エラーはまさにコンパイラがあなたに言ったことです

モードアウトのポート「c」を読み取れません

出力を読み取ることはできません。課題の右側に が表示されるため、c書いているときに読んでいます。次のようにコードを書き直す必要があります。c <= c + ac

signal s : std_logic_vector(31 downto 0);

process(a,b)
begin
  s <= (others => '0');   
  for i in 15 to 0 loop
    if (b(i) = '1') then
      s <= s + a; -- Use a local signal that we can read and write
    end if;
  end loop;
  c <= s; -- Assign the output to the local signal.
end process;
于 2012-05-17T10:13:19.513 に答える