簡體   English   中英

由多個1位ALU組成4位ALU

[英]Making a 4-bit ALU from several 1-bit ALUs

我正在嘗試將幾個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的組成部分,但是如何將它們綁在一起?

有趣的是,您甚至會問這個問題。 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));

您不能(輕松)將這些1位ALU串在一起形成功能性的多位版本。 無法處理加法和減法模式正常工作所需的進位/出位(按位和&或應該可以正常工作)。

暫時忽略進位問題,通常只需設置一個for generate循環並實例化按位邏輯的多個副本,可能在第一個和/或最后一個元素的大小寫特殊,即:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM