range direction in VHDL

OP #3900050
Lesenswert?

hi

ich habe ein einfaches problem und zwar möchte ich entweder mit dem 
code:
1
data_out(4 to 7) <= "1000";

oder dem code:
1
 data_out(0 to 3) <= data_in(0 to 3);

(beide zusammen ein 8 bit großen bus beschreiben.

Deklaration:
1
signal data_in   : std_logic_vector(3 downto 0);
2
data_out          : out std_logic_vector(7 downto 0);

einfach nur die bits ausgeben, aber altera mag das einfach nicht.

Fehler: Error (10484): VHDL error at ...: range direction of object 
slice must be same as range direction of object


warum?
Gast #3900065
Lesenswert?

Max K. schrieb:
> data_out(4 to 7) <= "1000";
...
> data_out          : out std_logic_vector(7 downto 0);

to und downto passen da einfach nicht zusammen.

Es klappt nur, wenn Du auf einzelne Bits zugreifst:
1
data_out(4) <= '1';
2
data_out(5) <= '0';
3
data_out(6) <= '0';
4
data_out(7) <= '0';
oder die Richtung änderst:
1
data_out(7 downto 4) <= "0001";

Duke
Moderator (Firma: Titel) Persönliche Seite #3900129
Lesenswert?

Es ist sowieso sinnvoll, solche Bithaufen mit downto zu deklarieren. 
Denn nur so ist das Bit 0 das am weitesten rechts sitzende Bit, wie man 
es von jedem Register und Prozessor kennt...

Tricksereien wie ich sie dort gemacht habe müssen unbedingt die Ausnahme 
bleiben und dokumentiert werden:
http://www.lothar-miller.de/s9y/archives/63-RC-5-Empfaenger.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