integer range zu bit

Gast #3160190
Lesenswert?

Ich mache gerade die ersten schritte in vhdl und hätt da gleich mal eine 
Frage.
Das Beispiel der blinkenden Led verwendet als variable
signal c : integer range 0 to 4000000
Nun würde ich dieses c gerne auf Ausgangspins umleiten um es an Leds 
sichtbar zu machen.
Um das auf bits umzusplitten sagt mein Buch müsste die Variable als 
std_logic_vector(4 downto 0) geschrieben werden.

Jetzt bin ich etwas durcheinander. Jemand mal nen tipp?

Und bitte Tutorials lesen und lehrnen bin ich gerade bei :)
Gast #3160252
Lesenswert?

Du musst einfach einen Cast oder mehrere auf deine Signale machen.
Man kann nicht einfach einen Integer auf einen Pin ausgeben, sondern 
muss den vorher in einen anderen Datentp "wandeln".
Dieses Wandeln nennt man casting.

Es kann auch eventuell erforderlich sein, einen Datentyp über einen 
"Zwischenschritt" zu casten, wenn es von dem einen keinen direkten Cast 
in einen anderen gibt.
Also z.B. von integer nach unsigned und dann von unsigned nach 
std_logic_vector..

Wie die casts im Einzelnen funktionieren, findest du im Internet.. 
einfach mal "vhdl casting" googeln

in deinem Beispiel kann der Integer Werte von 0... 4 000 000 umfassen.
Dazu bedarf es 22 Bit (2 ^22 = 4 194 304)
Daraus machst du einen unsigned der Länge 22 Bit über den Cast:

to_unsigned(c,22)

Diesen unsigned kannst du dann zu std_logic_vetor casten, so dass am 
Ende das bei raus kommt:

zielvektor <= std_logic_vector(to_unsigned(c,22));

Wie du siehst, muss der Zielvektor std_logic_vector(21 downto 0) sein, 
um damit das komplette c darstellen zu können. (4 downto 0) wäre viel zu 
klein...
Moderator (Firma: Titel) Persönliche Seite #3160253
Lesenswert?

Ich würde hier eher einen Vorteiler machen, der den Zählimpuls aus den 
40 MHz herunter teilt, und dann einen unsigned Vektor mit 5 Bit 
hochzählen, und den dann auf die Ports ausgeben...

Ich empfehle übrigens, auch gleich mal so eine simple Sache zu 
simulieren. Das ist gar nicht so kompliziert. Siehe auch dort: 
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren