原创 DSP的FPGA实现学习笔记之一(算数运算)

2009-4-26 17:39 5076 5 6 分类: FPGA/CPLD

 


       Xilinx的大学计划真是个好东西,不但让我在研一时就有机会接触XilinxFPGA开发板,还能让我在学校里就参加相关的FPGA培训。去年年底,Bob Stewart教授来到了我们学校,进行了为期两天的名为<Xilinx DSP for FPGA Primer>FPGA培训。Bob教授所讲授的内容和我的研究方向几乎完全一致,让我受益匪浅。课程结束后,我仔细复习了一遍课程讲义,并做了一些简要的笔记。从今起,我就不定期的把我的这些笔记敲进电脑发上来,希望在分享的同时也能从大家那里学习更多的东西,呵呵~


       由于定位是“Primer”,所以这套讲义的起点还是很低的,从很多最基础的东西讲起。那对于我来说,有些东西早已知道(比如说FPGA的结构,并行处理的优势等),所以我的这些笔记过滤掉了一些最基本的内容,提炼出了我觉得对我比较有帮助的东西。这次发出来的都是一些很基本的内容,我总结的不多。在后续笔记中,会涉及诸如下变频等一些较为深入的主题,到那时,我的笔记会自然会比较详细。


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


 

一、DSPFPGA实现简介(DSP on FPGAs Introduction)


1.       FPGA适合应用在低级的DSP算法的数据流场合,不适合应用在if-then-else判断型编程需求的场合;


2.       DSP 的基础是乘法和加法,并且是大量的乘法和加法


[1]      两个N位数字相加将产生最大为N+1位的数值


[2]      两个N位数字相乘可产生最大为2N位的数


3.       FPGA实现DSP的一些优化方法(基本思想)


[1]      串并转换,即速度与面积互换


[2]      将乘法转换成“移位+加减”运算


[3]      逻辑单元复用(如FIR的抽头可复用)


 


二、复习数字逻辑(Digital Logic Review)


1.       有符号二进制数值


[1]      有符号二进制数的补码表示范围:-2^(n-1)~2^(n-1)-1   (“^”表示乘方)


[2]      用补码时,加减法直接运算,不考虑符号位


[3]      溢出:正数+负数:不溢出


正数+正数:若结果最高位为1,则结果溢出


负数+负数:若结果最高位为0,则结果溢出


2.       逻辑单元


使用“与非门”可以产生其它所有门电路(具体图形略)


 


三、DSP算数运算(Arithmetic for DSP)


1.       定点二进制数:二进制小数点在固定位置的数


小数处理,归一化:小数在相乘时要跟踪其小数点的位置,若进行归一化,那么二进制定点数只有一位整数且整数位是零,这种情况下进行乘法运算时结果也为一个在正负1之间的数,直接截断即可,不用移位


2.       截断(Truncating)和舍入(Rounding)


[1]      截断(直接将低位舍去)通常会带来精度的降低


[2]      舍入相对截断能更准确一些,但也更复杂,要多执行一次加法


二进制时,将要舍去的最高位加1,然后再截断(相当于实现了四舍五入)


eg:1001111的低两位舍去,可在右起第二位上加11010001)再截断(10100


[3]      一种新的方法:Trounding(截断和舍入的折中)


二进制时,将要舍去的最高位和未舍去的最低位进行“或”运算后,将结果赋给舍去后新数的最低位


a)         只有当两个或门输入都为1时,Trounding才和Rounding不同


b)        Trounding节省了硬件成本,平均量化误差介于TruncatingRounding之间


eg:100100低两位舍去,可将右起第二第三位进行或运算,再赋给新数最低位,得到10011


3.       浮点数


[1]      表示方法


单精度:SEE……EEFF……FFF(1个“S”,8个“E”,23个“F”共32)


双精度:SEE……EEFF……FFF(1个“S”,8个“E”,55个“F”共64)


       这些数被编码为:f(S)*2^(E+B)*(1.F)


在上式中,f(S)是符号位,E表示小数点移动位数,B在单精度中为127,在双精度中为1023F为一个不含整数位的无符号定点数。


由此可见,浮点数其实是由“符号位”,“指数位”和“尾数位”三部分组成的,相比于定点数,浮点数能用有限的位数表示更大范围内的数,精度相对于定点数提高了很多。


              eg:10=>+2^(3+127)*1.01                           以位形式书写:0 10000010 0100000……


                  10.34=>+2^(3+127)*1.0100101……    以位形式书写:0 10000010 0100101……


   -0.078125=>-2^(-4+127)*1.01                以位形式书写:1 01111011 01000……


[2]      短指数:单精度:SEE……EEFF……FFF(1个“S”,4个“E”,11个“F”共16)


[3]      FPGA中实现浮点运算,速度慢且将占用大量的硬件空间


[4]      浮点数乘法:尾数相乘,指数相加


[5]      浮点数加法:先做移位操作使其具有相同的指数,再相加


4.       加法中的溢出和饱和


[1]      溢出:同符号数相加,有可能出现溢出


[2]      饱和:先进行溢出检测,若出现溢出则将结果设定为最接近的可能值


5.       一些基本运算的速度


[1]      加法>乘法>除法


[2]      平方根>除法


[3]      复数加减法:两个加减法


[4]      复数乘法:四个乘法和两个加法(或三个乘法和五个加法)


[5]      复数除法:六个乘法,两个除法和三个加法


 


 

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户161637 2009-8-10 20:11

你好!谢谢分享呀。有个问题要请教呀 在FPGa上做除法的时候,现在FPGA都有自带的除法的核 可以直接调用的,但是除法的结果都是分为商和余数的形式,那么余数怎么处理呢?比如10/3=3...1.因为只要3.33333的结果对于做算法是准确的。也就是说小数的除法怎么办呢? 最近这个问题很困扰我的 QQ:707832304 期待与你交流

tengjingshu_112148725 2009-4-25 10:56

好,谢谢分享。DSP一直不敢弄
相关推荐阅读
用户1432457 2009-05-17 02:10
嵌入式实时操作系统uC/OS-III即将发布
 2009-05-17 01:48:13 | 嵌入式实时操作系统uC/OS-III即将发布        前两天邮箱里收到订阅的Micrium的邮件,一看还有一点点小吃惊,大家熟悉的嵌入式实时操作系统...
用户1432457 2009-05-04 11:27
关于在DSPbuilder下含有MegaCoreFunction的模块无法保存问题的解决办法
 DSPbuilder是Altera公司提供的一种算法级的FPGA开发工具,主要是用来快速实现DSP算法并可以在Matlab的Simulink环境下进行系统级的仿真。如果你需要用FPGA来实现一个通信...
用户1432457 2009-04-28 01:22
第二届“Actel”杯FPGA大赛闯入决赛,发帖纪念~
去年年底在一哥们的带领下参加了第二届“Actel”杯中国大学生FPGA竞赛,经过了近三月的艰苦奋战,今天终于进入决赛啦!<?xml:namespace prefix = o ns = "urn:...
用户1432457 2009-04-24 00:05
好书推荐:《FPGA设计指南——器件、工具和流程》
        FPGA方面的书籍有很多,而且几乎每一本的头几章都会对FPGA做一个概念性的介绍,那有没有一本书不涉及具体的技术而是专门介绍有关FPGA的概念性的问题呢?答案当然是有啦,而且还写得相当...
用户1432457 2009-04-21 18:47
关于FPGA你所应该知道的
 学习FPGA一年有余,多多少少知道点东西。前一阵子实验室内部交流,我给大家做了一次关于“FPGA扫盲”方面的小讲座,主要介绍了一下FPGA的原理、器件以及设计流程。由于讲座的定位是“扫盲”,所以讲得...
我要评论
2
5
关闭 站长推荐上一条 /3 下一条