当前位置: 首页 > news >正文

基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)

1、前言

在逻辑设计中,为了保证运算结果的正确性,常常需要对结果的位宽进行扩展。比如2个3bits的无符号数相加,只有将结果设定为4bits,才能保证结果一定是正确的。不然,某些情况如7+7 = 14(1110),如果结果只用3bits表示那么就成了110(6)了,这样运算的结果就是错的。同理,乘法操作需要扩展的位宽更大,是两个乘数的位宽之和,比如2个3bits的无符号数做乘法,结果需要设定为6bits。

如果在后续数据处理的过程中,一直都这样对结果的位宽进行扩展,那么在算法链很长的情况下,将会消耗大量的逻辑资源。因此在设计中,常常需要对数据进行的位宽进行处理。

数据的位宽处理分为两个部分:

  • 对整数的处理:例如原本用6bits表示的结果,下级模块规定只能用到4bits输入。因为6bits的表示范围大于4bits,就有可能出现4bits无法表示的情况(即溢出)
  • 对小数的处理:原理同上。四舍五入就是一种经典的对小数截位的方式,类似的方法还有ceili,floor,nearest等等。

本文只讨论整数部分的溢出截位处理,小数部分的处理下篇文章再说。对整数的截位处理,实际上就是对溢出的处理,其决定了当运算结果大于该数位宽所能表示的最大值时,如果对溢出部分处理。通常有两种对溢出的处理方式:

  • Saturate(饱和):一旦数据溢出,那么就将结果饱和处理为最大值或最小值(取决于正向溢出还是负向溢出)
  • Wrap(绕回/截断):一旦数据溢出,那么就直接将溢出的高位截断

将6bits的整数41截位到4bits,两种溢出模式的处理结果如下:

image-20240416110157962


2、Saturate

因为有符号数和无符号存在表示范围的区别,所以二者的溢出处理也存在一定的区别,接下来对两种情况分别进行讨论。

2.1、无符号数的Saturate

Saturate是当数据溢出时,就直接用最大值或最小值来表示。因为无符号数不能表示负数,因此不存在对于负数的饱和处理,只存在正向的饱和。例如要将1个6bits的数截断到4bits,因为4bits能表示的最大值是15,那么所有大于15的数,都直接用15来表示,示意图如下:

将1个6bits的输入Saturate为4bits的输出,用Verilog可以这么写:

module test(input		[5:0]	data_6bits,output  reg	[3:0]	data_4bits	
);always@(*)
beginif(data_6bits > 4'd15)			//溢出了data_4bits = 4'd15;			//饱和到最大值else				data_4bits = data_6bits;	//没溢出则直接赋值
endendmodule 

除了直接用大于符号(data_6bits > 4’d15)来判断是否溢出外,也可以这样判断:

if(|data_6bits[5:4]) //判断高2位是否存在1,若存在则该数的值必定大于15

再写个TB测试一下:因为输入比较少,所以可以用穷举法来测试,把输入从最小值0开始累加最大值63,观察输出是否会被Saturate

`timescale 1ns/1ns
module test_tb();reg		[5:0]	data_6bits;
wire	[3:0]	data_4bits;//例化被测试模块
test	test_inst(.data_6bits		(data_6bits),.data_4bits		(data_4bits)
);initial begindata_6bits = 0;while(~(&data_6bits))begin			//当输入不全为1,即非最大值data_6bits = data_6bits + 1;	//从0开始累加1#5;end#20 $stop();
endendmodule

仿真结果是这样的:

image-20240416121238935

当输入超过4bits位宽能表示的最大值15时,就会都饱和处理,即输出为最大值15。

2.2、有符号数Saturate

对于有符号数的Saturate处理有两种情况:

  • 正数太大无法表示,只能饱和到最大值。例如4bits有符号数最大只能表示 7,那么大于7的数就只能饱和处理为 7。
  • 负数太小无法表示,只能饱和到最小值。例如4bits有符号数最小只能表示 -8,那么小于-8的数就只能饱和处理为 -8。

当数据溢出时,就直接用最大值或最小值来表示。因为无符号数不能表示负数,因此不存在对于负数的饱和处理,只存在正向的饱和。例如要将1个6bits的数截断到4bits,因为4bits能表示的最大值是15,那么所有大于15的数,都直接用15来表示,示意图如下:

5

例如,将1个6bits的有符号数Saturate为4bits,对于数据的正向溢出判断和无符号数的Saturate是类似的,只要判断除了符号位的多出来的高位是否有1即可。

对于数据的负数方向溢出判断要麻烦一点,首先我们要知道,对于一个有符号的负数,在其高位扩展符号位,其数值是不会改变的。例如:

10\110\1110\11110,它们表示的都是 -2。

把6bits截位到4bits,只要判断它的高三位(因为讨论的是负数,所以最高位肯定是1)是否都为1就行了,如果是的话,说明高3位可是视为是1位符号位的扩展,数据的表示范围等价于4bits的表示范围。如果不为全1,则说明比4bits的表示范围要大,即数据产生了溢出。

综上,用Verilog可以这么写:

module test(input		[5:0]	data_6bits,output  reg	[3:0]	data_4bits	
);always@(*)
beginif(~data_6bits[5] && (|data_6bits[4:3]))			//判断条件(正数 && 溢出),即正向溢出了data_4bits = 4'b0111;							//饱和到最大值7else if(data_6bits[5] && ~(&data_6bits[4:3]))		//判断条件(负数 && 溢出),即负向溢出了			data_4bits = 4'b1000;							//饱和到最小值-8else	data_4bits = data_6bits;						//没溢出则直接赋值
endendmodule 

仍然用上面的TB,仿真结果如下:

image-20240416132626605


3、Wrap

Wrap从字面上理解是绕回,什么是绕回呢?比如一块手表,它只能表示0点~12点,超出了12点的话,它就会绕回到0点再重新开始。比如13点的表示就是到了12点后,再走到了1点。

对数据的Wrap处理也是类似的,比如4bits的无符号数最多只能表示1111(15),这个时候如果再加1就是16了,16是表示不了的。Saturate是直接表示最大值15,而Wrap则是重新回到开始表示0。类似的,17就Wrap到1,18就Wrap到2,19就Wrap到3,依此类推。示意图如下:

对于有符号数的Wrap处理也是一样的截掉高位,但是因为有符号数可以表示负数,所以它的绕回是从最小的负数开始的,例如最大的4bits有符号数是0111即7,溢出后是1000即-8,示意图如下:

Wrap处理用Verilog是很好实现的,因为它本质上相当于截掉高位,而截掉高位这个操作是可以被综合工具自动实现的,它甚至都不需要消耗任何逻辑资源。比如,将1个6bits的输入Wrap为4bits的输出,用Verilog可以这么写:

module test(input		[5:0]	data_6bits,output  	[3:0]	data_4bits	
);assign	data_4bits = data_6bits;		//直接赋值即可,工具会自动截位
//等价于下面的语句
//assign	data_4bits = data_6bits[3:0];endmodule 

用上面的TB测试就行,无符号数的测试结果如下:

image-20240416135556104

有符号数的测试结果如下:

image-20240416135211386

可以看到当输入大于4bits能表示的最大值后,就会回到最小值重新开始,相当于截掉了高位。


4、总结

  • Saturate相当于溢出时,将结果保留在最大值或最小值;而Wrap则是溢出时重新绕回到起点。
  • 相对来说Saturate损失的精度比较小,结果较为准确,但是消耗的硬件资源比Wrap方式要多;Wrap不需要消耗硬件资源,因为它实际上相当于截掉高位,等于是没有什么处理,精度损失大,结果不太准确(尤其是有符号数的Wrap),只适用于特定场合。

相关文章:

基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)

1、前言 在逻辑设计中,为了保证运算结果的正确性,常常需要对结果的位宽进行扩展。比如2个3bits的无符号数相加,只有将结果设定为4bits,才能保证结果一定是正确的。不然,某些情况如77 14(1110),如果结果只…...

基于STM32的宠物箱温度湿度监控系统毕业设计

基于STM32的宠物箱温度湿度监控系统毕业设计 一、项目背景与意义 随着人们生活水平的提高,养宠物已经成为一种流行趋势。然而,对于宠物的居住环境,尤其是温度与湿度的控制,是确保宠物健康的关键。本项目旨在设计一款基于STM32微…...

Linux sudo 指令

sudo命令 概念: sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等。这样不仅减少了root用户的登录和管理时间,同样也提高…...

【NumPy数组】:深入了解numpy.linspace()函数

一、numpy.linspace()函数的原理 numpy.linspace()函数的核心原理是在指定的起始值和终止值之间,按照给定的元素个数,生成等间隔的数值序列。与numpy.arange()函数不同,numpy.linspace()生成的是等间隔的数值,而不是等差的数值&a…...

计算机网络实验二:交换机的基本配置与操作

实验二:交换机的基本配置与操作 一、实验要求 (1)掌握windows网络参数的设置(TCP/IP协议的设置); (2)掌握交换机命令行各种操作模式的区别,以及模式之间的切换; (3)掌握交换机的全局的基本配置; (4)掌握交换机端口的常用配置参数; (5)查看交换机系统和…...

宏的优缺点?C++有哪些技术替代宏?(const)权限的平移、缩小

宏的优缺点? 优点: 1.增强代码的复用性。【减少冗余代码】 2.提高性能,提升代码运行效率。 缺点: 1.不方便调试宏。(因为预编译阶段进行了替换) 2.导致代码可读性差,可维护性差&#xff0…...

2024数维杯数学建模选题建议及各题思路来啦!

大家好呀,2024数维杯数学建模挑战赛开始了,来说一下初步的选题建议吧: 首先定下主基调, 本次数维杯建议选B。难度上C>A>B。B题目是比较经典的数据分析类题目,主要做统计分析差异显著性以及相关…...

centos的常用命令

CentOS是一个基于Red Hat Enterprise Linux(RHEL)的开源操作系统,常用于服务器环境。以下是一些CentOS中常用的命令: 文件和目录管理: ls:列出目录中的文件。 ls -l:以长格式列出文件和目录的…...

【Android】使用Handler实现一个定时器

需求 实现一个定时任务,每隔一秒执行一次 实现 使用Handler实现 private Handler topUIHandler;private void initTopUiHandler() {topUIHandler new Handler(getMainLooper()) {Overridepublic void handleMessage(Message msg) {//执行这个定时任务updateTop…...

Java | Leetcode Java题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums) {int n nums.length;if (n < 2) {return n;}int slow 2, fast 2;while (fast < n) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slow;}fast;}return sl…...

java后端15问!

前言 最近一位粉丝去面试一个中厂&#xff0c;Java后端。他说&#xff0c;好几道题答不上来&#xff0c;于是我帮忙整理了一波答案 G1收集器JVM内存划分对象进入老年代标志你在项目中用到的是哪种收集器&#xff0c;怎么调优的new对象的内存分布局部变量的内存分布Synchroniz…...

OmniPlan Pro 4 for Mac中文激活版:项目管理的新选择

OmniPlan Pro 4 for Mac作为一款专为Mac用户设计的项目管理软件&#xff0c;为用户提供了全新的项目管理体验。其直观易用的界面和强大的功能特性&#xff0c;使用户能够轻松上手并快速掌握项目管理要点。 首先&#xff0c;OmniPlan Pro 4 for Mac支持自定义视图&#xff0c;用…...

二叉树的广度优先遍历 - 华为OD统一考试(D卷)

OD统一考试(D卷) 分值: 200分 题解: Java / Python / C++ 题目描述 有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。 现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请输出层次遍历的结…...

代码随想录-算法训练营day31【贪心算法01:理论基础、分发饼干、摆动序列、最大子序和】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第八章 贪心算法 part01● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和 贪心算法其实就是没有什么规律可言&#xff0c;所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其…...

如何使用Transformer-TTS语音合成模型

1、技术原理及架构图 ​ Transformer-TTS主要通过将Transformer模型与Tacotron2系统结合来实现文本到语音的转换。在这种结构中&#xff0c;原始的Transformer模型在输入阶段和输出阶段进行了适当的修改&#xff0c;以更好地处理语音数据。具体来说&#xff0c;Transformer-TT…...

【Python】JSON数据的使用

一、JSON JSON是什么&#xff1a; JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;它以易于理解和生成的文本格式来描述数据对象。JSON最初是由Douglas Crockford在2001年提出的&#xff0c;它的设计受到了JavaScript对象字面量…...

C语言头文件的引入使用<>和““有什么区别

在C语言中&#xff0c;引入头文件时使用<>和""有以下主要区别&#xff1a; 搜索路径不同&#xff1a; 当使用#include <filename.h>时&#xff0c;编译器会首先在系统目录中搜索头文件。这些系统目录通常包含了标准库的头文件&#xff0c;如stdio.h、std…...

Qt 类的设计思路详解

Qt 是一个跨平台的 C++ 应用程序开发框架,它提供了丰富的类库和工具,用于开发图形用户界面、网络应用、数据库集成和文件 I/O 等功能。Qt 的设计思路涉及到诸多方面,包括跨平台性、模块化、可扩展性、性能等。本文将从这些方面详细说明 Qt 类的设计思路。 1. 跨平台性 Qt 最…...

五一超级课堂---Llama3-Tutorial(Llama 3 超级课堂)---第一节 Llama 3 本地 Web Demo 部署

课程文档&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 课程视频&#xff1a; https://space.bilibili.com/3546636263360696/channel/collectiondetail?sid2892740&spm_id_from333.788.0.0 操作平台&#xff1a; https://studio.intern-ai.org.cn/consol…...

Redis20种使用场景

Redis20种使用场景 1缓存2抽奖3Set实现点赞/收藏功能4排行榜5PV统计&#xff08;incr自增计数&#xff09;6UV统计&#xff08;HeyperLogLog&#xff09;7去重&#xff08;BloomFiler&#xff09;8用户签到&#xff08;BitMap&#xff09;9GEO搜附近10简单限流11全局ID12简单分…...

vue3获取原始值

在 Vue 3 中&#xff0c;_rawValue 是 ref 内部的一个属性&#xff0c;它用来存储 ref 的原始值&#xff0c;也就是未经响应式处理的值。这个属性主要用于 Vue 的内部逻辑&#xff0c;以帮助区分 ref 的当前值 (value) 和原始输入值 (_rawValue)。对于大多数开发者来说&#xf…...

“感恩遇到你,郭护士!”佛山市一医院 护士回家途中救了位老奶奶

“感恩遇见你&#xff0c;我感谢郭护士关爱长者、热心助人的高尚行为……”看着信件上感谢的话语&#xff0c;郭琳玲的内心感动不已。而这一封亲笔手写的感谢信&#xff0c;是来自一位将近八十岁的老奶奶。 郭琳玲是佛山市第一人民医院创伤重症功能神经外科的一名护士。4月30日…...

Java面试常见问题

操作系统 1.Q: 在操作系统中&#xff0c;什么时候会发生用户态到内核态的切换 A: 操作系统中&#xff0c;用户态和内核态是两种不同的权限级别&#xff0c;他们对应着不同的执行环境和执行权限。用户态事指程序在一般的运行情况下的的级别&#xff0c;它具有别较低的权限级别&…...

概率论 科普

符号优先级 概率公式中一共有三种符号&#xff1a;分号 ; 、逗号 , 、竖线 | 。 ; 分号代表前后是两类东西&#xff0c;以概率P(x;θ)为例&#xff0c;分号前面是x样本&#xff0c;分号后边是模型参数。分号前的 表示的是这个式子用来预测分布的随机变量x&#xff0c;分号后的…...

全面解读快递查询API接口,帮你轻松查询快递物流信息

随着电子商务的快速发展&#xff0c;快递业务正变得越来越重要。无论是买家还是卖家&#xff0c;都希望能够及时了解自己的快递物流信息&#xff0c;以便更好地掌控商品的运输过程。而现在&#xff0c;通过快递查询API接口&#xff0c;我们可以实现快速、准确地查询几百家国内快…...

【图书推荐】《JSP+Servlet+Tomcat应用开发从零开始学(第3版)》

本书目的 系统讲解JSPServletTomcat开发技术&#xff0c;帮助读者用最短的时间掌握Java Web应用开发技能。 内容简介 本书全面系统地介绍JSPServletTomcat开发中涉及的相关技术要点和实战技巧。本书内容讲解循序渐进&#xff0c;结合丰富的示例使零基础的读者能够熟练掌握JSP…...

C++容器——set

set容器 是一个关联容器&#xff0c;按一定的顺序存储一组唯一的元素。 set容器中的元素会根据元素的值自动进行排序&#xff0c;并且不允许包含重复的元素&#xff0c;基于二叉树实现的。 特点&#xff1a; 唯一性&#xff1a; set容器中的元素是唯一的&#xff0c;即容器中…...

.NET WebService \ WCF \ WebAPI 部署总结 以及 window 服务 调试

一、webservice 部署只能部署IIS上&#xff0c; 比较简单&#xff0c;就不做说明了 二、 WCF 部署 1 部署到IIS 跟部署 webservice 部署方法一样的 wcf 部署2 部署到控制台 要以管理员运行vs&#xff0c;或者 管理员运行 控制台的exe 在控制器项目中 创建IUserInfoService 接口…...

Centos系统实用运维命令记录(持续更新)

本文记录Centos服务器常用的运维命令&#xff0c;备忘 查询当前内存占用最高(前10)的进程列表和占用比例&#xff0c;进程ID ps -eo pid,comm,%mem,cmd --sort-%mem | head -n 11注: 内存警报时定位问题时非常有用 查询占用某个端口号的进程id lsof -i :9000注: 后面的9000…...

大势模方在修模过程中,如何导入su单体模型?

答&#xff1a;在单体化界面右键即可显示导入入口&#xff0c;若仍不可行&#xff0c;需要换最新版dv 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.1新增自动单体化建模功能&#xff…...

建设部促进中心网站/新闻今天最新消息

引言&#xff1a; 股份制改革对我国银行业来说只是一个开始&#xff0c;企业在风险管理、创造价值等方面还有很长的路要走。风险管理要求提供精准的数据模型、创造价值要求充分银行数据资产&#xff0c;这是数据治理的外部推动因素。此外&#xff0c;随着第三次工业革命的到来…...

评价淘宝网购物 经验和教训 对网站建设的建议和意见/百度热议

WebVies类介绍 [WebResourceRequest]添加于API21&#xff0c;封装了一个Web资源的请求信息&#xff0c;包含&#xff1a;请求地址&#xff0c;请求方法&#xff0c;请求头&#xff0c;是否主框架&#xff0c;是否用户点击&#xff0c;是否重定向- [WebResourceResponse]封装了…...

上海网站建设定制/买卖网站

作者&#xff5c;覃云今天&#xff0c;Chrome 70 正式版发布&#xff0c;Windows、Linux、Mac 和 iOS 平台都可开始使用&#xff0c;但 Android 平台还需等些时日。Chrome 70 此次带来的更新主要包括&#xff1a;支持在 Windows 平台上安装 PWA、新增 AV1 解码器、支持画中画功…...

怎么做bs网站/怎样做百度推广网页

点击上方“蓝色字”可关注我们&#xff01;暴走时评&#xff1a;日本银行控股和金融服务公司三菱UFJ金融集团&#xff08;MUFG&#xff09;在11月9日的声明中表示&#xff0c;将使用Ripple&#xff08;XRP&#xff09;为巴西创建一项新的跨境支付服务。MUFG将与巴西的Banco Bra…...

浏览器怎么打开网站服务器设置/广告营销推广方案

此题不具有代表性 也不怎么好I Hate It Time Limit: 9000/3000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14776Accepted Submission(s): 5722Problem Description很多学校流行一种比较的习惯。老师们很喜欢询问&#xff0c;从某某到某…...

门户网站制作价格表/税收大数据

可能很多朋友都遇到过这样的情况&#xff0c;在UNIX/Linux上定期清理Oracle日志文件夹时可能删除到仍被后台进程open着的trace文件&#xff0c;即某些后台进程一直持有着这些”被已经误删了的“打开文件的描述符(fd)&#xff0c;这种情况下文件系统上该文件实际占用的空间是不会…...