버스 동기화 회로의 타이밍 제약


10

클럭 도메인 전체에 넓은 레지스터를 전달하기위한 버스 동기화 회로가 있습니다.

비동기 재설정 논리를 생략하고 간단한 설명을 제공하겠습니다.

데이터는 한 시계에서 생성됩니다. 업데이트는 시계 가장자리 (수십 개 이상)와 떨어져 있습니다.

PROCESS (src_clk)
BEGIN
   IF RISING_EDGE(clock) THEN
      IF computation_done THEN
          data <= computation;
          ready_spin <= NOT ready_spin;
      END IF;
   END IF;
END PROCESS;

새로운 데이터에 대한 제어 신호는 NRZI로 인코딩됩니다 (따라서 버스의 유효한 단어는 제어 신호의 전환에 해당합니다). 제어 신호는 동기화 기 역할을하는 DFF 체인을 통과합니다.

PROCESS (dest_clk)
BEGIN
   IF RISING_EDGE(dest_clk) THEN
      ready_spin_q3 <= ready_spin_q2;
      ready_spin_q2 <= ready_spin_q1;
      ready_spin_q1 <= ready_spin;
   END IF;
END PROCESS;

동기화 회로는 짧은 지연을 발생시켜 데이터 버스가 안정화되는 데 충분한 시간을 제공합니다. 데이터 버스는 전이 가능성의 위험없이 직접 샘플링됩니다.

PROCESS (dest_clk)
BEGIN
   IF RISING_EDGE(dest_clk) THEN
      IF ready_spin_q3 /= ready_spin_q2 THEN
         rx_data <= data;
      END IF;
   END IF;
END PROCESS;

이것은 Cyclone II FPGA로 합성 될 때 컴파일되고 잘 작동합니다. 그러나 TimeQuest는 동기화 프로그램을 인식하지 않기 때문에 설정 및 보류 시간 위반을보고합니다. 더 나쁜 것은, Quartus 매뉴얼은 말합니다

가장 느슨해 진 경로를 개선하는 데 집중하십시오. Fitter는 가장 느슨해 진 경로에서 가장 열심히 작동합니다. 이러한 경로를 수정하면 Fitter가 설계에서 다른 실패한 타이밍 경로를 개선 할 수 있습니다.

Quartus가 디자인의 다른 영역에 Fitter 노력을 기울일 수 있도록 프로젝트에 올바른 타이밍 제약 조건을 추가하고 싶습니다.

set_multicycle_path데이터 라인이 안정화하기 위해 대상 클럭의 여러 사이클을 갖기 때문에 올바른 SDC (Synopsis Design Constraint) 명령 이라고 확신 하지만 클럭 도메인 교차 로직을 설명하기 위해이 명령을 사용하는 완전한 예제를 찾을 수 없습니다 .

싱크로 나이저를위한 SDC 타이밍 제약 조건을 작성하는 데 도움이 될만한 지침에 감사드립니다. 이 방법으로 문제가 발생하면 알려주십시오.


시계 세부 사항 :

외부 클록 생성기 : refclk = 20 MHz, refclk2 = refclk / 2 (10 MHz 및 관련)의 두 채널.

알테라 PLL : src_clk = refclk * 9/5 = 36 MHz

알테라 PLL : dest_clk = refclk2 * 10 = 100 MHz

또한 100 MHz src_clk 및 36 MHz dest_clk와 함께 다른 방향으로 진행되는 데이터가 있습니다.


TL; DR : 위 코드에 대한 올바른 SDC 타이밍 제약 조건은 무엇입니까?


1
이것은 제안 된 FPGA 디자인 사이트 에서 더 나을 것이지만 아직 그 제안은 베타에 도달하지 않았습니다.
Ben Voigt 2016 년

src_clk 및 dest_clk에 대한 시계 정의를 게시 할 수 있습니까? 그것들은 어떤 식 으로든 관련되어 있습니까 (동기식 배수)? 시계와 관련이없는 경우이 상황에서 set_false_path를 사용하는 것이 일반적입니다.
Andy

@ 앤디 : 나는 몇 가지 세부 사항을 추가했습니다. 도와 주셔서 감사합니다.
벤 Voigt

답변:


9

Quartus에 대한 경험이 없으므로 일반적인 조언으로 취급하십시오.

클록 도메인 사이의 경로에서 작업 할 때 타이밍 도구는 클록을주기의 최소 공통 배수로 확장하고 가장 가까운 에지 쌍을 선택합니다.

36 MHz 클럭 (27.777 ns)에서 100 MHz 클럭 (10 ns)까지의 경로의 경우 빠른 계산을 올바르게 수행하면 가장 가까운 상승 에지 쌍이 소스 클럭에서 138.888ns이고 대상 클럭에서 140ns입니다. 이는 해당 경로에 대한 900MHz 제약 조건입니다. 반올림 (또는 관계가없는 시계)에 따라 그보다 나빠질 수 있습니다.

이 구조에 대한 제약 조건을 작성하는 방법에는 적어도 세 가지가 있습니다. 나는 시계를 부를 것이다. fast_clk그리고 slow_clk그것은 설명을 위해 더 명확하다고 생각한다.

옵션 1 : set_false_path

가장 쉬운 해결책은 set_false_path클럭 간의 타이밍을 비활성화하는 것입니다.

set_false_path -from [get_clocks fast_clk] -to [get_clocks slow_clk]
set_false_path -from [get_clocks slow_clk] -to [get_clocks fast_clk]

동기화 프로그램이 올바르게 작동하기 위해서는 타이밍 요구 사항이 있으므로 이는 정확하지 않습니다. 물리적 구현으로 인해 제어 신호에 비해 데이터가 너무 많이 지연되면 동기화 프로그램이 작동하지 않습니다. 그러나 경로에 로직이 없으므로 타이밍 제약 조건을 위반할 가능성이 없습니다. set_false_pathASIC에서도 이러한 유형의 구조에 일반적으로 사용되며, 낮은 확률의 실패에 대한 노력과 위험의 절충이 FPGA보다 더 신중합니다.

옵션 2 : set_multicycle_path

로 특정 경로에 추가 시간을 허용 할 수 있습니다 set_multicycle_path. 밀접하게 관련된 클럭 (예 : 1X 및 2X 클럭과 상호 작용)과 함께 멀티 사이클 경로를 사용하는 것이 더 일반적이지만 도구가 충분히 지원하는 경우 여기에서 작동합니다.

set_multicycle_path 2 -from [get_clocks slow_clk] -to [get_clocks fast_clk] -end -setup
set_multicycle_path 1 -from [get_clocks slow_clk] -to [get_clocks fast_clk] -end -hold

셋업의 기본 에지 관계는 단일 사이클 set_multicycle_path 1입니다. 이 명령을 사용하면 -end설정 경로에 대해 엔드 포인트 클록 ( )을 한 번 더 사이클 할 수 있습니다. -hold더 아래 참조를 들어, 멀티 사이클 경로를 설정할 때 적은 설정 제한보다 숫자 하나 조정은 거의 항상 필요하다.

다른 방향으로 경로를 비슷하게 제한하려면 (빠른 클럭의 한주기만큼 제약 조건을 완화) 다음으로 변경 -end하십시오 -start.

set_multicycle_path 2 -from [get_clocks fast_clk] -to [get_clocks slow_clk] -start -setup
set_multicycle_path 1 -from [get_clocks fast_clk] -to [get_clocks slow_clk] -start -hold

옵션 3 :로 직접 요구 사항 지정 set_max_delay

이것은 효과와 비슷 set_multicycle_path하지만 가장자리 관계와 보류 구속 조건에 대한 영향을 고려 하지 않아도됩니다.

set_max_delay 10 -from [get_clocks fast_clk] -to [get_clocks slow_clk]
set_max_delay 10 -from [get_clocks slow_clk] -to [get_clocks fast_clk]

set_min_delay보류 점검을 위해이 기능을 페어링 하거나 기본 보류 점검을 그대로 둘 수 있습니다. set_false_path -hold도구에서 지원하는 경우 보류 검사를 비활성화 할 수도 있습니다 .


다중 사이클 경로를위한 에지 선택에 대한 세부 정보

각 설정 조정과 쌍을 이루는 홀드 조정을 이해하려면 3 : 2 관계를 가진이 간단한 예를 고려하십시오. 각 숫자는 상승 클럭 에지를 나타냅니다.

1     2     3
4   5   6   7

기본 설정 확인은 가장자리 2와 6을 사용합니다. 기본 고정 확인은 가장자리 1과 4를 사용합니다.

다중 사이클 구속 조건 2를 적용하면 -end기본 설정 및 홀드 확인이 원래 사용 된 후 다음 에지를 사용하도록 조정됩니다. 즉, 설정 확인은 이제 에지 2와 7을 사용하고 홀드 확인은 에지 1과 5를 사용합니다. 동일한 주파수에서 클럭을 조정하면이 조정이 의미가 있습니다. 각 데이터 실행은 하나의 데이터 캡처에 해당하며 캡처 에지가 하나씩 이동하면 보류 검사도 하나씩 이동해야합니다. 분기 중 하나에 큰 지연이있는 경우 이러한 종류의 제약 조건은 단일 클록의 두 분기에 적합합니다. 그러나 여기서는 에지 1과 5를 사용하는 홀드 점검이 바람직하지 않습니다.이를 해결하는 유일한 방법은 경로에 전체 클록 사이클 지연을 추가하는 것입니다.

다중 사이클 홀드 제한 조건 1 (홀드의 경우 기본값은 0)은 홀드 체크를 위해 대상 클럭의 에지를 한 에지 씩 뒤로 조정합니다. 2 사이클 셋업 MCP와 1 사이클 홀드 MCP 구속 조건의 조합은 에지 2와 7을 사용하여 셋업 점검을 수행하고 에지 1과 4를 사용하여 홀드 점검을 수행합니다.


2

Altera에 대한 답을 모르지만 Xilinx Land에서는 한 클럭 도메인에서 다음 클럭 도메인으로 시간 지연을 설정할 수 있습니다. 수학을 설계해야하며 (디자인에 따라 다름) 일반적으로 두 클럭주기 중 가장 짧습니다. 이 시간을 두 신호 (제어 신호 포함) 사이의 최대 스큐로 생각하면 동기화 회로가이를 처리 할 수 ​​있는지 알아낼 수 있습니다.

set_mulicycle_path는 소스와 대상이 모두 동일한 클럭 도메인에있는 경우를 처리하기 때문에 올바른 사용법이 아닙니다. 다시 말하지만, Xilinx 경험을 바탕으로 마일리지가 다를 수 있습니다.


1

동기화기에 set_false_path를 두는 것이 안전하다고 생각합니다.

또한 Quartus가 동기화 프로그램을 쉽게 찾을 수 있도록 qsf에 "set_global_assignment -name SYNCHRONIZER_IDENTIFICATION AUTO"를 넣을 수 있습니다.


어떤 모습일까요? set_false_path -from ready_spin -to ready_spin_q2? 그리고 set_false_path -from data -to rx_data?
벤 Voigt

set_false_path -from src_clk -to ready_spin데이터를 동기화하지 않으므로 잘못된 경로를 데이터에 배치하는 것이 적절하지 않습니다.
fbo

0

문제는 버스 신호가 래치 된 지점 근처에서 변경되지 않는다는 것을 알 수 있지만 소프트웨어는 그것을 모른다는 것입니다. 가장 좋은 방법은 들어오는 버스 신호가 버스 클럭과 동기화되었다는 것을 소프트웨어에 명시 적으로 알리고 실제로 래치하는 위치보다 먼저 최적화를 비활성화하는 것입니다 (최적화자는 이론적으로 회로를 동등한 것으로 교체 할 수 있습니다) 입력이 실제로 동기식이지만 회로가 신경 쓰지 않는 클럭 사이클에서 변경되면 루프에 대해 발생할 수 있습니다).


하지 않을까요 set_multicycle_path소스 신호를 변경하는 방법을 자주 신디사이저 / 타이밍 분석기를 알 수있는 방법이? 그리고 "버스 클럭"이 무슨 뜻인지 잘 모르겠습니다. 여기에 클럭 도메인을 가로 지르는 신호 버스가 있는데, 어떤 클럭을 "버스 클럭"이라고 부릅니까? 신디사이저가 업데이트하지 않는 기간 동안 글리치가 발생하면 여전히 메타 스타 빌리티가있을 수 있다고 생각합니다 data. DFF 블록을 구체적으로 인스턴스화 할 수 있다고 생각합니다. (
Ben Voigt

@ BenVoigt : "set_multicycle_path"는 타이밍 유효성 검사기에 두 래칭 지점 사이의 조합 논리 체인이 N (Tc) -Ts-Tp (N 회 사이클 시간에서 샘플 시간에서 샘플 시간을 뺀 래치) Tc-Ts-Th 대신에 전파 시간). 나는 그런 것들이 다른 시계에 의한 걸쇠와 어떻게 상호 작용할 지 모른다.
supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.