mikrocontroller.net

Forum: FPGA, VHDL & Co. VHDL: Unterschied Aggregat und Concatenation Operator &


Autor: Christof Christof (risto)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir jemand den Unterschied zwischen:

Test <= (Vektor1,Vektor2);

und

Test <= Vektor1 & Vektor2;

erklären oder gibt es keinen ?

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Letzteres ("&") ist syntaktisch korrekt,
ersteres nicht ,jedenfalls bricht die Synthese (XST) ab.

Autor: Christof Christof (risto)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
DW1 ... std_logic_vector(n DOWNTO 0)
DW2 ... std_logic_vector(m DOWNTO 0)
hast, kannst Du mit dem &-Operator ein DW (oder Vektor) aus beiden
"verkettenten" DW vom Typ
DW <= DW1 & DW2 .... std_logic_vector(n DOWNTO 0) & std_logic_vector(m
DOWNTO 0)
zusammenbauen.....

Gruß
Tom

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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';

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.