Menu
Coddy logo textTech

Concatenation Operator

Fait partie de la section Fondamentaux du Journey Verilog de Coddy. Leçon 27 sur 90.

L’opérateur de concaténation { } combine plusieurs signaux, constantes ou expressions en un seul vecteur plus grand. Il est utilisé chaque fois que vous devez joindre des bits pour former des valeurs plus larges.

Quelles valeurs fonctionnent avec la concaténation

Vous pouvez concaténer :

  • Wires et regs : n’importe quel signal
  • Constants : des nombres comme 4'b1010 ou 8'hFF
  • Expressions : résultats d’opérations comme a + b
  • Réplications : répétition d’une valeur plusieurs fois

All les valeurs concaténées doivent avoir des largeurs fixes et connues.

Syntaxe de base : {value1, value2, value3, ...} La largeur du résultat est la somme de toutes les largeurs individuelles.

Exemples

Combiner deux valeurs de 4 bits en 8 bits :

reg [3:0] high, low;
reg [7:0] word;

word = {high, low};     // high devient les 4 bits de poids fort, low devient les 4 bits de poids faible

Combiner avec des constantes :

data = {4'b1010, 4'b0000};   // 8'b10100000

Combiner plus de two :

full = {a, b, c, d};   // Toutes les largeurs s'additionnent

Réplication

Vous pouvez répéter une valeur plusieurs fois à l’aide de {n{value}} :

repeated = {4{4'b1010}};   // 16'b1010101010101010 (repeat 4 times)

C’est utile pour l’extension de signe :

signed_8bit = {{4{sign_bit}}, value_4bit};

Exemple de code

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
endmodule

Sortie :

{upper, lower} = 10101100
{3{4'b1010}} = 101010101010

Notes importantes

  • L’ordre compte : {a, b} est différent de {b, a}
  • Toutes les parties doivent avoir des largeurs fixes (aucun nombre sans taille)
  • La concaténation peut être utilisée des deux côtés d’une affectation
challenge icon

Défi

Écrivez les expressions de concaténation correctes pour chaque tâche.

À faire :

  1. Combinez a et b en un résultat de 8 bits et stockez-le dans combine1
  2. Combinez c, d et e en un résultat de 12 bits et stockez-le dans combine2
  3. Combinez f et deux copies de g en un résultat de 12 bits et stockez-le dans combine3

Essayez vous-même

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
endmodule
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux

Entraînez-vous par vous-même : Compilateur Verilog en ligne