找回密码
 立即注册
查看: 2363|回复: 24

MDU32C 定型流片了吗?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-1-25 19:42:59 | 显示全部楼层 |阅读模式
模拟小数乘法程序(浮点乘除用):



// 模拟小数乘法
               MOV      A,R7
               PUSH     ACC
               MOV      A,R6
               PUSH     ACC
               MOV      A,R3
               PUSH     ACC
               MOV      A,R2
               PUSH     ACC
               MOV      A,R5
               PUSH     ACC
               MOV      A,R4
               PUSH     ACC
               MOV      A,R1
               PUSH     ACC
               MOV      A,R0
               PUSH     ACC

                   CLR                A
                   MOV      R0,A
                   MOV      R1,A
                   MOV      R4,A
                   MOV      R5,A
//                   LCALL        MUL32     // R2R3 * R6R7 --> R4R5R6R7
//                   LCALL        ADD32     // R4R5 --> DPH1,DPL1
                   MOV      R0,SP
                   MOV      A,@R0
                   MOV      R2,A
                   DEC                R0
                   MOV      A,@R0
                   MOV      R3,A
                   DEC                R0
                   DEC                R0
                   DEC                R0
                   DEC                R0
                   MOV      A,@R0
                   MOV      R6,A
                   DEC                R0
                   MOV      A,@R0
                   MOV      R7,A
                   CLR                A
                   MOV      R0,A
                   MOV      R1,A
                   MOV      R4,A
                   MOV      R5,A
//                   LCALL        MUL32     // R0R1 * R6R7 --> R4R5R6R7
//                   LCALL        ADD32     // R4R5R6R7 + DPH1,DPL1 --> DPH,B,DPH1,DPL1

                   DEC                R0
                   DEC                R0
                   MOV      A,@R0
                   MOV      R2,A
                   DEC                R0
                   MOV      A,@R0
                   MOV      R3,A
                   DEC                R0
                   MOV      A,@R0
                   MOV      R6,A
                   DEC                R0
                   MOV      A,@R0
                   MOV      R7,A
                   CLR                A
                   MOV      R0,A
                   MOV      R1,A
                   MOV      R4,A
                   MOV      R5,A
//                   LCALL        MUL32     // R2R3 * R4R5 --> R4R5R6R7
//                   LCALL        ADD32     // R4R5R6R7 + DPH,B,DPH1,DPL1 --> DPH1,DPL1

                   POP                ACC
                   MOV      R2,A
                   POP                ACC
                   MOV      R3,A
                   POP                ACC
                   MOV      R6,A
                   POP                ACC
                   MOV      R7,A
                   MOV      A,SP
                   ADD                A,#-4
                   MOV      SP,A
                   CLR                A
                   MOV      R0,A
                   MOV      R1,A
                   MOV      R4,A
                   MOV      R5,A
//                   LCALL        MUL32     // R0R1 * R4R5 --> R4R5R6R7
//                   LCALL        ADD32     // R4R5R6R7 + DPH1,DPL1 --> R4R5R6R7




回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-5-2 18:27:19 | 显示全部楼层
MDU32C
STC8H2K32U-45I-LQFP32 已微信小商城上架销售

本坛网友,全部【免费+包邮 送】
深圳国芯人工智能有限公司-产品_STC8G系列 (stcai.com)

截图202405021823372114.jpg
截图202405021824029833.jpg

截图202405021824302698.jpg

截图202405021824534707.jpg

截图202405021826144403.jpg

截图202405021826445287.jpg

截图202405021827161294.jpg


回复 支持 1 反对 0

使用道具 举报 送花

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

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-1-25 19:59:31 | 显示全部楼层
其中 数次 16位 * 16位 = 32位 相乘, 再叠加 --> 寄存器 暂存,  程序片段 还没加入.

程序超长, 效率低下, 分析原因:

1. 模拟小数运算, 只能用 整数 16位 * 16位 = 32位 相乘(取高 16位)

2. 32位 运算占用 整个 R0-R7寄存器, 重入函数的临时变量, 只能放在 SP堆栈中, 51不支持堆栈变量, 故执行效率低.

3. 如有可能, 请考虑增加一条 小数 32位 * 32位 = 32位 乘法指令, 代替以上一大堆 模拟小数运算程序.

4. 算术左移右移, 最末移出位, 如有可能, 请放在 Cy中, 便于级联, 四舍五入等操作.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-25 20:15:40 | 显示全部楼层
STC8H2K32U-45MHz-LQFP32 + MDU32C 已启动流片流程,不想改了
否则又要等 2个月
回复 支持 反对

使用道具 举报 送花

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

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-1-26 02:56:01 | 显示全部楼层
以后有机会改吧,  搞个 增强型 MDU32C+  版本.
回复 支持 反对

使用道具 举报 送花

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

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-1-26 08:03:00 | 显示全部楼层
优化了一下 模拟小数乘法, 感觉还行, 可重入函数, 占用 4级堆栈, 到时 样片到手, 测试对比一下与标准浮点库的速度之比.


// 模拟小数乘法        R0R1R2R3 * R4R5R6R7 --> R4R5R6R7
/*                    R2R3 * R6R7 -->         R4R5R6R7 , R4R5 --> DPH1,DPL1
                      R2R3 * R4R5 -->     R4R5R6R7_0_0 , R4R5R6R7 + DPH1,DPL1 --> DPH,B,DPH1,DPL1
                      R0R1 * R6R7 -->     R4R5R6R7_0_0 , R4R5R6R7 + DPH,B,DPH1,DPL1 --> DPH1,DPL1
                      R0R1 * R4R5 --> R4R5R6R7_0_0_0_0 , R4R5R6R7 + DPH1,DPL1 --> R4R5R6R7

                        R4R5R6R7 规格化 --> R5R6R7,DPL1 , 指数DPL --> R4
*/
               MOV      B,R1
               MOV      DPH,R0
               MOV      A,R7
               PUSH     ACC
               MOV      A,R6
               PUSH     ACC
               MOV      A,R5
               PUSH     ACC
               MOV      A,R4
               PUSH     ACC

                   CLR                A
                   MOV      R0,A
                   MOV      R1,A
                   MOV      R4,A
                   MOV      R5,A
//                   LCALL        MUL32     // R2R3 * R6R7 --> R4R5R6R7
                   MOV      DPH1,R4          // R4R5 --> DPH1,DPL1
                   MOV      DPL1,R5

                   MOV                R0,SP
                   MOV      A,@R0
                   MOV      R6,A
                   DEC                R0
                   MOV      A,@R0
                   MOV      R7,A
                   CLR                A
                   MOV      R0,A
;                   MOV      R1,A
                   MOV      R4,A
                   MOV      R5,A
//                   LCALL        MUL32     // R2R3 * R4R5 --> R4R5R6R7
                   MOV      R2,DPH1          // DPH1,DPL1 --> R0R1R2R3
                   MOV      R3,DPL1
//                   LCALL        ADD32     // R4R5R6R7 + DPH1,DPL1 --> DPH,B,DPH1,DPL1
               MOV      R2,DPH
               MOV      R3,B
                   MOV      DPH,R4
                   MOV      B,R5
                   MOV      DPH1,R6
                   MOV      DPL1,R7

                   MOV                R0,SP
                   DEC                R0
                   DEC                R0
                   MOV      A,@R0
                   MOV      R6,A
                   DEC                R0
                   MOV      A,@R0
                   MOV      R7,A
                   CLR                A
                   MOV      R0,A
;                   MOV      R1,A
                   MOV      R4,A
                   MOV      R5,A
//                   LCALL        MUL32     // R0R1 * R6R7 --> R4R5R6R7
                   MOV      R0,DPH
                   MOV      R1,B
                   XCH      R2,DPH1   // 原 R2R3 --> DPH1,DPL1
                   XCH      R3,DPL1
//                   LCALL        ADD32     // R4R5R6R7 + DPH,B,DPH1,DPL1 --> DPH1,DPL1
                   XCH      R6,DPH1   // DPH1,DPL1 --> R6R7(原R2R3)
                   XCH      R7,DPL1          

                   POP                ACC
                   MOV      R2,A
                   POP                ACC
                   MOV      R3,A
                   POP                ACC
                   POP                ACC
//                   LCALL        MUL32     // R0R1 * R4R5 --> R4R5R6R7
//                   LCALL        ADD32     // R4R5R6R7 + DPH1,DPL1 --> R4R5R6R7

//                   LCALL        RSLA32          // R4R5R6R7 规格化 --> R5R6R7,DPL1 , 指数DPL --> R4

                   MOV      C,F0        // 标准浮点数返回, 加入符号
           MOV      A,DPL         
               RRC      A
               XCH      A,R4
               MOV      ACC.7,C
               XCH      A,R5
               XCH      A,R6
               XCH      A,R7
               MOV      DPL,A
                   RET

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-26 12:10:55 | 显示全部楼层
猜测,老许要的, 就是一個
32bX32b=64b的完整乘法器, 如果沒有这种乘法器,
他就必须拆解成 4 个 16bX16b=32b 的乘法,
要命的是还要到处找地方暂存结果、并且做移位累加。


我们目前MDU32C的乘法器功能是 32bX32b=32b, 结果"高"的ˇ32b 被丢弃了 !
料想, 应该也不合其使用。


截图202401261211396139.jpg

点评

当时也提过, 32bX32b=64b, 结果"高"的ˇ32b 不能丢弃, 小数乘法(浮点数)要用 !!!  详情 回复 发表于 2024-1-26 14:18
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-26 12:13:15 | 显示全部楼层
事实上, 在 MDU32C 中,
我们原本有做完整的, 只因为要配合 Keil-C51 ,
所以我们把它又拿掉了 !

点评

要配合 C51, 更应该要加 32bX32b=64b 乘法. R0R1R2R3, R4R5R6R7 = R0R1R2R3 * R4R5R6R7; 多好啊~~~  详情 回复 发表于 2024-1-26 14:21
回复 支持 反对

使用道具 举报 送花

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

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-1-26 14:18:00 | 显示全部楼层
神*** 发表于 2024-1-26 12:10
猜测,老许要的, 就是一個
32bX32b=64b的完整乘法器, 如果沒有这种乘法器,
他就必须拆解成 4 個 16bX16b=3 ...

当时也提过, 32bX32b=64b, 结果"高"的ˇ32b 不能丢弃, 小数乘法(浮点数)要用 !!!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2024-1-26 14:20:56 | 显示全部楼层
要放到 【R0/R1/R2/R3】, 但 KEIL C51 经常会优化这优化那,可能会冲突;
只能再增加条指令 放【R0/R1/R2/R3】

点评

除法指令 不是 余数 放在 R0/R1/R2/R3 KEIL C51 优化不到这 一块  详情 回复 发表于 2024-1-26 14:54
回复 支持 反对

使用道具 举报 送花

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

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-1-26 14:21:22 | 显示全部楼层
神*** 发表于 2024-1-26 12:13
事实上, 在 MDU32C 中,
我们原本有做完整的, 只因为要配合 Keil-C51 ,
所以我们把它又拿掉了 !

要配合 C51, 更应该要加 32bX32b=64b 乘法.


R0R1R2R3, R4R5R6R7 = R0R1R2R3 * R4R5R6R7; 多好啊~~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 04:14 , Processed in 0.187445 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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