Создание 4-битного ALU из нескольких 1-битных ALU - PullRequest
0 голосов
/ 26 октября 2010

Я пытаюсь объединить несколько 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, но как я могу связать их вместе?

Ответы [ 2 ]

1 голос
/ 15 ноября 2010

Интересно, вы бы даже задали этот вопрос. Синтезаторы 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));
0 голосов
/ 26 октября 2010

Вы не можете (легко) объединить эти 1-битные ALU в функциональную многоразрядную версию.Не существует способа обработать ввод / вывод, необходимый для правильной работы режимов сложения и вычитания (однако, побитовый и / или должен работать нормально).

Игнорируя проблему переноса на данный момент, вы быобычно просто устанавливают цикл 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;
...