RTL to GDS: 2. RTL Lint

RTL to GDS: 2. RTL Lint
Photo by krakenimages / Unsplash

TL;DR:

  • RTL Lint는 RTL 단계에서 Structural error, Coding style violation, Synthesis v.s. Simulation mismatch를 Vectorless로 Static verifcation한다.
  • Latch, X-prop, CDC 전 단계 이슈, Reuse 규칙 위반 등을 거르는 것이 목표다.
  • Tape-out 이후의 치명적 버그 비용을 RTL 단계에서 최소화하는 것이 핵심 목적이다.
  • 업계에서는 Synopsys VC SpyGlass Lint 같은 툴로 Rule 기반 분석을 수행한다.

SpyGlass Lint Methodology: Static Verification의 표준

업계 표준 RTL Lint 툴인 Synopsys VC SpyGlass Lint는 정의된 Rule을 기반으로 RTL 코드를 검사합니다. 단순한 구문 검사를 넘어, SpyGlass는 다음과 같은 심층 분석을 수행합니다.

  1. Structural Analysis: Floating Pin/Port, Multiple Driver 등 회로 구조적 결함을 찾습니다.
  2. Simulation-Synthesis Mismatch Check: 앞서 언급한 Latch, Full/Parallel Case 등 시뮬레이션과 합성이 달라질 수 있는 코드를 검출합니다.
  3. Design Reuse Compliance (STARC/OpenMORE): IP Reuse을 위해 산업 표준 코딩 스타일을 준수하는지 검사합니다.

프로젝트에서는 보통 *.prj 파일에 소스 코드와 라이브러리를 정의하고, *.sgdc (SpyGlass Design Constraints) 파일에 클럭과 리셋 정보를 정의한 후, check_design, check_rules 등의 Goal을 실행하여 리포트를 분석합니다.


Clock Domain Crossing (CDC): 보이지 않는 위협의 관리

복잡한 SoC에는 엄청나게 많은 Clock들이 있습니다. 최근 설계되고 있는 최신 PCIe Subsystem의 Clock의 SDC를 보면, 선언된 clock만 1,000개가 넘는 경우가 있습니다.

최신 SoC는 CPU, GPU, 메모리 컨트롤러, 다양한 주변 장치들이 각기 다른 속도의 클럭으로 동작하며, 이들 사이에는 수백, 수천 개의 신호 교환이 일어납니다. CDC Bug는 칩 제작 후 간헐적인 오동작이나 특정 온도/전압 조건에서의 Chip Kill으로 이어지므로, RTL 단계에서 완벽하게 해결해야 합니다.

2.1 Metastability: 물리학적 불확정성

서로 다른 Clock 특성의 도메인 사이에서 신호가 전달될 때, 신호가 수신 클럭의 엣지 근처에서 변화하면, Flip flop 내부의 Capacitor 충전이 불완전하게 이루어져 출력이 논리 '0'도 '1'도 아닌 중간 전압 레벨에 머무르는 상태가 됩니다. 이를 Metastability라고 합니다.

이 글에서 CDC를 자세히 알아볼 것은 아니고, CDC에 대한 것을 고려해야 정도만 이해하시면 됩니다.

Metastability state는 이론적으로 무한히 지속될 수 있으나, 확률적으로 일정 시간이 지나면 '0'이나 '1' 중 하나로 안정화됩니다.

문제는 이 안정화 시간이 클럭 주기를 초과할 경우, 후단 로직에 오염된 값이 전파되어 시스템 전체가 오동작하게 된다는 점입니다. 이를 정량화한 지표가 MTBF(Mean Time Between Failures)입니다.

2.2 Single-bit Signal Synchronization: 제어 신호의 안전한 전달

단일 비트 제어 신호(Flag, Interrupt, Enable 등)를 넘기는 가장 기본적인 방법은 수신 도메인에서 신호가 안정화될 시간을 벌어주는 것입니다.

2.2.1 Synchronizer, FIFO, Pulse synchronizer

가장 널리 사용되는 기법으로, 수신 도메인 클럭으로 동작하는 두 개의 플립플롭을 직렬로 연결하는 방식입니다.

  • 동작 원리: 첫 번째 플립플롭이 준안정 상태에 빠지더라도, 한 클럭 주기라는 시간적 여유를 주어 두 번째 플립플롭이 샘플링하기 전까지 신호가 안정화되도록 유도합니다. Power와 Area를 더 차지하더라도, 높은 신뢰성이 요구되는 경우 3-FF 이상을 사용하기도 합니다.
  • 제약 조건: 송신 도메인에서 보낸 펄스 신호는 수신 도메인 클럭 주기의 1.5배에서 2배 이상 유지되어야 합니다. 만약 송신 펄스가 너무 짧으면 수신 측 클럭 엣지 사이(Setup/Hold window 밖)에서 신호가 변했다가 사라져버려, 수신 측이 신호를 영원히 놓치는 현상이 발생할 수 있습니다.

아래 표는 싱글 비트 동기화 기법들의 구조적 차이를 요약한 것입니다.

2.2.2 Pulse Synchronizer (Toggle Synchronizer)

https://www.youtube.com/watch?v=ovQ5VYlEc8o

송신 클럭이 수신 클럭보다 매우 빨라 펄스 폭 제약을 만족시키기 어려운 경우(Fast-to-Slow), Pulse Synchronizer를 사용합니다.

  1. Toggle Generation: 송신 도메인에서 펄스가 들어오면 플립플롭의 상태를 반전(Toggle)시킵니다. 즉, 펄스를 레벨 신호로 변환합니다.
  2. Synchronization: 변환된 레벨 신호를 2-FF Synchronizer를 통해 수신 도메인으로 넘깁니다.
  3. Edge Detection: 수신 도메인에서 XOR 게이트 등을 이용해 레벨의 변화(Edge)를 감지하여 다시 펄스로 복원합니다.22
Deep Insight: Pulse Synchronizer는 연속적인 펄스(Back-to-back pulses) 처리에 취약합니다. 펄스를 레벨로 바꾸고 다시 펄스로 만드는 과정에서 수신 도메인의 클럭 수 사이클이 소요되므로, 입력 펄스들 사이에는 충분한 간격(Separation)이 보장되어야 합니다. 그렇지 않으면 두 번째 펄스가 무시될 수 있습니다.26

2.3 Multi-bit Signal Synchronization: Data Coherency Problem

신입 엔지니어가 자주 범하는 실수는 "Multi-bit Data Bus를 각각 2-FF로 Synchronize하는 것"입니다. 이는 Data Incoherence(데이터 불일치) 문제를 야기합니다.

AMD

예를 들어 b00에서 b11로 값이 변할 때, 배선 지연(Routing Delay)이나 소자 특성 차이(Skew)로 인해 수신 측의 두 플립플롭에 도착하는 시간이 미세하게 다를 수 있습니다. 이로 인해 한 비트는 현재 클럭에, 다른 비트는 다음 클럭에 캡처되면 수신 측은 b01이나 b10이라는, 송신 측이 보낸 적 없는 중간 값을 보게 됩니다.

2.3.1 Gray Code Encoding

카운터 값과 같이 순차적으로 변하는 멀티 비트 신호에는 Gray Code를 사용합니다. Gray Code는 인접한 값으로 변할 때 오직 한 비트만 변한다는 수학적 특성을 가집니다(예: 1(001) -> 2(011)). 따라서 Bit 간 Skew가 있더라도 수신 측은 "이전 값" 아니면 "현재 값" 둘 중 하나만 보게 되며, 엉뚱한 중간 값은 발생하지 않습니다. 이는 Async FIFO의 Read/Write 포인터 동기화에 필수적으로 사용됩니다.

2.3.2 Handshake Protocol (Request-Acknowledge)

데이터 버스의 값이 임의로 변하는 일반적인 경우에는 Handshake 프로토콜을 사용해야 합니다.

https://www.sciencedirect.com/topics/computer-science/handshake-protocol
  • 4-Phase Handshake:
    1. 송신 측이 데이터를 버스에 싣고 Req 신호를 High로 올립니다.
    2. 수신 측은 Req를 2-FF로 동기화하여 감지한 후 데이터를 가져가고 Ack를 High로 올립니다.
    3. 송신 측은 Ack를 감지하고 Req를 Low로 내립니다.
    4. 수신 측은 Req Low를 감지하고 Ack를 Low로 내립니다.
    • 가장 안정적이지만, 한 번의 데이터 전송에 최소 4번의 편도 지연 시간이 소요되어 성능(Throughput)이 낮습니다.31
  • 2-Phase Handshake: Req 신호의 레벨이 아닌 토글(Toggle) 자체를 요청으로 간주합니다. 4-Phase에 비해 트랜잭션 속도가 2배 빠르지만, 로직 구현이 더 복잡합니다.32

2.3.3 Asynchronous FIFO

가장 강력하고 범용적인 솔루션은 Async FIFO입니다. 데이터 경로와 제어 경로를 분리하여, 데이터는 듀얼 포트 RAM을 통해 안전하게 저장되고, 포인터(Address)만 Gray Code로 변환되어 각 도메인으로 교차됩니다. 이를 통해 Full/Empty 상태를 생성하여 데이터 유실 없이 고속 전송이 가능합니다. 가장 많이 쓰입니다.

2.4 The Reconvergence Problem: 숨겨진 복병

자주 발생하는 문제가 바로 Reconvergence 문제입니다. 이는 각기 다른 CDC 기법을 통과한 신호들이 수신 도메인 내부에서 다시 합쳐질 때 발생합니다.

https://www.aldec.com/en/support/resources/documentation/articles/2140/print_page

해결책:

  • 관련된 신호들은 가능한 한 송신 도메인에서 미리 조합(Combine)하여 단일 신호로 만든 후 넘겨야 합니다.
  • 불가피한 경우, 멀티 비트 동기화 기법(Gray code, Handshake)을 사용하여 신호 그룹 전체의 도착을 보장해야 합니다.

2.5 SpyGlass CDC Verification: 구조적 검증

CDC 문제는 시뮬레이션으로 잡기 어렵기 때문에, Synopsys SpyGlass CDC와 같은 전용 툴을 사용하여 Static & Structural 분석을 수행해야 합니다. SpyGlass는 RTL 코드를 분석하여 CDC, Glitch, Datahold, Convergence 같은 핵심 위반 사항을 보고합니다.

Enjoyed this article?

Get deep-dive semiconductor analysis and career insights delivered weekly. Free forever — no paywall, no upsell. Funded by sponsorships with a strict editorial firewall (Editorial Standards).

Work with me

Consulting · Collaboration · Support

Paid 1:1 technical consulting, speaker invitations, collaboration proposals, or just want to say thanks — all welcome.

View options →
VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
Support