2016-03-17 2 views
0

В настоящее время я изучаю степень электротехники и разработал 4-битный ALU как часть задания.Конвертирование с 8 бит до 16 бит ALU

Меня спросили, как я могу легко преобразовать его в 8-битный ALU. Мой ответ в настоящее время заключается в том, что я бы изменил все модули (add, sub, bux, или xor LS, RS и т. Д.) До 8 бит, а также номера коммутаторов для платы FPGA в модуле ALU.

Это самый простой способ, или я смогу разработать ALU для вызова каждого 4-битного затвора дважды или добавить 4-битные модули во второй раз с другим именем?

Мне кажется, что я исчерпал свои учебники и сеть, которая расстраивает, поскольку информация должна быть там!

Я использую Quartus II для программирования.

+1

«были заданы», предполагает, что это может быть задание. Вы описали три способа, все они работают, и я видел, как все они использовались. У каждого есть свои преимущества и недостатки, я предлагаю вам подробно остановиться на них. в вашем задании или отчете. –

+1

Задайте конкретные проблемы, связанные с преобразованием существующей реализации. * Самый простой способ * субъективен, ваши читатели не имеют достаточных деталей, и ответы будут мнениями без фактической основы. – user1155120

+0

Простейшим способом может быть использование общей реализации, но это зависит от вашего определения _easiest_. Или вам действительно нужна помощь в составлении его из 4-битных ALU? Также ваше название не соответствует вашему описанию. –

ответ

0

Фактический ответ зависит от фактического выбора 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 не моделируется - он начинается с синтеза. Вы должны всегда имитировать перед синтезом: гораздо быстрее найти ошибки, найти их источник и исправить их.

+0

* Вы говорите, что пытались найти, как подключить два 4-битных ALU ... * Это утверждение, похоже, не поддерживается вопросом или его историей редактирования. – user1155120

+0

Возможно преобразование кода в экземпляр двух 4-разрядных ALU, но было бы полезно документировать порты. Например, что такое 'invA'? Последний абзац зависит от того, видите ли вы ModelSim Altera Edition как часть Quartus или нет. –

+0

@ user1155120 _I_ ничего не сделал. В плакате вопроса говорится, что он есть. –

Смежные вопросы