Hallo, ich habe ein Projekt in VHDL für einen CycloneII geschrieben, bei dem große Zahlen über einen 32Bit-Bus übertragen werden sollen. Dafür habe ich nun einen Umrechnungsfunktion wie folgt erstellt: function create_four_byte (constant int: integer := 0) return std_logic_vector is variable int_temp: integer := int; variable four_byte_result : std_logic_vector(highest_bit downto 0) := X"00000000"; begin if int_temp >= 50000000 then return four_byte_result; end if; FOR j IN highest_bit-1 downto 0 LOOP if int_temp >= 2**j then four_byte_result(j) := '1'; int_temp := int_temp - 2**j; else four_byte_result(j) := '0'; end if; END LOOP; return four_byte_result; end function; Die Frage: Meiner Meinung ist das nur Kosmetik, weil die Zahl ja so oder so im Chip als Binärwert vorliegt. Gibt es eine Möglichkeit, eine INteger-Zahl direkt auf einen Bus vom Typ pio_bus : OUT std_logic_vector (31 downto 0); zu setzen? Danke! Micha
die 50000000 stehen nur beispielhaft drin und stellen eine obere Grenze dar.
Du willst intern mit Integer rechnen und das Resultat dann auf einen std_logic-Bus legen? pio_bus <= std_logic_vector(to_unsigned(int,pio_bus'LENGTH)); je nachdem, wenn du 2-er Komplement verwendest, musst du to_signed verwenden.
Exakt freu Das funktioniert auch. Als ich die to_unsigned fkt. mal ausprobiert hatte, habe ich wahrscheinlich die ieee.numeric_std nicht eingebunden. Deshalb ging es damals nicht. Ich bekomme aber keine Performance-Erhöhung durch die Ersetzung meiner Fkt., so ist es aber viel eleganter. Danke also! Micha
Gabe es hier im Wiki nicht irgendwo so einen Zahlenzyklus, der die Umformungen als Kreisdiagramm erklärte?
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.