我目前正在學習電氣工程學位,並設計了一個4位ALU作爲任務的一部分。8位至16位ALU轉換
我被問及如何輕鬆將其轉換爲8位ALU。我現在的答案是,我將把所有模塊(add,sub,bux或xor LS,RS等)更改爲8位模塊以及ALU模塊中FPGA板的開關編號。
這是最簡單的方法,還是我能夠設計ALU來調用每個4位門或兩次添加4位模塊的不同名稱?
我覺得好像我已經用盡了我的教科書和網絡,這是令人沮喪的信息必須在那裏!
我正在使用Quartus II進行編程。
我目前正在學習電氣工程學位,並設計了一個4位ALU作爲任務的一部分。8位至16位ALU轉換
我被問及如何輕鬆將其轉換爲8位ALU。我現在的答案是,我將把所有模塊(add,sub,bux或xor LS,RS等)更改爲8位模塊以及ALU模塊中FPGA板的開關編號。
這是最簡單的方法,還是我能夠設計ALU來調用每個4位門或兩次添加4位模塊的不同名稱?
我覺得好像我已經用盡了我的教科書和網絡,這是令人沮喪的信息必須在那裏!
我正在使用Quartus II進行編程。
實際答案取決於您的實際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位ALU連接在一起,使一個16位ALU。我已經準備了一個16位的ALU,所以我將它轉換爲一個8位的ALU,並將它初始化兩次,以創建原始的16位ALU(所以我可以對它進行相同的測試以確保我已經完成了它正確*)。我相信你可以將它轉換爲2x 4位ALU。
8個LSB轉到第一個ALU; 8個MSB轉到第二個。關鍵的一點是,我如何將第一個ALU的進位輸出連接到第二個進位輸入。另請注意,我對LSB ALU的輸出overflow
不感興趣。最後,我需要合併各自的zero
輸出。
當然,我不知道你的ALU實際上做了什麼。這一個並沒有太大的作用。它唯一的數學運算是ADD。 (這是一個練習的答案,因此我不會發布所有的代碼)。
*這是你應該始終做的。你提到Quartus。 Quartus不模擬 - 它從綜合開始。在合成之前,您應該始終進行模擬:找到錯誤,查找源代碼並修復錯誤要快得多。
*你說你試圖找到如何連接兩個4位ALU ...... *這個斷言看起來不被這個問題或它的編輯歷史支持。 – user1155120
將您的代碼轉換爲兩個4位ALU的實例可能是可能的,但是記錄這些端口會很有幫助。例如,什麼是'invA'?最後一段取決於您是否將ModelSim Altera Edition視爲Quartus的一部分。 –
@ user1155120 _I_沒有做過任何這些事情。問題的海報說他有。 –
「有人問」表明這可能是一項任務。你已經描述了三種方式,它們都可以工作,而且我已經看到它們都被使用了。各有其優點和缺點,我建議你詳細說明這些。在你的任務或報告中。 –
詢問轉換您的現有實施的具體問題。 *最簡單的方法*是主觀的,你的讀者沒有足夠的細節,答案是沒有事實依據的意見。 – user1155120
最簡單的方法可能是使用泛型實現,但這取決於_easiest_的定義。或者,您是否真的需要幫助將它從4位ALU中組合出來?您的標題也與您的描述不符。 –