타이밍 다이어그램으로 신호 제약과 시간 관계 검증하기
타이밍 다이어그램으로 신호 변화, 시간 제약, 핸드셰이크와 CDC 경로를 명세하고 검증하는 방법을 정리한다.
2026-08-14 · 최초 발행 2025-10-31
신호의 순서가 아니라 시간 조건을 명세한다
디지털 하드웨어, 임베디드, 실시간 소프트웨어에서는 이벤트가 발생했다는 사실만으로 충분하지 않다. 어떤 신호가 언제 바뀌고, 다른 신호가 얼마 동안 유효해야 하며, 응답이 늦어질 때 무엇을 처리할지까지 함께 맞아야 한다.
타이밍 다이어그램(Timing Diagram)은 신호 상태 변화와 이벤트 사이의 인과관계를 시간축 위에 놓는 표현 방식이다. 핸드셰이크, 타임아웃, 셋업/홀드, 버스 트랜잭션처럼 시간 조건이 명세의 중심인 상황에 적합하다. UML과 HDL/EDA 파형이라는 서로 다른 맥락에서도 공통된 시간 표현 체계로 쓰인다.
시퀀스 다이어그램이 이벤트의 선후 관계를 중심으로 보여준다면, 타이밍 다이어그램은 지연, 시간 간격, 동시성, 제약을 정량적으로 다룬다는 점에서 구분된다.
시간축 위에 올리는 대상
하드웨어/EDA 웨이브폼형 다이어그램은 클럭, 리셋, 데이터, 제어 신호의 전압 또는 상태 변화를 파형으로 나타낸다. UML Timing Diagram은 객체나 컴포넌트 수명선의 상태 전이와 메시지 타이밍을 표현한다.
시간축에는 초, ns, 클럭 사이클 같은 단위와 스케일을 명시한다. 글로벌 기준 클럭과 지역 타임베이스를 구분할 수도 있으며, 샘플링 기준 시점을 정해 두면 해석의 일관성을 확보할 수 있다.
신호나 수명선은 이진 상태뿐 아니라 다치 상태, 3상태(Z), X(Unknown)를 포함할 수 있다. 버스와 인터페이스는 신호 그룹으로 묶어 계층 구조를 드러내고, 상위 수준의 상태 머신과 연결할 수도 있다.
상승·하강 에지, 메시지 송수신, 타이머 만료는 이벤트로 표시한다. 지연, 데드라인, 셋업/홀드, 펄스폭, 타임아웃은 주석과 제약으로 남긴다. 선행·후행 관계, 경쟁·경합(race), 상호배제 조건도 이 축에서 검토할 수 있다.
멀티클럭 환경에서는 CDC(Clock Domain Crossing) 경로의 동기화 지점을 표시하는 일이 중요하다. 환경 가정, 데이터 유효 창(valid window), 재시도·백오프 정책과 함께 요구사항 ID나 테스트케이스 링크를 붙이면 추적성도 확보된다.
명세에서 검증까지 이어지는 흐름
요구사항과 프로토콜 명세를 수집할 때는 클럭, 리셋, 인터페이스 계약뿐 아니라 타임아웃과 재시도 같은 비정상 시나리오도 포함한다. 이후 신호 목록과 상태를 정하고 시간 단위와 스케일을 설정한 뒤, 정상 경로와 예외 경로를 각각 그린다.
셋업/홀드, 핸드셰이크 지연 범위, 타임아웃과 리트라이 정책은 제약으로 명시한다. 완성된 다이어그램은 시뮬레이션 파형과 대조하고, SVA/PSL 등의 형식 명세와 함께 검증하며, 경계값 테스트의 기준으로도 사용한다. 사양서, 테스트케이스 자동 생성, CI의 시뮬레이션과 파형 캡처까지 연결할 수 있다.
제약 위반이 발견되면 지연 파라미터와 상태 전이를 다시 설계한다. 멀티클럭 경로에서 메타안정성 위험이 보이면 동기화기를 삽입하고 데이터 유효 창을 확장한다.
하드웨어와 실시간 시스템에서의 적용
디지털 하드웨어와 SoC 설계에서는 AXI/AHB 전송의 핸드셰이크, Ready/Valid 타이밍, back-to-back 전송 간격을 정의할 때 활용한다. 비동기 도메인 동기화와 리셋 deassert 순서 검증도 대표적인 대상이다.
임베디드 SW와 펌웨어에서는 인터럽트 중첩과 마스킹을 타임라인에 두고 ISR 레이턴시 및 우선순위 영향을 분석한다. DMA와 주변장치 사이에서는 버퍼 유효 구간, 타임아웃, 재시도 흐름을 명세하는 데 쓸 수 있다.
실시간·네트워크 시스템에서는 RTT 분포와 타이머 튜닝의 관계, 지수 백오프 동작을 표현한다. 자동차/CPS 영역에서는 CAN/LIN 스케줄, 데드라인, 슬롯 간섭 분석에도 적용된다.
WaveDrom과 SVA로 표현하는 시간 조건
WaveDrom은 브라우저/CLI에서 JSON으로 파형을 표현한다. 실행 환경은 Node.js 18+ 또는 wavedrom-editor이다.
{
"signal": [
{ "name": "clk", "wave": "p....|..." },
{ "name": "req", "wave": "0.1..0|1." },
{ "name": "ack", "wave": "0...1.|0." },
{ "name": "data", "wave": "x.=.=.|x.", "data": ["D0", "D1"] }
]
}
SystemVerilog Assertion은 시뮬레이터인 QuestaSim/VCS와 IEEE 1800-2012 환경에서 시간 제약을 검증 가능한 형태로 기술하는 방식이다.
// req 상승 후 1~3사이클 내 ack 응답 보장
property req_ack_p;
@(posedge clk) $rose(req) |=> ##[1:3] ack;
endproperty
assert property (req_ack_p);
// ack 유지 최소 펄스폭 2사이클 보장
property ack_pulse_min;
@(posedge clk) $rose(ack) |=> ack[*2];
endproperty
assert property (ack_pulse_min);
시간 제약을 앞당겨 확인했을 때의 효과
명세 불일치와 타이밍 경합을 사전에 제거하면 기능 결함이 20~40% 감소할 것으로 예상된다. 개발·검증·고객이 같은 시각 자료를 기준으로 검토하면 리뷰 시간은 30% 내외 단축될 수 있다.
경계와 예외 시나리오를 체계화하면 검증 커버리지는 1020%p 개선될 수 있다. CDC와 셋업·홀드 위반을 조기에 식별하면 STA·P&R 반복 회수도 12회 절감할 수 있다.
표현 도구를 고르는 기준
| 도구/방식 | 성능 | 확장성 | 일관성 | 안정성 | 운영 편의 |
|---|---|---|---|---|---|
| WaveDrom (JSON 파형) | 경량 렌더링 우수 | 텍스트 기반 높음 | 서식 일관 용이 | 브라우저/CLI 안정 | 문서/PR 리뷰 연계 용이 |
| PlantUML Timing (UML 계열) | 중간 | 다이어그램 확장 | UML 문맥 일관 | JVM 기반 안정 | 설계 문서 통합 용이 |
| EDA 파형뷰어(GTKWave 등) | 대규모 파형 우수 | 신호 수천개 처리 | 시뮬레이션 근거 | 벤더 도구 성숙 | 디버깅 최적화 |
| 전문 UML 툴(EA/MagicDraw 등) | 중간 | 모델 기반 확장 | 모델-코드 일관 | 엔터프라이즈급 | 협업/버전관리 강점 |
도구 기능과 버전은 최신 정보를 확인할 필요가 있다. 선택할 때는 조직 표준과 워크플로우 적합성을 기준으로 삼는다.