Kann mir jemand den Unterschied zwischen: Test <= (Vektor1,Vektor2); und Test <= Vektor1 & Vektor2; erklären oder gibt es keinen ?
Gast
#388445
Letzteres ("&") ist syntaktisch korrekt,
ersteres nicht ,jedenfalls bricht die Synthese (XST) ab.
Sorry die Frage war nicht richtig so. - Element1, Element2 sollen vom Typ std_logic sein. - Vektor ist vom Tyo std_logic_vector ( 1 downto 0) Gibt es nun einen Unterschied zwischen Vektor <= (Element1, Element2); und Vektor <= Element1 & Element2;
Gast
#388447
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 | |
2 | |
hast, kannst Du mit dem &-Operator ein DW (oder Vektor) aus beiden "verkettenten" DW vom Typ
1 | |
2 | |
zusammenbauen..... Gruß Tom
Gast
#2395939
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
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
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.