2-ff 동기화 프로그램은 어떻게 적절한 동기화를 보장합니까?


9

2-ff 싱크로 나이저를 사용하는 것은 신호 경계를 가로 지르는 신호의 표준입니다. 그리고 다음과 같은 메커니즘을 설명하는 많은 종이 / 그림이 있습니다.여기에 이미지 설명을 입력하십시오

보인다 BCLK가 만의 샘플링 펄스 수 ADAT을 한 번 (두 번째 상승 에지에서 BCLK 의 출력 빌리티 발생) bq1_dat . 다음 활성 클럭 에지에서 bq1_dat를 어떻게 "높음"으로 샘플링 할 수 있습니까?


내 질문 외에도 신호가 다른 클럭 도메인으로 안전하게 통과 할 것이라고 생각하는 것을 추가하고 싶습니다 (2-FF는 MTBF 요구 사항을 충족시키기에 충분하다고 가정). 실수가 있으면 수정 해주세요.

여기에 이미지 설명을 입력하십시오

ps : 준 안정 상태는 "방황"파형을 표시하지 않지만 '1'또는 '0'이 아닌 레벨을 표시합니다. 다음 그림은 준 안정 출력의 예를 보여줍니다.여기에 이미지 설명을 입력하십시오

원래 그림은 WJ Dally의 EE108A, 강의 13 : 메타 스타 빌리티 및 동기화 실패 (이전의 플립 플롭이 나빠질 때)에 대한 강의 노트에서 발췌 한 것입니다.


4
나는 단지 "돌고 다닐 수있는"준 안정 출력을 보여주는 다이어그램이 매우 오해의 소지가 있다고 말하고 싶다. 그것은 전이성이 전혀 보이지 않습니다. FF가 준 안정화되면 출력은 단일의 특정 중간 전압 (값은 구현 기술에 따라 다름)으로 보내져 그대로 유지됩니다. 예측할 수없는 시간이 지나면 전압이 높거나 낮게 스윙하며 어떤 방식으로 예측할 수 없습니다.
Dave Tweed

@Dave Tweed ♦ 댓글 주셔서 감사합니다. 전이성에 관해 읽은 거의 모든 문서에서, 나는 "돌고 다니는"파형을 보았습니다. 나는 주변을 검색하고 메타 안정 상태가 캡처 된 o-scope에서 촬영 한 게시물을 발견했습니다 ( 플립 플롭에 셋업 위반이 있고 메타 안정 가능하면 입력 값으로 안정화됩니까? ). 그림의 원래 참조에 대한 링크가 해당 게시물에 포함되어 있습니다.
fiedel

그렇습니다. 그것은 나의 요점을 완벽하게 보여줍니다. 그리고 Powerpoint 프리젠 테이션은 많은 좋은 정보를 가지고 있습니다.
Dave Tweed

답변:


8

간단한 대답은 그들이 스스로하지 않는다는 것입니다. 동기화 기는 데이터를 가로 지르는 것이 아니라, 많은 다른 신호를 공급하고 문제를 일으키는 준 안정 신호로 끝나지 않도록합니다. 다이어그램에 표시된 두 번째 FF는 준 안정적인 첫 번째 FF 출력을 포착하여 디자인을 통해 더 이상 전파되는 것을 방지합니다.

다양한 종류의 신호가 있으며 동기화기를 포함하는 방법은 사용중인 신호에 따라 다릅니다. 그러나 몇 가지 일반적인 유형을 살펴 보겠습니다.

  1. 트리거 신호 -또는 기본적으로 실행중인 다른 것을 시작해야하는 펄스 인 신호. 이것들은 일반적으로 데이터를 가지고 있지 않으며, 당신이 관심있는 것은 다른 클럭 도메인에서 무언가를 시작하기 위해 상승 에지가 있다는 것입니다. 이것들을 극복하기 위해서는 동기화 기가 필요하지만 (필수적으로 다이어그램에 표시된 것을 수행) 조금 더 필요합니다.

    가장 간단한 옵션은 펄스를 연장하는 것입니다. 기본적으로 입력 펄스가 대상 클록의 1 클럭주기 이상 인지 확인하십시오 (대상 레지스터의 설정 및 홀드 시간보다 적어도 1주기 이상 길어야합니다) . 예를 들어, 20MHz 클럭에서 15MHz 클럭으로가는 경우 펄스가 입력에서 2 클럭 사이클이되어 대상 클록에 표시되고 손실되지 않도록해야합니다. 또한 신호가 어떻게 전달되는지에 대한 귀하의 질문에 답변합니다. 펄스가 하나의 대상 클럭주기보다 넓은 경우, 첫 번째 클럭 에지에서 준 안정화되고 0으로 표시되면 두 번째 클럭 에지에서 펄스를 확실히 포착합니다.

    이 유형의 신호를 사용하면 펄스가 도달 한 것에 만 관심이 있기 때문에 출력 신호가 시간의 높은 두 클럭 사이클로 끝나고 나머지는 한 사이클 만 끝나도 상관 없습니다. 단일 사이클 펄스인지 확인해야하는 경우 간단한 에지 검출기 회로를 인스턴스화 할 수 있습니다.

  2. 제어 버스 – 또는 가능한 유형의 데이터 버스. 멀티 비트 데이터 스트림이 있으면 동기화 상태를 유지해야하므로이 방법이 더 어려울 수 있습니다. 이 경우 "핸드 셰이 킹"이라는 것을 구현해야합니다. 기본적으로 소스 클럭에 데이터를로드하고 유지합니다. 그런 다음 동기화기를 통해 요청 신호 (1과 같은)를 보냅니다. 요청 신호가 전달되면 대상 버스에서도 데이터 버스가 안정화된다는 것을 알게됩니다. 그런 다음 대상의 레지스터 뱅크에 클럭킹 할 수 있습니다. 그런 다음 대상은 확인 펄스를 다시 보내 소스에 다음 단어를로드 할 수 있음을 알립니다.

    다른 종류의 버스를 보내기 전에 제어 워드를 보내야하는 대상 클럭에 제어 워드를 보내야하는 경우 (예 : 무언가 명령을 보내는 경우) 이러한 버스를 사용합니다.

  3. 데이터 버스 -데이터를 지속적으로 또는 버스트로 내뿜는 소스가있는 데이터의 경우 동기화 기보다 FIFO를 사용하는 것이 좋습니다. FIFO는 듀얼 클럭 메모리를 사용하여 데이터를 보유하고 카운터와 함께 FIFO에 얼마나 많은 데이터가 있는지 추적합니다. 공간이 있으면 FIFO에 데이터를 쓴 다음 쓰기 주소를 증가시킵니다. 이 주소는 다음 일반적으로 주소의 각 증가는 원인이 있음을 보장하는 "회색 코딩"기법으로 인코딩 주소 버스의 비트를 변경하려면 여러 비트를 동기화 할 필요가 없습니다. 그런 다음이 주소는 (동기화 체인 중 하나를 통해) 대상 도메인으로 전송되며 여기서 읽기 주소와 비교됩니다. FIFO에 데이터가 있으면 대상 클럭 포트를 사용하여 메모리에서 데이터를 읽을 수 있습니다. 읽기 주소는 마찬가지로 회색으로 코딩되고 다른 동기화기를 통해 소스로 다시 전송되므로 쓰기 포트가 FIFO에 공간이 있는지 계산할 수 있습니다.

  4. 리셋 신호 – 일반적으로 "비동기 어설트, 동기 디 어서 트"에서 수정 된 버전의 동기화를 사용합니다. 이 수정 된 버전에서, 제 1 플립 플롭에 입력 된 데이터는 GND에 연결되고, 대신 수신 리셋 신호는 동기화 기에서 각 플립 플롭의 비동기식 프리셋 신호에 연결된다. 결과적으로 출력 신호가 높을 때 완전히 비동기적인 출력 신호가 발생하지만 동기화 체인은 레지스터 체인에서 0을 통해 클럭함으로써 대상 클록과 동 기적으로 낮아지게합니다.

    이 유형의 동기 장치는 데이터 및 제어에 끔찍하지만 신호 재설정에 완벽하게 적합합니다. 모든 대상 논리가이 체인의 출력을 도메인에있는 모든 레지스터의 비동기 리셋 입력에 공급하는 경우 모든 레지스터가 알려진 상태로 강제 설정되므로 assert에서 메타 스타 빌리티에 대한 걱정이 거의 없습니다 (비동기 적 임에도 불구하고). 그런 다음 소스 도메인에서 리셋 신호가 디 어설트되면 대상 도메인에서 동 기적으로 디 어설트되므로 모든 레지스터는 동일한 클록 사이클 (비동기 디 어설트 인 경우 +/- 1 사이클이 아닌)에서 리셋되지 않습니다.


위에서 볼 수 있듯이 신호에 2 개의 플립 플롭 동기기를 붙이는 것보다 클록 도메인 교차를 수행하는 것이 훨씬 더 복잡합니다. 사용되는 정확한 방법은 응용 프로그램에 따라 다릅니다.


Tom의 답변 외에도 PoC 에 대한 참조를 추가하고 싶습니다 .이 사례에는 구현이 있습니다. 동기 워드 프로세서는 RTD에 사용할 수 있습니다. PoC는 기본 2-FF 싱크로 나이저를위한 2 개의 플립 플롭 체인 이론에 추가하여 sync_BitsXilinx 및 Altera FPGA를위한 전용 구현 ( )을 제공 하여 메타 스타 빌리티 동작을 개선합니다. 2-FF 싱크로 나이 저는 예를 들어 sync_Strobe펄스에 대해 더 복잡한 싱크로 나이저를 구축 하는 데 사용됩니다 .
Paebbels

동기화 전략을 자세히 소개해 주셔서 감사합니다. 이 사진은 Clifford E. Cummings의 "CDC (Clock Domain Crossing) 설계 및 검증 기술을 사용하여 확인"에서 나왔습니다. 1 비트 신호의 경우 너비가 수신 측의 1 클럭 사이클 + 설정 시간 + 홀드 시간 이상이어야 안전하게 통과 할 수 있음을 이해합니다. 이 그림에서 adat의 펄스는 하강 에지에서 bclk 샘플에 의해 한 번만 샘플링되므로 bq1_dat가 준 안정화되므로이 기준이 충족되지 않습니다.
fiedel

... 결과적으로 bclk의 다음 상승 에지에서 bq1_dat의 판독 값은 '0'또는 '1'일 수 있습니다. 사진의 동기화가 실패한 것 같습니다. 내가 맞아?
fiedel

@Paebbels 참고해 주셔서 감사합니다. 보세요 =)
fiedel

이 질문을 답변으로 게시하지 말고 질문으로 편집해야하지만 본질적으로 예에서 출력에서 ​​1을 얻거나 얻지 못할 수 있습니다.
Tom Carpenter

1

1) 도면을 예로 사용하면 aclk와 bclk는 서로 비동기 적입니다. 즉, 클럭 소스가 다릅니다. 그들은 adat를 유효한 데이터로 표시하지만 aclk에만 동기화합니다. bclk 싱크로 나이저가 사용됩니다.

2)이 그림은 최악의 시나리오를 가정합니다. bq1 FF는 데이터 끝 부분의 일부만 포착하여 출력이 일반적으로 가비지 인 준 안정 상태를 생성하기 때문에 bq1_dat가 지저분한 출력입니다. 요령은 다음과 같습니다. Bq2는 bq1과 동일한 bclk를 갖지만 데이터가 통과하여 bq2_dat에 표시 되려면 2 클럭 사이클의 bclk가 필요합니다.

3) 첫 번째 bclk가 데이터의 일부를 캡처하여 지저분한 결과를 낳았지만 두 번째 bclk는 1 클럭 사이클 후에 bq1_dat의 모호한 데이터가 높거나 낮은 상태로 정착하기에 충분한 시간입니다. 지저분한 bq1_dat 펄스는 bq2가 유효한 논리 '1'(논리 높음)을 캡처하고 유효하고 현재 동기화 된 데이터 (논리 높음)로 bq2_dat에 전달할 정도로 오래 지속되었습니다.

4) 다운 스트림에서, bclk를 사용하는 모든 시계는 작업 할 데이터를 동기화합니다. 최초의 bclk FF만이 준 안정 상태를 다루어야한다는 것을 주목하라 . adat가 피코 또는 나노초에 너무 늦었다면 출력은 로직이 낮을 수 있습니다. 이 플립 플롭은 클럭의 상승 에지에서만 데이터 입력을 샘플링한다는 것을 기억하십시오. 상승 에지 전후에 발생하는 현상은 무시됩니다.


그러나 bclk 지연은 확률적인 안전성 측정 수단 만 제공하며 정확한 양은 FF 기술과 bclk 기간에 따라 다릅니다. 일부 경우에는 오류율을 허용 가능한 수준으로 낮추기 위해 3 개 이상의 단계가 필요할 수 있습니다.
WhatRoughBeast 2016 년

@WhatRoughBeast. 최악의 경우 시나리오의 많은 동기화 단계와 디지털 필터링이 필요하다는 것을 알고 있습니다. 분명히 내 대답은 너무 간단했습니다.
Sparky256 2016 년

@ Sparky256 저의 퍼즐은 3) 귀하의 의견에 있습니다. bq1_dat가 준 안정 상태 일 때 bq2가 어떻게 '1'을 캡처 할 수 있습니까?
fiedel

@fiedel, bq2가 최소한 깨끗한 입력을 캡처 할 수있게하는 데 두 가지가 기여합니다. 먼저 준 안정 상태는 전체 클록주기 동안 지속되어야합니다. 둘째, bq1의 준 안정 (의사-중간 레일) 값이 bq2를 준 안정하게하는 창에있을 가능성이 적거나 피하도록 최적화 될 수 있습니다. 이 기술로 인해 5 %의 전이 가능성이 충분히 오래 지속된다고 가정 해보십시오. 3-FF 싱크 스테이지는 두 셀이 모두 실패해야하므로이를 0.25 %로 줄입니다. Messy 는 실제로 거의 안정적인 상태에서 잘 정의 된 지수 편차입니다.
Sean Houlihane 2016 년

@SeanHoulihane. 설명 주셔서 감사합니다. '상승 에지'라는 용어는 (수용 가능하거나 안정적인) 데이터 수용 창이 상승 에지의 중간 지점에 있고 몇 피코 또는 나노초 동안 만 지속되기 때문에 일부 혼동됩니다. 로직 1 또는 0에 대한 IC의 임계 값과 비교 한 전압 레벨에 따라
메타 스타트 가능
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.