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
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
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
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" ...
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.