Verkettungsoperator
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 27 von 90.
Der Verkettungsoperator (Concatenation Operator) { } kombiniert mehrere Signale, constants oder Ausdrücke zu einem einzigen größeren Vektor. Er wird immer dann verwendet, wenn Sie bits miteinander verbinden müssen, um breitere Werte zu bilden.
Welche Werte funktionieren mit Bitverknüpfung
Sie können Folgendes verknüpfen:
- Wires und Regs — jedes Signal
- Konstanten — Zahlen wie
4'b1010oder8'hFF
- Ausdrücke — Ergebnisse von Operationen wie
a + b - Vervielfältigungen — Mehrfaches Wiederholen eines Wertes
Alle konkatenierten Werte müssen feste, bekannte Breiten haben.
Grundlegende Syntax: {value1, value2, value3, ...} Die Ergebnisbreite ist die Summe aller einzelnen Breiten.
Beispiele
Füge zwei 4-Bit-Werte zu 8 Bits zusammen:
reg [3:0] high, low;
reg [7:0] word;
word = {high, low}; // high wird zu den oberen 4 Bits, low zu den unteren 4Combine mit constants:
data = {4'b1010, 4'b0000}; // 8'b10100000Mehr als zwei kombinieren:
full = {a, b, c, d}; // Alle Breiten addieren sichReplikation
Du kannst einen Wert mit {n{value}} mehrfach wiederholen:
repeated = {4{4'b1010}}; // 16'b1010101010101010 (repeat 4 times)Dies ist nützlich für die Vorzeichenerweiterung (Sign Extension):
signed_8bit = {{4{sign_bit}}, value_4bit};Code-Beispiel
module concatenation_demo;
reg [3:0] upper, lower;
reg [7:0] combined;
reg [11:0] repeated;
initial begin
upper = 4'b1010;
lower = 4'b1100;
combined = {upper, lower}; // 10101100
repeated = {3{4'b1010}}; // 101010101010
$display("{upper, lower} = %b", combined);
$display("{3{4'b1010}} = %b", repeated);
$finish;
end
endmoduleAusgabe:
{upper, lower} = 10101100
{3{4'b1010}} = 101010101010Wichtige Hinweise
- Die Reihenfolge ist wichtig:
{a, b}unterscheidet sich von{b, a} - Alle Teile müssen feste Breite (
widths) haben (keine Zahlen ohne Größenangabe) - Verkettung kann sowohl auf der linken als auch auf der rechten Seite von Zuweisungen verwendet werden
Aufgabe
Schreiben Sie die richtigen Verkettungsausdrücke für jede Aufgabe.
Was zu tun ist:
- Kombinieren Sie
aundbzu einem 8-bit-Ergebnis und speichern Sie es incombine1 - Kombinieren Sie
c,dundezu einem 12-bit-Ergebnis und speichern Sie es incombine2 - Kombinieren Sie
fund zwei Kopien vongzu einem 12-bit-Ergebnis und speichern Sie es incombine3
Probier es selbst
module concatenation_challenge;
reg [3:0] a, b;
reg [3:0] c, d, e;
reg [3:0] f, g;
reg [7:0] combine1;
reg [11:0] combine2, combine3;
initial begin
a = 4'b1010;
b = 4'b0101;
c = 4'b1111;
d = 4'b0000;
e = 4'b1100;
f = 4'b1001;
g = 4'b0110;
combine1 = ______; // Combine a and b into an 8-bit result
combine2 = ______; // Combine c, d, and e into a 12-bit result
combine3 = ______; // Combine f and two copies of g into a 12-bit result
$display("{a, b} = %b", combine1);
$display("{c, d, e} = %b", combine2);
$display("{f, g, g} = %b", combine3);
$finish;
end
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen