FPGA에서의 프로세스 타이밍


10

나는 fpgas를 처음 사용하고 있으며, 확실하지 않은 타이밍 미묘함이 있습니다. 모든 동기 프로세스가 동일한 에지에서 트리거되면 입력이 하나의 상승 에지에서 '캡처'된다는 것을 의미합니다. 출력이 켜집니다. 같은 가장자리? 다음 상승 에지?

하나의 출력이 다음의 입력으로 흐르는 두 개의 모듈이 있으면 내 모듈의 입력 (이전 모듈의 출력)이 캡처되는 것과 동시에 변경되는 상황이 발생할 수 있습니다.

ISim 스크린 샷

205ns의 마커는 내가 이야기하고있는 것을 보여줍니다. op와 data_write는 입력입니다. 이 테스트 사례에서는 모든 것이 "제대로 작동"하는 것처럼 보이지만 시뮬레이션에서는 캡처 할 대상이 정확히 무엇인지 명확하지 않습니다. data_write = "0001 ..."이 205ns 또는 (205ns + 1 클록주기)로 캡처되고 있습니까? ISim에서 설정 및 유지 시간을 보여주는 더 자세한 파형을 얻는 방법이 있습니까?

감사.

답변:


12

플립 플롭을 통한 전파 지연은 항상 있습니다. 종종 "클럭 -Q"지연이라고합니다.

즉, 입력이 에지에서 캡처되고 동일한 에지에서 출력이 변경되지만 몇 나노초 후에 출력이 변경됩니다. 이 몇 나노초 지연은 (대부분의 FPGA에서와 같이 "제로 홀드 타임"으로 플립 플롭을 설계 한 경우) 변경 사항이 다음 클럭 에지까지 다운 스트림 플립 플롭에 영향을 미치지 않을 정도로 충분합니다.

기능 또는 RTL 시뮬레이션 (아마도 결과를 생성하기 위해 수행하는 작업)에서 지연은 지속되는 나노초로 시뮬레이션되지 않습니다. VHDL에서는 시뮬레이터 클럭의 단일 델타 사이클 이되며 기술적으로 전혀 시간이 없습니다. 이로 인해 시뮬레이터 출력의 지연을 볼 수 없습니다. 그럼에도 불구하고 이상적인 시뮬레이션 플립 플롭의 경우 출력 변경이 다운 스트림 플립 플롭에 영향을 미치지 않는 것으로 충분합니다.

배치 후 경로 지정 시뮬레이션을 수행하는 경우 적절한 지연을 포함 할 수 있어야하므로 시뮬레이션 노력이 많이 들지만 이러한 효과를 명확하게 볼 수 있습니다.


1
VHDL RTL 시뮬레이션에서 지연은 단일 델타 사이클입니다. 정확히 0 시간이 걸리지 만 다음 델타 사이클이 시작되기 전에 현재 델타 사이클의 모든 업데이트가 완료되면 시뮬레이션이 순서대로 진행됩니다. 예정 더 이상 델타주기가 없으면, 다음 시간에 이동할 수 있습니다.
Martin Thompson

1

원하는 클럭 에지 (상승 또는 하강)에서 D의 입력이 출력 Q에 나타납니다. 이는 일정 시간이 걸리고 (Q-C 지연 지연) 타이밍 위반이 없다고 가정하면 D는 한 번에 하나의 FF 만 통과합니다. (즉, Q에 연결된 다른 FF 입력이있는 경우, 두 번째 FF는 변경되기 전에 FF1 Q 값을 전달합니다.

시뮬레이션에 타이밍을 포함하려면 설계를 합성 및 배치하고 라우팅 한 다음 포스트 플레이스 및 경로 시뮬레이션을 실행해야합니다. 여기에는 모든 조합, 클록 대 Q 지연 등이 포함됩니다. HDL 시뮬레이션에는 이러한 타이밍이 없으므로 타이밍 제한이 아닌 기본 작동 테스트에만 유용합니다. 또한 특정 클럭 도메인의 속도 제한을 알려주고 타이밍 위반이 있는지 알려주며 다양한 경로에 대한 타이밍 여유를 알려주는 타이밍 보고서를받습니다. 이 정보를 사용하여 chnages를 작성해야하는 위치 또는 소프트웨어에 위반이 문제가되지 않음을 알리기 위해 규칙을 추가 할 수 있습니다 (예 : 다중 사이클 경로 또는 크로스 클럭 경로)


1

이것은 이전 답변에 추가 된 것으로, 아이디어를 얻는다고 생각합니다.

RTL 디자인을 시뮬레이션 할 때 이러한 문제는 처음에는 약간 까다로울 수 있습니다. 왜냐하면 원인 / 인상 / RTL 시뮬레이션 (= 전파 지연 없음)에서 원인과 원인이 무엇인지 파악하기가 어렵 기 때문입니다.

올바른 시뮬레이터를 사용하면 델타 지연 실제로 시각화 수 있습니다. ISim은 그렇지 않지만 ModelSim에서는 클럭 에지 주변에서 델타 확장을 활성화 할 수 있습니다 . 아래는 문제가 발생한 버그가 많은 타사 IP의 스크린 샷 예입니다.

ModelSim의 델타 지연 확장

c는 클럭 신호이고, +1기타는 델타 사이클이며 시간으로 표시됩니다.

시뮬레이션과 설계가 모두 이상적이고 동기적인 곳에서 설계가 시뮬레이션되는 경우 지연이 시뮬레이션되지 않으면 원칙적으로 특정 클록 측면의 모든 신호 변경 사항을 해당 클록 측면 직후에 발생하는 것으로 볼 수 있습니다. 따라서 귀하의 예에서 205ns에서 data_write= 0000...는 캡처되는 것입니다. 첫 번째 장치의 다른 로직 은 동일한 측면 에서 신호 data_write를 변경하고 0001...있으며,이 신호 data_write는 클럭 측면 다음 에 약간 나타납니다 . 이 "약간 후"는 이상적인 시뮬레이션 (귀하의 예) (ISim에서는 보이지 않지만 델타 확장이있는 ModelSim에서는)에서 나중에 하나 또는 여러 개의 시뮬레이션 델타이거나 실제 세계에서는 몇 ps / ns입니다.

참고 사항 : RTL 설계의 중요한 점 중 하나는 입력이 항상 클록 측면에서 샘플링 되도록하는 것입니다. 한 번의 델타 사이클도 너무 늦습니다. 입력이 1 델타 후에 유효하지 않을 수 있습니다. 다른 말로하면 : "시계 경로를 엉망으로 만들지 마십시오".

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