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

单精度浮点运算/定点运算下 MATLAB (VS) VIVADO

VIVADO中单精度浮点数IP核计算结果与MATLAB单精度浮点数计算结果的对比

MATLAB定点运算仿真,对比VIVADO计算的结果

目录

前言

一、VIVADO与MATLAB单精度浮点数运算结果对比

二、MATLAB定点运算仿真

总结


前言

        本文介绍了怎么在MATLAB中使用单精度浮点数进行运算,另外还将MATLAB单精度浮点数运算的结果和VIVADO浮点数IP核运算的结果作了对比,会发现二者结果是吻合的。最后还介绍了怎么在MATLAB中进行定点运算的仿真,也将其和VIVADO仿真的结果进行了对比,二者也是吻合的。


提示:创作不易,有帮助请一键三连!

一、VIVADO与MATLAB单精度浮点数运算结果对比

        首先用MATLAB产生一组测试数据,

a=randn(1);mat2str(a)

b=randn(1);mat2str(b)

aa=single(a);mat2str(aa)

num2hex(aa)

bb=single(b);mat2str(bb)

num2hex(bb)

cc=aa*bb;mat2str(cc)

num2hex(cc)

ans =
    '0.5376671395461'
ans =
    '1.83388501459509'
ans =
    '0.537667155265808'
ans =
    '3f09a48e'
ans =
    '1.8338850736618'
ans =
    '3feabcbf'
ans =
    '0.986019790172577'
ans =
    '3f7c6bcb'

MATLAB产生了两个单精度的数,并计算了这两个数的乘法,还给出了相应的4字节数据表示值。这里需要注意的是,按理来说,单精度浮点数应该只有7位小数,但是MATLAB在展示结果时依然采用的双精度浮点数,所以小数位数多于7位。包括VIVADO仿真界面也是如此

数值表示字节表示
aa0.5376671552658083f09a48e
bb1.83388507366183feabcbf
cc=aa*bb0.9860197901725773f7c6bcb

以上是MATLAB的运算结果,下面是VIVADO以单精度浮点数计算的结果

        对比可以发现,MATLAB和VIVADO计算的结果是相等的。这样我们在编写算法时就可以先用MATLAB模拟FPGA运算仿真验证算法性能了。

        一组数据有可能是偶合,再随机测试一组数据,确保真的对得上。MATLAB再运行一次,得:

ans =
    '-2.25884686100365'
ans =
    '0.862173320368121'
ans =
    '-2.25884675979614'
ans =
    'c01090f2'
ans =
    '0.862173318862915'
ans =
    '3f5cb764'
ans =
    '-1.94751739501953'
ans =
    'bff94840'

MATLAB结果如表格所示:

数值表示字节表示
aa-2.25884675979614c01090f2
bb0.8621733188629153f5cb764
cc=aa*bb-1.94751739501953bff94840

VIVDO计算结果如下:

对比依然可以发现,MATLAB和VIVADO计算的结果是相等的。

综上,VIVADO中的单精度浮点数的运算能用MATLAB的计算来模拟,此处只验证了乘法,推测其他运算也是没问题的,不放心的读者可自行验证加减除。

二、MATLAB定点运算仿真

        方法比较简单,就是把数乘上2^(位宽)后四舍五入再进行运算,相当于把数给扩大,只有整数部分。注意这个位宽是不包含符号位的。运算完后需要截位就自行截位,不需要截位就不用截位。

MATLAB代码及运算结果如下:

leng=15; % 不含符号位

a=randn(1)+1j*randn(1);

aa=round(a*2^(leng));mat2str(aa)

real_a=dec2hex(real(aa),4)

imag_a=dec2hex(imag(aa),4)

b=randn(1)+1j*randn(1);

bb=round(b*2^(leng));mat2str(bb)

real_b=dec2hex(real(bb),4)

imag_b=dec2hex(imag(bb),4)

c=aa*bb

mat2str(c)

real_c=dec2hex(real(c),8)

imag_c=dec2hex(imag(c),8)

ans =
    '-28340-985i'
real_a =
    '914C'
imag_a =
    'FC27'
ans =
    '-5403+20569i'
real_b =
    'EAE5'
imag_b =
    '5059'
c =
   1.7338e+08 - 5.7760e+08i
ans =
    '173381485-577603505i'
real_c =
    '0A55976D'
imag_c =
    'DD92784F'

同样的,给出VIVADO中调用定点复数乘法器运算得到的结果。

对比十六进制表示的输入和输出,可发现MATLAB的结果和VIVADO的结果完全吻合。


总结

        从结果来看,在MATLAB中也能模拟VIVADO中的单精度浮点运算和定点运算。

相关文章:

  • 【大语言模型】大语言模型(LLMs)在工业缺陷检测领域的应用
  • AD相同网络的铜皮和导线连接不上
  • 泽众TestOne精准测试:助力软件开发质量新升级
  • VS Code搭建C/C++开发环境
  • 设置Rocky Linux盒盖不休眠的3个简单步骤
  • 第TR5周:Transformer实战:文本分类
  • MySQL 表结构及日志文件详解
  • 树莓派4B+Ubuntu24.04 电应普超声波传感器串口输出 保姆级教程
  • 国产AI大模型超深度横评:技术参数全解、商业落地全场景拆解
  • Theadlocal内存泄露?没那么夸张
  • 5.1 LangChain:功能强大的框架,适用于构建复杂的LLM驱动应用
  • InDraw:全能化学结构式编辑器,跨平台兼容+AI识别+中文IUPAC命名
  • leetcode0108. 将有序数组转换为二叉搜索树-medium
  • U-Mail邮件加速服务:全球链路加速,安全稳定收发
  • c#操作excel表格
  • inline小知识
  • 深入理解Java基本类型
  • 240425 leetcode exercises
  • 常见网络安全攻击类型深度剖析(一):恶意软件攻击——病毒、蠕虫、木马的原理与防范
  • promethus基础
  • 一季度煤价持续下探,多家煤炭巨头营收下滑、净利润降约两成
  • 我国成年国民综合阅读率82.1%,数字化阅读接触率首超80%
  • 科普|结石疼痛背后的危机信号:疼痛消失≠警报解除
  • 举报人不服相关部门奖励“缺斤少两”,两地分别作出再认定
  • 如何应对国际贸易形势变化?长三角四省市主要领导密集部署
  • 习近平结束对越南、马来西亚和柬埔寨国事访问回到北京