Menu
Coddy logo textTech

결합 연산자

Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 27번째.

결합 연산자 { }는 여러 신호, 상수 또는 표현식을 하나의 더 큰 벡터로 결합합니다. 이는 비트들을 서로 연결하여 더 넓은 값을 형성해야 할 때마다 사용됩니다.

결합(Concatenation)에 사용할 수 있는 값

다음과 같은 값들을 결합할 수 있습니다:

  • Wires 및 regs — 모든 신호
  • 상수4'b1010 또는 8'hFF와 같은 숫자
  • 표현식a + b와 같은 연산의 결과
  • 복제 — 값을 여러 번 반복하는 것

연결된 모든 값은 고정된 알려진 너비를 가져야 합니다.

기본 구문:  {value1, value2, value3, ...} 결과 너비는 모든 개별 너비의 합계입니다.

예제

두 개의 4비트 값을 8비트로 결합하기:

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

word = {high, low};     // high는 상위 4비트가 되고, low는 하위 4비트가 됩니다

상수와 결합:

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

2개 이상 결합:

full = {a, b, c, d};   // 모든 너비가 합산됨

복제

{n{value}}를 사용하여 값을 여러 번 반복할 수 있습니다:

repeat = {4{4'b1010}};   // 16'b1010101010101010 (4번 반복)

이는 부호 확장에 유용합니다:

signed_8bit = {4{sign_bit}, value_4bit};

코드 예제

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

출력:

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

중요 참고 사항

  • 순서가 중요합니다: {a, b}{b, a}와 다릅니다
  • 모든 부분은 고정된 너비를 가져야 합니다 (크기가 지정되지 않은 숫자 제외)
  • 결합(Concatenation)은 할당문의 왼쪽과 오른쪽 모두에서 사용할 수 있습니다
challenge icon

챌린지

각 작업에 대해 올바른 결합(concatenation) 표현식을 작성하세요.

수행할 작업:

  1. ab를 결합하여 8비트 결과를 만들고 combine1에 저장하세요.
  2. c, d, e를 결합하여 12비트 결과를 만들고 combine2에 저장하세요.
  3. f와 두 개의 g를 결합하여 12비트 결과를 만들고 combine3에 저장하세요.

치트 시트

결합 연산자(concatenation operator) { }는 비트들을 하나로 묶어 더 넓은 벡터로 만듭니다. 결과의 너비는 개별 너비들의 합과 같습니다.

// Basic: {value1, value2, ...}
reg [3:0] high, low;
reg [7:0] word;
word = {high, low};  // high = upper bits, low = lower bits

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

반복(Replication) {n{value}}는 값을 n번 반복합니다:

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

주요 규칙:

  • 순서가 중요합니다: {a, b}{b, a}
  • 모든 부분은 고정되고 알려진 너비를 가져야 합니다
  • 할당문의 양쪽 모두에서 사용할 수 있습니다

직접 해보기

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 icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨