riscv中的plic与eclic的简单介绍

发布时间:2021-07-12 09:30:11 作者:chen
来源:亿速云 阅读:511

这篇文章主要讲解了“riscv中的plic与eclic的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“riscv中的plic与eclic的简单介绍”吧!

 

浅析riscv中的plic与eclic



 

1.PLIC中断处理

在RISC V体系架构中,对中断有着一些定义,下面来分析一下这种定义的实现策略。

riscv中的plic与eclic的简单介绍


 

在riscv中一共定义了三种状态中断,对于hart层面,hart包含local中断源和global中断源。而local中断只有Timer和Software中断两种,而global中断则称为external interrupts。只有global中断源可以被PLIC core响应,通常为I/O device。

一般来说,timer和software是通过CLINT(CORE LOCAL INTERRUPT),而外部中断通过PLIC处理。

riscv中的plic与eclic的简单介绍


 

可以看一下蜂鸟处理器的处理流程,另外sifive的E31的中断也有如下的处理。

riscv中的plic与eclic的简单介绍


 
 

2.sifive中断的编程模型

中断处理过程有如下的流程

接下来就是处理中断具体的函数实现

最后执行eret恢复到程序正常运行的状态。

对于CLINT来说,有Software Interrupt和Timer Interrupt,可以直接在寄存器中控制。

而PLIC实际上可以理解为arm的中断控制器,存在其map地址。

riscv中的plic与eclic的简单介绍


 

由于PLIC的使用是针对外部中断的,所以可以单独设置每个中断。可以设置如下的值:

由于PLIC的实现是独立于hart的IP设计,所以其设计和布局也不一定完全一致。

 

3.关于eclic

eclic的设计是芯来科技设计的一种中断处理方式。

riscv中的plic与eclic的简单介绍


 

eclic目前也是众多芯来科技core采用的中断控制器,也包括gd32vf103系列的芯片。

3号中断是内核TIMER单元生成的软件中断。

7号中断是内核TIMER单元生成的计时器中断。

而从19~4095中断号都是外部中断,其中断的编号与中断的优先级其实没有关系。

riscv中的plic与eclic的简单介绍


 

而对于ECLIC的寄存器布局,可见上图。

 

4.关于jalmnxti

这个也是eclic为了减少中断延时,加速中断咬尾的自定义指令。

该指令是配合eclic处理机制设计的,其指令功能比较多

由于csrrw ra, CSR_JALMNXTI, ra一条指令可以达到JAL(Jump and Link)的效果,同时硬件上更新Link寄存器作为该指令的PC作为函数调用的返回值,因此从中断服务程序返回后,又会重新回到csrrw ra, CSR_JALMNXTI, ra指令再次执行,可以重新判断是否有中断pending,如果有则跳转到中断处理函数,从而实现中断的咬尾处理,如果没有中断等待,则jalmnxti实际上并不会做任何事情。

感谢各位的阅读,以上就是“riscv中的plic与eclic的简单介绍”的内容了,经过本文的学习后,相信大家对riscv中的plic与eclic的简单介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. plsql的环境与介绍:环境的搭建和plsql的简单介绍
  2. python中的json简单介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:线程池的由来是什么

下一篇:嵌入式Linux_Framebuffer_04点阵显示汉字的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》