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. Phoenix and Distribution(字典序贪心)

    \(给定一串字母,分成k份,使得最大字典序最小.(字母可以任意组合)\) \(------------------------------issue~------------------------\ ...

  2. D. Ehab the Xorcist(纯构造方法)

    \(如果觉得下面难以理解,可以去这里看一种较为简单的解法\):saf \(这个题嘛,首先要明确异或的性质:相同为0,不同为1.\) \(举个例子,我们来构造u=15和v=127的情况\) \(注意到, ...

  3. E. Count The Blocks(找数学规律)

    \(\color{Red}{先说一下自己的歪解(找规律)}\) \(n=1是答案是10\) \(n=2时答案是180\) \(n=3时模拟一下,很容易发现答案是2610\ \ 180\ \ 10\) ...

  4. LateX公式表

    转载自xkgjfl 话说为什么LateX公式这么难记 markdown最全数学公式 我们在用markdown写文档时有时候少不了需要插入一些公式,然而markdown公式输入远没有word这么直观,有 ...

  5. 简单ajax跨域请求

    最近遇到需要ajax跨域的需求 首先看下不做任何处理特别处理的ajax跨域请求会出现什么样的错误 客户端代码: <script type="text/javascript"& ...

  6. 软路由OpenWrt(LEDE)2020.5.10更新 UPnP+NAS+多拨+网盘+DNS优化

    近期更新:2020.05.10更新-基于OpenWrt R2020.5.9版本,源码截止2020.05.10.   交流群:QQ 1030484865 电报 t.me/t_homelede   版本说 ...

  7. 【Spark】SparkStreaming与flume进行整合

    文章目录 注意事项 SparkStreaming从flume中poll数据 步骤 一.开发flume配置文件 二.启动flume 三.开发sparkStreaming代码 1.创建maven工程,导入 ...

  8. 【Hadoop离线基础总结】流量日志分析网站整体架构模块开发

    目录 数据仓库设计 维度建模概述 维度建模的三种模式 本项目中数据仓库的设计 ETL开发 创建ODS层数据表 导入ODS层数据 生成ODS层明细宽表 统计分析开发 流量分析 受访分析 访客visit分 ...

  9. calc less 下不起作用

    在 less中不能使用css3 calc属性不能 css3 新增长度计算属性 可以根据不同单位计算宽度 .test{ width: calc(100% - 150px); } 但是当我们在less中使 ...

  10. 聊聊 TypeScript 中的类型保护

    聊聊 TypeScript 中的类型保护 在 TypeScript 中使用联合类型时,往往会碰到这种尴尬的情况: interface Bird { // 独有方法 fly(); // 共有方法 lay ...