VHDL frage

Von: , Frage gestellt am Di, 7. Feb 2006

hallo!

da es ja kein eigenes brett für VHDL gibt, versuch ich's hier.

eignetlich ganz kleine frage:
gibt es in VHDL eine funktion, um "hoch" zu berechnen? also sowas wie pow() oder ähnliches. hab nix bestätigendes in google gefunden.

hintergrund is übrigens, dass ich in VHDL eine zahl, die in bit dargestellt is, in einen integer umwandlen muss; denke da brauch ich irgendwas um 2^x zu berechnen.
falls wer noch eine alternatividee hat, immer raus damit ;)

danke schonmal
Geisterkarle

5 Antworten zu dieser Frage

  1. Antwort von nach 12 Minuten 0 hilfreich
    Re: VHDL frage

    Auch hallo. hallo!

    da es ja kein eigenes brett für VHDL gibt, versuch ich's hier.
    'Elektronik'. Immerhin dient VHDL (auch ?) zum Simulieren elektrischer Leitungen. Obwohl einige Elektroniker wohl auch hier vorbei schauen werden. eignetlich ganz kleine frage:
    gibt es in VHDL eine funktion, um "hoch" zu berechnen? also
    sowas wie pow() oder ähnliches. hab nix bestätigendes in
    google gefunden.
    Evtl. kann die 'zu-Fuss-Methode' weiterhelfen: man schreibt 2*2*2*2*..... (so oft wie man es braucht). Oder direkt der Befehl 2^x ?

    HTH
    mfg M.L. (keine VHDL-Erfahrung. Aber das wird noch ;-) )

  2. Antwort von nach 3 Stunden 0 hilfreich
    Re: VHDL frage

    Hallo, eignetlich ganz kleine frage:
    gibt es in VHDL eine funktion, um "hoch" zu berechnen? also
    sowas wie pow() oder ähnliches. hab nix bestätigendes in
    google gefunden.
    Vermutlich höchstens in irgendwelchen Bibliotheken, da es afaik keine Hardwareimplementierung davon gibt. hintergrund is übrigens, dass ich in VHDL eine zahl, die in
    bit dargestellt is, in einen integer umwandlen muss; denke da
    brauch ich irgendwas um 2^x zu berechnen.
    2^x geht, indem du eine 1 nimmst und um x stellen nach links verschiebst. falls wer noch eine alternatividee hat, immer raus damit ;)
    Du nimmst ein Register (oder ein int, oder was auch immer), setzt es zu null, addierst dein MSB, shiftest um eins nach links, addierst das zweite bit etc.

    Aber vermutlich gibt es dafür viel effzientere Implementierungen, sprich einfach die entsprechenden Bits an die richtigen Stellen schreiben. Die Zahlen werden ja binär repräsentiert...

    Grüße,
    Moritz

    • Antwort von nach 6 Stunden 0 hilfreich
      Re^2: VHDL frage

      Hallo,
      sers! Vermutlich höchstens in irgendwelchen Bibliotheken, da es
      afaik keine Hardwareimplementierung davon gibt.
      hm... muss ich dann wohl doch von hand machen 2^x geht, indem du eine 1 nimmst und um x stellen nach links
      verschiebst.

      Du nimmst ein Register (oder ein int, oder was auch immer),
      setzt es zu null, addierst dein MSB, shiftest um eins nach
      links, addierst das zweite bit etc.
      das funktioniert bei mir so nicht.
      also genaue aufgabenstellung:
      ich hab nen vektor x(15 downto 0), in dem steht eine binärzahl.

      und ich muss das nun zu einem integer umbasteln! hab halt gedacht, ich geh jede stelle durch x(i) und multipliziere entweder 0 oder 1 mit 2^i und addiere das immer auf ein result integer drauf.
      dafür bräuchte ich halt was für "hoch". und ich weiss nich, ob ich da einfach 2^i schreiben darf... Grüße,
      Moritz
      gruß
      Geisterkarle

      • Antwort von nach 6 Stunden 0 hilfreich
        Re^3: VHDL frage

        Hallo, ich hab nen vektor x(15 downto 0), in dem steht eine
        binärzahl.

        und ich muss das nun zu einem integer umbasteln! hab halt
        gedacht, ich geh jede stelle durch x(i) und multipliziere
        entweder 0 oder 1 mit 2^i und addiere das immer auf ein result
        integer drauf.
        dafür bräuchte ich halt was für "hoch". und ich weiss nich, ob
        ich da einfach 2^i schreiben darf...
        kleines Beispiel: du sollst die Binärzal 1001 in Dezimal umwandeln.

        Du würdest
        n = 1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1* 2^0
        rechnen.
        Du kannst dir das Ausrechnen der Potenzen sparen, wenn du es umklammerst:
        n =(((1) * 2+ 0) * 2 + 0) * 2 + 1

        Das nennt sich Horner-Schema (google weiss sicher mehr)
        In einer anderen Programmiersprache (VHDL ist bei mir zu lange her *G*):

        int n = 0;
        int x[16] = {1, 0, ... 1};
        for (int i = 15 ; i >= 0; i--){
        n *= 2;
        n += x[i];
        }

        Ich hoffe, das inspiriert dich etwas. Potenzen ausrechnen ist ineffizient.

        Ich glaube aber immer noch, dass es eine noch bessere Lösung in VHDL geben muss...

        Grüße,
        Moritz

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!