我有一个特别大的信号处理转换,需要从 matlab 移植到 VHDL。它肯定需要某种资源共享。一点计算给了我以下信息:
- 512 英尺 64 点
- 41210 乘加运算
考虑到最大的 Virtex 6 FPGA 有大约 2000 个 DSP48E 块,我知道我可以进行资源共享以便多次重复使用资源。执行时间不是真正的问题,处理时间在 FPGA 方面可能需要相对较长的时间。
查看资源使用情况,使用 radix-2 lite 架构可以获得 4dsp 块/FFT 操作 = 2048 个 DSP 块,总共约 43k。最大的 Virtex FPGA 有 2k 个块,或 20 个操作/多路复用器。
显然,在织物中包含如此大的多路复用器也会占用切片。我在哪里可以找到这个限制的上限?我不能无限共享FPGA资源。41210 乘数是否太大?如何计算太大?
我还查看了其他资源(切片、布拉姆斯等)。Radix-2 Lite 还提供 4 x 18k brams/fft = 2048 brams,最大的 Xilinx FPGA 包含 2128 Brams。非常边缘。我担心我的设计太大了。
更新:
有关设计本身的更多信息。我无法详细说明,但这是我可以提供的:
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 路复用器。N路M位多路复用器的公式如下:
N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).
为我的实施处理数字并没有给出好的结果。90% 的 virtix-6 系列没有足够的切片来共享其 DSP 资源以执行 40k 操作。