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

32 位硬件乘除 初试

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-06-30 13:17:33

13

主题

97

回帖

332

积分

中级会员

积分
332
发表于 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

回帖

1067

积分

金牌会员

积分
1067
发表于 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
  • 打卡总天数:482
  • 最近打卡:2025-07-01 00:52:47
已绑定手机

19

主题

3233

回帖

5355

积分

论坛元老

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-07-01 00:02:08

0

主题

43

回帖

1020

积分

金牌会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-1 09:22 , Processed in 0.130403 second(s), 69 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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