VHDL: Unterschied Aggregat und Concatenation Operator &

Gast #388447
Lesenswert?
• ▲
▼
Hallo Christof,

mE wird der Concatenate-Operator auch genutzt, um aus verschiedenen
Vektoren wieder einen Vektor zusammenzusetzen (zu "verketten" => to
concatenate)...

....sprich, wenn du zB 2 Datenwörter vom Typ
1
DW1 ... std_logic_vector(n DOWNTO 0)
2
DW2 ... std_logic_vector(m DOWNTO 0)
hast, kannst Du mit dem &-Operator ein DW (oder Vektor) aus beiden
"verkettenten" DW vom Typ
1
DW <= DW1 & DW2 .... std_logic_vector(n DOWNTO 0) & std_logic_vector(m
2
DOWNTO 0)
zusammenbauen.....

Gruß
Tom
Gast #2395939
Lesenswert?
• ▲
▼
Der Beitrag ist zwar schon uralt, aber trotzdem:

a <= (b, c);

und

a <= (b, c);

sind gleichbedeutend wenn z.B.

a  ein signal vom type std_logic_vector(7 downto 0) und
b,c ein signal vom type std_logic_vector (3 downto 0) ist.

ferner kann bei einem aggregat folgendes gemacht werden:

a <= (b, others => '0');

mit einer "concatenation" geht das nicht. folgendes ist ungültig:

a <= b & (others => '0');

also lieber auf das '&' verzichten !

Mark
Moderator (Firma: Titel) Persönliche Seite #2395986
Lesenswert?
• ▲
▼
Mark schrieb:
> a <= (b, c);
> und
> a <= (b, c);
> sind gleichbedeutend
Das möchte ich aber auch hoffen... ;-)

Was kommt da raus wenn die Typen so sind:
a  ein signal vom type std_logic_vector (7 downto 0)
b  ein signal vom type std_logic_vector (3 downto 0)
c  ein signal vom type std_logic_vector (7 downto 4)
a <= (b, c);
a <= b & c;

> also lieber auf das '&' verzichten !
Nur dort, wo es Sinn macht.
Bei der "impliziten" By-Order-Aggregat-Zuweisung könnten für den 
ungeübten Betrachter noch ein oder zwei Fragen offen bleiben...  :-/
Mit dem & Operator sehe ich sofort, was wo im Vektor steht.

Es ist eine Frage der Gewohnheit, aber häufiger als das Aggregat wird 
noch immer die Concatenation verwendet.

Ein Schieberegister sieht so etwas ungewöhnlich aus:
a <= (a(6 downto 0),'0');

Das ist die "übliche" (und m.E. übersichtlichere) Form:
a <= a(6 downto 0) & '0';
Gast #2396023
Lesenswert?
• ▲
▼
mein Fehler ! gemeint war:

a <= (b, c);
und
a <= b & c;

Lothar Miller schrieb:
> Was kommt da raus wenn die Typen so sind:
> a  ein signal vom type std_logic_vector (7 downto 0)
> b  ein signal vom type std_logic_vector (3 downto 0)
> c  ein signal vom type std_logic_vector (7 downto 4)
> a <= (b, c);
> a <= b & c;
jeweils:
a = [ b3, b2, b1, b0, c7, c6, c5, c4 ]

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