FPGA에서 DSO 컨트롤러를 구현하고 있는데 너무 많은 홀드 시간 위반 문제가있다. (지금까지 가장 좋은 결과는 P &이다. .홀드 타임 위반을 제거하는 방법 (자일링스 HDL)
내 문제의 핵심은 ADC 샘플 데시 메이터에서 입력 된 FIFO 버퍼가 있고 동기 FT245 (60MHz)로 출력된다는 것입니다. 입력 데시 메 이터는 ADC 샘플 (150MHz)의 클록 주파수를 또한 나눈 2의 제곱 (예 : 1, 2, 4, 8, 16 ...)으로 데시 메이트로 설정할 수 있습니다.
내 접근 방식은 데이터를 캡처 할 때 버퍼에 클록 주파수를 나누고 (또는 데시 메이터 비율이 0 인 경우 직접) 공급 한 다음 샘플을 PC로 푸시 할 때 FT245에서 60MHz 클록을 공급하도록 전환하는 것입니다. 시뮬레이션에서는 완벽하게 작동하지만, 문제는 위치와 경로에, 그 라우터는이 오류를 뱉어 : 그것은 나를 나를 알리는 보고서 타이밍 제공 때까지 10~15분을 위해 대량으로 분석 그리고
Route:466 - Unusually high hold time violation detected among 226 connections. The top 20 such instances are printed below. The
router will continue and try to fix it
을 모든 설정 시간 제약이 만났고 150MHz 클럭에 대해 3 번의 홀드 시간 위반이 발생했습니다 (60MHz 클럭은 정상입니다).
그 문제는 FPGA가 시계를 제대로 분배 할 수 없다는 것을 읽었지만, FIFO의 클럭 게이팅 대신에 150MHz 클록을 FIFO에 직접 연결하고 FIFO에 데이터를 게이팅하는 방식으로 시도했습니다. dataReady (실제로는 이전에 게이팅 된 클럭과 동일한 신호가 됨)로 인해서 지금보다 훨씬 더 (50-60) 보류 시간 위반이 발생합니다.
다중 클럭 FIFO에 대한 몇 가지 알려진 방법이 있습니까? 단지 2 가지가 아닙니다 (이들은 자일링스 ISE의 예에서도 충분히 볼 수 있습니다). 아니면 FPGA에서 ADC 샘플을 데시 메이팅하지 않을 생각인가?
대상 FPGA는 Spartan 6 LX25 속도 등급 -2입니다 (불행히도 나는 -3 속도 등급으로 내 손을 잡지 못했습니다). 여기
은 저를주고 여유의 예는 다음과 같습니다Slack (hold path): -2.031ns (requirement - (clock path skew + uncertainty - data path))
Source: decimator_clock_divisor/decimationRatio_0 (FF)
Destination: trigger_analog1/previousValue_2 (FF)
언급 된 소스는 실제로 내가 돈 때문에 GUI에 의해 제어됩니다, 신호 (그리고 날이 제공하는 모든 위반) 매우 자주 변경되지이다 거기에 어떻게 시간차 위반을 저지를 수 있었는지는 알지 못합니다. 데시 메 이터 비율에서 트리거 버퍼 (또는 다른 위반에서는 내 FIFO 버퍼)까지의 경로입니다.
기본적으로 제 질문은 이러한 위반에 대해서도 신경 써야합니까?
데시 메 이터의 비율을 변경 한 후에 트리거에서 데시 메터 결과를 실제로 사용하기 전에 수천 개의 클럭 사이클이 발생할 수 있습니다.
내가 라우터가 비동기 신호 (비동기식 신호를 60MHz 클록 도메인에서 설정했기 때문에)를 얼마나 자주 바꿀지 알 수없고, 일부 모듈의 결과를 사용하는 데 얼마나 걸릴지 알고 있습니다. 문제는이 3 가지 위반에 의해 막혀있는 다른 위반 사항이 없다는 것이 최종 결정 인 경우 완료된 PAR에 대해이 3 가지 위반 사항을 표시 할 때 내가 알지 못한다는 것입니다.
게시판에서 작동하는지 PAR 시뮬레이션 확인을 게시 할 수 있습니까? 나는 그것을 시험해 볼 것이지만 BGA 솔더링을 위해 2 주를 기다려야 만하고 논문을 완성하는데 4 주 밖에 남지 않았으므로 나의 디자인이 효과가 있다는 것을 확신하고 싶다.
나는 타이밍 점수 0으로 PAR을 얻을 수 있었기 때문에 당신의 제안 덕분에 대답으로 받아들입니다. –