【学一点RISC-V】ACLINT(高级核心本地中断控制器)文档

RISCV架构 ACLINT文档

ACLINT原文档:https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc

在这里进行了翻译以及校对,仅供参考,不正确的地方欢迎指出

1、介绍

【此 RISC-V ACLINT 规范定义了一组内存映射设备,这些设备为多 HART RISC-V 平台上的每个 HART 提供处理器间中断 (IPI) 和定时器功能】。 在多 HART RISC-V 平台上运行的操作系统、引导加载程序和固件需要这些 HART 级 IPI 和定时器功能。

SiFive 核心本地中断器 (CLINT) 器件已在 RISC-V 领域广泛采用,以提供机器级 IPI 和定时器功能。 不幸的是,【SiFive CLINT 具有针对 IPI 和定时器功能的统一寄存器映射,并且不提供 supervisor-level IPI 功能】。

【RISC-V ACLINT 规范采用更加模块化的方法,为 IPI 和定时器功能定义单独的内存映射设备】。 当平台具有替代机制时,这种模块化允许 RISC-V 平台省略一些 RISC-V ACLINT 设备。 除了模块化之外,【RISC-V ACLINT 规范还为 Supervisor 级 IPI 定义了专用内存映射设备】。 下面的表 1 显示了 RISC-V ACLINT 规范定义的器件列表。

Table 1. ACLINT 设备

名称特权级功能
MTIMERMachine固定频率计数器和定时器事件
MSWIMachine处理器间(或软件)中断
SSWISupervisor处理器间(或软件)中断

RISC-V ACLINT 规范被定义为向后兼容 SiFive CLINT 规范。 MTIMER 和 MSWI 器件的寄存器定义和寄存器偏移量与 SiFive CLINT 规范定义的定时器和 IPI 寄存器兼容。 RISC-V 平台上的 SiFive CLINT 设备在逻辑上可以看作是在内存地址空间中彼此相邻放置的一个 MSWI 设备和一个 MTIMER 设备,如下表 2 所示。

1.1、与 SiFive CLINT 向后兼容

RISC-V ACLINT 规范与 SiFive CLINT 规范向后兼容。**【MTIMER 和 MSWI 器件的寄存器定义和寄存器偏移量与 SiFive CLINT 规范定义的定时器和 IPI 寄存器兼容】。**在 RISC-V 平台上,一个 SiFive CLINT 器件在逻辑上可视为一个 MSWI 器件和一个 MTIMER 器件,它们在内存地址空间中相邻放置,如下表 2 所示。

Table 2. 一个 SiFive CLINT 设备相当于两个 ACLINT 设备

SiFive CLINT 偏移范围ACLINT 设备功能
0x0000_0000 - 0x0000_3fffMSWI机器级处理器间(或软件)中断
0x0000_4000 - 0x0000_bfffMTIMER机器级固定频率计数器和定时器事件

2、机器级定时器设备(MTIMER)

【MTIMER 器件为 RISC-V 平台上的一组 HART 提供机器级定时器功能。它有一个固定频率单调时间计数器 (MTIME) 寄存器,并且对于连接到 MTIMER 设备的每个 HART 都有一个时间比较寄存器 (MTIMECMP)。 未连接到任何 HART 的 MTIMER 设备应仅具有 MTIME 寄存器,而没有 MTIMECMP 寄存器】。

在具有多个 MTIMER 设备的 RISC-V 平台上:

  • 每个 MTIMER 设备为不同(或不相交)的 HART 集提供机器级定时器功能。 MTIMER 设备为与其关联的每个 HART 分配一个从零开始的 HART 索引。 MTIMER 设备分配给 HART 的 HART 索引可能与 RISC-V 特权架构分配给 HART 的唯一 HART 标识符(hart ID)有任何关系,也可能没有关系
  • 两个或多个 MTIMER 设备可以共享相同的物理 MTIME 寄存器,同时拥有自己单独的 MTIMECMP 寄存器
  • MTIMER 设备的 MTIMECMP 寄存器必须仅与同一 MTIMER 设备的 MTIME 寄存器进行比较,以生成机器级定时器中断

单个 MTIMER 设备支持的最大 HART 数量为 4095,相当于 MTIMECMP 寄存器的最大数量。

2.1、寄存器映射

一个 MTIMER 设备有两个独立的基地址:一个用于 MTIME 寄存器,另一个用于 MTIMECMP 寄存器。 单个 MTIMER 设备的单独的基地址允许多个 MTIMER 设备共享相同的物理 MTIME 寄存器。

下面的表 3 显示了 MTIME 寄存器的映射,而下面的表 4 显示了 MTIMECMP 寄存器相对于单独基地址的映射。

Table 3. ACLINT MTIMER Time 寄存器映射

OffsetWidthAttrNameDescription
0x0000_00008BRWMTIMEMachine-level time counter

Table 4. ACLINT MTIMER Compare 寄存器映射

OffsetWidthAttrNameDescription
0x0000_00008BRWMTIMECMP0HART index 0 machine-level time compare
0x0000_00088BRWMTIMECMP1HART index 1 machine-level time compare
0x0000_7FF08BRWMTIMECMP4094HART index 4094 machine-level time compare
2.2、MTIME 寄存器 (Offset: 0x00000000)

MTIME 寄存器是一个 64 位读写寄存器,包含基于固定参考频率计数的周期数

MTIMER 器件复位时,MTIME 寄存器被清零。

2.3、MTIMECMP 寄存器 (Offsets: 0x00000000 - 0x00007FF0)

MTIMECMP 寄存器是每个 HART 一个的 64 位读写寄存器。它包含相应的 HART 触发机器级定时器中断的 MTIME 寄存器的值。

**每当 MTIME 大于或等于相应 MTIMECMP 寄存器中的值时,HART 的机器级定时器中断就会挂起,而每当 MTIME 小于相应 MTIMECMP 寄存器中的值时,HART 的机器级定时器中断就会被清除。**机器级定时器中断反映在 mip CSR 的 MTIP 位中。

在 MTIMER 器件复位时,MTIMECMP 寄存器处于未知状态。

2.4、同步多个 MTIME 寄存器

RISC-V 平台可以将多个 HART 分组为分层拓扑组(例如 clusters、nodes 或 sockets),其中每个拓扑组都有自己的 MTIMER 设备。 此外,此类 RISC-V 平台还允许在运行时对拓扑组(包括 MTIMER 设备)进行时钟门控或断电。

2.4 节省略了部分内容,这一部分可以查阅资料

暂时未涉及到多个 MTIMER 设备的情况

3、机器级软件中断设备(MSWI)

【MSWI 设备为 RISC-V 平台上的一组 HART 提供机器级 IPI 功能。 它为连接到 MSWI 设备的每个 HART 提供一个 IPI 寄存器 (MSIP)】。

在具有多个 MSWI 设备的 RISC-V 平台上,每个 MSWI 设备为不同(或不相交)的 HART 集提供机器级 IPI 功能。 MSWI 设备为与其关联的每个 HART 分配一个从零开始的 HART 索引。 MSWI 设备分配给 HART 的 HART 索引可能与 RISC-V 特权架构分配给 HART 的唯一 HART 标识符 (hart ID) 有任何关系,也可能没有关系。

单个 MSWI 设备支持的 HART 最大数量为 4095,相当于 MSIP 寄存器的最大数量。

3.1、寄存器映射

Table 5. ACLINT MSWI 设备寄存器映射

OffsetWidthAttrNameDescription
0x0000_00004BRWMSIP0HART index 0 machine-level IPI register
0x0000_00044BRWMSIP1HART index 1 machine-level IPI register
0x0000_3FFC4BRESERVEDReserved for future use.
3.2、MSIP Registers (Offsets: 0x00000000 - 0x00003FF8)

每个 MSIP 寄存器都是一个 32 位宽的 WARL 寄存器,其中高 31 位连接为零。 最低有效位反映在 mip CSR 的 MSIP 中。【通过向相应的 MSIP 寄存器写入 1 或 0 可以挂起或清除 HART 的机器级软件中断】。

在 MSWI 设备复位时,每个 MSIP 寄存器都被清零。

4、Supervisor-level Software Interrupt Device (SSWI)

【SSWI 设备为 RISC-V 平台上的一组 HART 提供 Supervisor 级 IPI 功能。它提供一个寄存器来为连接到 SSWI 设备的每个 HART 设置 IPI (SETSSIP)】。

在具有多个 SSWI 设备的 RISC-V 平台上,每个 SSWI 设备为不同(或不相交)的 HART 集提供 Supervisor 级 IPI 功能。 SSWI 设备为与其关联的每个 HART 分配一个从零开始的 HART 索引。 SSWI 设备分配给 HART 的 HART 索引可能与 RISC-V 特权架构分配给 HART 的唯一 HART 标识符 (hart ID) 有任何关系,也可能没有关系。

单个 SSWI 设备支持的最大 HART 数量为 4095,相当于 SETSSIP 寄存器的最大数量。

4.1、Register Map

Table 6. ACLINT SSWI Device 寄存器映射

OffsetWidthAttrNameDescription
0x0000_00004BRWSETSSIP0HART index 0 set supervisor-level IPI register
0x0000_00044BRWSETSSIP1HART index 1 set supervisor-level IPI register
0x0000_3FFC4BRESERVEDReserved for future use.
4.2、SETSSIP Registers (Offsets: 0x00000000 - 0x00003FF8)

每个 SETSSIP 寄存器都是一个 32 位宽的 WARL 寄存器,其中高 31 位连接为零。 SETSSIP 寄存器的最低有效位始终读取 0。**将 0 写入 SETSSIP 寄存器的最低有效位没有任何效果,而将 1 写入最低有效位会向相应的 HART 发送边沿敏感中断信号,导致 HART 置位 mip CSR 中的 SSIP。**对 SETSSIP 寄存器的写入保证反映在相应 HART 的 SSIP 中,但不一定立即反映。

注意:RISC-V 特权架构将 mipsip CSR 中的 SSIP 定义为可写位,因此 M 模式或 S 模式软件可以直接清除 SSIP。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14.Webpack 简介以及使用

1. 概念: Webpack 是一个静态模块打包工具,从入口构建依赖图,打包有关的模块,最后用于展示你的内容 2. 静态模块: 编写代码过程中的,html,css, js,图片等固定内容的文件…

ExecutorService

常用ExecutorServicecurrentThreadSize < coreThreadSize --> create a new threadcurrentThreadSize coreThreadSize --> queue submitted task queue submitted task is full & currentThreadSize <maxPoolSize --> create a new thread queue is full…

C++知识点总结(24):数据结构与栈

数据结构与栈 一、概念1. 数据2. 数据结构3. 数据结构分类 二、栈1. 栈2. 相关概念2.1 入栈2.2 出栈2.3 栈的特点2.4 栈顶2.5 栈底2.6 栈顶元素2.7 栈底元素 三、数组模拟栈1. 初始化空栈2. 入栈3. 出栈4. 获取栈顶元素5. 判断栈是否为空6. 获取栈内元素个数 四、栈的运用1. 括…

[java入门到精通] 11 泛型,数据结构,List,Set

今日目标 泛型使用 数据结构 List Set 1 泛型 1.1 泛型的介绍 泛型是一种类型参数&#xff0c;专门用来保存类型用的 最早接触泛型是在ArrayList&#xff0c;这个E就是所谓的泛型了。使用ArrayList时&#xff0c;只要给E指定某一个类型&#xff0c;里面所有用到泛型的地…

「连载」边缘计算(二十八)03-08:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; eventbus的具体逻辑剖析 从eventbus的启动函数切入分析具体逻辑&#xff0c;具体如下所示。 KubeEdge/edge/pkg/eventbus/event_bus.go func (eb *eventbus) Start(c *context.Context) { // no need to call TopicInit now, we have fixed …

公众号IP白名单已添加服务器IP 122.88... 依然给出 40164 错误

公众号的IP白名单已添加 122.88... 依然给出 40164 错误。 {"errcode":40164,"errmsg":"invalid ip 122.88... ipv6 ::ffff:122.88..., not in whitelist rid: 65e85a07-458dfc0d-16003e03"} 解决方案&#xff1a; 一、检查 AppID 是否正确&…

STM32基本定时功能

1、定时器就是计数器。 2、怎么计数&#xff1f; 3、我们需要有一恒定频率的方波信号&#xff0c;再加上一个寄存器。 4、比如每来一个上升沿信号&#xff0c;寄存器值加1&#xff0c;就可以完成计数。 5、假设方波频率是100Hz&#xff0c;也就是1秒100个脉冲。…

ElasticSearch 模糊查询

前缀搜索 # 前缀搜索 注意&#xff1a; 前缀搜索匹配的是trem,而不是filed&#xff0c;倒排索引的分词 性能比较差&#xff0c;没有缓存 搜索时尽量把前缀词设置长一点 GET /product/_search {"query": {"prefix": {"name": {"value"…

【学习】DLA (Deep Layer Aggregation)

本研究是有由UC Berkeley的Trevor Darrell组发表于2018年CVPR。因为&#xff0c;工作中应用到CenterNet&#xff0c;文章中使用了DLA作为backbone&#xff0c;能够以较高的速度完成推理并维持较高的AP。 DLA文章&#xff1a;论文 DLA 在实际操作中&#xff0c;常常将高级特征…

机器学习-pytorch1(持续更新)

上一节我们学习了机器学习的线性模型和非线性模型的机器学习基础知识&#xff0c;这一节主要将公式变为代码。 代码编写网站&#xff1a;https://colab.research.google.com/drive 学习课程链接&#xff1a;ML 2022 Spring 1、Load Data&#xff08;读取数据&#xff09; 这…

比较字符串

给定程序函数fun的功能是&#xff1a;比较两个字符串&#xff0c;将长的那个字符串的首地址作为函数值返回。 #include <stdio.h> /**********found**********/ char* fun(char *s, char *t) {int s10, t10;char *ss, *tt;sss;ttt; while(*ss){s1;/**********found****…

学习Java的第六天

一、变量 1、变量的定义 在程序执行的过程中变量的值会发生变化&#xff0c;直白来说就是用来存储可变化的数据。从本质上讲&#xff0c;变量其实指的是内存中的一小块存储空间&#xff0c;空间位置是确定的&#xff0c;但是里面放置的值不确定。比如屋子里有多个鞋柜&#x…

启发式算法:禁忌搜索 Tabu Search

文章目录 Tabu searchTabu search算法算例-旅行商TSP问题Tabu search 从一个初始可行解出发,选择一系列的特定搜索方向(移动)作为试探,选择实现让特定的目标函数值变化最多的移动。 为了避免陷入局部最优解,TS搜索中采用了一种灵活的“记忆”技术,对已经进行的优化过程进…

2024年目标检测研究进展

YOLOv9 图片来源网络 YOLO相关的研究&#xff1a;https://blog.csdn.net/yunxinan/article/details/103431338

网络安全: Kali Linux 进行 SSH 渗透与防御

目录 一、实验 1.环境 2.nmap扫描目标主机 3.Kali Linux 进行 SSH 渗透 3.Kali Linux 进行 SSH 防御 二、问题 1.SSH有哪些安全配置 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统版本IP备注Kali Linux2022.4 192.168.204.154&#xff08;动态&…

【软考】单元测试

目录 1. 概念2. 测试内容2.1 说明2.2 模块接口2.3 局部数据结构2.4 重要的执行路径 3. 测试过程2.1 说明2.2 单元测试环境图2.3 驱动模块2.4 桩模块 4. 模块接口测试与局部数据结构测试的区别 1. 概念 1.单元测试也称为模块测试&#xff0c;在模块编写完成且无编译错误后就可以…

使用React Context和Hooks在React Native中共享蓝牙数据

使用React Context和Hooks在React Native中共享蓝牙数据 **背景****实现步骤****步骤 1: 创建并导出bleContext****步骤 2: 在App.tsx中使用bleContext.Provider提供数据****步骤 3: 在父组件和子组件中访问共享的数据** **结论** 在开发React Native应用时&#xff0c;跨组件共…

16.Git从入门到进阶

一.Git 初识 1. 概念&#xff1a; 一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 2. 作用&#xff1a; 记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容 3. 如何学&#xff1a; 个人本机使用&#xf…

SQL中的不加锁查询 with(nolock)

WITH(NOLOCK) 是一种 SQL Server 中的表提示&#xff08;table hint&#xff09;&#xff0c;可以用来告诉数据库引擎在查询数据时不要加锁&#xff0c;以避免因为锁等待导致查询性能下降。 当多个事务同时访问同一张表时&#xff0c;数据库引擎会对表进行锁定&#xff0c;以确…

数据库中 SQL Hint 是什么?

前言 最近在调研业界其他数据库中 SQL Hint 功能的设计和实现&#xff0c;整体上对 Oracle、Mysql、Postgresql、 Apache Calcite 中的 SQL Hint 的设计和功能都进行了解&#xff0c;这里整理一篇文章来对其进行梳理&#xff0c;一是帮助自己未来回顾&#xff0c;加深自己的思…