VHDL : 디자인에서 승수를 구현할 때 '*'연산자 사용


10

오늘날의 FPGA에는 DSP 블록이 내장되어 있으며 최신 FPGA에는 IEEE-754 호환 부동 소수점 단위도 내장되어 있습니다.

필요한 매개 변수를 선택한 후 GUI를 사용하여 DSP 엔티티 / 모듈을 작성한 후 설계에서 인스턴스화 할 수 있습니다.

실제 DSP 블록을 인스턴스화하는 디자인에서 그러한 미세 관리를 언제해야합니까? 그리고 코드에 '*'연산자를 입력하고 합성 툴이 저수준 세부 사항을 처리하게하려면 언제입니까? 어떤게 더 좋아?

이진 곱셈과 관련하여 여러 유형의 곱셈 알고리즘이 있습니다. 이제 실리콘에 DSP 블록을 내장하고 심지어 부동 소수점 곱셈기를 내장 했으므로 모든 알고리즘이 효과적으로 사용되지 않습니다.


패브릭에 어떤 FPGA에 754 호환 FPU가 있습니까?
Martin Thompson

답변:


6

나는 이것을 몇 번이나 스스로했다.

일반적으로 디자인 툴은 합성 설정에 따라 패브릭 구현과 DSP 슬라이스 중에서 선택합니다.

예를 들어 Xilinx ISE의 ​​경우 합성 프로세스 설정 인 HDL 옵션에는 "-use_dsp48"설정이 있습니다. Auto, AutoMax, Yes, No 옵션이 있습니다. DSP 슬라이스. 한 번은 정수에 3을 곱한 문제가 있었는데, DSP 슬라이스를 유추했습니다. 칩에있는 모든 DSP 슬라이스를 수동으로 유추하는 것 외에는 신디사이저가 실패했습니다! 이미 모든 dsp 슬라이스를 사용하고 있었기 때문에 설정을 아니요로 변경했습니다.

이것은 아마도 좋은 경험 법칙 일 것입니다 (방금 만든 것입니다). 만약 당신의 디자인이 50 MHz 미만에서 클럭킹되고 칩에서 DSP 슬라이스의 50 % 미만을 사용한다면, *, + 및-연산자 파이프 라인 레지스터가없는 DSP 슬라이스를 유추합니다. 이것은 실제로 최고 속도를 제한합니다. (나눗셈을 사용할 때 어떤 일이 발생하는지 전혀 모른다)

그러나 슬라이스를 DSP 슬라이스의 최대 속도 (Spartan 6 정상 속도 등급의 경우 333MHz)에 더 가깝게 실행하는 것처럼 보이는 경우 모든 슬라이스를 사용하려는 경우 수동으로이를 추론해야합니다. .

이 경우 두 가지 옵션이 있습니다.

옵션 1 : 원시 DSP 인스턴스화 템플릿을 수동으로 사용하십시오. 옵션 2 : Xilinx Core Generator의 IP 블록을 사용하십시오. (이 옵션을 사용할 것입니다. 동시에, 당신은 미래에 도움이 될 핵심 세대에 대한 모든 것을 배울 것입니다)

이 중 하나를 수행하기 전에 DSP 슬라이스 사용 설명서의 첫 두 페이지를 읽으십시오. 스파르탄 6 (DSP48A1)의 경우 Xilinx doc UG389가됩니다 : http://www.xilinx.com/support/documentation/user_guides/ug389.pdf

먼저 코어 생성기 옵션을 고려하십시오. 나는 보통 작업하고있는 부분에 대해 코어 제너레이터에서 테스트 프로젝트를 작성하는데, 여기서 시스템을 배우기 위해 여러 IP 블록을 작성합니다. 그런 다음 ISE에서 내 디자인에 하나를 추가 할 준비가되면 디자인 계층을 마우스 오른쪽 단추로 클릭하고 새 소스를 클릭 한 다음 "IP (CORE Generator & Architecture Wizard)"를 선택하여 블록을 직접 편집하고 다시 생성 할 수 있습니다. 내 프로젝트에서.

Core gen에서는 선택할 수있는 여러 가지 IP 블록을 살펴보십시오. 수십 개가 있으며 그 중 대부분은 매우 근사합니다.

Multiplier Core는 먼저 살펴 봐야합니다. 모든 페이지를 확인하고 데이터 시트 버튼을 클릭하십시오. 중요한 부분은 정수 비트 폭, 파이프 라인 스테이지 (대기 시간) 및 모든 제어 신호입니다. 필요없는 모든 포트를 제거하여 가장 간단한 블록을 생성합니다.

작년에 5 x 3 차 IIR 필터를 구축 할 때 샘플 인스턴스보다 4 배 빠른 클럭을내는 2 개의 DSP 슬라이스로 매우 맞춤형 구현을 구축 한 이후 수동 인스턴스화 템플릿을 사용해야했습니다. 총 고통이었다.


13

두 개의 숫자를 곱하고 DSP 블록에 적합하려면 *조작자가 DSP 블록을 유추해야합니다. 그렇지 않은 경우 합성 도구를 다시 보내십시오. :)

그러나 DSP 기능의보다 복잡한 조합을 이용하려면 블록을 직접 인스턴스화하고 해당 매개 변수를 구성해야합니다. 추론에 의해 잘 매핑되지 않을 수있는 것의 예 (Xilinx DSP48E1 을 예로 사용) :

  • 프리 애더 사용
  • 포스트 누산기 사용
  • 패턴 검출기 사용
  • 로직 유닛 사용

그리고 특히 위의 조합.

합성 도구는 논리와 산술의 임의의 조합을 원하는만큼 효율적으로 매핑하기에 아직 충분하지 않습니다.


4

DSP 블록이있는 경우 LUT를 사용하여 동일한 작업을 수행하는 것보다 더 효율적이기 때문에 가능하면 사용해야합니다. 고성능 곱셈이 필요하지 않은 경우 공간을 절약하기 위해 파이프 라인 가산기와 시프트 레지스터를 구현해야합니다.

그러나 GUI 도구를 사용하기 전에 DSP 블록을 유추하는 방법을 살펴 보겠습니다. Xilinx XST 매뉴얼에는 순수한 verilog / VHDL로 DSP 블록을 인스턴스화하는 방법에 대한 HDL '레시피'가 있습니다. 기본적으로 승수 전후에 충분한 레지스터를 추가하면 XST는 DSP 블록을 사용하여 작업을 자동으로 구현합니다. 합성 로그에서 DSP 블록을 올바르게 유추하는지 확인할 수 있습니다. 나는 Altera가 비슷한 것을 가지고 있다고 가정합니다.

덧붙여서, 나는 현재 초기 시드에 승수 만 사용하는 Mersenne 트위스터 구현을 위해 노력하고 있기 때문에 몇 분 전에 이것을 궁리했습니다. 첫 패스 구현이 타이밍에 맞지 않지만 기능은 정확합니다. XST는 또한 곱셈 연산을 DSP 블록에 넣었지만 최적화되지 않았으므로 원하는 속도의 절반 정도를 실행합니다. 클럭 사이클 수의 32 배가 걸리지 만 더 이상 하드웨어 멀티 플라이어가 필요없는 shift-and-add 기법을 사용하여 곱셈을 다시 구현할 수 있습니다.


하드웨어 멀티 플라이어를 사용할 때 타이밍이 실패해야하는 이유는 무엇입니까?
quantum231

32 비트 x 32 비트 비 파이프 라인 곱셈에는 8ns 이상이 소요됩니다.
alex.forencich

흠, 나는 그것을 고려하지 않았다. 따라서 DSP 블록은 파이프 라인되지 않습니다. 나는 그들이 어떻게 곱셈을 정확히 구현하는지 궁금합니다. 실제로 하드 병렬 곱셈기입니까?
quantum231

몇 가지 다른 방식으로 작동하도록 구성 할 수 있다고 생각합니다. XST 매뉴얼에 따르면, 입력 및 출력에 충분한 레지스터를 추가하면 XST가 DSP48 슬라이스에서 파이프 라인 된 승수를 사용할 수 있습니다. 필자의 경우 출력 레지스터가 하나만 있고 입력 레지스터가 없으므로이를 활용할 수 없었습니다. 이것은 PRNG를 시드하는 초기화에만 사용되었으므로 병렬 활용을 비트 직렬 승수로 대체하여 리소스 사용률을 줄였습니다.
alex.forencich

2

그것은 얼마나 많은 최적화가 필요하고 얼마나 휴대 성이 귀하의 디자인이되어야하는지에 달려 있습니다. 그것은 약간의 어셈블리를 사용하여 최적화하거나 컴파일러가 명령어를 선택하도록하는 소프트웨어와 비슷합니다. 조합 배정도 승수를 감당할 수 없도록 일부 크기 / 속도 절충점도있을 수 있습니다.

FPGA에서 유선 FP 멀티 플라이어가 어디에 있는지 몰랐습니다.

CPU에 적합한 실제 IEEE P754 호환 곱셈 연산자에는 큰 승수 이상이 포함됩니다. 지수를 추가하고, 비정규를 변경하며, 무한대를 관리하고, 쓸모없는 플래그 (inexact, underflow ...)를 추가해야합니다.


Altera 10 시리즈와 같은 최신 FPGA에는 하드웨어 자체에 IEEE-754 호환 부동 소수점 승수가 있습니다! 그래도 직접 사용할 기회는 없었습니다.
quantum231

DSP 블록을 내장 한 경우 FPGA는 조합 승수 대신에이를 사용하거나 메모리 블록을 올바르게 사용하는 다른 알고리즘을 사용해야합니까?
양자 231

2

이 문서를 읽었습니다 http://www2.warwick.ac.uk/fac/sci/eng/staff/saf/papers/fpl2014-ronak.pdf :

단일 DSP 블록에 맞는 기능을 파이프 라인 된 RTL 코드에서 효율적으로 합성 할 수 있지만 여러 DSP 블록을 필요로하는 더 복잡한 기능은 성능이 저하되는 것으로 나타났습니다. 수학적 함수에 대한 표준 RTL 설명은 각 작업 후에 크게 파이프 라인 될 수 있지만,이 파이프 라이닝은 DSP 블록의 구조와 내부 단계를 고려하지 않을 수 있기 때문에 결과적으로 합성 된 설계는 표준 이하의 성능을 나타낼 수 있습니다. DSP 블록은 최고 속도로 작동하지 않는 방식으로 결합됩니다.

결과를 확인하기 위해 도구의 출처를 찾을 수 있기를 바랍니다.

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