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

这篇具有很好参考价值的文章主要介绍了【FPGA】定点数 数据位宽 运算 位宽截取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在FPGA中,经常使用定点数表示小数,在进行各种运算时,定点数的位宽会发生变化,并且需要在适当地时候对数据的位宽进行截取。

  1. 运算要求和引起的位宽变化

假设存在两个数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时,去掉最高位

  1. 位宽截取

在乘法运算中,会成倍的增加位宽,因此在FPGA算法实现的过程中,常常需要对数据的位宽进行截取,常用的位宽截取方法有以下几种。

2.1 截断(tu)

2.2 四舍五入

“舍入”舍入到最邻近的可表示数字。如果出现结值,则舍入:

将正数朝正无穷方向舍入到最邻近的可表示数字。

将负数朝负无穷方向舍入到最邻近的可表示数字。

因此:

负值样本会引入小的负偏置。

对于具有均匀分布的正值和负值的样本,不会引入偏置。

对正值样本引入小的正偏置。

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

使用verilog编程时,假设要将m位数据截断为n位数据,需要将要截断的数据+{符号位取反,m-n-1{符号位}}再右移m-n位。以verilog为例,假定一64位有符号数要截断为一32位有符号数,程序如下。

reg signed [31:0] dataout;
wire signed [63:0] datain;

always@(posedge clk)begin
    dataout <= (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 收敛

“收敛”向最邻近的可表示值舍入,并将结值向最邻近的偶数舍入。它消除了由于舍入造成的偏置。但这可能会引入溢出。

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

具体实现以后再写

例子:

十进制

定点化

二进制

舍入后二进制

定点化

十进制

-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 向上取整 向下取整目前用不到 以后再写

  1. 位宽溢出

在编程时,当等号右侧位宽大于左侧数据位宽时,无论是否有符号,无论小数位数是多少,均截取最高位。截取时,若右侧结果未超过左侧所能表示的范围,则正数的高位均为0,负数的高位均为1,截取后不会影响结果。但当右侧结果超过左侧所能表示的范围时,则会导致结果出现错误。文章来源地址https://www.toymoban.com/news/detail-428741.html

到了这里,关于【FPGA】定点数 数据位宽 运算 位宽截取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 浮点数在内存中的运算

    他们力量的源泉,是值得信赖的搭档以及想要保护的对象还有强大的敌人 本文收录于青花雾气-计算机基础 往期回顾 从汇编代码探究函数栈帧的创建和销毁的底层原理 从0到1搞定在线OJ 数据在内存中的存储 计算机存储的大小端模式 目录 浮点数的二进制转化及存储规则等 浮

    2024年02月08日
    浏览(34)
  • JavaScript 浮点数运算的精度问题

    来源:https://zhuanlan.zhihu.com/p/191395766 在 JavaScript 中整数和浮点数都属于  Number  数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此。 所以我们在打印  1.00  这样的浮点数的结果是  1  而非  1.00  。在一些特殊的数值表示中,例如金额,这样看上去有点变

    2024年02月08日
    浏览(34)
  • FPGA浮点数转换为定点数处理方法

    一、浮点数的定点化 浮点数举例:3.125 31.25 312.5类似于这些数字,小数点的位置是浮动,我们称为浮点数。 二、为什么需要将浮点数转换为定点数 提高运算速度;降低功耗。加速器应用等。 三、浮点数转换为定点数的方法 需要定义定点数的小数位占多少位,整数位占多少位

    2024年02月07日
    浏览(32)
  • FPGA 设计中经常犯的 10 个错误

    本文列出了FPGA设计中常见的十个错误。我们收集了 FPGA 工程师在其设计中犯的 10 个最常见错误,并提供了解决方案的建议和替代方案。本文假定读者已经具备 RTL 设计和数字电路方面的基础。接下来让我们深入探讨在FPGA 设计中要避免的 10 大错误。 FPGA 设计适用于同步系统,

    2024年02月04日
    浏览(32)
  • Java使用Stream API对于数据列表经常处理

    先提供一些简单到复杂的常见例子,您可以根据这些例子进行进一步的开发和学习: 查询表中所有数据: 根据条件查询单个结果: 根据条件查询多个结果,并取前几条: 对查询结果进行排序: 过滤符合条件的结果: 对查询结果进行分页: 对查询结果进行统计: 对查询结

    2024年02月13日
    浏览(31)
  • Halcon图像灰度值运算&图像截取及合并&灰度特征值介绍

    灰度膨胀运算gray_dilation_rect 算子gray_dilation_rect(Image : ImageMax : MaskHeight, MaskWidth : ) 示例:gray_dilation_rect (Image, ImageMax, 11, 11) Image(输入对象):输入灰度图对象 ImageMax(输出对象):输出膨胀后的灰度图对象 11(输入参数1):滤波器掩模的高度 数值越大 效果越明显 11(输

    2024年02月09日
    浏览(31)
  • 孩子都能学会的FPGA:第十八课——用FPGA实现定点数的除法

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月04日
    浏览(35)
  • 孩子都能学会的FPGA:第十七课——用FPGA实现定点数的乘法

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月04日
    浏览(40)
  • 使用Charles进行网络抓包截取数据

    如何使用Charles进行网络抓包截取数据 最近遇上一个需求,通过逆向网络抓包的方式去截取某个网站的数据,此时我想到了Charles Charles是一款流行的网络调试和分析工具,它可以用于监控、记录和分析网络通信数据。它提供了一个代理服务器,可以让开发者捕获设备与服务器

    2024年02月09日
    浏览(35)
  • Verilog手撕代码(7)数据位宽转换

    数据位宽转换器,一般常用于模块接口处,比如一个电路模块的输出数据位宽大于另一个模块的输入数据位宽,此时就需要进行数据位宽转换。比如SATA控制器中,内部数据位宽为32bit,但外部物理收发器PHY的接口通常为16bit,或者8bit,在不使用FIFO进行缓存的情况下,可以使用

    2024年02月10日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包