Фактический ответ зависит от фактического выбора ALU и выбранного вами метода. Вы говорите, что пытались найти, как подключить два 4-битных ALU; вот некоторая помощь:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.defs_pkg.all;
entity cpu_alu is
port(
opA : in std_logic_vector(15 downto 0); -- operand A
opB : in std_logic_vector(15 downto 0); -- operand B
Op : in std_logic_vector(2 downto 0); -- operator
cIn : in std_logic; -- carry in
invA : in std_logic; -- invert A
result : out std_logic_vector(15 downto 0); -- result
cOut : out std_logic; -- carry out
overflow: out std_logic; -- overflow
zero : out std_logic
);
end entity cpu_alu;
architecture rtl1 of cpu_alu is
signal A: std_logic_vector(7 downto 0);
signal INTERNAL_CARRY: std_logic; -- the carry chain
signal zeroMSB: std_logic; -- because this ALU has a 'zero' output
signal zeroLSB: std_logic;
constant Top : integer := A'left;
begin
MSB : entity work.cpu_alu8
port map (opA => opA(7 downto 0),
opB => opB(7 downto 0),
Op => Op,
CIn => CIn,
invA => inVa,
result => result(7 downto 0),
cout => INTERNAL_CARRY,
overflow => open,
zero => zeroMSB);
MSL : entity work.cpu_alu8
port map (opA => opA(15 downto 8),
opB => opB(15 downto 8),
Op => Op,
CIn => INTERNAL_CARRY,
invA => inVa,
result => result(15 downto 8),
cout => cOut,
overflow => overflow,
zero => zeroLSB);
zero <= zeroMSB and zeroLSB;
end architecture rtl1; -- of cpu_alu
Это показывает два 8-разрядных АЛУ, соединенных вместе, чтобы сделать один 16-разрядный АЛУ. У меня уже был 16-разрядный ALU, подготовленный ранее, поэтому я преобразовал его в 8-битный ALU и дважды создавал его, чтобы сделать исходный 16-битный ALU (чтобы я мог запустить тот же тест на нем, чтобы убедиться, что я это сделал правильно*). Я уверен, что вы можете преобразовать его в 2x 4-битный ALU.
8 LSB отправляются в первый ALU; 8 MSB переходят ко второму. Главное, чтобы увидеть, как я подключил вывод переноса первого ALU к вводу переноса второго. Также обратите внимание, что меня не интересует вывод overflow
от LSB ALU. Наконец, мне нужно было объединить вывод zero
от каждого.
Теперь, конечно, я не знаю, что на самом деле делает ваш АЛУ. Это мало что делает; единственная математическая операция, которую он выполняет, - это ADD. (Это ответ на упражнение, и по этой причине я не буду публиковать весь код).
* Это то, что вы должны всегда делать. Вы упоминаете Quartus. Quartus не моделируется - он начинается с синтеза. Вы должны всегда имитировать перед синтезом: гораздо быстрее найти ошибки, найти их источник и исправить их.
«были заданы», предполагает, что это может быть задание. Вы описали три способа, все они работают, и я видел, как все они использовались. У каждого есть свои преимущества и недостатки, я предлагаю вам подробно остановиться на них. в вашем задании или отчете. –
Задайте конкретные проблемы, связанные с преобразованием существующей реализации. * Самый простой способ * субъективен, ваши читатели не имеют достаточных деталей, и ответы будут мнениями без фактической основы. – user1155120
Простейшим способом может быть использование общей реализации, но это зависит от вашего определения _easiest_. Или вам действительно нужна помощь в составлении его из 4-битных ALU? Также ваше название не соответствует вашему описанию. –