微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 实时相关算法的FPGA实现

实时相关算法的FPGA实现

时间:10-02 整理:3721RD 点击:
各路大神好,现在我要用FPGA(现成的Xilinx VC707开发板)实现一个实时相关算法,即对两路数据序列进行移位相关,具体见下图。 图中有两个寄存器组(长度为L=256、512、1024...),其中竖着的寄存器组里存放着构造好的数据(数据位宽10bits)。上面的寄存器组用于数据缓存,每个clk周期内实现两个寄存器组内对应位置点数据的乘积,并求出所有乘积值的累加和(product_sum),并将此累加和数据与固定的数值阈值进行比较,若大于阈值,则存储data序列中相应的数据位置点;否则,放弃该product_sum。每个clk周期移入移出一个数据值(对应图中上面的寄存器组)。由于此算法处理的是前面模块推送的实时数据,所以对实时性要求比较高,每一次的计算延时不能太多。  我之前尝试的结果不太好,一直思路受限。所以,eetop的IC/FPGA高手们,能不能提供一些思路,这个算法该怎么实现(或能不能实现)?  先谢谢啦!



   可以设计成pipeline,data可以用两个memory(这里用FIFO说明)串联缓存:计算乘积累加用FIFO_A流水计算,计算完后data写入FIFO_B,得到比较结果后再看是否需要将FIFO_B中的数据写入到RAM,需要就写入不需要就清空。end.


你好harry_hust, 如果用memory进行缓存的话,无法做到一个clk访问所有的缓存数据(L个数据),所以,求出一个product_sum,即使用pipeline的话,也会需要很多周期。而data数据一直在推送,恐怕前后速率上无法达到匹配。



    这L个数据也是同时输入FPGA的吗?(我个人认为应该不会是同时给进来的,没有这么多的接口。)    其实实时计算并不是说不能有延迟,或者延迟只有1个cycle,只要满足指标要求都是实时的。
    另外,L个数据同时计算也带来很大的功耗,如果码率很大的话还得考虑散热问题。
    所以我觉得这个应该还可以进一步优化。

     事实上,我上面提到的data数据已经是FPGA内的数据,data数据从前面的一个模块输出到这个相关算法的处理模块。简单的说,这个算法就是要从这个data数据流中找到一个固定长度(L),每一帧数据的帧头(是否找到就是用上面图中提到的方法进行判决)。 这个算法也可以形象的描述为:有一个固定长度的窗(如我上面说的长度为L的寄存器组),而且这个窗是固定的,而data数据是随clk不断流经这个窗的,每走一个clk周期,这个窗里的数据是不断更新的(移位过程)。 因为不知道帧头到底什么时候会出现,那么,就需要在每一次窗里的数据有更新时,都进行判决确认。
     还有就是,你提到的实时计算允许有一定的延时,只要满足指标就行。 这我是同意的, 但就这个算法来说,data数据的数据率大概在25MHz/s,之前,我也有考虑按你上面提到的方法进行处理,用memory进行数据缓存,但考虑到memory每个cycle 只能读写一次,而且无法做到我上面提到的数据移位操作, 那么无论用不用pipeline,都会拖慢处理速度(因为我觉得算法的特性在于多数据的同时处理,而memory虽可以用于缓存,但是它使得数据的读写变得串行化,所以感觉有些不匹配。个人见解~)。
     关于L个数据同时计算,这是我最先考虑到的实现方式,但正如你所说,同时计算在实现时会带来大功耗问题、散热问题及FPGA布局布线资源大量消耗的问题(因为做个东西不是用于实际的产品,而是带有一定的实验性质的,所以更关注能否实现。),所以,这样做(我暂时想到的寄存器组)的话,最担心的就是布线资源不够用。  从目前程序的综合结果来说,感觉还是有些问题,没有综合出想要的structure。 当然,鉴于水平有限,可能还是有理解不到位的地方。 所以欢迎高手能提出不一样的见解!



   照你所说,那L个乘法是不可避免了,累加也不可避免会有(1+2+...+2^(L-1))个加法。   如果资源足够的话,你可以将data寄存N级(N为乘法开始到compare结束的cycle数),这样也可以流水了。
   另外,如果仅是实验用的话,可以仅做仿真,而不必到FPGA上跑。
   希望这些对你有帮助。

几百个乘法器。,帧头不是固定数,那计算量很多啊

挺复杂,学习一下,多谢了



  嗯,计算量是很大。



   嗯,正在尝试用流水线去做。 还有就是,这个虽然是实验性质的,还是有具体实物系统的,只是目前主要考虑系统的实现,对成本和功耗不是那么敏感~

上一篇:modelsim版本
下一篇:PCIe memory读的问题

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top