新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > C语言在FPGA上实现DSP的解决方案

C语言在FPGA上实现DSP的解决方案

作者:时间:2012-05-09来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257527.htm

最后,你还必须分析各个算法,将其按步分解成由数学运算(加、减、乘、除、积分)、延迟、保存到内存和查表等操作。无论多复杂的算法都可以分解成这些最基本的操作,而且这些操作在相互无关联的情况下可以并行处理。我们的示例应用可以这样被加速:9个处理周期被充分地进行管道处理,在初始延迟后的每个时钟都输出一个结果,然后这些周期被嵌入到X、Y和Θ的三维循环中,因此总的周期数为9+(9*X*Y*Θ),即在每个处理块中只包括9个这样的周期:延迟+(9个周期*64个像素*64个像素*64位深度)。

尽管中可以实现浮点运算单元,但它们能迅速消耗的资源,所以如果可以,最好谨慎使用。主要依靠浮点运算的算法最好转换成定点运算,这样你既可利用用“模块浮点”方法,又可通过定点的方法设计整个系统。然后,通过对比实际输出与原始的全浮点运算的软件实现来确定转换精度。在霍尔算法的例子中,14b+7b的定点分辨率与全浮点的结果完全相同。


2确定资源

在接下来的设计中,需要对每个处理部分的时钟周期计数。通常,每个时钟周期可以完成二到三个运算,然后确定所需的资源以适应代码。可以在多个FPGA中分段运行代码来获得更高的计算能力。这些解决方案的拓展非常容易,只要使用所需的多个FPGA(最多5个),系统将自动检测它们。在该例子中,设计是基于处理块的。这些块按顺序被发送给每个FPGA,或者从每个FPGA收集起来(其逻辑是代码的一部分)。一个FPGA的加速比例可以达到37:1,而10个FPGA(每两个电路板上有5个)可以达到370:1。对设计进行编码相对简单,因为设计主要由完成,除了一些需要特殊Handel-C指令的新功能。这些新指令包括:增强位操作、并行处理、宏操作和公式、任意宽度的变量、FPGA存储器接口、RAM和ROM类型、信号(代表硬件中的信号线)以及通道(在代码并行分支或时钟域之间通信)。工具条中的“代码转换”可以完成C和Handel-C的样本转换。


3对环境的仿真

再下一步是建立仿真环境,并在其中测试和优化硬件代码。仿真环境提供了完整的bit-true/cycle-true仿真,并对FPGA的实现进行可靠的模拟。利用设计输出与C软件仿真输出的比较来测试精度,同样也可得到FPGA处理器上真实运行速度的报告。通常,进行结构块仿真有助于找到设计中的问题,因为这些块在重组后可以确定总体的运行效果。可在仿真过程中做进一步的调整,如利用流水线在每个时钟周期内进行单输入单输出的测试,或将处理过程细分到更多的并行数据流中直到FPGA的资源利用率达到100%。此外,在硬件编译时也能发现算法的最慢点并对其优化,在FPGA甚至板子之间分割算法还可以获得额外的速度。利用软件,进一步调整可获得更好的性能。然而,精确调整带来的性能增益却会下降。通过简单的增加FPGA非常具有成本效益。并不需要使设计完美化,因为基于这些结果的设计可以在任何时候进行快速的仿真和优化。一旦仿真完成,就可以将设计编译到硬件里并激活数据流管理(DSM),以便将数据流送到FPGA处理器板而不是仿真器中。

访问TI网站,获取最新技术信息全面了解德州仪器(TI)的处理器电源参考设计:交叉参考搜索、应用手册、工具和软件、方框图参考设计、模拟eLAB。


上一页 1 2 下一页

关键词: C语言 DSP FPGA

评论


相关推荐

技术专区

关闭