【学一点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 设备
| 名称 | 特权级 | 功能 |
|---|---|---|
| MTIMER | Machine | 固定频率计数器和定时器事件 |
| MSWI | Machine | 处理器间(或软件)中断 |
| SSWI | Supervisor | 处理器间(或软件)中断 |
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_3fff | MSWI | 机器级处理器间(或软件)中断 |
| 0x0000_4000 - 0x0000_bfff | MTIMER | 机器级固定频率计数器和定时器事件 |
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 寄存器映射
| Offset | Width | Attr | Name | Description |
|---|---|---|---|---|
| 0x0000_0000 | 8B | RW | MTIME | Machine-level time counter |
Table 4. ACLINT MTIMER Compare 寄存器映射
| Offset | Width | Attr | Name | Description |
|---|---|---|---|---|
| 0x0000_0000 | 8B | RW | MTIMECMP0 | HART index 0 machine-level time compare |
| 0x0000_0008 | 8B | RW | MTIMECMP1 | HART index 1 machine-level time compare |
| … | … | … | … | … |
| 0x0000_7FF0 | 8B | RW | MTIMECMP4094 | HART 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 设备寄存器映射
| Offset | Width | Attr | Name | Description |
|---|---|---|---|---|
| 0x0000_0000 | 4B | RW | MSIP0 | HART index 0 machine-level IPI register |
| 0x0000_0004 | 4B | RW | MSIP1 | HART index 1 machine-level IPI register |
| … | … | … | … | … |
| 0x0000_3FFC | 4B | RESERVED | Reserved 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 寄存器映射
| Offset | Width | Attr | Name | Description |
|---|---|---|---|---|
| 0x0000_0000 | 4B | RW | SETSSIP0 | HART index 0 set supervisor-level IPI register |
| 0x0000_0004 | 4B | RW | SETSSIP1 | HART index 1 set supervisor-level IPI register |
| … | … | … | … | … |
| 0x0000_3FFC | 4B | RESERVED | Reserved 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 特权架构将 mip 和 sip CSR 中的 SSIP 定义为可写位,因此 M 模式或 S 模式软件可以直接清除 SSIP。
相关文章:
【学一点RISC-V】ACLINT(高级核心本地中断控制器)文档
RISCV架构 ACLINT文档 ACLINT原文档:https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc 在这里进行了翻译以及校对,仅供参考,不正确的地方欢迎指出 1、介绍 【此 RISC-V ACLINT 规范定义了一组内存映射设备,这…...
grafana table合并查询
注:本文基于Grafana v9.2.8编写 1 问题 默认情况下table展示的是一个查询返回的多个field,但是我想要的数据在不同的metric上,比如我需要显示某个pod的读写IO,但是读和写这两个指标存在于两个不同的metirc,需要分别查…...
编程笔记 html5cssjs 007 文章排版 颜真卿《述张长史笔法十二意》
编程笔记 html5&css&js 007 文章排版 颜真卿《述张长史笔法十二意》 一、代码二、解释 这段代码定义了一个古文展示页面的结构和样式,同时本文内容也是书法爱好者的珍贵资料。 一、代码 <!DOCTYPE html> <html lang"zh-CN"> <hea…...
Yolov8模型用torch_pruning剪枝
目录 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀 原理 遍历所有分组 高级剪枝器 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀…...
C++字符串操作【超详细】
零.前言 本文将重点围绕C的字符串来展开描述。 其中,对于C/C中字符串的一些区别也做出了回答,并对于C的(string库)进行了讲解,最后我们给出字符串的不同表达形式。 开发环境: VS2022 一.字符串常量跟字…...
Ps:画笔工具
画笔工具 Brush Tool是 Photoshop 中最常用的工具,可广泛地用于绘画与修饰工作之中。 快捷键:B ◆ ◆ ◆ 常用操作方法与技巧 1、熟练掌握画笔工具的操作对于使用其他工具也非常有益,因为 Photoshop 中许多与笔刷相关的工具有类似的选项和操…...
【鸿蒙 HarmonyOS 4.0】弹性布局(Flex)
一、介绍 弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为交叉轴尺寸…...
Java 客户端向服务端上传文件(TCP通信)
一、实验内容 编写一个客户端向服务端上传文件的程序,要求使用TCP通信的的知识,完成将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文件名,即IP(count&#…...
问题:前端获取long型数值精度丢失,后面几位都为0
文章目录 问题分析解决 问题 通过接口获取到的数据和 Postman 获取到的数据不一样,仔细看 data 的第17位之后 分析 该字段类型是long类型问题:前端接收到数据后,发现精度丢失,当返回的结果超过17位的时候,后面的全…...
Day26:安全开发-PHP应用模版引用Smarty渲染MVC模型数据联动RCE安全
目录 新闻列表 自写模版引用 Smarty模版引用 代码RCE安全测试 思维导图 PHP知识点: 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等 技术:输…...
LVS集群(Linux Virtual server)介绍----及LVS的NAT模式部署(一)
群集的含义 ●Cluster,集群、群集由多台主机构成,但对外只表现为一个整体,只提供访问入口(域名或IP地址),相当于一台大型计算机 问题: 互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠…...
海外媒体宣发套餐如何利用3种方式洞察市场-华媒舍
在当今数字化时代,媒体宣发成为了企业推广产品和品牌的重要手段之一。其中,7FT媒体宣发套餐是一种常用而有效的宣传方式。本文将介绍这种媒体宣发套餐,以及如何利用它来洞察市场。 一、关键概念 在深入讨论7FT媒体宣发套餐之前,让…...
开发知识点-Apache Struts2框架
Apache Struts2 介绍S2-001S2CVE-2023-22530 介绍 Apache Struts2是一个基于MVC(模型-视图-控制器)设计模式的Web应用程序框架,它是Apache旗下的一个开源项目,并且是Struts1的下一代产品。Struts2是在Struts1和WebWork的技术基础…...
【Spring高级】第3讲 Bean的生命周期
目录 基本的生命周期后处理器总结 基本的生命周期 为了演示生命周期的过程,我们直接使用 SpringApplication.run()方法,他会直接诶返回一个容器对象。 import org.springframework.boot.SpringApplication; import org.springframework.context.Config…...
【C语言】linux内核tcp_write_xmit和tcp_write_queue_purge
tcp_write_xmit 一、讲解 这个函数 tcp_write_xmit 是Linux内核TCP协议栈中的一部分,其基本作用是发送数据包到网络。这个函数会根据不同情况推进发送队列的头部,确保只要远程窗口有空间,就可以发送数据。 下面是对该函数的一些主要逻辑的中…...
opencv实现视频人脸识别
一. 实现指定图像的人脸识别 注意: 以下实例参考《OpenCV轻松入门面向Python》李立宗著,使用python语言,编辑器为PyCharm,且都运行成功。 1.dface3.jpg图片文件和当前代码放在同一级目录下。 2.级联分类器文件和当前代码文件放在…...
【今日面经】24/3/9 广州Java某小厂电话面经
面经来源:https://www.nowcoder.com/?type818_1 目录 1、 和equals()有什么区别?2、String变量直接赋值和构造函数赋值比较相等吗?3、String一些方法?4、抽象类和接口有什么区别?5、Java容器有哪些?6、Lis…...
日期问题---算法精讲
前言 今天讲讲日期问题,所谓日期问题,在蓝桥杯中出现众多,但是解法比较固定。 一般有判断日期合法性,判断是否闰年,判断日期的特殊形式(回文或abababab型等) 目录 例题 题2 题三 总结 …...
倒计时35天
dp预备(来源:b站acm刘春英老师) 1. 2. 3. 4. 5. 6. 7....
JAVA后端开发面试基础知识(七)——多线程
1. 线程池原理 优点 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线…...
别再死磕Vivado 2016.4了!手把手教你用Vivado 2019.2搞定MIPI CSI-2摄像头数据采集(附IMX334配置)
从Vivado 2016.4到2019.2:MIPI CSI-2摄像头数据采集的全面升级指南 在嵌入式视觉系统开发中,MIPI CSI-2接口因其高带宽、低功耗的特性已成为摄像头模组的首选接口标准。然而,当开发者使用Xilinx FPGA平台进行MIPI CSI-2接口开发时,…...
Python FastAPI 高并发性能测试
Python FastAPI 高并发性能测试:解锁现代Web应用的潜力 在当今高并发的互联网应用中,性能是开发者最关注的指标之一。Python FastAPI凭借其异步支持和接近原生性能的表现,成为构建高性能API的热门选择。但如何验证其实际并发能力?…...
烽火HG5143D光猫破解实战:用Fiddler抓包获取超级密码,开启Telnet保姆级教程
烽火HG5143D光猫深度配置指南:安全获取管理权限与网络优化方案 家里新装了电信宽带,配套的烽火HG5143D光猫却锁死了路由模式,想接自己的路由器拨号都成问题?这种情况在电信家庭网关用户中并不少见。作为一款采用Linux系统的智能光…...
Hailo8 Dataflow Compiler 模型转换指南--以 ONNX 模型为例
目录 一、环境安装 1.1 系统要求 1.2 系统包安装 二、模型转换 2.1 ONNX 转 HEF 文件 2.1.1 实例化 ClientRunner 解析ONNX模型 2.2.2 加载/准备量化校准数据集 2.2.3 参数配置并执行量化操作 2.2.4 保存 HAR 文件并编译生成 HEF 板端文件 2.2 模型可视化 一、环境安…...
从RuntimeError到detach():理解PyTorch计算图与Tensor的梯度分离
1. 为什么会出现RuntimeError? 很多PyTorch新手在训练完模型后,想要把Tensor转换成NumPy数组进行可视化或者保存数据时,经常会遇到这个报错:"RuntimeError: Cant call numpy() on Tensor that requires grad. Use tensor.det…...
别再每次新建项目都配一遍了!用VS2022属性表一劳永逸搞定OpenCV环境
VS2022属性表实战:打造可复用的OpenCV开发环境模板 每次新建项目都要重新配置OpenCV环境?这简直是开发者的噩梦。想象一下,你正在为一个紧急项目赶工,却被重复的环境配置拖慢了进度——这种低效操作早该被淘汰了。本文将带你用VS…...
如何快速上手tts-vue:微软语音合成工具的完整使用指南
如何快速上手tts-vue:微软语音合成工具的完整使用指南 【免费下载链接】tts-vue 🎤 微软语音合成工具,使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 在数字化时代,…...
基于电机节能控制中滑模控制算法研究
基于电机节能控制中滑模控制算法研究 摘要 随着全球能源危机日益严峻和“双碳”目标的深入推进,电机系统作为工业领域最大的用电终端,其节能降耗已成为我国实现节能减排战略目标的关键环节。永磁同步电机因具有高效率、高功率密度和优异的控制性能,在工业自动化、电动汽车…...
GitHub汉化插件终极指南:3分钟实现全中文界面,告别语言障碍
GitHub汉化插件终极指南:3分钟实现全中文界面,告别语言障碍 【免费下载链接】github-hans [废弃] {官方中文马上就来了} GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/…...
Windows 10安卓子系统完整安装教程:无需升级Win11的终极解决方案
Windows 10安卓子系统完整安装教程:无需升级Win11的终极解决方案 【免费下载链接】WSA-Windows-10 This is a backport of Windows Subsystem for Android to Windows 10. 项目地址: https://gitcode.com/gh_mirrors/ws/WSA-Windows-10 还在羡慕Windows 11用…...
