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, constantes ou expressions en un seul vecteur plus large. Il est utilisé chaque fois que vous avez besoin de joindre des bits ensemble pour former des valeurs plus larges.

Quelles valeurs fonctionnent avec la concaténation

Vous pouvez concaténer :

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

Toutes 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 deux :

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

Réplication

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

repeat = {4{4'b1010}};   // 16'b1010101010101010 (répété 4 fois)

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

Notes importantes

  • L'ordre est important : {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 sur les côtés gauche et droit des affectations
challenge icon

Défi

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

Ce qu'il faut 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

Aide-mémoire

L'opérateur de concaténation { } assemble des bits pour former un vecteur plus large. Largeur du résultat = somme de toutes les largeurs individuelles.

// Basic: {value1, value2, ...}
reg [3:0] high, low;
reg [7:0] word;
word = {high, low};  // high = bits de poids fort, low = bits de poids faible

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

La réplication {n{value}} répète une valeur n fois :

repeated = {3{4'b1010}};              // 12'b101010101010
signed_8bit = {4{sign_bit}, val_4b};  // extension de signe

Règles clés :

  • L'ordre est important : {a, b}{b, a}
  • Toutes les parties doivent avoir des largeurs fixes et connues
  • Peut être utilisé des deux côtés des affectations

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