数字信号处理基础----xilinx除法器IP使⽤
前⾔
在进⾏数字信号处理的时候,计算是必不可少的,通常情况下,能够不⽤乘法器和除法器就不⽤乘除法器,可以采⽤移位和加减法的⽅式来完成计算。但在⼀些特殊情况下,希望采⽤乘除法,这时候在FPGA当中就需要专⽤的IP了。乘除法在FPGA当中实现起来是⽐较困难的⼀件事情。若直接在verilog 代码中使⽤了乘法或者除法,其实最终对应到电路中,要么是采⽤⼤量的block ram来实现,要么是占⽤DSP资源。这种情况下,对资源的占⽤是拿捏不准确。因此需要使⽤专⽤的乘除法器来实现乘除法。
1. 数据的表⽰
1.1原码,反码,补码
在进⾏数字信号处理的时候,这三个码⾸先得搞清楚了。例如
数据源码反码补码
65010000010100000101000001
-65110000011011111010111111
北京职业培训
澳际雅思
正数的源码补码,反码都是它本⾝。但是负数就需要注意了,关于如何来计算源码反码补码,其实也⽐较简单。
⾸先最⾼位为符号位,余下的都是数据位。
求得数据的绝对值,然后根据数据的正负,在最⾼位填0或1。正数填0,负数填1,就得到了数据的源码。
若数据是负数
那么保持最⾼位不变,其余位按位取反,就得到了数据的反码。
保持⾼位不变,在反码的基础上加1就成了数据的补码。
举⼏个简单例⼦。就⽤⾃带的计算器这个软件,调到程序员模式就开始计算。
⾸先是正数:例如100,那么它的⼆进制表⽰就是8’b0110_0100。
如果是负数:例如-100,那么他的⼆进制补码的表⽰就是 8’b1001_1100
尖酸刻薄的人新车除味在FPGA当中,数据都是以补码的形式存在的,知道了这个,就能够很好对数据进⾏运算了。
1.2 对数据求绝对值
由于在FPGA当中,数据都是以补码的形式存在的,因此对数据进⾏求绝对值的时候,就⽐较好操作了。如果⼀个数是正数,那么这个数据绝对值就是它本⾝。如果⼀个数是负数,那么直接按位取反再加⼀就可以了。
数据类型求绝对值⽅法
正数绝对值就是数据本⾝
负数按位取反再加⼀
还是上⾯的例⼦,-100的补码是8’1001_1100
它的绝对值是100。也就是8’b0110_0100。也就是由负数的补码,按位取反(包含符号位)再加⼀得到。
1.3 数据位宽的扩展与缩⼩
在进⾏数据位宽的扩展的时候,对于有符号数的处理,得格外的⼩⼼,最⾼位⼀定不能给搞忘了。
举个简单的例⼦:
⽤8bit表⽰⼀个正数100
长痛不如短痛
现在⽤16bit来表⽰这个数,现在多了8bit,因此多出的⾼位的8bit,需要⽤原始数据的最⾼位来填充,也就是最⾼位全部填充0。约翰列侬经典歌曲
若⽤8bit数据表⽰⼀个负数 -100;
现在⽤16bit来表⽰这个数,现在多了8bit,因此多出的⾼位的8bit,需要⽤原始数据的最⾼位来填充,
也就是最⾼位全部填充1。
1.4 定点数
前⾯写的都是整数,在FPGA当中如何来表⽰⼩数呢。这⾥就涉及到⼀个量化的问题,就是⽤⼀个整数来表⽰⼩数。在FPGA中常⽤的就是定点数来表⽰⼩数。所谓定点就是指⼩数点的位置是固定的。⽐如⼀个数⽤8位表⽰,符号位1位,整数位1位,⼩数位4位。那么如何使⽤定点数来表⽰⼀个这样的数呢。
⽐如4.5,按照上⾯的⽅式进⾏定点化。
可以看到定点化之后的结果是72。其中符号位1位,整数位3位,⼩数位4位。
负数的定点化和正数类似。⽐如:
个⼈在识别负数的时候,有个个⼈的⼩喜好。那就是符号位为1表⽰这个数是负数,那么最⼤的负数表⽰范围就是-2(N是数据的位宽),那么⽤补码表⽰这个数据的时候,就是最⼤的负数表⽰范围加上后⾯的数。就⽐如这个 -72。最⼤的负数表⽰范围是-128,再加上后⾯的符号位后⾯的数就是结果。(歪门邪道,不可信)城市规划专业就业
其实可以看作:
1.4.1 量化误差
英文情信
在使⽤定点数的时候,不可避免地会引⼊量化误差。这个量化误差的精度是由需要量化的⼩数的位宽决定的。⽐如⼀个8bit数,最⾼位符号位,3位整数位,4位⼩数位。那么量化位宽就是4位。因此量化的最⼩精度是1/2,也就是0.0625。
在这⾥举⼀个简单的例⼦。
对于1.0625在不同情况下,进⾏定点数的转化。
empty的反义词ca(1) : 8bit数,最⾼位为符号位,3位整数位,4位⼩数位
ca(2): 8bit数,最⾼位为符号位,4位位整数, 3位⼩数位
对于第⼀种情况:量化的结果为:
能够完整地表达出原始的数据,1.0625 4.5×2=472
−4.5×2=4−72
N-1−72=−2+72+52+423
decentralize41.0625×2=417