Menu
Coddy logo textTech

Operator konkatenacji

Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 27 z 90.

Operator konkatenacji { }</code łączy wiele sygnałów, stałych lub wyrażeń w jeden większy wektor. Używa się go, gdy trzeba połączyć bity, aby utworzyć szersze wartości.</p><h3>Jakie wartości można łączyć konkatenacją</h3><p>Możesz łączyć konkatenacją:</p><ul><li data-list-item-id="e3bae45a6a301702eb08c24847a21f825"><strong>Przewody i rejestry</strong>: dowolny sygnał</li><li data-list-item-id="ec1e77a5535b1757b38688ed5f00758d3"><strong>Stałe</strong>: liczby takie jak <code>4'b1010 lub 8'hFF

  • Wyrażenia: wyniki operacji takich jak a + b
  • Replikacje: powtarzanie wartości wielokrotnie

Wszystkie łączone wartości muszą mieć stałą, znaną szerokość.

Podstawowa składnia:  {value1, value2, value3, ...} Szerokość wyniku jest sumą szerokości poszczególnych wartości.

Przykłady

Połącz dwie 4-bitowe wartości w 8 bitów:

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

word = {high, low};     // high staje się górnymi 4 bitami, a low dolnymi 4 bitami

Połącz ze stałymi:

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

Połącz więcej niż dwa:

full = {a, b, c, d};   // All widths add up

Powielanie

Możesz powtórzyć wartość wiele razy, używając {n{value}}:

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

Jest to przydatne przy rozszerzaniu znaku:

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

Przykład kodu

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

Wynik:

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

Ważne uwagi

  • Kolejność ma znaczenie: {a, b} różni się od {b, a}
  • Wszystkie części muszą mieć stałe szerokości (bez liczb o nieokreślonej szerokości)
  • Konkatenacji można używać zarówno po lewej, jak i po prawej stronie przypisań
challenge icon

Wyzwanie

Zapisz poprawne wyrażenia konkatenacji dla każdego zadania.

Co zrobić:

  1. Połącz a i b w 8-bitowy wynik i zapisz go w combine1
  2. Połącz c, d i e w 12-bitowy wynik i zapisz go w combine2
  3. Połącz f i dwie kopie g w 12-bitowy wynik i zapisz go w combine3

Spróbuj swoich sił

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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator Verilog online