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?
Gast
#574879
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).
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?
Gast
#575127
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.
Danke, dann werd ich mal ein find and replace machen, meinem Entwurf ist es egal...
Gast
#576043
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
Gast
#576046
downto MSB(links) ------ LSB(rechts)
to LSB(links) ------ MSB(rechts)
Gast
#576050
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.
Gast
#576256
danke für antwort Matthias! ich habs bis jetzt auch immer so gemacht, mich aber nur gewundert, warum es funktioniert :)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.