Concatenation Operator
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 27 von 90.
Der Verkettungsoperator { } kombiniert mehrere Signale, constants oder Ausdrücke zu einem einzigen größeren Vektor. Er wird immer dann verwendet, wenn du bits zusammenfügen musst, um breitere Werte zu bilden.
Welche Werte mit der Verkettung funktionieren
Du kannst Folgendes verketten:
- Leitungen und Register: jedes Signal
- Konstanten: Zahlen wie
4'b1010oder8'hFF
- Ausdrücke: Ergebnisse von Operationen wie
a + b - Replikationen: einen Wert mehrfach wiederholen
Alle verketteten Werte müssen feste, bekannte Breiten haben.
Grundlegende Syntax: {value1, value2, value3, ...} Die Breite des Ergebnisses ist die Summe aller einzelnen Breiten.
Beispiele
Zwei 4-Bit-Werte zu 8 Bits kombinieren:
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'b10100000Mehr als zwei kombinieren:
full = {a, b, c, d}; // Alle Breiten addieren sichReplikation
Du kannst einen Wert mithilfe von {n{value}} mehrfach wiederholen:
repeated = {4{4'b1010}}; // 16'b1010101010101010 (repeat 4 times)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)
- Konkatenation kann sowohl auf der linken als auch auf der rechten Seite von Zuweisungen verwendet werden
Aufgabe
Schreibe die korrekten Konkatenationsausdrücke für jede Aufgabe.
Was zu tun ist:
- Combine
aundbin ein 8-bit result und speichere es incombine1 - Combine
c,dundein ein 12-bit result und speichere es incombine2 - Combine
fund zwei copies vongin ein 12-bit result und speichere 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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler