0

複数の 1 ビット ALU を 4 ビット ALU に結合しようとしています。VHDLで実際にこれを行う方法について混乱しています。私が使用している1ビットALUのコードは次のとおりです。

component alu1 -- define the 1 bit alu component
  port(a, b: std_logic_vector(1 downto 0);
  m: in std_logic_vector(1 downto 0);
  result: out std_logic_vector(1 downto 0));
end alu1;

architecture behv1 of alu1 is
begin
  process(a, b, m)
  begin
   case m is
     when "00" =>
        result <= a + b;
      when "01" =>
        result <= a + (not b) + 1;
      when "10" =>
        result <= a and b;
      when "11" =>
        result <= a or b;
    end case
  end process
end behv1

alu1 をより大きなエンティティ alu4 のコンポーネントとして定義すると仮定していますが、どうすればそれらを結び付けることができますか?

4

2 に答える 2

1

興味深いことに、あなたもその質問をするでしょう。VHDL シンセサイザーは、任意の加算器を推論することができます。必要なものを入力するだけです:

use ieee.numeric_std.all;
...
signal r : unsigned(3 downto 0);
signal a : unsigned(2 downto 0);
signal b : unsigned(2 downto 0);
signal c : unsigned(2 downto 0);
...
r  <=  a + b + c;

r次に、ニーズに合わせてスライスできます。

result  <=  std_logic_vector(r(2 downto 0));
于 2010-11-15T16:18:34.923 に答える
0

これらの1ビットALUを機能的なマルチビットバージョンに(簡単に)つなぎ合わせることができません。加算モードと減算モードが正しく機能するために必要なキャリーイン/アウトを処理する方法はありません(ただし、ビット単位のand&orは正常に機能するはずです)。

今のところキャリーの問題を無視すると、通常はfor生成ループを設定し、ビット単位のロジックの複数のコピーをインスタンス化します。

MyLabel : for bitindex in 0 to 3 generate
begin
  alu_x4 : entity work.alu1
  port map (
    a => input_a(bitindex),
    b => input_b(bitindex),
    m => mode,
    result => result_x4(bitindex) );
end generate;
于 2010-10-26T18:03:17.163 に答える