시계 왜곡이란 무엇이며 왜 음수 일 수 있습니까?


10

HDL 컴파일러 (Quartus II)는 타이밍 보고서를 생성합니다. 여기에는 노드에 "시계 불균형"열이 있습니다. 내가 찾은 클럭 스큐의 유일한 정의는 TimeQuest 설명서 (7-24 페이지 참조)에 있습니다.

클럭 간 전송에 대해 클럭 불확실성 또는 스큐를 수동으로 지정하려면 set_clock_uncertainty명령을 사용하십시오 .

왜 치우침이 "불확실성"인 경우, 왜 일부 시계가 음으로 치우쳐 집니까 (예 : -0.048)? 시계 왜곡이란 정확히 무엇입니까?

답변:


8

에서 위키 백과 :

에스케이이자형아르 자형나는아르 자형제이나는제이

에스케이이자형나는,제이=나는제이

클럭 스큐는 양수 또는 음수 일 수 있습니다. 클록 신호가 완전한 동기 상태이면,이 레지스터에서 관찰 된 클록 스큐는 0입니다.

따라서 한 레지스터의 클럭 스큐 양은 다른 레지스터에 상대적입니다. 상대적이므로 양수 또는 음수 일 수 있습니다.

일부 삽화 :

포지티브 / 네거티브 스큐 앞뒤로 기울이기

제공 한 TimeQuest 문서에 정의 된 시계 내 전송을 예로 들어 보겠습니다.

클럭 내 전송은 레지스터 대 레지스터 전송이 디바이스 코어에서 발생하고 소스 및 대상 클럭이 동일한 PLL 출력 핀 또는 클럭 포트에서 오는 경우 발생합니다.

따라서 대상 레지스터가 물리적으로 클록 생성 회로에 더 가까운 경우, 클록은 소스 레지스터에 도달하기 전에 대상 레지스터에 도달 할 가능성이 있으며, 결과적으로 실제 클럭 스큐가 발생합니다. 대상 레지스터가 소스 레지스터 이후 클럭의 에지를 수신하면 클럭 스큐가 지연되거나 음수입니다.

다른 방법으로, 클록 스큐는 클록 에지가 레지스터 대 레지스터 전송에서 소스 레지스터와 관련하여 시간 단위로 주어진 두 개의 개별 레지스터에 얼마나 가깝게 도달하는지에 대한 불확실성이다.

클럭 전송 및 설정 및 유지 시간 을 포함하도록 이러한 정의를 확장 하면 약간 지저분합니다. 따라서 에지 또는 유지 시간이 두 레지스터 사이에 "동기화"되는 것으로 생각하기가 더 쉽습니다. 우리는 "동기"를 "동시 발생"으로 생각하는 경향이 있습니다. 그러나 절대적으로 정확히 동시에 발생하는 일은 거의 없습니다. 따라서 우리는 그 시간에 공차를 두어야합니다. 그리고 공차는 종종 양수 및 음수로 표시됩니다 (예 : ±).


10

최신 디지털 로직 장치는 일반적으로 "동기식 설계 실습"으로 설계됩니다 (전역 동기 에지 트리거 레지스터 전송 설계 스타일 (RTL) : 모든 순차 회로는 글로벌 클록 신호 CLK에 연결된 에지 트리거 레지스터로 나뉩니다. 순수한 조합 논리.

이러한 디자인 스타일을 통해 사람들은 타이밍에 관계없이 디지털 로직 시스템을 빠르게 설계 할 수 있습니다. 내부 상태가 안정 될 때까지 한 클럭 에지에서 다음 클럭 에지까지 충분한 시간이있는 한 시스템은 "정상 작동"합니다.

이 디자인 스타일을 사용하면 "이 시스템의 최대 클럭 속도는 얼마입니까?"를 제외하고 클럭 스큐 및 기타 타이밍 관련 문제 는 관련이 없습니다.

시계 왜곡이란 정확히 무엇입니까?

예를 들면 다음과 같습니다.

...
     R1 - register 1              R3
     +-+                  
   ->| |------>( combinational  )  +-+
...->| |------>(         logic  )->| |--...
   ->|^|------>(                )->|^|
     +-+       (                )  +-+
      |   +--->(                )   |
     CLK  | +->(                )  CLK
          | |
     R2:  | |
     +-+  | |               
...->| |->+ |
   ->|^|->--+
     +-+
      |
     CLK

실제 하드웨어에서 "CLK"신호 는 모든 레지스터에서 정확히 동시에 스위칭되지 않습니다 . 스큐 클록 Tskew 상류 클럭 하류 클럭의 상대적 지연 (인 )

Tskew (소스, 대상) = destination_time-source_time

여기서 source_time은 업스트림 소스 레지스터 (이 경우 R1 또는 R2)에서 활성 클록 에지의 시간이고 destination_time은 일부 다운 스트림 대상 레지스터 (이 경우 R3)에서 "동일한"활성 클록 에지의 시간입니다. .

  • 음의 클럭 왜곡 : R3의 CLK 가 R1의 클럭 전에 전환됩니다 .
  • 양의 클럭 스큐 : R3의 CLK 는 R1의 클럭 이후 에 전환됩니다 .

시계 왜곡의 영향은 무엇입니까?

(아마도 여기서 타이밍 다이어그램이 더 명확해질 것입니다)

최악의 경우에도 제대로 작동하려면 R3의 설정 시간 또는 유지 시간 동안 R3의 입력이 변경되어서는 안됩니다. 더 나쁜 것은, 제대로 작동하려면 다음과 같은 것을 디자인해야합니다.

Tskew (R1, R3) <Tco-Th.

Tclk_min = Tco + Tcalc + Tsu-Tskew (R1, R3).

어디:

  • Tcalc는 시스템 어디에서나 조합 논리 블록의 최대 최악의 정착 시간입니다. (때때로 중요 경로에있는 조합 논리 블록을 다시 디자인하거나, 부품을 업스트림 또는 다운 스트림으로 밀거나, 다른 파이프 라인 단계를 삽입 할 수 있으므로, 새로운 디자인은 Tcalc가 더 작아서 클럭 속도를 높일 수 있습니다) .
  • Tclk_min은 하나의 활성 클럭 에지에서 다음 활성 클럭 에지까지의 최소 시간입니다. 위의 방정식에서 계산합니다.
  • Tsu는 레지스터 설정 시간입니다. 레지스터 제조업체는이 요구 사항을 항상 충족시키기에 충분히 느린 클럭을 사용해야합니다.
  • Th는 레지스터 유지 시간입니다. 레지스터 제조업체는 항상이 요구 사항을 충족 할만큼 클록 왜곡을 제어해야합니다.
  • Tco는 클록-출력 지연 (전파 시간)입니다. 각 활성 클록 에지 이후, R1 및 R2는 새로운 값으로 전환하기 전에 짧은 시간 Tco 동안 이전 값을 조합 논리로 계속 구동합니다. 이는 하드웨어에 의해 설정되며 제조업체가 보장하지만 Tsu 및 Th 및 제조업체가 정상 작동에 대해 지정한 기타 요구 사항을 충족하는 한에만 가능합니다.

너무 긍정적 인 왜곡은 완화되지 않은 재앙입니다. 포지티브 스큐가 너무 많으면 (일부 데이터 조합으로) "몰래 경로"가 발생하여 R3 대신 클럭 N + 1에서 "올바른 데이터"를 래칭 (클래스 N에서 R1 및 R2에 미리 래치 된 데이터의 결정적 기능) 즉, N + 1 클럭에서 R1 및 R2에 래치 된 새로운 데이터는 누출 될 수 있고 조합 논리를 혼란 시키며 "동일한"클럭 에지 N + 1에서 R3에 잘못된 데이터가 래치 될 수 있습니다.

클럭 속도를 늦춤으로써 음의 스큐 양을 "고정"할 수 있습니다. R1의 입력이 R1 및 R2가 클럭 에지 N에서 새로운 데이터를 래치 한 후, 나중에 R3을 정산하기 위해 더 느린 클럭 속도로 시스템을 실행해야한다는 점에서 "나쁜"것입니다. "다음"클럭 에지 N + 1에서 결과를 래치합니다.

많은 시스템 이 스큐를 0으로 줄이기 위해 클록 분배 네트워크 를 사용합니다. 반 직관적으로 클럭 생성기에서 각 레지스터의 CLK 입력까지의 경로 인 클럭 경로를 따라 지연을 추가함으로써 클럭 에지 파면이 한 레지스터의 CLK 입력에서 물리적으로 이동하는 겉보기 속도를 높일 수 있습니다 다음 레지스터의 CLK 입력은 빛의 속도보다 빠릅니다.

알테라 문서는 언급

"클록 스큐에 기여하므로 클록 경로에서 조합 논리를 사용하지 마십시오."

이것은 많은 사람들이 글로벌 CLK 신호 이외의 것을 발생시켜 일부 레지스터의 로컬 CLK 입력을 유도하는 방식으로 FPGA에 컴파일되는 HDL을 작성한다는 사실을 의미합니다. (이는 특정 조건이 충족 될 때만 새로운 값이 레지스터에로드되도록 "클럭 게이팅"로직이거나 N 클럭 중 1 개만 통과시키는 "클록 분배기"로직 등일 수 있습니다. 로컬 CLK는 일반적으로 글로벌 CLK에서 파생됩니다. 글로벌 CLK가 틱한 다음 로컬 CLK가 변경되지 않거나 신호가 해당 "다른 것"을 통해 전파되는 글로벌 CLK 이후 짧은 지연) 로컬 CLK가 한 번 변경됩니다.

그 "다른 것"이 다운 스트림 레지스터 (R3)의 CLK를 구동 할 때, 스큐를 더 긍정적으로 만듭니다. 이 "다른 것"이 업스트림 레지스터 (R1 또는 R2)의 CLK를 구동 할 때 왜곡을 더 부정적으로 만듭니다. 때때로, 업스트림 레지스터의 CLK를 구동하는 것과 다운 스트림 레지스터의 CLK를 구동하는 것은 실질적으로 동일한 지연을 가지므로, 이들 사이의 스큐는 실질적으로 0이됩니다.

일부 ASIC 내부의 클록 분배 네트워크는 일부 레지스터에서 소량의 포지티브 클록 스큐 로 의도적으로 설계 되어있어 조합 로직 업스트림에 약간의 시간이 더 걸리므로 전체 시스템을 더 빠른 클록 속도로 실행할 수 있습니다. 이를 "클록 스큐 최적화"또는 "클록 스큐 스케줄링"이라고하며 " 타이밍 " 과 관련이 있습니다.

나는 여전히 set_clock_uncertainty명령에 미스터리되어있다 -왜 "수동으로"왜곡을 지정하고 싶을까?

(*) 한 가지 예외 : 비동기 시스템 .


클럭 스큐를 최소화하기 위해 지연을 추가하는 아이디어는 때로는 거의 전체 사이클로 클럭을 지연시키는 것을 포함 할 수 있다고 생각합니다. 클록이 가동되면 플립 플롭 A가 정확한 시간에 클록 에지 1을 볼 수 있도록 플립 플롭 B가 클록 에지 2를 볼 수 있도록 설정할 수 있습니다. 가장자리가 완벽하게 정렬되는 한 신경 쓰지 마십시오.
ajs410

1

클럭 스큐는 거리, 커패시턴스 등으로 인해 클럭이 회로의 다른 지점에 다른 시간에 도달하는 경우 오작동을 일으킬 수 있습니다. 시계가 기준점에 도달하기 전에 그 시점에 도달하면 음수가되어야한다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.