Forum: FPGA, VHDL & Co. std_logic_vector Definition


von Der A. (vimes_ankh)


Lesenswert?

Vielleicht eine sehr dumme Frage:
Ist es egal ob ich ein Signal so

signal vektor : std_logic_vector(0 to 31);

oder so

signal vektor : std_logic_vector(0 downto 31);

deklariere? Wenn nicht, was ist der Unterschied?

von Matthias (Gast)


Lesenswert?

der Unterschied ist, dass 0 downto 31 eine Fehlermeldung erzeugen wird.
Du meinst vermutlich 31 downto 0.

Der Unterschied wäre dann wie folgt:
Angemommen dein vektor wäre:
vektor <= x"80000000";
dann bekommst du bei (0 to 31) mit vektor(0) die 1 (was am weitesten 
links steht), und bei (31 downto 0) die 0 (steht am weitesten rechts).

von Der A. (vimes_ankh)


Lesenswert?

Vielen Dank für die Antwort. Bedeutet das auch, dass wenn ich das Signal 
auf ein register lege und dieses extern auslese die Reihenfolge anders 
ist? oder gilt das nur für den Zugriff innerhalb der vhdl-Datei?

von Frank (Gast)


Lesenswert?

Wenn es sich irgendwie vermeiden lässt, kein "to" für die 
vektordeklaration verwenden. Standard ist "downto". Einfacher Grund: Bei 
downto ist die Wertigkeit = 2**index. AFAIK arbeiten auch alle 
conversion routines nach dieser Konvention.

von Der A. (vimes_ankh)


Lesenswert?

Danke, dann werd ich mal ein find and replace machen, meinem Entwurf ist 
es egal...

von Kalle (Gast)


Lesenswert?

hallo zusammen,

hat noch jemand eine antwort auf die letzte frage?

"Bedeutet das auch, dass wenn ich das Signal auf ein register lege und 
dieses extern auslese die Reihenfolge anders ist? oder gilt das nur für 
den Zugriff innerhalb der vhdl-Datei?"

blöderweise kommen sämtliche deklarationen aus EDK mit "to" heraus (wenn 
man z.b. einen microblaze-kern als submodule in ISE verwendet)...

grüße, kalle

von Artur Funk (Gast)


Lesenswert?

downto MSB(links) ------ LSB(rechts)
    to LSB(links) ------ MSB(rechts)

von Matthias (Gast)


Lesenswert?

ne, muss nicht. Beim Microblaze und OPB wird 0 to 31 verwendet.
Dabei ist aber 31 das niederwertigste Bit und 0 das höchstwertigste.

Etwas seltsam, hat aber einen Vorteil: Man kann einen normalen 31 downto 
0 Vektor (mit 0 als niederwertigem Bit) direkt zuweisen.
Beispiel

signal Bus2IP_ArData : std_logic_vector(0 to 31);
signal IP2Bus_ArData : std_logic_vector(0 to 31);

signal meinInternesSignal : std_logic_vector(31 downto 0);

meinInternesSignal <= Bus2IP_ArData;
IP2Bus_ArData <= meinInternesSignal;

In beiden Fällen zählt hier jedenfalls das Bit was am meisten rechts ist 
als niederwertigstes Bit, auch wenns in manchen Fällen Bit 31 und in den 
anderen Bit 0 ist.

Ich selbst verwende in meiner iegenen Logik eigentlich nur downto, 
erscheint mir irgendwie logischer. Bei den OPB Sachen weiße ich die 
einfach nem temporären downto Vektor zu (s.o.) und behandle die auch so, 
funktioniert bestens.

von Kalle (Gast)


Lesenswert?

danke für antwort Matthias!
ich habs bis jetzt auch immer so gemacht, mich aber nur gewundert, warum 
es funktioniert :)

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.