与加法运算一样,我们同样考察乘数均是补码表示形式(有符号数)的情况,这也是FPGA进行数字符号处理最常用的数据表示方式,在讨论清楚补码的相关情况后,很容易得出无符号数的运算规律。

(1)对于字长分别为M、N的数据进行乘法运算,需要采用M+N为字长的数据才能得到准确的结果;

(2)对于乘法运算,不需要通过扩展位数来对齐乘数的小数点位置;

(3)当乘数为小数是,乘法结果的小数位位数等于两个乘数的小数位位数之和;

(4)当需要对乘法运算结果截取时,为保证得到正确的结果,只能取高位,而舍去低位数据,这样相当于降低了运算结果的精度;

(5)只有当两个乘数均为所能表示的最小负数(最高位位1,其余为均为0)时,才有可能出现最高位与次高位不同的情况。也就是说,只有在这种情况下,才需要M+N位字长的数据才存放准确的最终结果,其他情况下,实际均有两位相同的符号位,只需要M+N-1位字长即可存放准确的运算结果。

在 Quartus/ISE开发环境中,提供的乘法器IP核在选择输出数据位数时,如果选择全精度运算,则会自动生成M+N位字长的运算结果。在实际工程设计中,如果预先知道某位乘数不可能出现最小负值的情况,或者通过一些控制手段去除出现最小负值的情况,则完全可以只用M+N-1位字长存放运算结果哦,从而节约一位寄存器资源。如果乘法运算只是系统的中间环节,则后续的每个运算步骤均可节约一位寄存器资源。

摘抄自《数字调制解调技术的MATLAB与FPGA实现Altera/Verilog版》

乘法运算中的有效数据位相关推荐

  1. 假设有一个字类型的数值arry1,试编写程序统计arry1数值及其后若干数值,在字单元中存储时每个数据中含“1”数据位的个数,并将统计结果保存在res1数组中。数据段的代码定义如下: data seg

    假设有一个字类型的数值arry1,试编写程序统计arry1数值及其后若干数值,在字单元中存储时每个数据中含"1"数据位的个数,并将统计结果保存在res1数组中.数据段的代码定义如下 ...

  2. 【基础知识】~ 数据位宽转换器

    1. 概述 数据位宽转换器,一般常用于模块接口处,比如一个电路模块的输出数据位宽大于另一个模块的输入数据位宽,此时就需要进行数据位宽转换.比如SATA控制器中,内部数据位宽为32bit,但外部物理收发 ...

  3. c语言sgoto 标志位,如何在Go中设置TCP数据包的“不分段”标志位?(How to set “don't fragment” flag bit for TCP packet in Go?)...

    如何在Go中设置TCP数据包的"不分段"标志位?(How to set "don't fragment" flag bit for TCP packet in ...

  4. uart中:起始位,停止位,就校验位,数据位,数据位的位数,波特率,数据通讯的接口定义

    UART简介  通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART.UART通信在工作中相当常见,项目中需要生成uart信号 ...

  5. sqlsugar mysql连接字符串_通用数据访问组件UniDAC最新版本v8.2.4,支持Lazarus中的macOS 64位...

    UniDAC(Universal Data Access Components)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi, C++Builder, La ...

  6. 一些值得记录的题目(将数组中相同的数据删除、判断n 阶方阵是否对称、寻找矩阵中的马鞍点、将前面各数顺序后移 m 位,最后 m 个数变成最前m 个数并输出、将一长整型数转换为十六进制,以字符串形式输出)

    1.设数组中的数据已经按照由小到大的顺序存放,请将数组中相同的数据删除,仅保留一个,然后以每行3个输出数组元素. #include<stdio.h> int main() {int arr ...

  7. 【FPGA】定点数 数据位宽 运算 位宽截取

    在FPGA中,经常使用定点数表示小数,在进行各种运算时,定点数的位宽会发生变化,并且需要在适当地时候对数据的位宽进行截取. 运算要求和引起的位宽变化 假设存在两个数A.B,假定A位宽为m,小数位宽为a ...

  8. Linux中的粘滞位

    Linux中的粘滞位 Sticky 位是一个访问权限标志位,可以用来标示文件和路径. 历史: 粘滞位是在1974年Unix的第5版中引入的,用来设置可执行文件.当可执行文件设置粘滞位之后,它能够指示操 ...

  9. java培训教程分享:Java中怎样将数据对象序列化和反序列化?

    本期为大家介绍的java培训教程是关于"Java中怎样将数据对象序列化和反序列化?"的内容,相信大家都知道,程序在运行过程中,可能需要将一些数据永久地保存到磁盘上,而数据在Java ...

最新文章

  1. 是不是“异常”让我的脑子糊涂了?
  2. VS2019配置库文件
  3. python中return的理解-python中的return的返回与执行
  4. 允许网站使用相机和麦克风_手机使用应用时总是需要获取权限,这3个权限不能随意给,望周知...
  5. 数据挖掘——相似文章推荐
  6. 安卓模拟器切换横屏之后怎么返回竖屏
  7. 杭电4520小Q系列故事——最佳裁判
  8. ssis 数据转换_SSIS数据透视和SSIS数据透视转换概述
  9. 数学4如何用计算机画正切函数图像,正切函数图像
  10. 微机课设 | 基于STC15单片机的简易数字密码锁设计
  11. java请假系统毕业设计_基于java员工请假销假系统的设计与实现.doc
  12. Hyrax: Doubly-efficient zkSNARKs without trusted setup学习笔记
  13. Linux下qt程序部署到ARM开发板上: error: Upload of file “你的程序“ failed. The server said: “Failure
  14. 一键禁用windows defender
  15. syntastic 和 pathogen 安装使用
  16. navcat导入mysql bak_navcat excel数据导入mysql的方法
  17. 二十八. geotrellis使用 栅格数据色彩渲染(多波段真彩色)
  18. sts会自带maven吗_STS中Maven配置
  19. Mybatis使用教程
  20. 计算机毕业设计-Springboot+Vue大学生健康档案管理系统-JavaWeb大学生健康档案管理系统

热门文章

  1. Eclipse插件版本
  2. UNIX环境高级编程——进程关系
  3. Python安装Pillow时出现The headers or library files could not be found for zlib/jpeg错误
  4. C#数组维度转换:一维数组二维数组三维数组相互转换
  5. Yolo-v1~v3学习关键点整理
  6. NameError: name ‘XXX‘ is not defined
  7. 微信小程序支付流程(新手教程)
  8. 【机器学习基础】支持向量回归
  9. Verilog中repeat的用法
  10. linux复制与粘贴操作的快捷键