Jordi
Gast
|
Erstellt: 14.11.11, 09:58 Betreff: ALU
drucken
weiterempfehlen
|
|
|
Hi, ich versuche gerade ein ALU mit VHDL zu beschreiben, der besteht aus 2 Eingänge plus ein Steuersignal, und 1 Ausgang. Der sollte 8 operationen durchführen, u.a. shiften (<<3). Leider verstehe ich nicht, wie man das shiften durchführen sollte. So sieht meine Beschreibung grad aus:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;
entity alu is
port ( a : in std_logic_vector(7 downto 0); b : in std_logic_vector(7 downto 0); s : in std_logic_vector(2 downto 0); c : out std_logic_vector(7 downto 0) ); end alu;
architecture five of alu is
signal one : std_logic_vector(7 downto 0); signal three : std_logic_vector(7 downto 0);
begin
one <= "00000001"; three <= "00000011";
c <= "00000001" when s = "000" and (unsigned(a) > unsigned(b)) else "00000000" when s = "000" and (unsigned(a) <= unsigned(b)) else "00000001" when s = "001" and (unsigned(a) = unsigned(b)) else "00000000" when s = "001" and (unsigned(a) /= unsigned(b)) else std_logic_vector(signed(a) + signed(one)) when s = "010" else std_logic_vector(signed(a) + signed(b)) when s = "011" else a and b when s = "100" else a or b when s = "101" else std_logic_vector(b sla unsigned(three)) when s = "110" else std_logic_vector(unsigned(a) mod unsigned(b)) when s = "111" else "--------"; end five;
Die Zeile mit "std_logic_vector(b sla unsigned(three)) when s = "110"" ist mein Verscuh für den shift.
Hat jemand eine Idee, wie man dies so durchführen könnte? Wäre sehr sehr dankbar!
Viele Grüße,
Jordi
|
|