ALU
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