34 / 37 · 개념
클록 도메인 경계와 metastability
2단 동기화기의 적용 범위를 이해하고, 단일 비트·짧은 펄스·다중 비트 전송을 구분합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
다른 클록의 입력에는 에지 간격 보장이 없습니다
setupsetup 클록의 캡처 에지 전에 입력 데이터가 안정되어 있어야 하는 최소 시간입니다. 위반하면 저장 결과를 보장할 수 없습니다. 자세히 보기·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이고 입력 pulse 폭은 5ns입니다. 2단 동기화기를 붙였으므로 모든 pulse가 검출된다고 주장할 수 있습니까? 버튼의 튐도 함께 제거됩니까?
해설 보기
50MHz의 주기는 20ns입니다. 5ns pulse는 수신 에지 사이에 생겼다가 사라질 수 있어 첫 단계부터 놓칠 수 있습니다. 동기화기의 단계 수를 늘리는 것만으로 pulse 보존을 해결하지 못합니다. pulse 확장이나 handshake 등의 계약이 필요하며, 버튼의 bounce에는 별도 debounce가 필요합니다.