RISC-V MCU中文社区

【分享】 计算程序执行指令数的函数实现

发表于 全国大学生集成电路创新创业大赛 2021-07-22 13:02:41
0
3252
0

一、队伍介绍

队伍名称:东莞庄路三缺二 队伍编号:CICC1399。 大家好,本篇是我们队伍的第二篇分享,近来对芯来官方协处理器加速案例中实现程序指令数、周期数计算的函数产生了兴趣,因此想探究下该函数是如何实现的,并分享出来。水平有限,如有错误,欢迎大家批评指正。

二、探究过程

1、官方提供的计算周期数指令数方法为,采用如下这几个函数在所要计算的操作前后获取一次当前指令数和周期数。并求他们的差值,以此得到结果。


2、首先找到这几个函数原型在hbird-sdk/NMSIS/Core/Include/core_feature_base.h头文件中,以__get_rv_instret为例


其中主要调用了__RV_CSR_READ函数

3、追踪发现__RV_CSR_READ是一个宏定义,采用内联汇编使用csrr指令

也可查看反汇编代码:

4、查手册可知,csrr指令是用来读CSR寄存器的值

5、而minstreth和minstret寄存器介绍如下(来源:手把手教你设计cpu_RISC-V处理器),他们分别存储了指令计数器的高低32位

至此就大致能理解指令数计算函数的实现原理,即通过csrr指令读minstreth和minstret寄存器得到执行操作前后的指令计数值,再取其差值即可得到该操作耗费的指令数。周期数计算同理。

三、总结

以上主要以程序指令数计算函数为例,追踪其实现原理。

喜欢0
用户评论

未通过实名认证

懒的都不写签名

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板