[Verilog 문법] 1.3 숫자 리터럴, 컴파일 지시어

YUN·2026년 1월 21일

디지털 회로 설계

목록 보기
4/20
post-thumbnail

1. 상수

변하지않는 고정된 값

Verilog에서 상수는 코드 내에서 사용하는 고정된 숫자 값이다.

회로의 비트폭, 초기값, 설정값등을 지정할 때 사용한다.

2. 숫자 리터럴

코드에 직접 쓰는 숫자 표현

Verilog에는 숫자를 표현하는 고유한 문법이 존재한다.

비트폭 ' [s] 진법  값
  │     │  │   │
  │     │  │   └── 실제 숫자(값)
  │     │  └────── 진법 표시 (b, o, d, h)
  │     └───────── signed/unsigned (s 가 있으면 signed, 없으면 unsigned)
  └─────────────── 몇 비트인지(크기)

위와 같은 문법으로 숫자를 표현한다

(1) 예시

8'b1010_0011    // 8비트, 2진법: 10100011 (8비트로 표현 가능)
8'o243          // 8비트, 8진법: 243₈ = 163₁₀ (0b010100011 이므로 8비트로 표현 가능)
8'd163          // 8비트, 10진법: 163 (0b10100011 이므로 8비트로 표현 가능)
8'hA3           // 8비트, 16진법: A3₁₆ = 163₁₀ (0b10110011 이므로 8비트로 표현 가능)
15 				// 진법을 생략한 경우, 자동으로 10진수 32비트로 해석된다.

(2) Underscore로 가독성을 높일 수 있다.

Verilog에서 Unerscore는 가독성만을 위한 것이고, 값에 주는 영향은 없다.

보통 4비트씩 언더스코어(_)로 끊어서 표현하여 가독성을 높인다.

// 읽기 어려움
32'b10110100111010001111000011001010

// 읽기 쉬움 (4비트씩 구분)
32'b1011_0100_1110_1001_1111_0000_1100_1010

// 16진법은 보통 4자리씩
32'hDEAD_BEEF

(3) x,z도 축약 표현이 가능하다

8'hxx       // = 8'bxxxx_xxxx (8비트 모두 x)
8'hzz       // = 8'bzzzz_zzzz (8비트 모두 z)
8'h0z       // = 8'b0000_zzzz

x,z와 같은 경우에도 위와 같이 축약된 표현이 가능하다.

(4) 음수 표현

Verilog에서 음수는 아래와 같이 표현한다

-8'sd5       // ✅ 올바름: -5를 8비트로 (2의 보수: 8'b1111_1011)
8'-d5       // ❌ 문법 오류! 부호는 맨 앞에

헷갈리기 쉬운 포인트가, 부호를 숫자 앞이 아니라 진수 표현 바로 앞, 즉 숫자 리터럴의 가장

앞에 적어줘야한다.

3. 컴파일 지시어

컴파일 지시어는 컴파일 시점에 실행되는 코드이다. (Runtime에 실행되는 코드가 아니다)

(1) 매크로 정의, 해제: `define,`undef

`define으로 매크로(=텍스트 치환)를 정의하고, `undef로 기존에 정의한 매크로 정의를 해제할 수 있다.

문법은 아래와 같다

`define WIDTH 32
`define ADD(a,b) ((a)+(b))
`undef WIDTH

define 뒤에 값을 쓰지않고

`define FPGA

이런식으로만 매크로의 이름만 쓸 수도 있다.

(2) 헤더 복붙: `include

C언어의 include와 동일하다. 현재 파일에 헤더 파일을 복붙하는 역할을 수행한다.

문법은 아래와 같다

`include "defs.vh"

(3) 조건부 컴파일: `ifdef, `ifndef, `elsif, `else, `endif

마찬가지로 C언어와 동일하다.

특정 매크로가 정의되어 있으면/없으면 코드 블럭을 선택적으로 컴파일하는 기능이다.

문법은 아래와 같다.

`ifdef FPGA
  // FPGA용 코드
`elsif ASIC
  // ASIC용 코드
`else
  // 기본
`endif

마지막에 `endif 를 꼭 적어줘야한다.

(4) 시뮬레이션 시간 단위 : `timescale

# 10 과 같은 시간 지연의 단위를 정할때 사용하는 컴파일 지시어이다.

문법은 아래와 같다.

`timescale 1ns/1ps

여기서 앞은 time unit이고 뒤는 time precison(시간 정밀도=카운트하는 단위) 이다.

코드의 최상단에 적어주면된다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글