Forum: FPGA, VHDL & Co. integer in ascii-bit_vector wandeln


von Fabian S. (jacky2k)


Lesenswert?

Hallo,
ich habe mal wieder eine tolle Aufgabe von unserem Prof bekommen und bin 
an einem Punk am verzweifeln. Ich habe einen Geschwindigkeitsweg in RPM, 
Wertebereich 0..9999 und soll den auf nen Display bringen. Also muss ich 
den in ASCII wandeln. Raus kommen soll es am ende als bit_vector(31 
downto 0), also ein Zeichen 8 Bit und 4 Zeichen insgesamt.
Als Port habe ich so etwas:
speed : in integer;
dispStr : out bit_vector(31 downto 0);

Ich bin auf die Funktion integer'image() gestoßen, die scheint so 
ziemlich genau das zu machen was ich will, jedoch kommt da nen string 
raus. Wie wandle ich nun den string in ein bit_vector oder gibts da noch 
ne bessere Möglichkeit?

von Fabian S. (jacky2k)


Lesenswert?

Also ich habs grade mal aus der Verzweiflung heraus mit einer riesiegen 
Look-Up Table probiert... keine gute Idee, habe maximal 2000 Werte 
genommen und er ist nach 5 Min immer noch am synthetisieren...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fabian S. schrieb:
> an einem Punk am verzweifeln
Ja gibts denn sowas?

Fabian S. schrieb:
> Ich habe einen Geschwindigkeitsweg in RPM
Was hast du?

Fabian S. schrieb:
> Ich bin auf die Funktion integer'image() gestoßen, die scheint so
> ziemlich genau das zu machen was ich will
Du willst das aber letztendlich synthetisieren?
Falls ja: sieh mal nach, welche Attribute dein Synthsizer überhaupt 
umsetzen kann, Die, die ich kenne tun sich mit 'image recht schwer...

Fassen wir die Aufgabe mal kurz zusammen:
Du willst (wie zigtausend andere vor dir) eine Zahl in eine 
ASCII-Zeichenkette umwandeln. Das geht dann i.A. über einenkleinen 
Umweg:
Integerzahl (oder ein Vektor, der eine Zahl darstellt) --> BCD --> ASCII
http://www.lothar-miller.de/s9y/archives/34-Vektor-nach-BCD.html
Und wenn du dann die BCD-Werte zwischen 0..9 erzeugt hast, mußt du nur 
eine ASCII-'0' dazuaddieren.
Für Extreme gibts die Lösung auch kombinatorisch:
http://www.lothar-miller.de/s9y/archives/67-Vektor-nach-BCD-kombinatorisch.html

> Also ich habs grade mal aus der Verzweiflung heraus mit einer riesiegen
> Look-Up Table probiert...
Das macht nur bei kleinen Zahlen (z.B. char 0..255) Sinn:
http://www.lothar-miller.de/s9y/archives/33-Byte-nach-BCD.html

von Fabian S. (jacky2k)


Lesenswert?

Ach du Sch**** :D
Die Lösung in kombinatorischer Logik sieht übersichtlicher aus, auch 
wenn ich praktisch nichts davon verstehe.
Kurze Frage da nochmal zwischendurch was die for Schleifen angeht: 
Werden die dann parallel in den Prozessor gegossen oder wie kann man 
sich das vorstellen? Und ich nehme mal an, dass das am Ende nen riesiger 
"Code" wird?
Ohh man... ich weiß ja nicht. Die Vorbereitungszeit zu Hause pro Person 
ist auf 4 Stunden festgelegt, plus 4 Stunden im Labor, und nochmal 4 
Stunden Nachbereitung. Ich wäre sicher nicht in 4 Stunden auf das da 
gekommen und das ist ja auch nur ein kleiner Teil der Aufgabe :( Der ist 
echt nicht mehr ganz dicht...

Wie auch immer, danke dafür, ich werde mir das mal genauer anschauen und 
hoffen, dass ich das irgendwie verstehe und nachbauen kann :P
Vielleicht übernehme ich es auch einfach und geb ne Quelle an, ist zwar 
nicht ganz Sinn und Zweck der Sache aber was soll ich machen.

Edit: Ganz vergessen, ich bin mit dem integer'image Kram etwas weiter. 
Was meinst du mit welche Attribute mein Synthese Dingens unterstützt? 
Was sind Atribute und wo kann ich das sehen was er kann? Ich habe hier 
Xilinx ISE 12.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fabian S. schrieb:
> Kurze Frage da nochmal zwischendurch was die for Schleifen angeht:
> Werden die dann parallel in den Prozessor gegossen oder wie kann man
> sich das vorstellen? Und ich nehme mal an, dass das am Ende nen riesiger
> "Code" wird?
Ich meine, genau das auf meiner HP erwähnt zu haben... :-/
Immerhin ist der Ressourcenverbrauch extrem hoch und die Durchlaufzeit 
jenseits von gut&böse...

Fabian S. schrieb:
> 'image
ist ein Attribut, 'event ist ein Attribut, 'pos ist ein Attribut...
Alles, was hinter einem Signal mit ' angehängt wird, eben.

Fabian S. schrieb:
> Der ist echt nicht mehr ganz dicht...
Naja, die Zeitavorgaben scheinen mir auch recht knapp angesetzt zu 
sein...

von Fabian S. (jacky2k)


Lesenswert?

Alles klar.
Ich habe nun deinen Quelltext genommen, der der nicht in 
kombinatorischer Logik gemacht ist. Aber selbst der ist zu groß für 
meinen kleinen Test CPLD ;)

ERROR:Cpld:837 - Insufficient number of macrocells. The design needs at 
least 256 but only 144 left after allocating other resources.

Naja, im Labor haben wir nen Spartan 3, ich hoffe das passt dann.
Jetzt muss ich nurnoch meinem Prof klar machen, dass der mal nachdenken 
soll bevor er sich son Scheiß einfallen lässt :D

Vielen Dank erstmal!

PS: Hab gerade mal nachgeschaut, es sind sogar nur 3 Stunden 
Vorbereitung, die offiziell für ein solches Labor eingeplant sind.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fabian S. schrieb:
> Aber selbst der ist zu groß für meinen kleinen Test CPLD ;)
Vergiss das gleich wieder mit dem 95144er CPLD.
Diese Aufgabe bekommst du darin mit den paar Flipflops nie und nimmer 
gelöst.

von Fabian S. (jacky2k)


Lesenswert?

Hehe, hab ich nun auch gemerkt :D

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.