FPGA : 카운트 업 또는 카운트 다운?


11

FPGA (vhdl을 사용하여 xilinx spartan3e가있는 Papilio 개발 보드)를 사용하는 방법을 배우고 있습니다.

들어오는 펄스를 (하드 코딩 된) 숫자로 나눌 필요가 있습니다.

의사 코드로 대략 3 가지 옵션을 볼 수 있습니다 (예 : 10 카운트 사용).

  1. 입력 상승 에지가 1 증가하면 0으로 초기화하고 10과 비교하십시오. 동일하면 0으로 재설정하고 출력 펄스를 트리거
  2. 입력 상승 에지 감소시 1로 10으로 초기화하고 0과 비교합니다. 동일하면 10으로 재설정하고 출력 펄스를 트리거
  3. 9로 초기화하지만 적어도 하나의 선행 "0"비트 (내 출력 비트)가 있는지 확인하십시오. 입력 상승 에지에서 1 씩 감소합니다. 출력 비트의 상승 에지에서, 리셋하십시오.

듀티 사이클은 중요하지 않습니다.

이 중 하나가 다른 것보다 낫습니까? 내가 생각하지 못한 더 좋은 방법이 있습니까?

컴파일러에게 최적의 최적화 기회를 제공하는 "표준"방법이 있습니까?


3
그것은 단지 세 가지 옵션입니다 :-) ... 그러나 진지하게, 그것은 실제로 FPGA에서 그다지 중요하지 않습니다. 개별 로직 요소는 일반적으로 동일한 수의 리소스를 사용하고 수행하는 방식에 관계없이 동일한 성능을 제공합니다. 결정은 디자인의 다른 부분에서 숫자를 세거나 다른 패턴으로 만드는 것이 유용한 지 여부에 달려 있습니다.
Dave Tweed

2
네 번째 옵션 : "1000000000"으로로드되고 상승 에지에서 시프트 된 10 비트 원형 시프트 레지스터. 시프트 레지스터의 1 비트를 수행중인 작업의 활성화로 사용하십시오.
링컨

1
참고로-컴파일러 / 피팅 GUI 도구는 작업을 마친 후 다양한 추상화 수준에서 생성 된 실제 회로를 게이트까지 보여주는 옵션을 가져야하므로 도구가 회로에 어떻게 적합한 지 볼 수 있어야합니다. 그런 다음 소스를 적절히 변경할 수 있습니다.
Anonymous

답변:


12

이 수준으로 최적화하면 마음이 아프게됩니다. 결과는 사용중인 FPGA 기술, FPGA의 다른 요소뿐만 아니라 피팅의 난수 시드를 포함하여 제어 외부의 요소로 인해 변경 될 수 있습니다.

나는 옵션 3이 가장 좋을 것이라고 믿습니다. 옵션 1과 2에는 카운터 사이를 비교하는 비교기 / OR 게이트가있어 목표 번호에 도달했음을 알릴 수 있습니다. 옵션 2는 인버터없이 모두 직선으로 연결되거나 함께 연결될 수 있기 때문에 1보다 약간 더 빠를 수 있지만 다시 AND 또는 XOR보다 빠른 작은 기술 차이가 발생합니다.

옵션 3은 카운터에서 하나의 추가 비트의 저렴한 비용에 대한 비교를 건너 뜁니다. 플립 플롭이 심각하게 제한되지 않는 한, 이것은 그만한 가치가 있습니다.

카운터에 대한 한 가지 재미있는 사실은 카운터가 로직 블록 내에서 장치 특정 크기로 그룹화되는 경향이 있다는 것입니다.이 추가 비트가 해당 그룹을 벗어나게되면 타이밍 변경이 예상보다 많이 나타납니다.


+1, 기술의 한계를 뛰어 넘는 클럭 속도를 제한하는 것은 타이밍 보고서가 타이밍 최적화를 안내하도록해야합니다. 원인없이 스파르탄 3e 또는 그 어떤 FPGA에서 수백 피코 초를 추적하는 것은 일반적으로 시간 낭비입니다.
jalalipop

4

또 다른 옵션은 6 (= 2 카운터 초기화하는 것입니다 4 , 카운트 한 다음 다시 때 캐리 출력을 활성화 (즉,의 FF 모든 것들) - 10).

이것의 장점은 추가 FF가 필요하지 않으며 많은 FGPA는 카운터 또는 가산기 회로에서 이러한 종류의 캐리 동작 속도를 높이기 위해 전용 보조 로직을 가지고 있다는 것입니다.


3

다릅니다. 예를 들어 : 0 → 1 및 1 → 0에 대한 플립 플롭 전파 지연이 다를 수 있으므로 000 → 001 및 001 → 000에 대한 카운터의 전이 지연이 약간 다를 수 있습니다. FPGA에 사용 된 cmos 기술에 따라 높거나 낮을 수 있습니다. 따라서 타이밍 성능이 더 좋은 것을 합성하고 찾아야합니다.


3

컴파일러 작성자의 관점에서 :를 사용 integer하면 내부 표현이 정의되지 않으며 컴파일러는 가장 효율적인 구현을 자유롭게 선택할 수 있습니다.

특정 내부 표현을 강요하면 옵티마이 저는 여전히 개선을 시도하지만 약간 더 나쁜 시점에서 시작합니다.

일부 FPGA에는 레지스터가 임의의 값으로 초기화 될 수있는 "예비"기능이 있습니다.이 경우 초기화하고 카운트 다운 한 다음 최상위 캐리 비트를 출력 및 리셋 (다음 사이클에서)으로 사용하는 것이 두 가지를 구현하는 것보다 효율적입니다 가산기와 비교기. 예압이 없으면 가산기가 더 나을 수 있습니다.N1

내부 구조를 알지 못하면 다른 로직에 할당 된 리소스 (많은 FPGA에는 남은 단위가있는 경우 카운터를 구현하는 데 사용할 수있는 전용 부동 소수점 곱하기-추가 로직이 있음)가 완전히 전환되지 않을 것이라고 확신합니다 다른 모델에 대한 대답은 "생각하지 마십시오"입니다.

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