队伍名称:东莞庄路三缺二 队伍编号:CICC1399。 大家好,本篇是我们队伍的第二篇分享,近来对芯来官方协处理器加速案例中实现程序指令数、周期数计算的函数产生了兴趣,因此想探究下该函数是如何实现的,并分享出来。水平有限,如有错误,欢迎大家批评指正。
二、探究过程
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寄存器得到执行操作前后的指令计数值,再取其差值即可得到该操作耗费的指令数。周期数计算同理。
三、总结
以上主要以程序指令数计算函数为例,追踪其实现原理。