2020.10.25 RISC-V --PLIC平台级中断控制器

3 篇文章 0 订阅

PLIC介绍:《手把手教你设计CPU——RISC-V处理器篇》第13章,附录C
PLIC chisel代码:Rocketchip代码,https://github.com/chipsalliance/rocket-chip/blob/master/src/main/scala/devices/tilelink/Plic.scala
Verilog代码:https://github.com/SI-RISCV/e200_opensource/blob/master/rtl/e203/perips/sirv_plic_man.v
PLIC应用:sifive U540 https://static.dev.sifive.com/FU540-C000-v1.0.pdf
蜂鸟e200 https://github.com/SI-RISCV/e200_opensource

文中参考蜂鸟e200 相关资料 ,如有错误之处还请不吝赐教!

RISC-V的PLIC中断控制器,在蜂鸟平台下实现如下图:
在这里插入图片描述
在SIfive平台下定义的中断控制器如下图所示:
在这里插入图片描述
其中都使用了通用的PLIC中断控制器。

下面讲介绍PLIC中断控制器的总体框架。

在这里插入图片描述

1、PLIC中断源

PLIC理论支持多个任意中断源,每个中断源可以是不同触发类型,电平触发或者边沿触发、PLIC为每个中断源分配了

  • 闸口和IP
  • 编号(ID)
  • 优先级(priority)
  • 使能(Enable)

1.1 PLIC中断源之闸口(Gateway)和IP

  • 闸口将不同出发类型的外部中断传换成统一的内部中断请求
  • 对于每个中断而言,闸口保证只发送一个中断请求,中断请求经过闸口发送后,硬件自动将对应的IP寄存器置高。
  • 闸口发送一个中断请求后则启动屏蔽,如果此中断没有被处理完成,则后续的中断将会被闸口屏蔽。

1.2 PLIC中断源之编号

PLIC为每个中断源分配了一个独一无二的编号(ID)。ID编号0被预留,作为表示“不存在的中断”,因此有效的中断ID从1开始。
譬如,假设某个PLIC的硬件实现支持1024个ID,则ID应为0-1023,其中,除了0被预留表示“不存在的中断之外”,编号1~1023对应的中断源接口信号线可以用于连接有效的外部中断源。

1.3 PLCI中断源之优先级(Prioity)

PLIC的每个中断源均可以设定特定的优先级,其要点如下:

  • 每个中断源的优先级寄存器应该是存储器地址映射的可读可写寄存器,从而使得软件可以对其编程配置不同的优先级。
  • PLIC架构理论上可以支持任意多个优先级,硬件实现时可以选择具体的优先级个数。譬如,假设硬件实时选择优先级寄存器的有效位位3位,则其可以支持的优先级个数位0~7这8个优先级。
  • 优先级的数字越大,表示优先级越高
  • 优先级0意味着“不可能中断”,相当于中断源屏蔽。

1.4 PLIC中断源之中断使能(Enable)

每个中断目标的中断源均分配了一个中断使能寄存器,其要点如下。
IE寄存器应该是寄存器地址映射的可读可写寄存器,从而使得软件对其编程

  • 如果IE寄存器被配置为0,则意味着此中断源对应中断目标被屏蔽
  • 如果IE寄存器被配置为1,则意味着此中断源对应中断目标被打开。
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值