Xilinx的大学计划真是个好东西,不但让我在研一时就有机会接触Xilinx的FPGA开发板,还能让我在学校里就参加相关的FPGA培训。去年年底,Bob Stewart教授来到了我们学校,进行了为期两天的名为<Xilinx DSP for FPGA Primer>的FPGA培训。Bob教授所讲授的内容和我的研究方向几乎完全一致,让我受益匪浅。课程结束后,我仔细复习了一遍课程讲义,并做了一些简要的笔记。从今起,我就不定期的把我的这些笔记敲进电脑发上来,希望在分享的同时也能从大家那里学习更多的东西,呵呵~
由于定位是“Primer”,所以这套讲义的起点还是很低的,从很多最基础的东西讲起。那对于我来说,有些东西早已知道(比如说FPGA的结构,并行处理的优势等),所以我的这些笔记过滤掉了一些最基本的内容,提炼出了我觉得对我比较有帮助的东西。这次发出来的都是一些很基本的内容,我总结的不多。在后续笔记中,会涉及诸如下变频等一些较为深入的主题,到那时,我的笔记会自然会比较详细。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一、DSP的FPGA实现简介(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的低两位舍去,可在右起第二位上加1(1010001)再截断(10100)
[3] 一种新的方法:Trounding(截断和舍入的折中)
二进制时,将要舍去的最高位和未舍去的最低位进行“或”运算后,将结果赋给舍去后新数的最低位
a) 只有当两个或门输入都为1时,Trounding才和Rounding不同
b) Trounding节省了硬件成本,平均量化误差介于Truncating和Rounding之间
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,在双精度中为1023,F为一个不含整数位的无符号定点数。
由此可见,浮点数其实是由“符号位”,“指数位”和“尾数位”三部分组成的,相比于定点数,浮点数能用有限的位数表示更大范围内的数,精度相对于定点数提高了很多。
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] 复数除法:六个乘法,两个除法和三个加法
用户161637 2009-8-10 20:11
tengjingshu_112148725 2009-4-25 10:56