本帖最后由 FSL_TICS_Robin 于 2014-7-18 14:27 编辑
【经验分享】KE02单条乘法指令为一个周期的测试方法讲解
一, 问题描述
前不久,在我们飞思卡尔的外部坛子有几位网友提出我们Coretex M0+内核芯片的乘法指令运行周期的问题。通过cortex M0+内核相关文档,我们知道乘法指令MULS Rd, Rm, Rd 占用的机器周期是1或者是32, 那么到底是1还是32呢?网友为了验证,就采用KE02作为平台自己测试了,很多人都是采用在乘法指令前后翻转IO的方式,然后通过示波器去测试IO之间的时间来确定乘法指令的运行时间,这样测下来,时间还是比较长的,有些网友甚至测出来有好几个us,甚至十几个us, 这么长的时间对于20M的主频(一个机器周期只有0.05us)来说真是长的有些不可思议。那么到底是什么原因导致测试结果这么长呢,IO口翻转的方法测试单指令的乘法指令靠谱吗?答案是No。
为什么不行呢?因为测试的时候如果使用IO翻转,本身IO翻转就占用一定的机器周期,另外对于C语言写的乘法指令,比如如下定义:
uint32_t test1, test2;
uint32_t result;
test1=0x11;
test2=0x22;
result= test1*test2;
result= test1*test2;对应的汇编并不只是一条乘法指令,而是包含了取值到test1,test2,然后在做乘法,最后还要将乘法指令放到result中去(请查看图1),其实这些取值,存储指令占用的机器周期还是比较长的,通过手册可知是2个机器周期,而如果乘法指令只有1个机器周期,这样测试明显是不正确的。
4.jpg (84.54 KB, 下载次数: 0)
下载附件
2014-6-30 17:37 上传
图4
四,参考手册即参考测试代码
需要的网友可以下载查看,如果在测试的过程中遇到任何问题,欢迎一起交流讨论。
【经验分享】KE02中单条乘法指令为一个机器周期的测试方法讲解.pdf
(437.83 KB, 下载次数: 12)
2014-6-30 17:38 上传
点击文件名下载附件
DDI0484C_cortex_m0p_r0p1_trm.pdf
(417.14 KB, 下载次数: 8)
2014-6-30 17:38 上传
点击文件名下载附件
KE02_MULS_TEST.rar
(1.86 MB, 下载次数: 10)
2014-6-30 17:38 上传
点击文件名下载附件
PS:本帖可从飞思卡尔版块置顶帖:飞思卡尔Kinetis资料大本营的飞思卡尔论坛支持小组【经验分享】帖汇总链接进入。
那是当然了, 只是在你自己关心的地方测试。
没有必要都去测试的。
一周热门 更多>