ALU in VHDL mit shift operation

OP #2419223
Lesenswert?
• ▲
▼
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren