【FPGA】定点数 数据位宽 运算 位宽截取
在FPGA中,经常使用定点数表示小数,在进行各种运算时,定点数的位宽会发生变化,并且需要在适当地时候对数据的位宽进行截取。
运算要求和引起的位宽变化
假设存在两个数A、B,假定A位宽为m,小数位宽为a,B位宽为n,小数位宽为b。
无符号数加法:A+B,需要先将A和B的小数点对齐,再将整数位和小数位都扩展至较大的位宽,最终结果的位宽为拓展后的位宽+1。
有符号数加法:A+B,无需注意A、B符号位,可直接相加,同样需要先将A和B的小数点对齐,再将整数位和小数位都扩展至较大的位宽,最终结果的位宽为拓展后的位宽+1。
无符号数减法:A-B,需要先将A和B的小数点对齐,再将整数位和小数位都扩展至较大的位宽,最终结果的位宽为拓展后的位宽+1。
有符号数减法:A-B,无需注意A、B符号位,可直接相减,同样需要先将A和B的小数点对齐,再将整数位和小数位都扩展至较大的位宽,最终结果的位宽为拓展后的位宽+1。
无符号数乘法:A*B,无需对齐,无需注意A、B符号位,可直接相乘,最终结果的位宽为m+n。
有符号数乘法:A*B,无需对齐,无需注意A、B符号位,可直接相乘,最终结果的位宽为m+n-1。其实最终结果位宽原本为m+n,其中包含两位符号位,当符号位为10和01时,表明运算结果溢出,符号位为00和11时,去掉最高位
位宽截取
在乘法运算中,会成倍的增加位宽,因此在FPGA算法实现的过程中,常常需要对数据的位宽进行截取,常用的位宽截取方法有以下几种。
2.1 截断(tu)
2.2 四舍五入
“舍入”舍入到最邻近的可表示数字。如果出现结值,则舍入:
将正数朝正无穷方向舍入到最邻近的可表示数字。
将负数朝负无穷方向舍入到最邻近的可表示数字。
因此:
负值样本会引入小的负偏置。
对于具有均匀分布的正值和负值的样本,不会引入偏置。
对正值样本引入小的正偏置。
使用verilog编程时,假设要将m位数据截断为n位数据,需要将要截断的数据+{符号位取反,m-n-1{符号位}}再右移m-n位。以verilog为例,假定一64位有符号数要截断为一32位有符号数,程序如下。
reg signed [31:0] dataout;
wire signed [63:0] datain;always@(posedge clk)begindataout <= (datain + {~datain[63],31{datain[63]}}) >> 32;
end
十进制 |
定点化 |
二进制 |
舍入后二进制 |
定点化 |
十进制 |
-22 |
-1.375 |
1_1110_1010 |
1_1111_0000 |
-1 |
-16 |
-24 |
-1.5 |
1_1110_1000 |
1_1110_0000 |
-2 |
-32 |
-26 |
-1.625 |
1_1110_0110 |
1_1110_0000 |
-2 |
-32 |
22 |
1.375 |
0_0001_0110 |
0_0001_0000 |
1 |
16 |
24 |
1.5 |
0_0001_1000 |
0_0010_0000 |
2 |
32 |
26 |
1.625 |
0_0001_1010 |
0_0010_0000 |
2 |
32 |
2.3 收敛
“收敛”向最邻近的可表示值舍入,并将结值向最邻近的偶数舍入。它消除了由于舍入造成的偏置。但这可能会引入溢出。
具体实现以后再写
例子:
十进制 |
定点化 |
二进制 |
舍入后二进制 |
定点化 |
十进制 |
-16 |
-0.5 |
1_1111_0000 |
0_0000_0000 |
0 |
0 |
-22 |
-1.375 |
1_1110_1010 |
1_1111_0000 |
-1 |
-16 |
-24 |
-1.5 |
1_1110_1000 |
1_1110_0000 |
-2 |
-32 |
-26 |
-1.625 |
1_1110_0110 |
1_1110_0000 |
-2 |
-32 |
16 |
0.5 |
0_0001_0000 |
0_0000_0000 |
0 |
0 |
22 |
1.375 |
0_0001_0110 |
0_0001_0000 |
1 |
16 |
24 |
1.5 |
0_0001_1000 |
0_0010_0000 |
2 |
32 |
26 |
1.625 |
0_0001_1010 |
0_0010_0000 |
2 |
32 |
2.4 向上取整 向下取整目前用不到 以后再写
位宽溢出
在编程时,当等号右侧位宽大于左侧数据位宽时,无论是否有符号,无论小数位数是多少,均截取最高位。截取时,若右侧结果未超过左侧所能表示的范围,则正数的高位均为0,负数的高位均为1,截取后不会影响结果。但当右侧结果超过左侧所能表示的范围时,则会导致结果出现错误。
【FPGA】定点数 数据位宽 运算 位宽截取相关推荐
- Verilog学习之数据常量表达与位宽
本文原创内容,转载请标明出处. 原文链接:https://blog.csdn.net/Cixil/article/details/89422200 Verilog的表示形式 Verilog中整数,整型 ...
- 8bit黑白图像的灰度值范围是_窗宽窗位对基于互信息的医学图像
窗宽窗位对基于互信息的医学图像 摘 要:基于互信息的配准方法具有自动化程度高.配准精度高等优点,近来已成为医学图像处理领域的热点.基于互信息的配准方法实质上是一种对灰度进行统计和计算的方法,因此同一图 ...
- CT图像之Hu值变换与窗宽窗位调整
今天通过分析实验结果,完善了之前的预处理代码,借此博文分享给大家,另外 点击此处可以查看预处理的完整代码,欢迎大家一起来完善. 最重要的是,欢迎大家的批评指正,您的建议和意见将会是我成长源泉. 接下来 ...
- X线DR医学图像 --- 直方图的窗宽窗位调整(Matlab篇)
X线图像直方图的窗宽窗位的调整 图像的直方图显示了图像的灰阶分布.说白了就是,显示了图像当中每一个点的亮度分布情况(整个图像当中比较亮的点有多少个,黑的点又有多少个.反之,也可以看出某个点是落在了亮的 ...
- 使用pydicom实现Dicom文件读取与CT图像窗宽窗位调整
1. 前言 为了能够在Labelme上对Dicom图像进行编辑,这里对python环境下Dicom文件的读取进行了研究.在Dicom图像中CT的窗宽窗位是一个很重要的概念,但是找了半天在pydicom ...
- python nii 图像读取,转换成CT 值,设置窗宽窗位,保存成png 图像
import numpy as np import os # 遍历文件夹 import nibabel as nib # nii格式一般都会用到这个包 import imageio # 转换成图像ce ...
- vtk窗宽窗位,以及图像反白思路
普通图像的灰度范围一般是256级,而医学图像基于其特殊性,灰度级较普通图像会高很多.人体组织在CT上能分辨出2000个不同的灰度,而人眼只能分辨16个灰度,将这2000个CT值用16阶灰度反应的话,人 ...
- 量化交易创干货合集送给每一位爱学习的宽客quant
原 量化交易原创干货合集,送给每一位爱学习的宽客quanthttps://blog.csdn.net/myquant/article/details/82799016序号 标题 传送链接 1 双均线策 ...
- 量化交易创干货合集送给每一位爱学的宽客qun
原 量化交易原创干货合集,送给每一位爱学习的宽客quant 序号 标题 传送链接 1 双均线策略(期货) 量化策略源码 https://www.myquant.cn/docs/python_stra ...
最新文章
- einsum,一个函数走天下
- 一段话系列-QPS、TPS、PV是很么如何计算
- android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
- [转]【JAVA各版本特性】JAVA 1.0
- Android之如果解决Android studio项目里面的类名不能重命名
- 前端学习---css基本知识
- Linux中自带正则表达式应用举例
- 涉及子模块_COMSOL Multiphysics 5.6 RF模块更新详解
- 宁夏2021高考成绩查询,宁夏教育考试院:2021年宁夏高考成绩查询入口、查分系统...
- 当最有创意的开发者遇上移动云,谁将成为创新之王?
- 亚丁号云控之发布任务
- Emacs学习笔记(7):简单的配置
- vi 的完整指令说明 -- YenYen 整理
- JAVA中implements的用法
- Windows XP 中如何安装 pem 证书
- Android+H5开发
- 几个技术虚拟小组会议的思考
- ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
- 交互设计谁是最好用的原型绘制工具
- 思科 Packet Tracer 中交换机的常见命令介绍
热门文章
- elementui中date-picker当前年之后不可选择
- 大话西游之王道考研数据结构第一讲---线性表的顺序表示
- 电动牙刷——实现简单的1.2V电机控制设计
- PageHelper与MyBatisPlus IPage分页插件的使用区别
- Eclipse侧边项目栏不见了!
- CHALI茶里联手趣拿,与你“香”约九九趣拿节
- 计算机作业我家乡的变化英语作文,描写家乡变化的英语作文(精选11篇)
- 3D渲染中纹理映射技术与贴图制作技巧简介
- Deepin 15.4 个性化设置
- 教程:纯小白如何搭建自己的Github博客并写第一篇博文