注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
tx_xy的个人空间 https://home.eeworld.com.cn/space-uid-216158.html [收藏] [复制] [分享] [RSS]
日志

FPGA起步ABC

已有 1856 次阅读2011-2-18 22:21



        FPGA的应用越来越广泛,学习FPGA的朋友也越来越多,甚至有好多刚上大学或者才念大二没学过数电、信号处理的童鞋,也开始学习。俺混在FPGA使用者的队伍里,算了算,从当初使用cpld做第一个电池充电器开始,也已有些年头。在FPGA设计领域,俺摸索学习的过程中,走了不少弯路,吃了不少的苦头,现在做个小结,写个初学FPGA的朋友,期待能给大家一些帮助,当然也期待坛子里的高手指点一二,俺也提高下!

      

学好FPGA,当然需要一定的基础,在俺看来,最基础的是数学,所以期待初学FPGA的童鞋,能够真正重视数学,把大学数学这门课认真学好。



 



FPGA本身来说,无论用在哪个行业、进行什么样的处理,归根结底他其实就做两种运算:一是逻辑运算,二是数学运算,这数学运算的根基除了相应的专业知识以外,便是数学。



 



举个极其简单的例子,比如两个32bit的数据X[31:0]Y[31:0]相乘。当然,无论Altera还是Xilinx都有现成的乘法器可以调用, 从实现最简单这一方面来说的话,直接调用现成的IP最简单,可两个32bit的乘法器将耗费大量的资源。我们可以稍微简化如下:



X[31:0]拆成两部分X1[15:0]X2[15:0],令X1[15:0]=X[31:16]X2[15:0]=X[15:0],则X1左移16位后与X2相加可以得到X



同样将Y[31:0]拆成两部分Y1[15:0]Y2[15:0],令Y1[15:0]=Y[31:16]Y2[15:0]=Y[15:0],则Y1左移16位后与Y2相加可以得到Y



XY的相乘可以转化为X1X2分别与Y1Y2相乘,这样一个32bit*32bit的乘法器用了四个16bit*16bit的乘法器和三个32bit的加法器替代。



有兴趣的童鞋,不妨综合一下看看,这两者的面积区别是多大。



 



或许上面的这个例子不是很恰当,并不能很充分的说明数学的重要性,那还有一个常见的例子,比如求对数函数lnx)。



如果x是一个常数或者在有限范围内取值,那么很简单,我们可以使用计算器把所有的值都算好,再根据系统精度的要求直接将lnx)用所有的常数替代,比如ln2就可以使用0.69来代替(假设精度只要求精确到小数点后两位),将这些常数存到查找表中去;



如果x是一个变量,如果其取值时变,此时如何计算?考虑到FPGA尤其适合于乘加运算,因此我们便可以考虑将其展开成幂级数的形式。



 



像上面的这些简单例子,如果数学功底比较好,可以很容易想到办法就把问题解决,相反,如果需要用到两lnx)的时候,我们不记得还有幂级数展开这一手段,怎么办?



我们毕业开始工作,并不是每家公司都会配有专门的算法工程师,来进行信号处理过程中的每一步运算过程的分解;单就这一点,我们就应该好好把数学学好,这样在以后的工作中,碰到类似的数学处理过程时,才能够做到游刃有余。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章