RISC-V核心PC值读取技术问询:ARM64能否通过CSR寄存器获取?
RISC-V PC值读取相关问题解答
标准RISC-V架构中的PC读取规则
- 无直接返回当前PC的标准CSR:RISC-V标准架构里,不存在专门的CSR寄存器用来返回当前正在执行指令的PC值。你找到的
epc类寄存器仅用于保存异常/陷阱触发时的PC,tvec是陷阱向量地址,都不属于正常执行流的当前PC。 - 仅能通过指令读取PC到通用寄存器:标准指令集中,
auipc rd, imm是最直接获取当前PC的指令(指令本身的PC值会被加载到目标寄存器rd);另外jalr指令也能间接推导PC,但auipc是专门设计的PC读取指令。
关于ARM64访问RISC-V PC的理解
你的理解是正确的:如果RISC-V核心没有将当前PC值映射到某个可被ARM64访问的CSR(包括自定义CSR),ARM64处理器无法直接读取到RISC-V的当前PC值。
替代实现建议
如果需要通过ARM64判断RISC-V是否在处理指令,或获取其PC,可考虑以下方式:
- 自定义一个CSR寄存器,让RISC-V核心在执行流中定期将当前PC写入该CSR,ARM64通过地址映射读取这个自定义CSR即可。
- 让RISC-V执行
auipc指令将PC存入某个通用寄存器,再将该通用寄存器的地址空间映射给ARM64访问。 - 若仅需判断是否在运行指令,可通过RISC-V的状态类CSR(如
mstatus中的状态位,需结合具体实现)或硬件状态信号来判断,无需直接读取PC。
内容的提问来源于stack exchange,提问作者Chan Kim
相关产品推荐
相关产品推荐

