找回密码
 立即注册
查看: 1996|回复: 4

快17倍,硬件三角函数,硬件浮点,硬件MDU32,速度测试,STC32F12K54系列

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-6-29 15:48:22 | 显示全部楼层 |阅读模式
STC32F12K54系列单片机的新增
硬件三角函数运算单元 比软件 快 17.1倍
硬件浮点加减乘除开方 比软件 快 6.9倍
硬件32位乘除单元       比软件 快 4.4倍

测试结果如下:(粗体为硬件比软件快的倍数)
硬件 PK 软件
WTST = 0
测试频率=28MHz
WTST = 1
ICACHE OFF
测试频率=56MHz
WTST = 1
ICACHE ON
测试频率=56MHz
硬件MDU32 PK 软件32位乘除
3.9倍
3.5倍
4.4
硬件浮点 PK 软件浮点
5.6倍
5.7倍
6.9
硬件三角函数 PK 软件三角函数
11.6倍
16.4倍
17.1

测试代码如下:
  1. #include "stc32g.h"
  2. #include "stdio.h"
  3. #include "math.h"
  4. #define FOSC        56000000UL
  5. #define BAUD        (65536 - FOSC/4/115200)
  6. void ICacheOn()
  7. {
  8.     bit fEA;
  9.    
  10.     if (WTST > 0)               //WTST为0时不需要且不能使能ICACHE
  11.     {
  12.         fEA = EA;               //保存EA
  13.         EA = 0;                 //关闭中断
  14.         _nop_();
  15.         _nop_();
  16.         TA = 0xaa;              //写入触发命令序列1
  17.                                 //此处不能有其他任何指令
  18.         TA = 0x55;              //写入触发命令序列2
  19.                                 //此处不能有其他任何指令
  20.         ICHECR = 0x01;          //写保护暂时关闭,可以修改ICHECR中的EN位
  21.                                 //EN位再次进入写保护状态
  22.         _nop_();
  23.         _nop_();
  24.         EA = fEA;               //恢复EA
  25.     }
  26. }
  27. void main(void)
  28. {
  29.     unsigned long v;
  30.     float f;
  31.     bit b;
  32.     int i;
  33.     ICacheOn();
  34.    
  35.     AUXR = 0x40;
  36.     SCON = 0x52;
  37.     TMOD = 0x00;
  38.     TL1 = BAUD;
  39.     TH1 = BAUD >> 8;
  40.     TR1 = 1;
  41.    
  42.     printf("Test STC32F12K54 FPMU && MDU32 !\n");
  43.    
  44.     //整数乘除运算
  45.     TL0 = 0x00;
  46.     TH0 = 0x00;
  47.     TR0 = 1;
  48.     v = 1;
  49.     for (i = 0; i < 10; i++)
  50.     {
  51.         v *= 2L;                    //?C?LIMUL     
  52.         v *= 1234562L;              //?C?LMUL      
  53.         v /= 3;                     //?C?ULIDIV   
  54.         v /= 123453;                //?C?ULDIV     
  55.         v = (long)v / 3;            //?C?SLDIV     
  56.     }
  57.     TR0 = 0;
  58.     printf("MDU32 : %u\n", (TH0 << 8) | TL0);
  59.     //浮点运算
  60.     TL0 = 0x00;
  61.     TH0 = 0x00;
  62.     TR0 = 1;
  63.     for (i = 0; i < 10; i++)
  64.     {
  65.         f = 12341.234546;
  66.         f += 345462.345678;         //?C?FPADD     
  67.         f = 12341.234546;
  68.         f -= 74463.345678;          //?C?FPSUB     
  69.         f = 12341.234546;
  70.         f *= 897654.3456788;        //?C?FPMUL     
  71.         f = 12341.234546;
  72.         f /= 9876565.232345;        //?C?FPDIV     
  73.         f = 12341.234546;
  74.         f = sqrt(f);                //sqrt?_      
  75.         f = 12341.234546;
  76.         b = f > 1.0;                //?C?FPCMP3   
  77.         f = 12341.234546;
  78.         f = -f;                     //?C?FPNEG     
  79.         f = 12341.234546;
  80.         f = fabs(f);                //fabs?_      
  81.     }
  82.     TR0 = 0;
  83.     printf("FPMU : %u\n", (TH0 << 8) | TL0);
  84.     //三角函数运算
  85.     TL0 = 0x00;
  86.     TH0 = 0x00;
  87.     TR0 = 1;
  88.     for (i = 0; i < 10; i++)
  89.     {
  90.         f = 12341.234546;
  91.         f = sin(f);                 //sin?_        
  92.         f = 12341.234546;
  93.         f = cos(f);                 //cos?_        
  94.         f = 12341.234546;
  95.         f = tan(f);                 //tan?_        
  96.         f = 12341.234546;
  97.         f = atan(f);                //atan?_      
  98.     }
  99.     TR0 = 0;
  100.     printf("SIN : %u\n", (TH0 << 8) | TL0);
  101.     while(1);
  102. }
复制代码


测试结果如下:(粗体为硬件比软件快的倍数)
硬件 PK 软件
WTST = 0
测试频率=28MHz
WTST = 1
ICACHE OFF
测试频率=56MHz
WTST = 1
ICACHE ON
测试频率=56MHz
硬件MDU32 PK 软件32位乘除
3.9倍
3.5倍
4.4
硬件浮点 PK 软件浮点
5.6倍
5.7倍
6.9
硬件三角函数 PK 软件三角函数
11.6倍
16.4倍
17.1







STC32F12K54-FPMU测试.zip

46.86 KB, 下载次数: 110

回复

使用道具 举报 送花

0

主题

1

回帖

14

积分

新手上路

积分
14
发表于 2023-7-25 11:11:22 | 显示全部楼层
给作者点赞
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:477
  • 最近打卡:2025-05-01 18:48:32
已绑定手机

6

主题

92

回帖

938

积分

高级会员

积分
938
发表于 2023-8-1 09:04:21 | 显示全部楼层
有了浮点运算器是不是可以做傅里叶变换了?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2023-8-8 07:48:13 | 显示全部楼层
每秒可以做多少次浮点乘法,C语言循环的条件下?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2023-9-3 16:59:42 | 显示全部楼层
测试一下
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 19:07 , Processed in 0.112573 second(s), 84 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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