FPGA(Field Programmable Gate Array, 회로를 다시 구성할 수 있는 반도체) 설계는 기능 시뮬레이션이 통과해도, 실제 칩 안에서 신호가 정해진 시간 안에 도착하는지를 따로 확인해야 합니다. 이 확인 결과가 기준을 못 맞추는 상태를 흔히 "타이밍 위반" 또는 "타이밍 미달"이라고 부릅니다. 영상 처리처럼 데이터 양이 많고 클럭이 빠른 설계에서는 마지막 단계에서 이 문제가 드러나 일정이 밀리는 경우가 많습니다.
타이밍 위반을 그대로 두면 실험실에서는 동작하다가 온도나 보드가 바뀌면 간헐적으로 영상이 깨지거나 장비가 멈추는 식으로 나타날 수 있습니다. 이 글에서는 SoC(System on Chip, 프로세서와 주변 장치를 한 칩에 담은 반도체)·FPGA 설계에서 점검할 6가지 지점을 증상, 원인, 해결 방향 순서로 정리했습니다.

먼저 확인할 것(개요): 위반이 setup 위반인지 hold 위반인지부터 구분합니다. setup 위반은 데이터가 다음 클럭보다 충분히 일찍 도착하지 못하는 경우이고, hold 위반은 클럭 직후 데이터가 정해진 시간만큼 유지되지 못하고 너무 빨리 바뀌는 경우입니다. 둘은 원인과 해결 방향이 다르므로, setup을 개선하는 조치가 hold를 해결해 주지는 않습니다. 그다음 타이밍 보고서에서 위반 경로가 "몇 개의 경로에 몰려 있는지, 설계 전체에 퍼져 있는지", 그리고 "같은 클럭 안의 경로인지, 서로 다른 클럭 사이의 경로인지"를 나눠 봅니다. 이 두 가지만 구분해도 아래 6곳 중 어디를 먼저 봐야 할지 대부분 정해집니다.
1. 타이밍 제약 조건이 빠졌거나 실제와 다르다
증상: 보고서에 "제약이 없는 경로"가 남아 있거나, 위반이 없다고 나오는데 실제 보드에서 불안정합니다.
원인: 타이밍 분석 도구는 설계자가 알려 준 제약 조건(클럭 주기, 입출력 지연 등 시간 조건)만 기준으로 판단합니다. 클럭 정의가 빠지거나, 실제와 다른 주파수로 적혀 있거나, 검사에서 제외하는 예외 설정이 너무 넓으면 보고서가 "문제없음"으로 나와도 실제로는 위험한 경로가 남습니다.
해결 방향: 제약 조건 검사 기능으로 누락된 클럭 정의와 입출력 제약을 찾아 실제 회로에 맞게 보완합니다. 실제로 동작하는 경로를 분석에서 빼지 않도록, 예외 설정은 하나씩 근거를 확인해 꼭 필요한 범위로 좁힙니다.
2. 서로 다른 클럭 사이의 경계(CDC) 처리가 맞지 않다
증상: 위반 경로가 서로 다른 클럭 사이에 몰려 있거나, 특정 조건에서만 데이터가 가끔 틀립니다.
원인: CDC(Clock Domain Crossing, 서로 다른 클럭으로 동작하는 회로 사이의 신호 전달)라고 해서 모두 비동기는 아닙니다. 같은 기준에서 만들어져 주파수·위상 관계가 정의된 동기 클럭 사이는 그 관계에 맞게 타이밍을 분석해야 합니다. 반면 관계가 없는 비동기 클럭 사이는 일반적인 타이밍 분석만으로 안전성을 보장할 수 없고, 동기화 회로 없이 신호를 넘기면 순간적으로 불안정한 상태(메타스테빌리티)가 생길 수 있습니다. 두 경우를 구분하지 않고 모두 검사에서 제외하면 보고서에서만 사라지고 문제는 남습니다.
해결 방향: 도구의 CDC 분석 보고서로 클럭 경계를 모두 찾아 동기·비동기를 구분합니다. 동기 클럭 사이는 클럭 관계를 제약에 정확히 반영해 분석하고, 비동기 경계에만 신호 종류에 맞는 동기화 회로나 비동기 FIFO(First In, First Out, 먼저 들어온 데이터를 먼저 내보내는 버퍼)를 적용한 뒤 그에 맞는 제약을 겁니다.
3. 한 클럭 안에 처리하는 논리가 너무 길다
증상: 같은 클럭 안의 경로에서 setup 위반이 나고, 경로 지연 중 논리가 차지하는 비중이 큽니다.
원인: 한 클럭 주기 안에 여러 단계의 연산이나 비교, 선택 회로가 몰려 있으면 배치를 아무리 잘해도 시간 안에 끝나지 않습니다. 영상 처리의 곱셈·누적 연산이나 큰 선택 회로에서 자주 생깁니다.
해결 방향: 긴 연산을 여러 단계로 나누는 파이프라인(중간 저장 단계 추가)을 넣고, 칩에 내장된 연산·메모리 블록을 활용하도록 구조를 바꿉니다. 지연이 늘어나는 만큼 주변 제어 신호의 시점도 함께 맞춥니다. 이 방향은 주로 setup 위반에 해당합니다. hold 위반은 클럭 스큐(클럭이 각 레지스터에 도착하는 시간 차이)와 최소 데이터 경로 지연을 따로 확인해 해결합니다.
4. 배치·배선이 어렵거나 신호 연결이 너무 많다
증상: 논리는 짧은데 배선 지연이 크고, 자원 사용률이 높아질수록 위반이 급격히 늘어납니다.
원인: 칩의 특정 영역에 회로가 몰리거나, 하나의 신호가 너무 많은 곳으로 퍼지면(팬아웃) 배선이 멀리 돌아가며 지연이 커집니다. 리셋이나 활성화 신호처럼 설계 전체로 퍼지는 신호가 대표적입니다.
해결 방향: 자원 사용률과 혼잡도 보고서로 몰린 영역을 찾고, 많이 퍼지는 신호는 복제하거나 구조를 줄입니다. 리셋 사용 범위를 줄이는 것만으로도 개선되는 경우가 많습니다.
5. 외부 입출력 타이밍 조건이 정의되지 않았다
증상: 칩 내부는 문제없는데 외부 장치(센서, ADC, 메모리 등)와 주고받는 데이터가 가끔 틀립니다.
원인: 외부 장치와의 인터페이스는 보드 배선 지연과 상대 장치의 시간 조건까지 함께 봐야 합니다. 입출력 지연 조건을 넣지 않으면 도구는 이 경로를 제대로 검사하지 않고, 입출력 셀 안의 레지스터를 쓰지 않으면 여유가 줄어듭니다.
해결 방향: 상대 장치 데이터시트와 보드 설계를 근거로 입출력 지연 조건을 정의하고, 입출력 셀의 레지스터와 지연 조정 기능을 활용합니다. 필요하면 보드 쪽 신호를 측정해 검증합니다.
6. 빌드 설정과 결과 비교 방식이 일정하지 않다
증상: 빌드할 때마다 결과가 달라지고, 작은 수정에도 위반이 생겼다 사라졌다 합니다.
원인: 합성·배치 단계의 전략 설정이나 도구 버전이 사람마다 다르면 결과를 비교하기 어렵습니다. 근본 원인을 고치지 않은 채 설정만 바꿔 우연히 통과한 결과는 다음 수정에서 다시 무너지기 쉽습니다.
해결 방향: 도구 버전과 빌드 설정을 스크립트로 고정하고, 빌드마다 타이밍 요약을 기록해 변화를 추적합니다. 설정 조정은 구조와 제약을 정리한 뒤 마지막 단계에서 사용합니다.
정리: 타이밍 문제는 "보고서를 믿을 수 있게 만드는 것"부터입니다
FPGA 타이밍 위반은 제약 조건, 클럭 경계, 논리 구조, 배치·배선, 외부 입출력, 빌드 관리 중 한 곳에서 시작되는 경우가 대부분입니다. 제약 조건을 먼저 바로잡아 보고서를 신뢰할 수 있게 만든 뒤, 위반 경로의 성격에 맞게 구조를 고치는 순서가 가장 빠릅니다.
더파인은 SoC·FPGA 개발을 용역으로 수행합니다.
"기능은 되는데 타이밍이 맞지 않아 납품이 미뤄지고 있다"면 지금 문의해 주세요. 사용 중인 FPGA와 목표 클럭, 현재 타이밍 보고서 요약을 알려 주시면 검토 후 연락드리겠습니다.
문의·견적 요청하기 | ☎ 031-498-3130