Menu
Coddy logo textTech

Opérateur de concaténation

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, constants, ou expressions en un seul vecteur plus large. 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 :

  • Des wires et des regs — n'importe quel signal
  • Des constantes — des nombres comme 4'b1010 ou 8'hFF
  • Expressions — résultats d'opérations comme a + b
  • Répétitions — répéter une valeur plusieurs fois

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

Saxe 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 supérieurs, low devient les 4 bits inférieurs

Combine with constants:

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

Combiner plus de deux :

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

Replication

Vous pouvez répéter une valeur plusieurs fois en utilisant {n{value}} :

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

Ceci 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

Remarques importantes

  • L'ordre importe : {a, b} est différent de {b, a}
  • Toutes les parties doivent avoir des largeurs fixes (pas de nombres sans taille)
  • La concaténation peut être utilisée à la fois sur le côté gauche et le côté droit des affectations
challenge icon

Défi

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

À faire :

  1. Combinez a et b dans un résultat de 8-bit et stockez-le dans combine1
  2. Combinez c, d, et e dans un résultat de 12-bit et stockez-le dans combine2
  3. Combinez f et deux copies de g dans un résultat de 12-bit 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