ddbnn 发表于 2023-11-13 22:50:47

请问STC8H的硬件乘法器相关资料在哪里?

看到STC8H系列里有硬件乘法器,在手册里搜索不到相关资料。请版主提供相关资料学习。谢谢。

ddbnn 发表于 2023-11-13 23:09:44

已经找到,只怪我粗心。

WangChong 发表于 2023-11-13 23:44:36

LAOXU 发表于 2023-11-14 10:26:53

建议 楼主 不要使用 STC8H系列里的硬件乘法器, 速度奇慢. MDU16 彻底 废了

以经典的 int 乘法为例, 硬件乘法(直接使用官方MDU16库) 和 软件乘法 相 PK,速度差 3倍 .

请看 清楚, 是慢 3倍, 不是 增速 快 3倍.

乘风飞扬 发表于 2023-11-14 18:30:26

LAOXU 发表于 2023-11-14 10:26
建议 楼主 不要使用 STC8H系列里的硬件乘法器, 速度奇慢. MDU16 彻底 废了

以经典的 int 乘法为例, 硬件 ...

我不知道你的结论是怎么得出来的。

STC8H实验箱例程包有MDU16的使用例子:46-MDU16使用硬件函数库计算
屏蔽掉无关的打印信息,通过P10 IO口的低电平信号就能测出计算时间:


使用MDU16硬件库时测量P10的低电平时间是16us左右:


不使用MDU16硬件库时测量P10的低电平时间是24us左右:




附件是测试代码,有兴趣的朋友可以自己试试。

LAOXU 发表于 2023-11-15 07:01:21

理论上, 主频高一倍, 整体速度就翻一倍,但实际上并不是这样

STC32F12K54 的主频用高了, 就产生一个问题, 速度提升有限, 频率越高, 速度升幅越小, 超过极限就彻底完蛋(死机),其原因就是多级流水线解码错误, 重复取码再解码浪费时间,

主频高到一定程度, 解码永远解不成功, 造成死机.   

官网上有个很出名的 STC32F12K54 测试程序, 号称运算速度比原速度快 17倍, 你可看到, 不同频率下, 速度比值不同(理论上, 这个比值恒定, 与频率无关),

我下载了标准测试程序, 用 STC32F12K54 仿真测试(采用默认频率 11.0592), 运算速度比值比官网上更理想, 比值更大, 硬件运算速度更快.主频低 解码几乎无误率

LAOXU 发表于 2023-11-15 07:09:58

编写了一个最简单的测试程序, 以 不用 MDU16库 和加入 MDU16库, 分别运行, 读取 T0 计数值作对比



不用 MDU16库,T0 计数值 , 为 25






加入 MDU16库,T0 计数值 , 为 68





下面为测试程序






LAOXU 发表于 2023-11-15 07:12:34

单从功能上 讲 , MDU16 的 功能 要比 MDU32 强大,
几乎包含了 单精度浮点运算的一切功能,我很喜欢.

通过进一步仔细分析原因, 主要是 STC8H 系列 MDU16 的 参数 输入/输出,
没有放在 DATA 区域, 而放在了 XRAM 区域,必须通过 DPTR 指针 才能读写 ,

从而 整体 拖慢了 速度 , 影响 了 性能.

说实话, STC8H 系列 其他 模块 功能 尚可,仅 MDU16 性能 表现差到极致, 不使用就是了,
并不影响 STC8H 系列 的 其他 性能.

社区闲人 发表于 2023-11-15 07:42:11

利用MDU16做一个乘除函数,u16 mul_div16(u16 a,u16 b,u16 c);//   a*b/c
计算:输入电压 = (u32)1190*ADC12/ADC15
减少数据传输,大幅提升计算速度。

乘风飞扬 发表于 2023-11-15 09:49:23

LAOXU 发表于 2023-11-15 07:01
理论上, 主频高一倍, 整体速度就翻一倍,但实际上并不是这样

STC32F12K54 的主频用高了, 就产生一个问题, ...

芯片的主频上不去是因为当前Flash的工艺限制,Flash的读取速度上限就40M左右,CPU运行频率过高时从Flash里面读取指令就得加延时,否则读取指令就会出错。所以高速芯片都需要加cache,将指令搬到SRAM里面再执行。而外设运行速度就不受这个限制。
至于MDU16的运行效率到底怎么样,烧录到芯片里面直接运行才是最准确的。
页: [1] 2
查看完整版本: 请问STC8H的硬件乘法器相关资料在哪里?