VHDL frage

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 :wink:

danke schonmal
Geisterkarle

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 :wink: )

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 :wink:

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

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

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

** dient zum potenzieren.