스킬캠퍼스

오늘 끝나면

HDL과 FPGA

  • HDL과 FPGA의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 HDL과이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

시각 회로를 HDL로 — testbench로 검증 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

반도체 설계 · 39

HDL과
FPGA

지금까지 회로를 그림으로 봤다.
HDL은 그 회로를 글로 적는다. 하드웨어를 코드로 적는다.
FPGA는 그 코드를 재구성 가능한 칩에 올려 진짜로 돌린다.

P.01반도체 설계 · 39

하드웨어를 코드로, HDL

지금까지 게이트·가산기·ALU를 그림으로 그렸다. 칩 한 장에 수십억 게이트면 손으로 못 그린다.

그래서 회로를 글로 적는다. 이 글을 HDL(Hardware Description Language)이라 한다.
대표는 VerilogVHDL이다. 둘 다 회로를 묘사하는 언어다.

중요한 건 HDL이 보통 프로그램과 다르다는 점이다.
소프트웨어 코드는 위에서 아래로 한 줄씩 실행된다.
HDL은 실행이 아니라 회로를 묘사한다. 적은 게이트들이 동시에 존재하고 동시에 동작한다.
xor g0 (x1, a, b)한 줄은 “XOR 게이트 하나가 a·b를 받아 x1을 낸다”는 부품 선언이다.

시각 회로 ↔ Verilog 한 줄씩
시각 회로 ↔ Verilog, 한 게이트 한 줄
게이트HDL 배선
XOR g0a, b → x1두 입력을 XOR
XOR g1x1, cin → sum결과를 한 번 더 XOR해 Sum
AND g2x1, cin → a1받아올림 후보 1
AND g3a, b → a2받아올림 후보 2
OR g4a1, a2 → cout둘 중 하나면 Carry
실행이 아니라 묘사 · 다섯 게이트가 동시에 존재하고 동시에 동작한다
P.02반도체 설계 · 39

합성, 코드가 게이트 그물이 된다

HDL을 실제 게이트로 바꿔주는 도구가 합성기(synthesizer)다.

합성은 HDL을 읽어 실제 게이트와 배선의 그물(netlist)로 옮긴다.
a + b 같은 식을 보면 가산기 회로를 깔고, 조건문을 보면 멀티플렉서를 깐다.

이게 소프트웨어 컴파일과 닮았지만 결과물이 다르다.
컴파일은 코드를 실행할 명령으로 바꾼다.
합성은 코드를 실제 회로로 바꾼다. 그 회로를 칩에 새기거나 FPGA에 올린다.
그래서 같은 HDL이 ASIC으로도, FPGA로도 갈 수 있다.

HDL → 합성 → 게이트 네트리스트
합성, 코드를 게이트 그물로
HDL사람이 적는 회로 묘사

assign sum = a ^ b ^ cin;

합성식을 게이트로 옮긴다

synthesize

네트리스트실제 게이트 그물

XOR · AND · OR + 배선

같은 네트리스트가 ASIC으로도 FPGA로도 간다
P.03반도체 설계 · 39

FPGA에 올리기, 재구성 가능한 칩

합성한 회로를 진짜로 돌리려면 칩이 있어야 한다. ASIC은 한 번 새기면 못 바꾼다. 비싸고 느리다.

FPGA(Field-Programmable Gate Array)는 다르다.
미리 깔린 LUT(look-up table) 수만 개와 그 사이를 잇는 스위치 격자로 채워진 칩이다.
LUT는 작은 진리표다. 내용을 바꾸면 어떤 게이트든 흉내 낸다.

내 HDL을 합성해 “어느 LUT에 무슨 표를 넣고 어느 스위치를 켤지”를 정한 게 비트스트림이다.
이 비트스트림을 FPGA에 부으면 격자가 내 회로 모양으로 재배선된다. 그 순간 칩이 내 설계로 동작한다.
다른 비트스트림을 부으면 같은 칩이 다른 회로가 된다. 이게 “field-programmable”, 현장에서 다시 프로그래밍된다는 뜻이다.

LUT + 스위치 격자에 회로를 깖
FPGA, LUT 격자에 회로를 깐다
LUTLUTLUTLUTLUTLUTLUTLUTLUTLUTLUTLUT

진한 칸 = 비트스트림이 내 회로로 채운 LUT · 흐린 칸은 비어 있다

비트스트림을 갈면 같은 칩이 다른 회로가 된다 = 재구성
P.04반도체 설계 · 39

직접 HDL을 보고 testbench로 검증한다

왼쪽은 1비트 전가산기의 시각 회로, 가운데는 같은 회로의 Verilog HDL이다. 게이트 한 줄이 코드 한 줄이다.

아래는 testbench다. 입력 벡터(a·b·cin)를 하나씩 넣어 출력이 맞는지 확인하는 검증 코드다. 1을 내는 게이트 줄이 회로와 HDL에서 함께 진해진다.

8개 벡터를 전수 돌려 진리표가 채워지고 모두 PASS면, 이 HDL이 전가산기로 정확히 동작함이 증명된다.
이렇게 검증된 full_adder HDL이 최종 MyChip의 16비트 가산기 한 칸으로 들어간다.

회로 ↔ HDL 나란히 · 입력 벡터 예측·실행
HDL 뷰어 · full_adder0/8 검증
시각 회로, 1인 선만 진하게
a=0b=0cin=0XORx1=?XORsumANDANDORcout
대응하는 HDL, 게이트 한 줄 = 코드 한 줄
module full_adder(
input a, b, cin,
output sum, cout
);
wire x1, a1, a2;
xor g0 (x1, a, b);
xor g1 (sum, x1, cin);
and g2 (a1, x1, cin);
and g3 (a2, a, b);
or g4 (cout, a1, a2);
endmodule

RUN하면 1을 내는 게이트 줄이 회로와 함께 강조된다

testbench, 입력 벡터 1/8
a0
b0
cin0
예측 먼저, RUN 전에 출력을 찍어 본다
sum
cout
근거 패널, testbench 결과표
abcinsumcout
아직 검증한 벡터가 없다 · RUN을 눌러 한 줄씩 채운다
P.05반도체 설계 · 39

testbench, 칩을 만들기 전에 코드로 확인한다

FPGA에 올리거나 실리콘을 깎는 건 비싸다. 그 전에 설계가 맞는지 코드로 확인해야 한다.

testbench는 검증 전용 HDL이다. 실제 칩에 들어가진 않는다.
검증 대상(DUT, design under test)에 입력 자극을 차례로 넣고, 나온 출력을 미리 정한 기댓값과 비교한다.
다르면 그 자리에서 FAIL을 외친다. 버그를 칩이 아니라 화면에서 잡는다.

회로를 코드로 적으니(HDL) 코드로 검증할 수 있고(testbench), 검증된 코드를 재구성 가능한 칩에 올려 진짜로 돌린다(FPGA).
설계와 실물 사이의 다리가 이 세 가지다.

Q. FPGA가 ASIC과 결정적으로 다른 특징은?정답은 회로를 다시 구성(프로그래밍)할 수 있는 칩이라는 점이다.
ASIC은 한 번 게이트를 새기면 못 바꾼다. FPGA는 LUT와 스위치 격자로 채워져 있어, 새 비트스트림을 부으면 같은 칩이 다른 회로가 된다.
그래서 설계를 빠르게 올려보고 고치는 데 쓴다. field-programmable, 현장에서 재프로그래밍된다.
자극 입력 → DUT → 기댓값 비교
testbench, 자극 → DUT → 기댓값 비교
자극 입력a b cin
DUTfull_adder
기댓값과비교
a b cin나온 sum cout기댓값판정
0 0 00 00 0PASS
1 0 01 01 0PASS
1 1 00 10 1PASS
1 1 11 11 1PASS
버그를 칩이 아니라 화면에서 잡는다 · testbench는 칩에 안 들어간다

3줄 요약

  1. 1시각 회로를 HDL로 — testbench로 검증
  2. 2HDL과 FPGA은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

HDL과

시각 회로를 HDL로 — testbench로 검증

ALU

산술·논리 연산을 하는 회로

ISA

CPU가 이해하는 명령어 집합과 인코딩