找回密码
 立即注册
查看: 379|回复: 3

32 位硬件乘除 初试

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-05-01 11:24:23

13

主题

95

回帖

294

积分

中级会员

积分
294
发表于 2024-8-17 11:36:00 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-8-18 18:35 编辑

使用的单片机是:8051U

乘法和除法单元(称为 MDU32)提供快速的 32 位算术运算。 MDU32 支持无符号和补码有符号整数操作数。 MDU32 由专用的直接内存访问控制模块(称为 DMA)。所有 MDU32 算术操作都是通过向DMA 控件写入 DMA 指令来启动的寄存器 DMAIR。 MDU32 模块执行的所有算术运算的操作数和结果位于寄存器 R0-R7。
MDU32 执行乘除法运算时,单片机会自动切换到 IDLE 模式,即 CPU 停止时钟指令,其它外设仍继续工作。运算完成后,单片机自动切换到正常工作模式
实验方法:
添加“STC32_MDU32_LARGE_Vxx.LIB”到keil中
然后while中添加测试代码,P10用于测试运行时间
  1.     while(1)
  2.     {
  3.             P10 = 0;
  4.             sint1 = 0x31030F05;
  5.             sint2 = 0x00401350;
  6.             xsint = sint1 * sint2;
  7.             uint1 = 5;
  8.             uint2 = 50;
  9.             xuint = uint1 * uint2;
  10.             uint1 = 528745;
  11.             uint2 = 654689;
  12.             xuint = uint1 / uint2;
  13.             sint1 = 2000000000;
  14.             sint2 = 2134135177;
  15.             xsint = sint1 / sint2;
  16.             sint1 = -2000000000;
  17.             sint2 = -2134135177;
  18.             xsint = sint1 / sint2;
  19.             sint1 = -2000000000;
  20.             sint2 = 2134135177;
  21.             xsint = sint1 / sint2;
  22.             P10 = 1;
  23.             sint1 = 0x31030F05;
  24.             sint2 = 0x00401350;
  25.             xsint = sint1 * sint2;
  26.             uint1 = 5;
  27.             uint2 = 50;
  28.             xuint = uint1 * uint2;
  29.             uint1 = 528745;
  30.             uint2 = 654689;
  31.             xuint = uint1 / uint2;
  32.             sint1 = 2000000000;
  33.             sint2 = 2134135177;
  34.             xsint = sint1 / sint2;
  35.             sint1 = -2000000000;
  36.             sint2 = -2134135177;
  37.             xsint = sint1 / sint2;
  38.             sint1 = -2000000000;
  39.             sint2 = 2134135177;
  40.             xsint = sint1 / sint2;
  41.     }
复制代码
测试结果:
使用MDU32执行时间为:7.43us
不使用MDU32执行时间为:43.3us

截图202408171000083209.jpg
截图202408171135568713.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

983

积分

高级会员

积分
983
发表于 2024-8-17 13:33:43 | 显示全部楼层
本帖最后由 health 于 2024-8-17 14:14 编辑

MDU32功能有点弱,至少应该搞个32b * 32b = 64b,还有乘加 32b * 32b + 64b = 64b
---------------------------------------------------
又详细了解了一下,MDU32是用硬件协处理器代替C51/C251的库函数,C51/C251目前好像没有64位整数类型,自然也没有相关的运算库函数。
即使MDU加了64位运算,也没法在C51/C251中直接调用。


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:428
  • 最近打卡:2025-05-07 00:13:45
已绑定手机

19

主题

3193

回帖

4946

积分

论坛元老

积分
4946
发表于 2024-8-17 14:27:52 来自手机 | 显示全部楼层
硬件就是比软件
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:367
  • 最近打卡:2025-05-07 04:46:22

0

主题

43

回帖

720

积分

高级会员

积分
720
发表于 2024-8-17 15:04:59 | 显示全部楼层
很好的实验,谢谢分享
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 11:33 , Processed in 0.124599 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表