https://mp.weixin.qq.com/s/FR3yeLLBqy0n-fflw-ATgg

简单介绍TLPLIC的实现。

1. GatewayPLICIO

PLIC是Platform-Level Interrupt Controller的缩写:

GatewayPLICIO定义Gateway的IO接口,这是面向PLIC Core的接口:

其中:

a. valid:表示是否向PLIC Core产生合法输出;

b. ready:表示PLIC Core是否可以接收新的中断信号;

c. complete:表示中断是否处理完成;

2. LevelGateway

LevelGateway定义电平触发中断的Gateway模块:

1) io

io定义了LevelGateway模块的输入输出接口:

其中:

a. interrupt:表示上游中断源的中断输入;

b. plic:是面向PLIC Core的输入输出接口;

需要注意的是:这里并没有使用IO(...)包裹io定义。

2) inFlight

inFlight是一个寄存器,表示是否已经有中断请求在处理:

a. 如果有中断信号输入,并且PLIC Core可以接收,则inFlight为true;

b. 如果处理完成,则inFlight为false;

3) io.plic.valid

io.plic.valid表示是否有中断请求向PLIC Core发起:

a. 如果已经有中断在处理,则不会发起新的请求;

b. 如果没有中断信号输入,也不会发起新的请求;

3. PLICConsts

PLICConsts定义PLIC使用到的常量:

其中:

a. maxDevices:最多支持多少个设备输入中断信号;

b. maxHarts:最多支持向多少个核心(interrupt target)发起中断请求;

c. priorityBase:中断优先级配置寄存器的基地址;

d. pendingBase:中断等待信号寄存器的基地址;

e. enableBase:各个核心的中断使能寄存器的基地址;

f. hartBase:各个核心中断优先级门槛及claim/complete寄存器的基地址;

这里的require的意义在于确保预留的空间足够使用。

4. PLICParams

PLICParams定义PLIC使用的参数:

其中:

a. baseAddress:定义PLIC地址空间的基地址;

b. maxPriorities:定义中断的最大优先级;

c. intStages:定义中断需要缓存多少个时钟周期;

5. PLICKey

PLICKey是用于查找PLICParams的关键字:

定义示例:

-----------------------------------------------------------------------------
这是一篇付费文章,请移步付费阅读全文,谢谢!
文章链接:https://mp.weixin.qq.com/s/FR3yeLLBqy0n-fflw-ATgg

Rocket - devices - PLIC的更多相关文章

  1. Rocket - devices - bootrom

    https://mp.weixin.qq.com/s/PylfNmJDRasTUj9fGp7gLQ 简单介绍bootrom目录中各个文件的实现. 1. Makefile 1) make过程 Makef ...

  2. Rocket - devices - CLINT

    https://mp.weixin.qq.com/s/4LfZZDKCTQhiKIUjvbDKEg 简单介绍CLINT的实现. 1. 概述 CLINT即是Core Local Interrupter的 ...

  3. Rocket - devices - BasicBusBlocker

    https://mp.weixin.qq.com/s/m1zfFQeSoGZZduJGbxEqdQ 简单介绍BasicBusBlocker的实现. 1. BasicBusBlockerParams B ...

  4. Rocket - devices - TLBusBypass

    https://mp.weixin.qq.com/s/WviVHxlZvsNm8mea2VpfTw 简单介绍TLBusBypass的实现. 1. TLBypassNode TLBypassNode定义 ...

  5. Rocket - devices - CanHaveBuiltInDevices

    https://mp.weixin.qq.com/s/C9iktVr4hnQ8lM0CiWtedQ 简单介绍CanHaveBuiltInDevices的实现. 1. HasBuiltInDeviceP ...

  6. Rocket - devices - TLError

    https://mp.weixin.qq.com/s/s_6qPkT2zwdqYLw5iK7_8g 简单介绍TLError的实现. 1. 继承自DevNullDevice TLError继承自DevN ...

  7. Rocket - devices - TLZero

    https://mp.weixin.qq.com/s/JHjUZncEcoZpRxIS1ECV5g 简单介绍TLZero的实现. 1. /dev/null /dev/null最主要的特点是写入的数据被 ...

  8. Rocket - devices - TLDeadlock

    https://mp.weixin.qq.com/s/Zv4HE7zMBzHbsWGg3pa9fg 简单介绍TLDeadlock的实现. 1. TLDeadlock TLDeadlock是抽象类Dev ...

  9. Rocket - devices - DevNullDevice

    https://mp.weixin.qq.com/s/rAmXl-0gDAJqWmy1R3KrlA 简单介绍DevNullDevice的实现. 1. DevNullParams DevNullPara ...

随机推荐

  1. Spring官网阅读(七)容器的扩展点(二)FactoryBean

    在上篇文章中我们已经对容器的第一个扩展点(BeanFactoryPostProcessor)做了一系列的介绍.其中主要介绍了Spring容器中BeanFactoryPostProcessor的执行流程 ...

  2. 记录一下关于在工具类中更新UI使用RunOnUiThread犯的极其愚蠢的错误

    由于Android中不能在子线程中更新ui,所以平时在子线程中需要更新ui时可以使用Android提供的RunOnUiThread接口,但是最近在写联网工具类的时候,有时候会出现联网异常,这个时候为了 ...

  3. vs每次生成都全部编译的问题

    最近vs每次生成都会编译整个工程,经查找为.qrc中的资源路径不存在导致,删除路径后问题解决. 原文来自微信公众号"程序员成长日志",已经工作的程序员朋友可以关注下,分享日常工作中 ...

  4. 转载-git使用之忽略不需要上传的文件的几种方式

    在我们使用git 的时候通常会遇到一些问题,一些文件我创建了但是我并不想上传或者有些文件我修改了但是并不想上传(为了适应个自己的开发环境),但是在每次git status的时候总能看到它,不仅感到很心 ...

  5. C语言进阶_分支语句

    勇气是在压力之下展现出的优雅. 一.简介 C语言提供了两种分支语句可供选用,一是if.......else....类型,一种是Switch语句.两种语句都能根据条件判断结果执行不同的指令,且能进行替换 ...

  6. CentOS7 Installing Python3

    最近开始学习python. python火了这么久,我终于还是跪舔它了,我是一个跟风的人,学过C.C#.JAVA.PHP,无一例外的浅尝即止,不知道我这双已经近视的眼,确认过的眼神还对不对,希望pyt ...

  7. 帝国cms 批量删除包含关键字的 内容

    删除包含关键字的 内容delete from www_kaifatu_com_ecms_news where playurl like '%关键字%'

  8. Elasticsearchdump 数据导入/导出

    一.安装过程 Elasticsearchdump 仓库地址,详细使用情况 当前工具主要是用来对ES中的数据进行数据导入/导出,以及对数据迁移相关,使用elasticdump工具需要使用到npm,所以需 ...

  9. shell脚本命令 运行python文件&python命令行运行python代码

    单独的python文件运行的时候 报错: 在shell脚本中,运行shell脚本命令:在Python命令行中,运行Python代码.然而,“python hello.py”是一个脚本命令,不是pyth ...

  10. C# 数据操作系列 - 8. EF Core的增删改查

    0.前言 到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置. 这一篇,我带大家分享一下,我在工作中需要的EF Core的用法. 1 ...