46 / 63 · 개념
클록 도메인 경계와 준안정 상태
2단 동기화기의 적용 범위를 이해하고, 단일 비트·짧은 펄스·다중 비트 전송을 구분합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
수신 클록과 무관하게 바뀌는 입력
setupsetup 클록의 캡처 에지 전에 입력 데이터가 안정되어 있어야 하는 최소 시간입니다. 위반하면 저장 결과를 보장할 수 없습니다. 자세히 보기·hold 조건hold 시간 클록의 캡처 에지 후에도 입력 데이터가 안정되어 있어야 하는 최소 시간입니다. 단순히 값을 유지한다는 뜻의 hold와 구별해야 합니다. 자세히 보기은 데이터가 수신 클록의 에지 주변에서 충분히 안정되어 있어야 한다는 요구입니다. 버튼 신호나 독립된 다른 클록 도메인의 출력은 수신 클록과 무관하게 바뀌므로, 이 조건을 항상 만족시키기는 어렵습니다.
그 결과 플립플롭플립플롭 클록의 지정된 에지에서 입력을 저장하고 다음 에지까지 유지하는 소자입니다. 입력은 setup·hold 조건을 만족해야 합니다. 자세히 보기의 내부 상태가 한동안 0 또는 1로 안정되지 않는 metastability가 발생할 수 있습니다. 일반적인 0/1 RTL 시뮬레이션에는 이런 아날로그 현상이 그대로 표현되지 않습니다. 테스트 파형이 깨끗하다고 CDC가 안전하다는 뜻은 아닙니다.
2단 동기화기는 충분히 오래 유지되는 단일 비트에 사용합니다
module level_synchronizer (
input logic clk_dst,
input logic rst_dst,
input logic async_level,
output logic synced_level
);
logic first_stage;
always_ff @(posedge clk_dst) begin
if (rst_dst) begin
first_stage <= 1'b0;
synced_level <= 1'b0;
end else begin
first_stage <= async_level;
synced_level <= first_stage;
end
end
endmodule첫 번째 플립플롭이 불안정해져도 다음 플립플롭이 값을 읽기 전까지 안정될 시간을 주는 구조입니다. 기능 회로에는 첫 단계의 출력을 직접 분기하지 않고 마지막 단계의 출력을 사용합니다. 위 예제의 reset은 수신 클록을 기준으로 동기식이라고 가정합니다.
실제 구현에서는 동기화기동기화기 수신 클록과 타이밍이 다른 신호를 수신 클록에 맞춰 처리하도록 하는 회로입니다. 단일 비트용 다단 플립플롭을 다중 비트 데이터에 그대로 적용하면 안 됩니다. 속성 지정, 단계 사이의 짧은 배선, STA·CDC 검사 등 도구와 소자에 맞는 처리가 필요합니다. 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기 두 개를 썼다는 사실만으로 배치와 경로 조건까지 보장되지는 않습니다.
비동기 입력은 첫 단계에 들어가고 기능 회로는 마지막 단계만 사용합니다. 다음 단계가 값을 읽을 때까지 안정될 시간을 주지만, 아날로그 metastability준안정 저장소자가 일시적으로 0이나 1로 안정되지 못하는 아날로그 상태입니다. 동기화 회로는 이 상태가 다음 회로로 전파될 확률을 줄이지만, 발생 가능성을 0으로 만들지는 않습니다.가 반드시 사라진다는 보장은 없습니다.
- 비동기 level: 목적지 클록과 위상 무관
- meta FF: 불안정성이 생길 수 있음
- synced FF: 다음 목적지 에지에서 캡처
- 기능 회로: 마지막 단계만 사용
실패 확률을 낮추지만 0으로 만들지는 않습니다
단순화한 모델에서는 평균 실패 간격인 MTBF를 다음과 같은 관계로 나타낼 수 있습니다.
는 안정될 수 있는 시간, 는 소자의 특성, 는 수신 클록 주파수, 는 비동기 입력의 전환 빈도입니다. 실제 계산에는 소자별 상수가 필요합니다. 이 식만으로 임의의 회로에 ‘몇 년 동안 안전하다’는 숫자를 붙일 수는 없습니다.
서로 다른 문제에 같은 회로를 쓰지 않습니다
| 전달할 정보 | 2단 단일 비트 동기화만으로 충분한가? | 검토할 구조 |
|---|---|---|
| 충분히 오래 유지되는 level | 확률·지연 요구를 만족하면 사용 가능 | 목적지 동기화기 |
| 목적지 주기보다 짧은 pulse | pulse 자체를 놓칠 수 있음 | pulse 확장, toggle, handshake |
| 동시에 의미가 있는 여러 비트 | 비트마다 다른 시점의 값이 보일 수 있음 | 안정된 bus와 handshake, async FIFO |
| 기계식 버튼 | 접점의 반복 튐은 별개 문제 | 동기화 후 debounce |
예를 들어 4비트 값이 0111에서 1000으로 바뀔 때 각 비트를 독립적으로 동기화하면 실제로 전송한 적이 없는 비트 조합이 잠시 나타날 수 있습니다. 버스 전체의 값이 일관되게 전달되도록, 데이터와 전송 완료의 관계를 함께 설계해야 합니다.
추가 읽기: MIT OpenCourseWare — Synchronization, Metastability and Arbitration
직접 생각해 보기
수신 클록이 50MHz이고 입력 펄스의 폭은 5ns입니다. 2단 동기화기를 붙였으므로 모든 펄스를 검출한다고 할 수 있나요? 버튼의 바운스도 함께 제거되나요?
해설 보기
50MHz의 주기는 20ns입니다. 폭이 5ns인 펄스는 수신 에지 사이에 생겼다가 사라질 수 있어 첫 단계부터 놓칠 수 있습니다. 동기화기의 단계 수를 늘리는 것만으로는 모든 펄스를 검출할 수 없습니다. 펄스 확장이나 핸드셰이크 같은 전달 방식이 필요하며, 버튼의 바운스는 디바운싱으로 따로 처리해야 합니다.