2011-04-28 8 views
3

예를 들어 주어진 파이프 라인을 최대한 활용하기 위해 리 타이밍 및/또는 c-slow를 어떻게 활용할 수 있습니까?FPGA 구현을위한 파이프 라인 처리량을 최적화하는 가장 좋은 방법은 무엇입니까?

리 타이밍을 사용하면 일부 모듈은 입력에 시프트 레지스터를 추가하여 (순방향 레지스터 밸런싱)보다 나은 결과를 얻는 반면 다른 모듈은 출력에 시프트 레지스터를 사용하면 더 나은 결과를 얻을 수 있습니다 (역방향 레지스터 밸런싱). 지금은

나는 다음과 같은 방법을 사용합니다

  • 코드 HDL (Verilog에에)
  • 에서, 특정 모듈
  • 합성,지도에 대한 제약 타이밍 만들 & 경로를 배치을 (ISE 13.1 를 사용하여)
  • 봐야 할 자리가 &이고, 개선 할 모듈은 이고, 은 최대 숫자이다. f 로직 레벨.
  • 이 로직 레벨을 취하고, 은 삽입 할 플립 플롭 수 에 대한 교양있는 추측을합니다.
  • 삽입 플립 플롭은,이 방법은 & 미스를 치면, 밸런싱,

약자로 최고의에 대한 희망을 등록 할 수 있습니다. 때때로 그것은 꽤 좋은 결과를 얻습니다. 때로는 쓰레기입니다. 그렇다면 이러한 재 타이밍의 성공 비율을 향상시키는 좋은 방법은 무엇입니까?

이 문제를 해결할 수있는 도구가 있습니까? 또한, 링크, 논문 및 도서 추천 많은 감사 할 것입니다.

답변

4

올바른 아이디어가있는 것 같습니다. 툴 기반 리 타이밍은 약간의 히트 앤 미스가 될 수 있습니다. 때때로 당신이 생각하는 것보다 위에 2 또는 3 개의 FF를 추가하는 것이 도움이 될 수 있습니다.

극단적 인 상황에서 성능을 한계까지 높여야 할 때 손으로 파이프 라인의 균형을 조정해야합니다. 이것은 옳은 고통 일 수 있습니다. 멋지게 읽을 수있는 HDL 코드를 끔찍한 논리와 레지스터로 나누어야합니다.하지만 때로는 완료해야한다는 것을 알게됩니다. (주석이 많이 필요하고 정말 좋은 테스트 벤치가있어 '

마지막으로, "half-way house"가 있습니다. 가장 논리 수준이 높고 코드에 대해 조금 생각하는 논리 경로를 보면, 그 중 하나가 매우 작다는 것을 종종 알게됩니다 (아마도 단 한 줄 일 것입니다.) 이것은 나머지 모듈의 가독성을 "해치지"않고 끌어낼 수 있습니다. 그리고 때로는 그 코드를 자체 엔티티로 가져 와서 해당 엔티티에 여분의 플립 플롭을 넣으면 자동 재 작업자가 더 잘 작동합니다.

행운을!