12. 自制操作系统: risc-v ACLINT
ACLINT全称: Advanced Core Local Interruptor
1.介绍
这个RISC-V ACLINT规范定义了一组内存映射设备,这些设备在一个多HART RISC-V平台上为每个HART提供处理器间中断(IPI)和定时器功能。这些hart级的IPI和定时器功能是在多hart RISC-V平台上运行的操作系统、引导加载程序和固件所必需的。
SiFive核心本地中断器(CLINT)在RISC-V世界中被广泛采用,以提供机器级IPI和定时器功能。不幸的是,SiFive CLINT对于IPI和定时器功能都有一个统一的寄存器映射,并且它没有提供supervisor-level的IPI功能。
通过为IPI和定时器功能定义单独的内存映射设备,RISC-V ACLINT规范采用了一种更模块化的方法。当平台有替代机制时,这种模块化允许RISC-V平台省略一些RISC-V ACLINT设备。除了模块化,RISC-V ACLINT规范还为管理级api定义了一个专用的内存映射设备。下面的表1显示了由RISC-V ACLINT规范定义的设备列表。
1.1 与SiFive CLINT向后兼容
RISC-V ACLINT规范被定义为向后兼容SiFive CLINT规范。MTIMER和MSWI设备的寄存器定义和寄存器偏移量与SiFive CLINT规范定义的定时器和IPI寄存器兼容。RISC-V平台上的SiFive CLINT设备在逻辑上可以被看作是一个MSWI设备和一个MTIMER设备,它们并排放置在内存地址空间中,如下表2所示
2.MTIMER
MTIMER全称Machine-level Timer Device
MTIMER设备为RISC-V平台上的一组hart提供机器级定时器功能。它有一个单一的固定频率单调时间计数器(MTIME)寄存器和一个时间比较寄存器(MTIMECMP)为每个HART连接到MTIMER设备。一个没有连接到HART的MTIMER设备应该只有MTIME寄存器,没有mtimeecmp寄存器。
在具有多个MTIMER设备的RISC-V平台上:
每个 MTIMER 设备为不同(或不相交)的 HARTs提供机器级计时器功能。 MTIMER 设备为与其关联的每个 HART 分配一个从零开始的 HART 索引。 MTIMER 设备分配给 HART 的 HART 索引可能与 RISC-V 特权架构分配给 HART 的唯一 HART identifier(hart ID)有关系,也可能没有任何关系
两个或多个MTIMER设备可以共享相同的物理MTIME寄存器,同时拥有各自的mtimeecmp寄存器
MTIMER设备的MTIMECMP寄存器只能与同一MTIMER设备的MTIME寄存器进行比较,以产生machine-level定时器中断
单个MTIMER设备支持的HARTs的最大数量是4095,这相当于MTIMECMP寄存器的最大数量。
2.1 Register Map
一个MTIMER设备有两个独立的基地址:MTIME寄存器的基地址和MTIMECMP寄存器的基地址。单个 MTIMER 设备的独立基地址允许多个 MTIMER 设备共享同一个物理 MTIME 寄存器。
下面的表 3 显示了 MTIME 寄存器的映射,而下面的表 4 显示了 MTIMECMP 寄存器相对于单独基地址的映射
2.2. MTIME Register (Offset: 0x00000000)
MTIME寄存器是一个64位读写寄存器,包含基于固定参考频率计算的周期数。
当MTIMER设备复位时,MTIME寄存器将被清除为零。
2.3. MTIMECMP Registers (Offsets: 0x00000000 - 0x00007FF0)
MTIMECMP 寄存器是 per-HART 的 64 位读写寄存器。 它包含 MTIME 寄存器值,其将为相应的 HART 触发机器级定时器中断。
当MTIME大于或等于相应寄存器MTIMECMP的值时,HART的机器级定时器中断就挂起,当MTIME小于相应的MTIMECMP寄存器值时,HART被清除。机器级定时器中断反映在mip CSR的MTIP位上。
当MTIMER设备复位时,MTIMECMP寄存器处于未知状态。
2.4. Synchronizing Multiple MTIME Registers
RISC-V平台可以将多个hart分组到分层拓扑组(例如clusters、nodes或sockets)中,其中每个拓扑组都有自己的MTIMER设备。此外,此类 RISC-V 平台还可以允许在运行时对拓扑组(包括 MTIMER 设备)进行clock-gating或powering off。
在具有多个 MTIMER 设备驻留在同一裸片上的 RISC-V 平台上,每个设备必须满足所有 MTIME 寄存器相互关联的 RISC-V 架构要求,并且所有 per-HART time CSR 彼此相关,都在一个 MTIME 滴答周期内同步。 例如,如果 MTIME 滴答周期为 10ns,则 MTIME 寄存器及其相关的time CSR 应分别同步在 10ns 以内。
在不同裸片上具有多个 MTIMER 设备的 RISC-V 平台上,不同裸片上的 MTIME 寄存器(及其关联的time CSR)可能仅在彼此之间大于 MTIME 滴答周期的指定间隔内同步。 平台可以定义最大允许间隔。
为了满足上述MTIME同步要求:
所有MTIME寄存器应该具有相同的输入时钟,以避免在不同的MTIME寄存器(及其相关的time CSRs)之间的运行时漂移。
当系统复位时,硬件必须初始化和同步所有的MTIME寄存器为零。
一个MTIMER设备由于电源管理操作而停止和重新启动时,软件应该将这个MTIME寄存器与所有其他MTIME寄存器重新同步。
当软件更新一个、多个或所有 MTIME 寄存器时,它必须保持前面的同步要求(通过测量并考虑对不同MTIME寄存器执行读写的不同延迟)。
例如,软件可以使用以下 RISC-V 64 位汇编序列来同步一个 MTIME 寄存器与另一个 MTIME 寄存器。
清单1-在RISC-V 64位平台上同步MTIME寄存器
/*
* unsigned long aclint_mtime_sync(unsigned long target_mtime_address,
* unsigned long reference_mtime_address)
*/
.globl aclint_mtime_sync
aclint_mtime_sync:/*A. 读取target MTIME寄存器的值到T0寄存器*/ld t0, (a0)fence i, i/* 读取reference MTIME寄存器到T1寄存器*/ld t1, (a1)fence i, i/* 读取target MTIME寄存器到T2寄存器*/ld t2, (a0)fence i, i/** B.计算target MTIME 调整后存入T3寄存器* T3 = T1 - ((T0 + T2) / 2)*/srli t0, t0, 1srli t2, t2, 1add t3, t0, t2sub t3, t1, t3/* * C.t4 = t3+ t4* D.更新 target MTIME 寄存器*/ld t4, (a0)add t4, t4, t3sd t4, (a0)/* 返回MTIME调整后的值*/add a0, t3, zeroret
注意:在某些 RISC-V 平台上,MTIME 同步序列(即上面的 aclint_mtime_sync() 函数)将需要重复几次,直到target MTIME 寄存器和reference MTIME 寄存器之间的增量为零(或非常接近于零)。
为何不直接用ref MTIME寄存器的值赋值给target MTIME?
3. MSWI
全称: Machine-level Software Interrupt Device
MSWI 设备为 RISC-V 平台上的一组 HART 提供机器级 IPI 功能。 它为连接到 MSWI 设备的每个 HART 提供一个 IPI 寄存器 (MSIP)。
在具有多个 MSWI 设备的 RISC-V 平台上,每个 MSWI 设备为不同(或不相交)的 HARTs提供机器级 IPI 功能。 MSWI 设备为与其关联的每个 HART 分配一个从零开始的 HART 索引。 MSWI 设备分配给 HART 的 HART 索引可能与 RISC-V 特权架构分配给 HART 的唯一 HART 标识符(hart ID)有关系,也可能没有关系。
单个MSWI设备支持的最大HARTs数量为4095,这相当于MSIP寄存器的最大数量。
3.1 Register Map
3.2. MSIP Registers (Offsets: 0x00000000 - 0x00003FF8)
每个 MSIP 寄存器都是一个 32 位宽的 WARL 寄存器,其中高 31 位被连线为零。 最低有效位反映在 mip CSR 的 MSIP 中。 通过分别向相应的 MSIP 寄存器写入 1 或 0 来等待或清除 HART 的机器级软件中断。
在MSWI设备复位时,每个MSIP寄存器被清除为零。
4.SSWI
全称: Supervisor-level Software Interrupt Device
SSWI 设备为 RISC-V 平台上的一组 HARTs 提供supervisor-level IPI 功能。 它提供了一个寄存器来为连接到 SSWI 设备的每个 HART 设置一个 IPI (SETSSIP)。
在具有多个 SSWI 设备的 RISC-V 平台上,每个 SSWI 设备为不同(或不相交)的 HART 集提供管理级 IPI 功能。 SSWI 设备为与其关联的per-HART 分配一个从零开始的 HART 索引。 SSWI 设备分配给 HART 的 HART 索引可能与 RISC-V 特权架构分配给 HART 的唯一 HART 标识符(hart ID)有关系,也可能没有任何关系。
单个ssi设备支持的最大HARTs数量为4095,这相当于SETSSIP寄存器的最大数量。
4.1. Register Map
4.2. SETSSIP Registers (Offsets: 0x00000000 - 0x00003FF8)
每个 SETSSIP 寄存器都是一个 32 位宽的 WARL 寄存器,其中高 31 位被连线为零。 SETSSIP 寄存器的最低有效位始终读取 0。将 0 写入SETSSIP 寄存器不起作用,而将 1 写入最低有效位会向相应的 HART 发送edge-sensitive中断信号,从而导致 HART 在 mip CSR 中设置 SSIP。 对 SETSSIP 寄存器的写入保证会体现在相应 HART 的 SSIP 中,但不一定立即体现。
注意: 在RISC-V特权架构中,SSIP定义在mip和sip CSRs中作为可写的比特位。因此M-mode和S-mode软件能直接清除SSIP位的。
12. 自制操作系统: risc-v ACLINT相关推荐
- 《30天自制操作系统》从入门到放弃
前言 以下均是废话,大部分来自摘抄,只是记录本人放弃的过程!!!切记是摘抄!!! 相关资料在:https://download.csdn.net/download/wxkhturfun/2253304 ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!
<30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...
- 自制操作系统(十) 图像叠加处理
2016.07.12 参考书籍:<30天自制操作系统>.<自己动手写操作系统> qq:992591601 欢迎交流 图像叠加处理的原理很简单,就是给图像分层,从低下往上面画, ...
- 《30天自制操作系统》笔记(04)——显示器256色
<30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. ...
- 操作系统源代码_计算机自制操作系统(八):仿生DOS操作系统源代码
一.真机运行 我们已经完成了仿生DOS操作系统的制作,并在上一章的末尾给大家在虚拟机上做了演示.今天,我们要将该操作系统在真机上启动运行,是不是非常期待自己做出的第一款比较有意义的操作系统? 在&qu ...
- 《操作系统真象还原》从零开始自制操作系统 自写源码实现 (fs相关文件)
文章目录 专栏博客链接 fs相关文件 编写完的dir.c 编写完的dir.h 编写完的file.c 编写完的file.h 编写完的fs.c 编写完的fs.h 编写完的inode.c 编写完的inode ...
- 30天自制操作系统——第二十三天窗口操作
窗口及输入切换 我们先来实现用键盘切换窗口,按下F11键,将最下面的窗口移动到最上面,这里F11按键的编码为0x57. bootpack.c节选: void HariMain(void) {(略)fo ...
- RISC V (RV32+RV64) 架构 整体介绍
文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...
- 索骥馆-DIY操作系统之《30天自制操作系统》扫描版[PDF]
内容简介: <30天自制操作系统>是一本兼具趣味性.实用性与学习性的操作系统图书.作者从计算机的构造.汇编语言.C语言开始解说,让读者在实践中掌握算法.在这本书的指导下,从零编写所有代码, ...
最新文章
- (转)生产者/消费者问题的多种Java实现方式 (待整理)
- python列表操作程序_Python列表操作,比较常见的10个问题
- Mybatis从入门到精通下篇
- 机器学习实现线性梯度算实现octave
- TB创建公式应用dll失败 请检查用户权限,终极解决方案
- javaScript的Math和Date对象
- CentOS6.7安装Python3.4
- WPF 微信 MVVM 【续】发送部分QQ表情
- 2020 华为 一面 二面 面经
- [论文写作笔记] C11论文查重原理及降重
- Java读取Rinex 2.11格式的观测值o文件
- 上海电力大学计算机专业考研好考么,上海电力大学(专业学位)计算机技术考研难吗...
- 系统漏洞利用与提权攻击机场景
- HITCTF2018-web全题解
- css浮动,清除浮动,溢出属性,定位,设置透明度
- 彩色图像转灰度图像原理python
- 计算机启动一下就停机,电脑启动一下就停了怎么办_电脑启动一下就停了是什么原因-win7之家...
- python launcher卸载后蓝屏_大毒瘤!卸载WeGame解决XPS 15蓝屏问题
- 文档的相似性可以使用Shingling算法进行比较
- win10安装MySQL解压缩版 8.0.15(非转载,较详细)