Menu
Coddy logo textTech

크기가 지정되지 않은 숫자

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

크기가 지정되지 않은 숫자(unsized number)는 몇 비트인지 명시하지 않고 작성된 숫자입니다. 크기 접두사 없이 숫자를 작성하면, Verilog는 기본적으로 이를 32비트로 간주합니다.

a = 'b1010;        // 크기 미지정: Verilog는 이를 32비트로 처리합니다
a = 32'b1010;    // 위와 동일하지만, 명시적입니다

크기가 지정되지 않은 숫자는 형식과 값만 사용합니다: [format][value]

  • <strong>format</strong> — 숫자의 진법: 2진수는 b, 10진수는 d, 16진수는 h, 또는 8진수는 o
  • <strong>value</strong> — 실제 숫자 (예: 1010)

아포스트로피 '는 형식과 값 사이에 여전히 필요하지만, 그 앞에는 비트 수가 없습니다.

  • 'b1010 — 32비트 이진수 1010
  • 'd255 — 32비트 십진수 255
  • 'hFF — 32비트 16진수 FF
  • 'b1 — 32비트 이진수 1 (앞에 31개의 0이 붙음)

코드 예제:

reg [7:0] data;

initial begin
  data = 1010;      // 크기가 지정되지 않음: 32비트 값 (경고가 발생할 수 있음)
  data = 'd255;     // 크기가 지정되지 않음: 32비트 10진수 255
  data = 'hFF;      // 크기가 지정되지 않음: 32비트 16진수 FF
end

크기 미지정(Unsized) vs 크기 지정(Sized)

 크기 미지정 (Unsized)크기 지정 (Sized)
예시1010 또는 'd2558'b1010 또는 8'd255
비트 폭32비트 (기본값)명시적 (지정된 대로)
아포스트로피형식 지정 시 필수필수
사용 시기간단한 테스트벤치 코드하드웨어 할당

잠재적인 문제

크기가 지정되지 않은 숫자를 더 작은 레지스터에 할당할 때 예기치 않은 동작이 발생할 수 있습니다:

reg [3:0] small;
small = 'b1111;      // 32비트 값이나, 4비트에 맞음 (정상)
small = 'b10000;     // 32비트 값이나, 너무 큼! (경고)

두 번째 예제는 32비트 값 10000을 4비트 레지스터에 할당합니다. 하위 4비트만 유지되며(0000), 이는 예상과 다를 수 있습니다.

크기가 지정되지 않은 숫자를 사용하는 경우

크기가 지정되지 않은 숫자는 다음과 같은 경우에 편리합니다:

  • 테스트벤치의 단순한 숫자들
  • 루프 카운터
  • $display

실제 하드웨어 할당 시에는, 명시적으로 표현하고 경고를 피하기 위해 크기가 지정된 숫자(sized numbers)를 사용하십시오.

challenge icon

챌린지

아래 코드에서 일부 숫자의 크기가 지정되지 않았습니다. 경고를 피하기 위해 이 숫자들을 크기가 지정된 숫자(8비트)로 변경하세요.

수행할 작업:

  1. a를 1010에 대한 8비트 2진수로 변경하세요.
  2. b를 255에 대한 8비트 10진수로 변경하세요.
  3. c를 FF에 대한 8비트 16진수로 변경하세요.

치트 시트

Verilog에서 크기가 지정되지 않은 숫자(Unsized numbers)는 기본적으로 32비트입니다. 구문: '[format][value]

'b1010   // 32비트 이진수
'd255    // 32비트 십진수
'hFF     // 32비트 16진수

크기가 지정된 숫자(Sized numbers)[bits]'[format][value]를 사용합니다:

8'b1010  // 8비트 이진수
8'd255   // 8비트 십진수
8'hFF    // 8비트 16진수

크기가 지정되지 않은 숫자를 더 작은 레지스터에 할당하면 하위 비트만 유지됩니다. 경고 및 예기치 않은 잘림을 방지하려면 하드웨어 할당 시 크기가 지정된 숫자를 사용하십시오.

직접 해보기

module unsized_challenge;
  reg [7:0] a, b, c;
  
  initial begin
    a = 'b1010;      // Change to sized (8-bit binary)
    b = 'd255;     // 크기가 지정된 형식(8비트 10진수)으로 변경
    c = 'hFF;      // Change to sized (8-bit hex)
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("c = %b", c);
    $finish;
  end
endmodule
quiz icon실력 점검

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

기초의 모든 레슨