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

有符号数四舍五入的verilog实现

有符号数a[63:0], 其中小数位为低32-bit,假如说我们对小数部分进行四舍五入,取该数最接近的整数,则对应的verilog代码实现如下:

a_rounded = (a[63:0] + {!a[63],{31{a[63]}}}) >>32;

我们先研究有符号正数的变化规律(低4-bit为小数位):

06 = 8'b0110_0000
07 = 8'b0111_0000
08 = 8'b1000_0000
09 = 8'b1001_0000
10 = 8'b1010_0000
11 = 8'b1011_0000

由上图可知,当正数越小时,如果将其补码看做是无符号数,则该无符号数越小。

我们先研究有符号负数的变化规律(低4-bit为小数位):

-06 = 8'b1010_0000
-07 = 8'b1001_0000
-08 = 8'b1000_0000
-09 = 8'b0111_0000
-10 = 8'b0110_0000
-11 = 8'b0101_0000

由上图可知,当负数越小时,如果将其补码看做是无符号数,则该无符号数越小。

接着,我们再看下有符号数为正数时,小数部分的变化规律(低4-bit为小数位):

6.0625 = 8'b0110_0001
6.1250 = 8'b0110_0010
6.2500 = 8'b0110_0100
6.5000 = 8'b0110_1000
6.7500 = 8'b0110_1100
6.8750 = 8'b0110_1110
6.9375 = 8'b0110_1111

由上图可知,小数部分越大,其对应的无符号数也越大。

下面,我们再看下有符号数为负数时,小数部分的变化规律(低4-bit为小数位):

-6.0625 = 8'b1001_1111
-6.1250 = 8'b1001_1110
-6.2500 = 8'b1001_1100
-6.5000 = 8'b1001_1000
-6.7500 = 8'b1001_0100
-6.8750 = 8'b1001_0010
-6.9375 = 8'b1001_0001

由上图可知,小数部分越小,其对应的无符号数越大。

下面我们看下有符号数的舍入情况:

-6.0625 = 8'b1001_1111 + 8‘b0000_0111 = 8'b1010_0110 -> 8'b1010_0000 = -6
-6.1250 = 8'b1001_1110 + 8‘b0000_0111 = 8'b1010_0101 -> 8'b1010_0000 = -6
-6.2500 = 8'b1001_1100 + 8‘b0000_0111 = 8'b1010_0011 -> 8'b1010_0000 = -6
-6.5000 = 8'b1001_1000 + 8‘b0000_0111 = 8'b1001_1111 -> 8'b1001_0000 = -7
-6.7500 = 8'b1001_0100 + 8‘b0000_0111 = 8'b1001_1011 -> 8'b1001_0000 = -7
-6.8750 = 8'b1001_0010 + 8‘b0000_0111 = 8'b1001_1001 -> 8'b1001_0000 = -7
-6.9375 = 8'b1001_0001 + 8‘b0000_0111 = 8'b1001_1000 -> 8'b1001_0000 = -7

由上图可知,负数的小数部分越小,对应的补码值越大,此时加上8’b0000_0111后,会产生进位。

相关文章:

  • 大数据热点城市波动图案例【CSS3实现 + 原理分析 + 源码获取】
  • [Java]深入剖析常见排序
  • vue+ssm+Element实现登录页面的优化和员工管理
  • MySQL死锁产生的原因和解决方法
  • 网站显示不是私密连接怎么加 https 进行加密?(在Nginx或Tengine服务器上安装证书)
  • 【前端验证】通关寄存器与ral_model —— 生成的RTL代码分析(1)
  • Ai-WB2系列模组linux开发环境搭建
  • [PyQt] Pycharm 配置 PyQt 开发环境
  • http和https分别是什么?
  • 如何在 Next.js 中构建进度条指示器
  • 【Bluetooth|蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程
  • K8s中的CNI网络模型
  • C++ Reference: Standard C++ Library reference: C Library: cmath: remainder
  • vue3.2新增指令v-memo的使用
  • 【语音之家】AI产业沙龙—VoxSRC-22说话人识别挑战赛快商通方案介绍
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【剑指offer】让抽象问题具体化
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Angular 4.x 动态创建组件
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • GraphQL学习过程应该是这样的
  • Mysql数据库的条件查询语句
  • Spring Boot MyBatis配置多种数据库
  • vue-router 实现分析
  • web标准化(下)
  • 工作手记之html2canvas使用概述
  • 诡异!React stopPropagation失灵
  • 那些年我们用过的显示性能指标
  • 前端之React实战:创建跨平台的项目架构
  • 使用agvtool更改app version/build
  • 在Mac OS X上安装 Ruby运行环境
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​ubuntu下安装kvm虚拟机
  • ​业务双活的数据切换思路设计(下)
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #Lua:Lua调用C++生成的DLL库
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C语言)逆序输出字符串
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (一一四)第九章编程练习
  • (轉貼) UML中文FAQ (OO) (UML)
  • .htaccess配置常用技巧
  • .NET Core WebAPI中封装Swagger配置
  • .Net Core与存储过程(一)
  • .net 程序发生了一个不可捕获的异常
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET构架之我见
  • @Bean有哪些属性
  • [AIGC] 如何建立和优化你的工作流?
  • [Android 13]Input系列--获取触摸窗口
  • [BZOJ4016][FJOI2014]最短路径树问题