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
Gast
#2419636
Hi Jordi sla (shift left arithmetik) wird nicht von allen Hertellern unterstützt. Meine auch gelesen zu haben, dass der Befehl aus der Lib entfernt worden ist. Gruß dired
Gast
#2419687
Barney Skinner schrieb: > use ieee.numeric_std.all; Schau Dir mal den Quelltext von der numeric_std an. Da heißt die Funktion shift_left( <unsigned>, <natural>). Duke
Gast
#2420147
Hi Jordi, dazu brauchst du keine library Funktion.
Das geht bei festen shift Werten direkt mit dem bit pattern.
Versuch mal
with s select c <=
...
b(4 downto 0) & "000" when "110"
...
Gast
#2422152
Vielen Dank!! Danke Klaus das war ein guter Tipp. Ich habe auch herausgefunden, dass der operanden shift_left(a,b) auch funtioniert, wobei a vom typ signed ist und b vom typ unsigned.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.