FPGA固件设计:太大太大了?


13

我有一个特别大的信号处理转换,需要从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。无论哪种情况,就FPGA资源而言,64点FFT都很小。

乘数:这是我的问题。乘法输入来自查找表或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运算。


资源共享的最有效形式是部分序列化,您可以在其中通过寻址内存来访问数据。当然,在极端情况下,您会回到传统的存储程序处理器-缺乏硬性性能要求开始转向可能在计算云中运行的软件实现的灵活性。
克里斯·斯特拉顿

1
这不是问题的一部分,但是在资源计算中,您没有说明操作数的大小。512个FFT x 64点x多少位?在FPGA中,操作数的大小完全取决于您,因此在确定问题的大小时必须考虑它。
Photon

我不知道您是否意识到,但是那些大型FPGA相当昂贵。有些可能会超过$ 5k。除非成本不是问题,否则也许您也应该考虑这一点。
古斯塔沃·利托夫斯基2012

1
不幸的是,到目前为止,您除了获得了各种替代解决方案建议之外,我怀疑我们是否可以为您做更多的事情。我的意思是,您可以只制造一个FFT内核,然后一个接一个地运行512个输入,显然,即使在相当小的FPGA中,它也可以容纳。在这与并行执行所有操作之间的某个位置是速度与应用程序资源之间的正确平衡……但是,除了您很难说出平衡应该在哪里,任何人都很难。
Photon

1
您有预算号码吗?就像古斯塔沃(Gustavo)指出的那样,高端FPGA价格昂贵,而开发PCB的费用也很高。尽管仅将计算硬件的数量加倍(或翻倍或...)并继续使用现有的经过验证的?,Matlab代码就可能满足给定的速度规格。
Photon

Answers:


8

我想知道是否还有另一种看待问题的方式?

估算512个FFT操作(每个64点)和42k MAC操作的估计...我想这是算法一次通过所需要的吗?

现在,您已经发现一个使用4个DSP单元的FFT内核...但是每个FFT需要多少个时钟周期?(吞吐量,而不是延迟)?假设是64,或每点1个周期。然后,您必须在64个周期内完成这些42k Mac操作-也许每个周期1k MAC,每个MAC处理42个操作。

现在是时候更详细地研究算法的其余部分了:不是识别MAC,而是识别可以重用的高级操作(过滤,关联等)。为这些操作中的每一个构建核心,并具有可重用性(例如,具有不同可选系数集的滤波器),很快您会发现相对较大的核心之间需要相对较少的多路复用器...

另外,是否有可能降低强度?在某些情况下,需要循环乘法才能生成二次方(甚至更高)。展开它们,我可以不乘而迭代地生成它们:那天我在FPGA上构建差分引擎的那一天,我感到非常高兴!

在不了解应用程序的情况下,我无法提供更多详细信息,但是某些此类分析可能会使某些重大简化成为可能。

另外,由于听起来好像您没有确定的平台,因此请考虑是否可以在多个FPGA上进行分区...看一下该板,它在一个方便的平台上提供多个FPGA。他们还有一个带有100个Spartan-3器件的电路板...

(ps,当软件专家们解决了另一个问题时,我感到很失望-我认为那里至少是适当的)

编辑:重新编辑-我认为您已经开始到达那里。如果所有的乘法器输入都是FFT输出或“非滤波器”系数,您将开始看到需要利用的规律性。每个乘法器的一个输入连接到FFT输出,另一个输入连接到系数ROM(实现为常数数组的BlockRam)。

通过相同的FFT单元对不同的FFT操作进行排序将自动对经过此乘法器的FFT输出进行排序。现在,将正确的系数排序到其他MPY输入中仅是在正确的时间组织正确的ROM地址的问题:这是组织问题,而不是MUX的头疼问题。

关于性能:我认为Dave Tweed过于悲观-FFT进行n * log(n)次运算,但是您可以选择O(n)蝶形单位和O(logN)周期,或者O(logN)单位和O( n)循环或其他组合以适合您的资源和速度目标。一种这样的组合可以使FFT后的乘法结构比其他组合简单得多...


用单个硬件蝶形电路实现的FFT将需要NlogN个时钟周期才能完成。为512点,那将是256 * 8蝴蝶,或2048个时钟。这意味着41210(或32768?)的MAC仅需要8-10个硬件乘法器即可在相同的时间内完成任务。
戴夫特威德

我的意思是16-20乘数。
戴夫特威德

抱歉,我只是意识到我倒退了。单个FFT为64点,因此单蝶形实现将需要32 * 5 = 160个时钟。然后可以使用200-250个硬件乘法器完成MAC。
戴夫·特威德

这就是让我难过的地方。xilinx如何设计能够执行需要400k乘法加法运算(NlogN)的16k / 32k fft的内核,而我却为41k苦苦挣扎?一定有办法!
stanri 2013年

@Dave:我相信您的意思是160乘法,而不是160周期吗?FFT并没有如此内在地序列化……
Brian Drummond 2013年

2

如果这个问题没有严格的实时约束,而且听起来好像没有,您只是希望它“更快”运行,那么似乎可以在一个或多个GPU上加速。有几个软件库使这成为一个相对简单的命题,比直接使用定制FPGA硬件要容易一个数量级。

只需使用Google的“支持GPU的库”或“ GPU加速的库”即可上手。


有趣的是,当我听说这个项目时,我向客户提到了GPU,而他对此并不感兴趣。
斯坦里

@StaceyAnneRieck:他说了为什么吗?
戴夫·特威德

他并没有真正说出原因,只是他在使用FPGA之前就已经进行了调查,显然工作量似乎减少了。我将不得不再次提出它。
2013年

@stanri:即使最终最终还是要实现FPGA实现,在我看来,GPU可能还是“烙印”整个系统架构的好方法。您是否有(并且可以共享?)该算法的某种高级数据流图,您能否给我们一个涉及的数据量的概念?没有这些问题的答案,除了非常笼统的建议之外,很难给您其他任何东西。
戴夫·特威德

它实际上是一个非常非常简单的算法,只是规模使它变得如此复杂。基本上如下:初始条件->并行512英尺-> FFT输出上32768乘法运算->调整初始条件->漂洗并重复
2004年

1

可以使用专用硬件或FPGA(甚至CPLD)来大大加快某些数学运算的速度。尝试设计硬件(电路或FPGA逻辑)以加速数学运算时,要记住的关键是确定数据进出设备的顺序。具有高效I / O布局的设备可能会比具有低效布局的设备提供更好的性能,即使后者需要更多的电路。

我没有尝试过为FFT设计一种硬件辅助设计,但是我看到的是大型乘法运算的硬件辅助(可能用于RSA加密)。许多微控制器,甚至那些具有特殊快速乘法硬件的微控制器,在这种操作中效率都不是很高,因为它们需要大量的寄存器改组。即使硬件本身不那么复杂,旨在最小化寄存器交换的硬件也可以通过多精度乘法运算获得更好的性能。例如,与一次可以执行8x8乘法的硬件相比,可以一次执行两个位的流水线16xN乘法(移入multiplcand的两个低位,然后移出结果的两个高位)的硬件可能会获得更好的性能,即使前者可能需要较少的电路(并且通过流水线,具有较短的关键数据路径)。关键是要弄清楚必要代码的“内部循环”是什么样子,并弄清是否有任何效率低下的问题可以轻松消除。


哪种操作最适合这种优化形式?我已经编辑了上面的问题,以详细说明乘法运算的性质。硬件辅助设计听起来真的很有趣!
斯坦里

0

我们执行时间有多少问题?

这似乎确实是一种情况,您应该真正实现软MCU,具有集成硬MCU的FPGA甚至是单独的MCU器件,并序列化所有操作。

假设您有执行时间,则在软件中进行FFT不仅容易调试,而且设计也可能容易得多。


1
在FPGA上的软核CPU中进行繁重的计算是愚蠢的。如果您打算在存储程序体系结构中进行计算(应该考虑这一点),那么由于它是基于高性能/美元的硬核cpu上的,因此您不会在可比的fab-上付出灵活逻辑的速度损失生成硬逻辑。
克里斯·斯特拉顿

@ChrisStratton-好点。为此添加了附加说明。
康纳·沃尔夫

1
即使是内置的硬核CPU也不会像传统的常规处理器/ GPU那样承担基于软件的任务,并且成本会大大增加。
克里斯·斯特拉顿

@ChrisStratton-我认为最常见的集成硬CPU架构是ARM还是POWER?在这种情况下,它基本上商用CPU。
康纳·沃尔夫

1
鉴于您还有其他FPGA问题,构建FPGA板可能是一种学习经验,其成本将比估计的高很多。我认为目前要做的是从试用计算云运行中为客户提供一些硬性价格/性能数字(最终可能会成为购买的硬件),而不是价格更高,FPGA工作风险更高的一些想法。 。
克里斯·斯特拉顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.