查看: 1902|回复: 0
收起左侧

RISC-V 借助CSR实现不修改工具链扩展指令

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-3-3 12:32
  • 签到天数: 10 天

    [LV.3]

    发表于 2020-10-15 10:06:18 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 皋陶 于 2020-11-23 15:34 编辑

    RISC-V 借助CSR实现不修改工具链扩展指令

    通常来讲,扩展指令集是要修改工具链的,至少也要修改汇编器和反汇编器。


    然而借助CSR可以实现不修改工具链扩展指令集的目的。


    这是我在阅读 GD32VF103C_START开发板的Demo程序时发现的,在 entry.S 文件中有这么一行:
    1. csrrw ra, CSR_JALMNXTI, ra
    复制代码

    翻阅 Bumblebee内核指令架构手册.pdf ,对这条指令是这么解释的:


    Bumblebee 内核定义了 jalmnxti 寄存器用于减少中断延迟,加速中断咬尾。


    jalmnxti 除了包含 mnxti 的开启中断使能,处理下一个中断,返回下一个中断的入口地址等功能之外,还有跳转至中断 handler 的功能,因此可以缩短中断处理的指令个数,达到减少中断延迟,加速中断咬尾的目的。


    看起来是扩展了一个CSR寄存器,实际上是一条指令,而且这条指令的功能还挺复杂。


    代码里写的是 csrrw ra, CSR_JALMNXTI, ra,实际上汇编器看到的是 csrrw ra, 0x7EE, ra,CSR_JALMNXTI 是个宏,定义语句 #define CSR_PUSHMCAUSE 0x7EE。反汇编生成的代码也是 csrrw ra,0x7ed,ra。这说明汇编器可以接受 CSR 的地址,而不仅仅是 CSR 的名称,反汇编器对非标准的 CSR 反汇编成地址而不是名称。利用汇编器的这个特点,可以通过扩展CSR来扩展指令集,不用修改汇编器就能使用扩展的功能。这是芯来的首创吗?


    还有一个例子是 Bumblebee 扩展的 WFE 指令,实际上也是通过 CSR 扩展来实现。在 WFI 指令之前将 WFE CSR 设置为1,就可以实现 WFE 指令的功能。虽然要多写一条指令,但是却是在没有修改工具链的情况下扩展功能。工具链修改起来应该是个麻烦事,改完了还要验证。



    国内芯片技术交流-RISC-V 借助CSR实现不修改工具链扩展指令risc-v单片机中文社区(1)





    上一篇:单片机九宫格
    下一篇:蜂鸟E200在Windows下使用Quartus编译
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-3-29 04:57 , Processed in 0.806404 second(s), 48 queries .

    快速回复 返回顶部 返回列表