Forum: FPGA, VHDL & Co. Dezimal in Bitstring wandeln


von Michael (Gast)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

die 50000000 stehen nur beispielhaft drin und stellen eine obere Grenze
dar.

von T.M. (Gast)


Lesenswert?

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.

von Michael (Gast)


Lesenswert?

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

von Jürgen Schuhmacher (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.