크기가 지정되지 않은 숫자
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 15번째.
Unsized 수(number)는 몇 bit인지 지정하지 않고 작성된 수입니다. 크기 접두사 없이 수를 작성하면, Verilog는 기본적으로 32 bits로 간주합니다.
a = 'b1010; // Unsized: Verilog treats this as 32 bits
a = 32'b1010; // 위와 동일하지만 명시적크기가 지정되지 않은(Unsized) 숫자 표현 방식은 포맷과 값만 사용합니다: [format][value]
<strong>format</strong>— 진법 진수: 2진수는b, 10진수는d, 16진수는h, 8진수는o<strong>value</strong>— 실제 숫자값 (예:1010)
형식과 값 사이에 아포스트로피 '가 여전히 필요하지만, 그 앞에 비트 수가 붙지 않습니다.
'b1010— 32비트 2진수 1010'd255— 32비트 10진수 255'hFF— 32비트 16진수 FF'b1— 32비트 2진수 1 (앞에 31개의 0이 붙음)
코드 예제:
reg [7:0] data;
initial begin
data = 1010; // Unsized: 32비트 값 (경고를 유발할 수 있음)
data = 'd255; // Unsized: 32-bit decimal 255
data = 'hFF; // Unsized: 32비트 16진수 FF
endUnsized vs Sized
| Unsized | Sized | |
|---|---|---|
| Example | 1010 or 'd255 | 8'b1010 or 8'd255 |
| Bit width | 32 bits (기본값) | explicit (지정된 대로) |
| Apostrophe | 포맷과 함께 사용 시 필수 | 필수 |
| When to use | 간단한 테스트벤치 코드 | 하드웨어 할당 |
Potential Problem
Unsized numbers는 더 작은 레지스터에 할당될 때 예상치 못한 동작을 cause할 수 있습니다:
reg [3:0] small;
small = 'b1111; // 32-bit value, but fits in 4 bits (fine)
small = 'b10000; // 32비트 값, 하지만 너무 큼! (경고)두 번째 예제는 32-bit 값인 10000을 4-bit 레지스터에 할당합니다. 하위 4 bits만 유지되며(0000), 이는 예상한 것과 다를 수 있습니다(may).
Unsized 번호를 사용해야 하는 경우
Unsized 번호는 다음에 유용합니다:
- 테스트벤치의 단순한 숫자
- 루프 카운터
$display문
실제 하드웨어 할당의 경우, 명확하게 의도를 나타내고 경고를 방지하기 위해 sized 수치를 사용하세요.
챌린지
아래 코드에서 일부 숫자는 크기가 지정되지 않은 unsized 숫자입니다. 경고를 방지하기 위해 8 bits 크기를 지정한 sized 숫자로 변경하세요.
수행할 작업:
a를 1010에 대한 8-bit binary 수로 Change하세요.b를 255에 대한 8-bit decimal 수로 Change하세요.c를 FF에 대한 8-bit hex 수로 Change하세요.
직접 해보기
module unsized_challenge;
reg [7:0] a, b, c;
initial begin
a = 'b1010; // Change to sized (8-bit binary)
b = 'd255; // 크기가 지정된 것으로 변경 (8비트 십진수)
c = 'hFF; // Change to sized (8-bit hex)
$display("a = %b", a);
$display("b = %b", b);
$display("c = %b", c);
$finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.