微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > FPGA设计时一些复杂的运算怎么处理?

FPGA设计时一些复杂的运算怎么处理?

时间:10-02 整理:3721RD 点击:
最近完成一个作业,要求用FPGA实现一个算法,具体就是一种线性回归算法。在软件层面上很简单,但考虑硬件实现是有很多问题。1.算法设计大量的乘法运算,感觉很浪费资源,一般这种情况是怎么处理的?
2.算法中有求矩阵相关性系数、特征向量等操作。实现的话也是考虑怎么将其分解为硬件的一些基本操作(与或加减位移等)吗?
3.还有小问题:如果在FPGA上实现,有很多参数我觉得可以提前算好,写到BRAM中,一次使用完后,下一次修改参数是可以在烧写进去。但是如果在ASIC中实现的话,这种思路是不是就无法成立?
这方面接触的不多,可能有很多理解错误,感谢各位大佬指正!

1,资源问题两种方式:
a,优化结构,类似快速傅里叶变换的实现,通过公式变换减少乘法的次数
b,增加时钟频率,可能需要增加复杂度以及timing风险
2,FPGA内部的资源就是这些,乘法器,加法器,查找表,所以肯定需要分解,而且分解的时候需要注意复用的流水的限制。
3,参数修改asic不清楚,但是FPGA一般设计不需要重新编译版本,都会有主控到FPGA内部的寄存器配置总线,单独一个FPGA芯片的情况没遇到过,能想到也是通过Ila这类的IP进行少量模式的控制,如果是大规模的参数配置的话,不知道是不是有其他好的办法。


我再琢磨一下,多谢

asic 的话用parameter,下次使用直接改下参数就能用

1、如果变量与变量的乘法,那就只能用乘法器,或者自己写乘法器(就是移位加法而已,但是速率有限制),如果是常数和变量相乘,可以将常数分解为2^C1 + 2^C2 + 2^C3 ......+ N,N是10以内的数,这样就用多次移位运算和简单加法运算就搞定,不用乘法器;
2、大数据量的相关运算,一般都是用快速卷积实现(将相关序列倒序),快速卷积先将数据FFT,然后进行频域乘法,再进行IFFT,就得到相关结果;如果你能发现很特殊的规律,分解为更简单的算法,也可以。
3、ASIC也有类似rom这种ram单元啊,可以初始化一个固件值,中间再通过接口修改嘛。

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

网站地图

Top