FPGA 세션1 최종정리 — 한선씨로 RTL부터 실 비트스트림까지
한 줄 요약
한선씨(한국어)로 기술한 회로가 오픈소스 플로우(yosys/nextpnr/ecppack)를 통해 iCE40(.bin)·ECP5(.bit) 두 칩 패밀리의 실 FPGA 비트스트림으로 합성·배치되고, iverilog 기능검증까지 자동으로 도는 완결된 생태계. 하드웨어만 꽂으면 원스탑 구동.
달성 (브리프 4단계 기준)
- ✅ 1단계 오픈소스 합성 파이프라인: 한선씨 RTL → 합성가능 Verilog → 비트스트림 (왕복검증, 손-레퍼런스와 바이트동일)
- ✅ 2단계 합성가능성 보장: 전단 가드(합성검사/합성가드.한선) + 정적 case LUT
- ✅ 3단계 제약파일 생성기: 보드별 .pcf(iCE40)/.lpf(ECP5) 자동 생성
- ⏳ 4단계 실보드 데모: 비트스트림·플래시 경로 완비, 하드웨어 연결만 대기
회로 라이브러리 (전부 한선씨 → 비트스트림 검증)
| 회로 | 경로 | 검증 |
|---|
| blinky/카운터/시프트/LUT | 직접 에미터(회로합성.한선) | 합성, blinky는 바이트동일 왕복 |
| ALU/FSM/다중always | 회로방언(.회로) | 합성, 셀 동등성 |
| UART tx/rx/echo | 회로합성.한선 | iverilog 5/5 바이트 에코 + 비트스트림 |
| PWM/호흡등 | 회로합성.한선 | iverilog duty 64/256 + 비트스트림 |
| BRAM | 회로합성.한선 | write→read 3/3 + 블록RAM(SB_RAM40_4K) 추론 |
| 가산기(폭추론) | 회로방언 배선 | iverilog 200+100=300 절단없음 |
핵심 컴포넌트
- 에미터
libs/회로합성.한선 — 프래그먼트 + 고수준 합성기(블링키/카운터/시프트/룩업/UART/PWM/BRAM) + .pcf
- 회로방언
rtl/fpga/회로방언.한선 — .회로 → 합성가능 Verilog 트랜스파일러(블록스택, 다중always/중첩case·if/배선 폭추론). 전단 가드 자동.
- 합성 가드
libs/합성가드.한선 — 나눗셈/초월함수/always내while 검출 → 비합성 회로 차단
- 보드 레지스트리
libs/보드.한선 — 7보드(iCE40 4 + ECP5 3) 패밀리/디바이스/패키지/핀/프로그래머
- 원스탑 드라이버
rtl/fpga/구동.sh — doctor/boards/probe/bringup/flash/run, ice40·ecp5 패밀리 분기
- 회귀
합성.sh(합성, 다보드) + 시뮬.sh(iverilog 기능 5종)
툴체인 (doctor 전부 그린)
- iCE40: yosys synth_ice40 / nextpnr-ice40 / icepack / iceprog (brew)
- ECP5: yosys synth_ecp5 / nextpnr-ecp5(소스빌드 → /opt/homebrew/bin) / ecppack(prjtrellis) / openFPGALoader
- 시뮬: iverilog/vvp
보드 도착 시 (원스탑)
bashcd /Users/ef/CrownyOS/crownyc/rtl/fpga
./구동.sh doctor # 준비도
./구동.sh probe # 보드 인식
./구동.sh bringup icestick # iCE40 → .bin → LED
./구동.sh bringup ulx3s # ECP5 → .bit → LED
./구동.sh run 에코.한선 icestick uart_echo myecho # UART 에코 → 시리얼 터미널
상세:
하드웨어연결.md한선씨 VM/도구 함정 (이 세션에서 축적)
- 예약어 매개변수/변수명 불가:
신호(→버스), 오류(→오류수)
- 이 hanseonc_high는 인라인
; 주석을 코드로 파싱 → 인라인주석/한 줄 다중문장 금지
- yosys 한글 식별자 거부 → 이름맵 ASCII
- 한글 env명 bash 미전달 → ASCII(CIRCUIT/OUTV/BOARD)
- output reg(tx/busy/dout)
initial 초기화 없으면 시뮬 x 전파
- ECP5 25F 패키지 = CSFBGA285(CABGA285 아님), openFPGALoader 보드명 orangeCrab(대문자)
잔여 (다음 세션)
- 실보드 LED/UART/호흡등 육안 검증 (하드웨어)
- orangecrab RGB LED 실제 SITE 보정(현재 placeholder)
- UART 보드레이트 다양화, SPI/I2C, 더 큰 .회로(파이프라인 CPU)