matlab에서 VHDL로 포팅 해야하는 특히 큰 신호 처리 변환이 있습니다. 확실히 어떤 종류의 리소스 공유가 필요합니다. 약간의 계산으로 다음을 얻었습니다.
- 64 포인트 512 fft
- 41210 곱하기 추가 연산
가장 큰 Virtex 6 FPGA에는 ~ 2000 DSP48E 블록이 있다고 생각하면 리소스를 여러 번 재사용하기 위해 리소스를 공유 할 수 있다는 것을 알고 있습니다. 실행 시간은 실제로 문제가되지 않으며 처리 시간은 FPGA 용어로 비교적 오래 걸릴 수 있습니다.
리소스 사용량을 살펴보면 radix-2 lite 아키텍처를 사용하면 4dsp 블록 / FFT 작업 = 2048 DSP 블록, 총 ~ 43k가 나옵니다. 가장 큰 Virtex FPGA에는 2k 블록 또는 20 개의 작업 / mux가 있습니다.
분명히 직물에 그러한 큰 mux를 포함시키는 것은 조각을 취할 것입니다. 이 한도의 상단을 어디에서 찾을 수 있습니까? FPGA 리소스를 무한정 공유 할 수 없습니다. 41210 배율이 너무 큽니까? 너무 큰 것을 어떻게 계산합니까?
또한 다른 리소스 (슬라이스, 브람스 등)도 살펴 보았습니다. Radix-2 Lite는 또한 4 x 18k 브램 / fft = 2048 브램을 제공합니다. 가장 큰 Xilinx FPGA에는 2128 브램이 포함되어 있습니다. 매우 경계선입니다. 내 디자인이 너무 크다는 것이 걱정입니다.
최신 정보:
디자인 자체에 대한 추가 정보. 자세히 설명 할 수는 없지만 다음과 같이 할 수 있습니다.
Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host
^------re-calculate initial conditions----|
출력 데이터 속도 사양 : "matlab 시뮬레이션보다 빠름"
현명한 계산, 여기 내가 있습니다 :
FFT 단계 : 쉬움. 1/2/4/8 FFT를 구현하고 결과를 SDRAM에 저장 한 후 나중에 액세스 할 수 있습니다. 시간이 오래 걸리더라도 비교적 작습니다. radix-2 lite를 사용하면 2 개의 DSP48E와 2 개의 18k BRAMS / FFT를 얻을 수 있습니다. 스트리밍은 6 개의 DSP48E에 0BRAMS / FFT를 제공합니다. 두 경우 모두 64 포인트 FFT는 FPGA 리소스 용어가 작습니다.
승수 : 이것은 내 문제입니다. 곱셈 입력은 룩업 테이블 또는 FFT 데이터에서 가져옵니다. 그것은 실제로 단지 여러 번의 곱셈입니다. 최적화 할 것이 많지 않습니다. 필터는 아니지만 필터와 유사한 특성을 가지고 있습니다.
FPGA에서 리소스 공유를 고려하면 수학은 다음과 같이 작동합니다. 하나의 LUT-6을 4-way mux로 사용할 수 있습니다. N-way, M 비트 mux의 공식은 다음과 같습니다.
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
내 구현의 숫자를 크 런칭해도 좋은 결과를 얻지 못합니다. virtix-6 제품군의 90 %에는 40k 작업을 수행하기 위해 DSP를 리소스 공유하기에 충분한 슬라이스가 없습니다.