mikrocontroller.net

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


Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die 50000000 stehen nur beispielhaft drin und stellen eine obere Grenze
dar.

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gabe es hier im Wiki nicht irgendwo so einen Zahlenzyklus, der die
Umformungen als Kreisdiagramm erklärte?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.