Hallo, ich habe zwei Fragen zu VHDL: 1) Ich muss eine Look-Up-Table bauen, rein geht ein 6 Bit-Vektor und raus soll ein unsigned kommen. Momentan habe ich das in eine Funktion getan und darin mit einem riesen case alle Kombinationen durch geeiert. Gibt es eine effizientere Möglichkeit? 2) Die Funktion soll einen unsigned-Wert mit 32 Bit zurück geben. Wenn ich nun allerdings ein return mit einer Zahl größer gleich 2^31 mache sagt er mir, dass die Zahl größer sei als integer'high (wenn ich mich recht entsinne). Warum integer? Das ist ein unsigned. Und wie kann ich ihn überreden dennoch so große Werte zu fressen?
Gast
#2299442
1) Ja, mit einem ROM, aber wenn Du alles korrekt beschrieben hast, baut er Dir auch aus cases ein solches (LUTs). Die flexible Beschreibung mit cases veranlasst die Synthese, die Terme zu optimieren. D.h. es wirk kleiner bei u.U. längerem Pfad. 2) cast Problem? - ohne code schwer zu beantworten.
1) Hmm joa ok, habe gerade gesehen, dass da ein Muster in den Zahen ist. Werde das heute Abend nochmal umschreiben und schauen ob er mehr/weniger Platz dafür braucht ;) 2) Hab das gerade nich da, ausm Kopf:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Wie gesagt, ist jetzt ausm Kopf. Wenn das nicht reicht, poste ich das heute Abend noch mal.
Gast
#2299488
Fabian S. schrieb: > when "000000" => return to_unsigned(4000000000, 32); Die 4000000000 ist zu groß für integer (−2.147.483.648 bis 2.147.483.647) und damit für die to_unsigned-Funktion. Du könntest es so schreiben:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Duke
Super, das hat schon mal funktioniert. @Gerald: Wenn ich das nun so gemacht habe wie ich es gemacht habe, baut er mir dann da so ein ROM draus? Oder gehts noch kompakter?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.