Dezimal in Bitstring wandeln

Gast #418256
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
Gast #418258
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.
Gast #418259
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

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