Verkettungsoperator
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 27 von 90.
Der Verkettungsoperator { } kombiniert mehrere Signale, Konstanten oder Ausdrücke zu einem einzigen größeren Vektor. Er wird immer dann verwendet, wenn Bits zusammengefügt werden müssen, um breitere Werte zu bilden.
Welche Werte funktionieren mit Verkettung
Sie können Folgendes verketten:
- Wires und Regs — jedes Signal
- Konstanten — Zahlen wie
4'b1010oder8'hFF
- Ausdrücke — Ergebnisse von Operationen wie
a + b - Replikationen — das mehrfache Wiederholen eines Wertes
Alle verketteten Werte müssen feste, bekannte Breiten haben.
Grundlegende Syntax: {value1, value2, value3, ...} Die Ergebnisbreite ist die Summe aller Einzelbreiten.
Beispiele
Kombinieren Sie zwei 4-Bit-Werte zu 8 Bit:
reg [3:0] high, low;
reg [7:0] word;
word = {high, low}; // high wird zu den oberen 4 Bits, low zu den unteren 4Mit Konstanten kombinieren:
data = {4'b1010, 4'b0000}; // 8'b10100000Kombiniere mehr als zwei:
full = {a, b, c, d}; // Alle Breiten addieren sichReplikation
Sie können einen Wert mehrmals wiederholen, indem Sie {n{value}} verwenden:
repeat = {4{4'b1010}}; // 16'b1010101010101010 (4-mal wiederholen)Dies ist nützlich für die Vorzeichenerweiterung:
signed_8bit = {4{sign_bit}, value_4bit};Codebeispiel
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 Breiten 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 korrekten 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
Spickzettel
Der Verkettungsoperator { } fügt Bits zu einem breiteren Vektor zusammen. Die Ergebnisbreite entspricht der Summe aller Einzelbreiten.
// Basic: {value1, value2, ...}
reg [3:0] high, low;
reg [7:0] word;
word = {high, low}; // high = obere Bits, low = untere Bits
// Mit Konstanten
data = {4'b1010, 4'b0000}; // 8'b10100000
Replikation {n{value}} wiederholt einen Wert n-mal:
repeated = {3{4'b1010}}; // 12'b101010101010
signed_8bit = {4{sign_bit}, val_4b}; // Vorzeichenerweiterung (sign extension)
Wichtige Regeln:
- Die Reihenfolge ist wichtig:
{a, b}≠{b, a} - Alle Teile müssen feste, bekannte Breiten haben
- Kann auf beiden Seiten von Zuweisungen verwendet werden
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