FPGA 실전 설계 – SAIF 파일로 전력 소모량 찾기

저전력 AI 반도체 스타트업에서 NPU를 설계하다 보면, “최소한의 전력으로 최고의 퍼포먼스를 낸다”는 목표에 사활을 걸게 됩니다. RTL 코딩을 마치고 합성(Synthesis)과 구현(Implementation)까지 성공적으로 끝낸 뒤, 떨리는 마음으로 Vivado의 Report Power 버튼을 눌렀습니다.

그런데 결과 창에 Total On-Chip Power: 200 W라는 경악스러운 수치가 찍혀 있는 것을 보신 적이 있나요?

“내가 짠 저전력 아키텍처가 200W를 태운다고? 칩이 녹아내리는 거 아냐?”라며 등골이 서늘해졌던 경험, 하드웨어 엔지니어라면 한 번쯤 있을 것입니다. 특히 Versal VP1902처럼 항공모함급의 거대한 칩을 타겟으로 한다면 이 숫자는 더욱 위협적으로 다가옵니다.

하지만 너무 절망하지 마세요. 오늘 다룰 내용은 Vivado 전력 추정의 함정과, 시뮬레이션 데이터를 통해 ‘진짜’ 전력 소모량을 찾아내는 SAIF 파일 활용법입니다.

1. 200W의 범인: Vectorless 추정과 발열

200W가 넘는 전력 리포트를 자세히 뜯어보면 아주 이상한 점을 발견할 수 있습니다.

  • Dynamic Power (실제 동작 전력): 200 W
  • Device Static (누설 전력): 48 W
  • Junction Temperature (접합부 온도): 100.0°C (한계치 도달)

이 숫자들이 말해주는 진실은 무엇일까요? 이는 “칩이 100도까지 끓어오르고 있어서, 반도체 누설 전류(Leakage)가 기하급수적으로 폭발했다”는 뜻입니다. 그렇다면 왜 칩이 100도까지 올라갔다고 툴이 판단했을까요?

Vivado는 실제 입력 데이터가 어떻게 들어오는지 모를 때, Vectorless라는 기본 모드로 전력을 추정합니다. 이 모드는 “모든 신호와 플립플롭이 일정한 확률(보통 12.5%)로 미친 듯이 계속 스위칭(Toggle)하고 있다”는 최악의 상황(Worst-case)을 가정합니다. 이 가짜 스위칭 활동이 불필요한 Dynamic Power를 발생시키고, 이는 칩의 온도를 높이며, 높아진 온도가 다시 막대한 Static Power를 발생시키는 악순환을 만든 것입니다.

2. SAIF (Switching Activity Interchange Format)

AI 연산기(MAC)의 실제 동작을 생각해 봅시다. 연산 중간에 0이 곱해지거나, 데이터가 들어오지 않아 Enable 신호가 꺼져 있는 유휴 상태(Idle) 구간이 굉장히 많습니다. 즉, 모든 회로가 항상 12.5%로 쉬지 않고 뛰고 있다는 Vivado의 가정은 완전히 틀렸습니다.

이 억울함을 풀려면 Vivado에게 “내 회로는 실제로 이렇게 조용하게 동작해!”라는 증거를 제출해야 합니다. 그 증거 자료가 바로 SAIF 파일입니다. SAIF 파일은 시뮬레이션을 돌리는 동안 0에서 1로, 1에서 0으로 변하는 모든 신호의 실제 토글(Toggle) 횟수를 기록한 텍스트 파일입니다.

3. Vivado Tcl 콘솔로 SAIF 파일 추출하고 적용하기

SAIF 파일은 자동으로 생성되지 않습니다. 용량이 기가바이트(GB) 단위로 커질 수 있기 때문에, 사용자가 직접 Tcl 명령어를 통해 기록을 지시해야 합니다.

Step 1: Behavioral Simulation 실행 후 대기

GUI에서 Run Behavioral Simulation을 클릭하여 시뮬레이터를 엽니다. 파형 창이 뜨면 상단의 재생(Run) 버튼을 누르지 말고 0ns 상태에서 대기합니다.

Step 2: Tcl Console에 추출 명령어 입력

# 1. 기록할 SAIF 파일 생성 (이름 지정)
open_saif "power_data.saif"

# 2. 기록할 범위 설정 (테스트벤치 하위의 모든 객체를 재귀적으로 포함)
log_saif [get_objects -r *]

# 3. 시뮬레이션 실행 (실제 동작이 충분히 일어날 시간만큼)
run 10us

# 4. 파일 닫기 및 저장 (이 명령어를 쳐야 파일이 디스크에 써집니다!)
close_saif

Step 3: Report Power에 SAIF 적용하기

이제 Implemented Design을 열고 다시 Report Power를 누릅니다. 설정 창의 Switching 탭으로 이동하여, Simulation Activity File (SAIF) 항목에 방금 추출한 power_data.saif 파일을 지정하고 OK를 누릅니다.

결과가 어떻게 바뀌었을까요? 실제 스위칭 횟수가 반영되면서 Dynamic Power가 현실적인 수준으로 떨어집니다. 그 결과 Device Static Power가 극적으로 하락합니다. 200W였던 수치가 칩의 기본 체급에 맞는 현실적인 전력량(예: 50W 수준)으로 크게 줄어드는 마법을 경험하실 수 있습니다.

Power summary
Power summary

(단, 제가 사용했던 Versal 1902는 기본 체급이 엄청난 칩이라 static power가 0W에 수렴하진 않았습니다.)

참고: AMD

유사한 게시물