fpga中最常用的还是定点化数据处理方法,本文对定点化数据处理方法进行简要探讨,并给出必要的代码例子。
1、一般扩位原则:
1) 加减法运算:扩位位宽=ceil(log2(加法个数))
如:两个加法扩1位,三个四个加法扩2位…
2)乘法运算:结果扩位位宽=两个乘数位宽的和
如:15bit数与14bit相乘结果位宽应为29bit。
3)除法运算:结果扩位位宽=被除数位宽与除数位宽的差
扩位时对于有符号数,高位扩展时扩展符号位,对于无符号数高位扩展时直接补零。因为有符号数高位是符号位,扩位补零会将负数扩展为错误的正数,而无符号数没有符号位,对位最高bit为1的无符号数,扩展符号位同样会导致数据异常。
符号位扩展:
2、高位截位,分为饱和截位和直接截位:
1)高位直接截位,直接抛掉高位保留低位,在确认信号不会溢出的模块使用直接截位的方法,节省资源;
2)高位饱和截位:对计算后的数据进行判断,如果超出位宽,正数输出为最大值,负数输出为最小值;判断方法就是看高位是否完全相同。
3、低位截位:
1)直接截位:功率计算等统计模块会使用,数字信号处理中不会使用,因为这种方式,频域会出现直流。
2)四舍五入:如下所示,上一篇文章中说了数据的表示(fpga数字信号处理之数据的表示),看一看到对于补码,verilog中只针对负数的0.5进行特殊处理即可。
代码如下,代码中会判断信号是否是-n.5,进行处理。
3)近似四舍五入,对于真四舍五入来说,对-0.5的判断逻辑较为复杂,而且有的数据处理对-0.5的要求也不高,此时可以采用近似四舍五入的方法,之前的代码中最常出现的就是这种处理方式:
可以看到这种处理方式下-0.5的值是偏大的。
另外,要注意上一篇文章中多次提到的ieee 754浮点数标准里面,对于浮点数取整的规定如下
1.就近舍入round to nearest (even)
2. 向零舍入(truncate)
3.朝正无穷舍入round up (toward +∞)
4.朝负无穷舍入round down (toward −∞)
python等默认使用的就是 就近舍入round to nearest (even) 处理方法,python中的计算结果为:
round(0.5)= 0
round(1.5)=2
这一点大家做算法时要注意一下。
龙芯中科新型工控芯片与工业软件联合创新实验室揭牌,上海这一传感器项目斩获“大飞机”创新创业大赛一
基于TSMC 0.25μm CMOS工艺实现ADC采样保持电路的设计
Dialog其FusionHD™ NOR闪存兼容并已在SmartBond™低功耗蓝牙无线MCU平台上认证
贝尔模型202蓝牙电话的制作教程
MQTT工业级无线路由器的特点
FPGA中定点数的处理方法
德州仪器(TI)的破损玻璃检测器解决方案
禾赛科技发布全新高性价比的32通道中端激光雷达解决方案
SCT51240—单通道下管IGBT/MOSFET栅极驱动器
5G通信系统将突出“以用户为中心”,更加重视用户的个性化服务和用户体验
四大主题全覆盖,电子产业全智道--30余场活动邀您参观NEPCON ASIA 2021
接地电阻柜的主要应用领域都有哪些
傅盛:AI的出现,让机器人有了更多可能
两岸逾20家PCB制造商宣布泰国投资计划
小米MIX+安卓8.0:再次改变手机!
气体脉冲放电电源的组成电路图
荣泰天猫旗舰店双十一超级大牌日即将震撼开启
苹果推出九年后 智能手机蓬勃发展时代宣告结束
延长流量计电池寿命的5个优秀实践
什么是手机制式