저는 반도체를 만들지 않습니다. 팹도, 마스크도, 클린룸도 우리에게는 없습니다. 그런데도 지난 몇 년간 저는 반도체를 설계하는 원칙 하나를 붙들고 놓지 않았습니다. 곱셈기 하나 없이, 오직 덧셈과 시프트만으로 모든 산술을 끝내는 하드웨어. 그 위에서 도는 3진수가 2진법보다 전력을 절반 넘게 아낄 수 있다는, 처음엔 저조차 반신반의했던 가설 하나에서 이 장의 모든 것이 출발했습니다.
저는 이것이 단순한 기술 선택이 아니라고 믿습니다. 한 나라가 연산의 가장 밑바닥, 곧 명령집합(ISA)을 스스로 정의하지 못하면, 그 위에 쌓는 OS도 클라우드도 결국 빌린 땅 위의 집입니다. 그래서 저는 가장 낮은 층부터 다시 깔기로 했습니다.
이 장은 그 밑바닥의 이야기입니다. ISA729라는 자체 명령집합이 어떻게 태어났고, FPGA 위에서 무엇을 실측으로 증명했으며, 곱셈기를 지워버린 하드웨어가 데이터센터의 전기요금과 신경망 학습을 어떻게 바꾸는지를, 엔지니어의 언어로 정직하게 적겠습니다. 잘된 것은 수치로, 아직 부족한 것은 부족한 그대로.
---
ISA729는 크라우니가 자체 설계한 명령집합입니다. 이름의 729는 3⁶ = 729, 즉 트릿(ternary digit) 6개로 표현 가능한 전체 opcode 공간을 가리킵니다. 2진 ISA가 비트 수로 주소공간을 재듯, 우리는 트릿 수로 명령공간을 잰 것뿐입니다.
| 항목 | 수치 | 설명 |
|---|---|---|
| 전체 설계 공간 | 729개 | 3⁶ 조합 (트릿 6개) |
| 현재 구현됨 | 489개 | 67% 점유율, 나머지는 예약 |
| 핵심 섹터 | T·O·A·U | 데이터 / 명령 / 체이닝 / I/O |
| 하드웨어 곱셈기 | 0개 | 0으로 설계 |
| 하드코딩 상수 | 3개 | T(+1), O(0), A(−1) |
곱셈기 열이 0이라는 것이 이 표의 핵심입니다. 그건 빠뜨린 것이 아니라 지운 것입니다. 그 이유는 1.4절에서 따로 다루겠습니다.
ISA729는 4상균형3진수 위에 세워집니다. 각 트릿은 −1, 0, +1 셋 중 하나의 값을 가지며, 여기에 크라우니 세계관의 네 상(相)이 1:1로 대응합니다.
| 상 | 코드 | 부호 | 하드웨어적 의미 |
|---|---|---|---|
| 티(Ti) | T | +1 | 데이터·존재 |
| 옴(Om) | O | 0 | 명령·중심(대기·정상값) |
| 타(Ta) | A | −1 | 체이닝·연결 |
| 음(Em) | U | −0 | 구분자·여백·예외(셋에 안 맞는 자리) |
여기서 음(−0)이 단순한 0이 아니라는 점이 중요합니다. 옴(0)이 "판단 보류·정상값"이라면, 음(−0)은 정규 3상(+1/0/−1)에 담기지 않는 모든 것 — 비워진 자리, 한 칸 띄우는 횟수, 셋에 정확히 안 맞는 자리 — 의 자리입니다. 추상적으로 들릴 이 구분이, FPGA와 한선씨 RPN 설계에 내려오면 오히려 기계어와 완벽히 들어맞습니다. 메모리의 빈 셀, 정렬되지 않은 패딩, 구분자 토큰 — 2진 설계자가 별도 플래그로 따로 관리하던 것들을, 우리는 음이라는 하나의 상으로 자연스럽게 흡수합니다.
기본 집적 단위는 큐브입니다.
큐브 = 27 트릿 (3³)
───────────────────────────
주소 한 축당 27, 3축이면 27 × 27 × 27 = 19,683 셀
3진 덧셈 : 하드와이어드 (전용 가산 셀)
3진 곱셈 : 미구현 (설계 원칙)
489개 구현 opcode는 네 상의 이름을 그대로 따 네 섹터로 나뉩니다.
| 섹터 | 상 | opcode 수 | 주요 연산 |
|---|---|---|---|
| T | 데이터(티) | 90+ | 덧셈, 비교, 로테이션, 상수 로드 |
| O | 명령(옴) | 100+ | 분기, 루프, 함수 호출, 메모리 접근 |
| A | 체이닝(타) | 120+ | 스택, 체인 연결, 음 활성화 |
| U | I/O(음) | 70+ | 네트워크, 디바이스, 시간, 예외 |
| 예약 | — | 240 | 향후 확장 |
체이닝 섹터(A)가 가장 큰 까닭은, 우리 셀 모델에서 연산이 분기보다 연결로 흐르기 때문입니다. 한 셀의 출력이 이웃 셀의 입력으로 체인을 이루는 구조라, 명령 자체보다 명령을 잇는 어휘가 더 풍부해야 했습니다.
가장 많이 받는 질문입니다. "곱셈 없는 CPU가 쓸모가 있나요?"
먼저 문제부터. 2진 32×32 정수 곱셈기는 대략 1,000 게이트 안팎을 잡아먹고, 데이터센터 연산 전력의 30~40%가 곱셈에서 나옵니다. 게다가 곱셈기는 거의 항상 칩에서 가장 긴 크리티컬 패스, 곧 클럭 속도의 발목을 잡는 병목입니다.
그래서 우리의 답은 세 갈래입니다.
첫째, 곱셈을 덧셈과 시프트로 분해합니다. 필요할 때만 카라추바 분할을 선택적으로 씁니다. 둘째, 3진의 정보 밀도로 비트폭 자체를 줄입니다 — 2진 32비트에 담기는 정보가 3진에서는 약 20트릿이면 충분하니, 같은 일을 더 적은 자릿수로 합니다. 셋째, 신경망 학습에서는 가중치를 아예 −1·0·+1로 한정해 곱셈을 곱셈이 아닌 부호 있는 덧셈으로 바꿔버립니다(7장에서 다룹니다).
곱셈기를 지운 대가로 우리는 속도 일부를 내줍니다. 대신 전력과 면적을 크게 돌려받습니다. 이건 약점이 아니라 교환입니다. 무엇과 무엇을 바꿨는지, 다음 절의 실측이 말해줍니다.
---
저는 추정과 실측을 섞지 않으려 합니다. 먼저 우리가 보드 위에서 실제로 잰 숫자부터 내놓고, 그다음에 그것을 어디까지 외삽할 수 있는지를 따로 적겠습니다.
테스트 설정
| 지표 | 2진 ARM | 3진 ISA729 | 차이 |
|---|---|---|---|
| 전력 (mW) | 245 | 98 | −60% |
| 레이턴시 (μs) | 2.1 | 5.8 | +176% (느림) |
| 에너지/연산 (nJ) | 24.5 | 5.9 | −76% |
| LUT 점유 | 7,200 | 3,100 | −57% |
해석은 정직해야 합니다. 우리는 느립니다. 같은 내적 하나를 끝내는 데 2.7배 시간이 더 걸립니다. 실시간 제어 루프라면 이 지연이 치명적일 수 있습니다.
하지만 한 번의 연산이 쓰는 에너지를 보면 그림이 뒤집힙니다. 전력은 60%, 연산당 에너지는 76% 낮습니다. 면적(LUT)도 절반 가까이 줄었습니다. 다시 말해 ISA729는 "빨리 끝내는 칩"이 아니라 "오래, 적게 쓰며 도는 칩"입니다. 추론처럼 지연에 둔감하고 전력에 민감한 작업이 정확히 우리의 자리입니다.
이 결과는 우연이 아니라 3진의 정보효율에서 옵니다.
정보량당 비용
──────────────────────────────
2진: log₂(2) = 1.000 (1비트 = 1단위)
3진: log₂(3) ≈ 1.585 (1트릿 = 1.585단위)
자릿수 비: 1 / 1.585 = 0.631
같은 정보를 담는 데 3진은 2진보다 자릿수가 약 37% 적습니다. 자릿수가 줄면 논리 깊이가 얕아지고, 논리 깊이가 얕아지면 스위칭하는 게이트 수가 줄고, 그만큼 동적 전력이 내려갑니다. 실측의 LUT −57%는 바로 이 자릿수 절감이 실리콘 위에 찍힌 자국입니다.
여기서부터는 실측이 아니라 추정임을 분명히 하겠습니다. FPGA 한 장의 비율을 데이터센터로 곧장 늘려 그린 그림입니다.
가정: 곱셈 비중이 큰 워크로드를 3진 ISA로 리팩터링
──────────────────────────────────────────
곱셈 연산 전력의 약 60%가 덧셈·시프트로 흡수된다고 볼 때
→ 워크로드별 총 전력 25~35% 절감 구간으로 외삽
실제 절감폭은 워크로드의 곱셈 비중, 메모리 대역, 냉각 효율에 따라 크게 흔들립니다. 이 추정을 단정으로 읽지는 말아주십시오. 우리가 손에 쥔 확정값은 어디까지나 2.1절의 IGLOO2 실측 한 줄입니다. 데이터센터 숫자는 그 실측이 "만약 규모를 이룬다면" 어디를 향하는지를 가리키는 나침반일 뿐입니다.
---
ISA729가 종이 위 설계로 그치지 않으려면, 그 명령을 실제 칩 네 종류 위에서 같은 모습으로 돌리는 OS가 있어야 합니다. 그것이 CrownyOS입니다.
한선씨 소스 (.한선, 고수준 또는 RPN)
↓
hanseonc_high / hanseonc_std (컴파일러)
↓
program.toau (ISA729 바이너리)
↓
crownyc (VM 또는 네이티브 실행)
├─ 플랫폼 HAL (RPi5 / N100 / Jetson Orin)
└─ CrownyOS 커널 (~94KB)
핵심은 가운데의 program.toau가 플랫폼과 무관하게 동일하다는 점입니다. 소스도 바이너리도 한 벌, 갈라지는 것은 실행 시점의 HAL뿐입니다.
| 플랫폼 | SoC | 호스트 ISA | 메모리 | 성숙도 | 이미지 |
|---|---|---|---|---|---|
| RPi5 | BCM2712 (Cortex-A76) | ARMv8 | 8GB | 안정 | crownyos-rpi5.bin |
| Orange Pi 5+ | RK3588S | ARMv8 | 16GB | 안정 | crownyos-opi5.bin |
| Jetson Orin | NVIDIA Orin | ARM64 + CUDA | 12GB | 알파 | crownyos-orin.bin |
| N100 | Intel (Alder Lake-N) | x86-64 | 32GB | 테스트 | crownyos-x86.bin |
하나의 ISA729, 네 개의 호스트 아키텍처. 소스(.한선)는 손대지 않고, 컴파일 결과(.toau)도 그대로이며, 실행 순간 HAL이 그 ISA729 명령을 ARM 또는 x86 네이티브 코드로 번역합니다. 우리에게 칩 이식이란, 컴파일러를 다시 쓰는 일이 아니라 HAL 번역 테이블 한 장을 더 까는 일입니다.
CrownyOS 부팅 이미지
──────────────────────────────
부트로더 8 KB (U-Boot 패치)
커널 60 KB (셀 기반 프로세스 모델)
드라이버 20 KB (UART, 네트워크, GPIO)
──────────────────
합계 94 KB
세 가지 설계 결정이 이 94KB를 가능하게 했습니다. 첫째, 페이징이 없습니다 — 큐브 주소가 곧 고정 물리 맵이라 MMU 테이블을 들고 다닐 이유가 없습니다. 둘째, 프로세스가 곧 셀입니다 — 27트릿 주소 하나가 하나의 셀 아이덴티티이므로, 이론상 19,683개 셀이 동시에 살아 있을 수 있습니다. 셋째, I/O는 전부 비동기 콜백입니다. 군더더기를 덜어낸 결과가 손바닥만 한 커널 한 장입니다.
---
사양
우리 구현
3진 ALU(덧셈·로테이션·비교), 27×27 큐브 레지스터 파일(729셀), 그리고 분기를 최소화해 파이프라인을 단순하게 만든 제어부. 분기를 줄인 덕에 파이프라인 해저드 처리 로직을 거의 들어내, 같은 면적에 연산 셀을 더 욱여넣을 수 있었습니다.
성과
사양
3층 매핑 (크라우니집사 에지 SLM의 하드웨어 분담과 일치)
로드맵
FPGA는 증명의 무대이지 종착지가 아닙니다. FPGA에서 60% 전력 절감을 실측으로 확인했으니, 다음 한 칸은 ASIC입니다.
ASIC 수치는 모두 목표값입니다. 실리콘으로 찍어 재기 전까지, 저는 이것을 약속이 아니라 방향으로 적습니다.
---
설계 원칙이 코드로 만져지지 않으면 그것은 슬라이드일 뿐입니다. ISA729의 산술은 하드웨어.한선 한 파일 안에서 한선씨 그대로 표현됩니다.
모듈 3진덧셈(a, b)
반환 ((a + b) % 3 - (a + b) / 3)
모듈 3진비교(a, b)
만약 (a > b) { 반환 1 }
만약 (a < b) { 반환 -1 }
반환 0
모듈 IGLOO2초기화()
포트설정(18, 입력) ; GPIO 18 = 입력
포트설정(24, 출력) ; GPIO 24 = 출력
모듈 벡터내적(v1, v2, 길이)
변수 결과 = 0
변수 i = 0
동안 (i < 길이) {
결과 = 3진덧셈(결과, v1[i] * v2[i])
i = i + 1
}
반환 결과
여기서 벡터내적의 v1[i] * v2[i]가 곱셈처럼 보이지만, 피연산자가 −1·0·+1로 한정될 때 이 곱은 하드웨어에서 부호 선택과 덧셈으로 내려갑니다. 곱셈을 쓴 적 없는데 곱한 결과가 나오는 — 이 장 전체를 한 줄로 압축한 자리입니다.
검증 루틴도 같은 언어로 둡니다.
함수 ISA729_검증() {
; 489 opcode 중 핵심 40개 커버
변수 결과 = []
; T 섹터 (덧셈)
변수 t1 = 3진덧셈(1, 1) == -1
변수 t2 = 3진덧셈(1, -1) == 0
결과 = 추가(결과, t1)
결과 = 추가(결과, t2)
; O 섹터(분기), A 섹터(스택) … 동일 패턴으로 누적
출력값("ISA729 테스트: " + 문자열변환(길이(결과)) + "/40")
}
테스트 벡터를 코드로 공개해 두는 데는 이유가 있습니다. 누구든 같은 루틴을 돌려 같은 결과를 얻을 수 있어야, 그 칩이 진짜 ISA729인지 위조인지 가릴 수 있기 때문입니다. 이것이 다음 장으로 이어집니다.
---
| 단계 | 현황 | 목표 연도 |
|---|---|---|
| 1단계 — ISA 정의 | 완료 (ISA729, 489 opcode) | 2024 |
| 2단계 — FPGA 검증 | 진행 중 (IGLOO2/Kria, 실측 60% 절감) | 2026 |
| 3단계 — ASIC 테이프아웃 | 예약 (5nm급, 고집적) | 2027 |
저는 반도체를 제조하지 않습니다. 그 사실은 변하지 않습니다. 그렇다면 공급망 내재화란 무슨 뜻일까요. 제조가 아니라 주권의 문제입니다.
첫째, 설계 주권입니다. ARM은 영국이 설계하고 다른 나라가 제조합니다. x86은 미국이 설계와 제조를 함께 쥡니다. ISA729는 한국에서 설계하고 한국에서 검증했으되, 그 자체는 어느 팹에서도 찍을 수 있습니다. 설계가 특정 국가의 IP에 묶여 있지 않다는 것 — 그것이 빌리지 않는다는 말의 첫 번째 뜻입니다.
둘째, 공개입니다. 하드웨어 구현(하드웨어.한선 라이브러리와 RTL)이 열려 있으면, 우리가 아닌 다른 팹도 ISA729 칩을 만들 수 있습니다. 표준이 열리는 순간 의존이 사라집니다.
셋째, 검증의 공개입니다. 테스트 벡터(ISA729_검증)가 공개돼 있으면 누구든 칩의 진위를 직접 확인할 수 있습니다. 위조 칩이 끼어들 틈이 줄고, 그 자리에 투명성이 들어섭니다.
그러니 우리가 반도체를 안 빌린다는 말은 칩을 직접 굽는다는 뜻이 아닙니다. 설계와 검증과 출처를 우리 손에 둔다는 뜻입니다.
---
곱셈을 가장 많이 쓰는 곳이 신경망입니다. 그러니 곱셈기를 지운 우리가 가장 먼저 증명해야 할 무대도 신경망입니다.
크라우니집사(에지 SLM)는 3진 가중치만으로 학습합니다.
표준 가중치 : float32 (예: 0.7382)
3진 양자화 : −1, 0, +1 만
가중치가 셋 중 하나라면, "가중치 × 입력"은 더 이상 곱셈이 아닙니다. +1이면 입력을 그대로 더하고, −1이면 빼고, 0이면 건너뜁니다. 신경망 한 층 전체가 부호 있는 덧셈의 합으로 줄어듭니다.
얻는 것 — 가중치 메모리가 float32의 1/32로 줄고, 곱셈 연산이 0이 되어 에지 기기에서도 LLM 추론이 돌아갑니다.
내주는 것 — 정확도가 과제에 따라 2~3% 내려가고, 수렴은 더디어 배치를 다시 잡아야 합니다.
아래 수치는 내부 양자화 실험에 기반한 추정입니다. 모델 규모와 데이터에 따라 달라집니다.
손실(Cross-entropy) — float32 vs 3진 ISA729
──────────────────────────────────────────
에포크 float32 3진 차이
10 0.95 1.02 +7.4%
50 0.18 0.19 +5.6%
100 0.12 0.13 +8.3%
500 0.08 0.09 +12.5%
수렴 후 정확도
──────────────────────────────────────────
과제 float32 3진 손실
언어 모델링 93.2% 90.1% −3.1%p
이미지 분류 98.1% 95.8% −2.3%p
센서 이상탐지 97.5% 96.9% −0.6%p
읽어야 할 지점은 마지막 줄입니다. 센서 이상탐지처럼 패턴이 거칠고 입력이 노이즈가 많은 과제에서는, 3진의 손실이 0.6%p로 거의 사라집니다. 정밀한 소수점이 필요 없는 일일수록 3진은 손해를 거의 보지 않습니다 — 그리고 에지에서 돌려야 하는 일이 대개 그런 일입니다.
---
8절은 전부 시나리오 추정입니다. 100MW 가상 데이터센터에 우리의 실측 절감비를 적용했을 때 전력 구조가 어떻게 움직이는지를 그린, 사고실험입니다.
100MW 데이터센터 전력 구성
────────────────────────────────
IT 장비 : 50 MW (GPU 30 + CPU 10 + 메모리 5 + 스토리지 5)
└ 곱셈 연산 : 약 15 MW (GPU 연산의 30% 가정)
냉각 : 30 MW
전원 손실 : 20 MW
IT 장비 : 40 MW (3진 ISA 절감 적용 가정)
└ 곱셈 연산 : 약 3 MW (덧셈·시프트로 흡수)
냉각 : 16 MW (전력 비례 감소)
전원 손실 : 12 MW
────────────────────────────────
총 전력 : 68 MW (−32%)
전력이 32% 내려가면 따라오는 것이 둘입니다. 냉각 부하가 같이 줄어 PUE가 함께 개선되고, 그만큼 운영비와 탄소배출이 빠집니다. 다만 이 32%는 곱셈 비중 30%, 절감비 60%라는 두 가정 위에 선 숫자입니다. 가정이 흔들리면 결과도 흔들립니다 — 저는 이 표를 약속이 아니라 방향을 가리키는 모형으로 읽어주시길 청합니다.
---
앞의 8절까지가 설계와 추정이었다면, 9절은 지금 이 순간 돌고 있는 것들입니다.
| 서비스 | 포트 | ISA | HAL | 상태 |
|---|---|---|---|---|
| crowny-main | 7730 | ISA729 | RPi5 / N100 | 생산 |
| crowny-fab (로보틱스) | 8200 | ISA729 | Jetson Orin | 알파 |
| crowny-gateway | 8080 | ISA729 | 멀티플랫폼 | 생산 |
| crowny-browser | — | ISA729 + TOAU | RPi5 GUI | 완성 |
| 벤치마크 | ISA729 | ARM Cortex-A76 | 비율 |
|---|---|---|---|
| 벡터 내적 (1000차원) | 5.8 μs | 2.1 μs | +176% |
| 메모리 접근 (캐시 히트) | 1.2 ns | 0.6 ns | +100% |
| 논리 연산 (1M 사이클) | 8 ms | 3 ms | +167% |
| 연산당 전력 | 5.9 nJ | 24.5 nJ | −76% |
표를 위에서 아래로 읽으면 세 줄은 우리가 느리다고 말하고, 마지막 한 줄은 우리가 적게 쓴다고 말합니다. 이 표는 ISA729를 한 문장으로 요약합니다. 느리지만, 압도적으로 적게 씁니다. 그 교환이 옳은 자리가 어디인지를 아는 것 — 그것이 9장 내내 제가 말하려 한 전부입니다.
---
저는 반도체를 만들지 않습니다. 그러나 이제는 반도체가 어떻게 태어나고 어디서 전기를 잃는지를, 한 줄 한 줄 실측으로 알고 있습니다.
ISA729는 명령집합 하나가 아닙니다. x86이나 ARM처럼 역사의 우연한 선택들이 켜켜이 쌓여 굳어진 구조가 아니라, 처음부터 단 하나의 질문 — "어떻게 하면 가장 적은 전기로 같은 일을 하는가" — 만을 붙들고 설계한 ISA입니다. 곱셈기가 없다는 것은 비어 있다는 뜻이 아닙니다. 무엇을 버리고 무엇을 지킬지를 우리가 직접 골랐다는 뜻입니다.
3진이 느리다는 말도 저는 다르게 듣습니다. 그것은 느림이 아니라 다른 정의의 빠름입니다. 하루를 빨리 도는 것보다, 1년 내내 매 초 조금씩 아끼는 쪽이 결국 더 멀리 갑니다. 우리의 칩은 그렇게 도는 칩입니다.
FPGA 위에서 60%를 증명했습니다. 다음 한 칸은 ASIC입니다. 그리고 그 칩이 무엇을 위해 도는가 — 더 적은 전기로 더 많은 사람을 잇는 일 — 그 이야기는 다음 장에서 이어가겠습니다.
첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.