Altifigence Academy

36 / 52 · Concept

Clock-domain crossings and metastability

2단 동기화기의 적용 범위를 이해하고, 단일 비트·짧은 펄스·다중 비트 전송을 구분합니다.

Translation is not available yet. Showing the original lesson. (한국어)

다른 클록의 입력에는 에지 간격 보장이 없습니다

setup·hold 조건은 데이터가 수신 클록의 에지 주변에서 충분히 안정되어 있어야 한다는 요구입니다. 버튼이나 독립된 다른 클록 도메인의 출력은 수신 에지와 임의의 관계를 가지므로 이 조건을 항상 보장하기 어렵습니다.

그 결과 플립플롭의 내부 상태가 일정 시간 동안 0 또는 1로 빠르게 결정되지 않는 metastability가 발생할 수 있습니다. 일반적인 0/1 RTL 시뮬레이션에는 이런 아날로그 현상이 그대로 표현되지 않습니다. 테스트 파형이 깨끗하다고 CDC가 안전하다는 뜻은 아닙니다.

2단 동기화기는 충분히 오래 유지되는 단일 비트에 사용합니다

SystemVerilog
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 검사 등 도구와 소자에 맞는 처리가 필요합니다. 레지스터 두 개를 썼다는 사실만으로 배치와 경로 조건까지 보장되지는 않습니다.

실패 확률을 낮추지만 0으로 만들지는 않습니다

한 가지 단순화한 모델에서는 평균 실패 간격 MTBF가 다음 경향을 가집니다.

MTBF  eTresolve/τfdstfevent\mathrm{MTBF}\ \propto\ \frac{e^{T_{\mathrm{resolve}}/\tau}}{f_{\mathrm{dst}}f_{\mathrm{event}}}

TresolveT_{\mathrm{resolve}}는 안정될 수 있는 시간, τ\tau는 소자의 특성, fdstf_{\mathrm{dst}}는 수신 클록 주파수, feventf_{\mathrm{event}}는 비동기 입력의 전환 빈도입니다. 실제 계산에는 소자별 상수가 필요합니다. 이 식만으로 임의의 회로에 ‘몇 년 동안 안전하다’는 숫자를 붙일 수는 없습니다.

서로 다른 문제에 같은 회로를 쓰지 않습니다

전달할 정보2단 단일 비트 동기화만으로 충분한가?검토할 구조
충분히 오래 유지되는 level확률·지연 요구를 만족하면 사용 가능목적지 동기화기
목적지 주기보다 짧은 pulsepulse 자체를 놓칠 수 있음pulse 확장, toggle, handshake
동시에 의미가 있는 여러 비트비트마다 다른 시점의 값이 보일 수 있음안정된 bus와 handshake, async FIFO
기계식 버튼접점의 반복 튐은 별개 문제동기화 후 debounce

예를 들어 4비트 값이 0111에서 1000으로 바뀔 때 각 비트를 독립적으로 동기화하면 잠시 존재하지 않았던 조합을 관찰할 수 있습니다. 버스의 일관성을 보존하려면 전체 데이터와 전달 완료의 관계를 설계해야 합니다.

추가 읽기: Computation Structures — Synchronization and Arbitration

Try it yourself

수신 클록이 50MHz이고 입력 pulse 폭은 5ns입니다. 2단 동기화기를 붙였으므로 모든 pulse가 검출된다고 주장할 수 있습니까? 버튼의 튐도 함께 제거됩니까?

Read the explanation

50MHz의 주기는 20ns입니다. 5ns pulse는 수신 에지 사이에 생겼다가 사라질 수 있어 첫 단계부터 놓칠 수 있습니다. 동기화기의 단계 수를 늘리는 것만으로 pulse 보존을 해결하지 못합니다. pulse 확장이나 handshake 등의 계약이 필요하며, 버튼의 bounce에는 별도 debounce가 필요합니다.

Your choice applies to this browser. Change it any time using the footer.