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相关推荐

  1. 《30天自制操作系统》从入门到放弃

    前言 以下均是废话,大部分来自摘抄,只是记录本人放弃的过程!!!切记是摘抄!!! 相关资料在:https://download.csdn.net/download/wxkhturfun/2253304 ...

  2. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

    <30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...

  3. 自制操作系统(十) 图像叠加处理

    2016.07.12 参考书籍:<30天自制操作系统>.<自己动手写操作系统> qq:992591601  欢迎交流 图像叠加处理的原理很简单,就是给图像分层,从低下往上面画, ...

  4. 《30天自制操作系统》笔记(04)——显示器256色

    <30天自制操作系统>笔记(04)--显示器256色 进度回顾 从最开始的(01)篇到上一篇为止,已经解决了开发环境问题和OS项目的顶层设计问题. 本篇做一个小练习:设置显卡显示256色. ...

  5. 操作系统源代码_计算机自制操作系统(八):仿生DOS操作系统源代码

    一.真机运行 我们已经完成了仿生DOS操作系统的制作,并在上一章的末尾给大家在虚拟机上做了演示.今天,我们要将该操作系统在真机上启动运行,是不是非常期待自己做出的第一款比较有意义的操作系统? 在&qu ...

  6. 《操作系统真象还原》从零开始自制操作系统 自写源码实现 (fs相关文件)

    文章目录 专栏博客链接 fs相关文件 编写完的dir.c 编写完的dir.h 编写完的file.c 编写完的file.h 编写完的fs.c 编写完的fs.h 编写完的inode.c 编写完的inode ...

  7. 30天自制操作系统——第二十三天窗口操作

    窗口及输入切换 我们先来实现用键盘切换窗口,按下F11键,将最下面的窗口移动到最上面,这里F11按键的编码为0x57. bootpack.c节选: void HariMain(void) {(略)fo ...

  8. RISC V (RV32+RV64) 架构 整体介绍

    文章目录 riscv 市场 芯片介绍 软件介绍 开发板介绍 PC介绍 riscv 架构 编程模型(指令集/寄存器/ABI/SBI) 运行状态 指令集 寄存器 riscv32和riscv64两者的区别 ...

  9. 索骥馆-DIY操作系统之《30天自制操作系统》扫描版[PDF]

    内容简介: <30天自制操作系统>是一本兼具趣味性.实用性与学习性的操作系统图书.作者从计算机的构造.汇编语言.C语言开始解说,让读者在实践中掌握算法.在这本书的指导下,从零编写所有代码, ...

最新文章

  1. (转)生产者/消费者问题的多种Java实现方式 (待整理)
  2. python列表操作程序_Python列表操作,比较常见的10个问题
  3. Mybatis从入门到精通下篇
  4. 机器学习实现线性梯度算实现octave
  5. TB创建公式应用dll失败 请检查用户权限,终极解决方案
  6. javaScript的Math和Date对象
  7. CentOS6.7安装Python3.4
  8. WPF 微信 MVVM 【续】发送部分QQ表情
  9. 2020 华为 一面 二面 面经
  10. [论文写作笔记] C11论文查重原理及降重
  11. Java读取Rinex 2.11格式的观测值o文件
  12. 上海电力大学计算机专业考研好考么,上海电力大学(专业学位)计算机技术考研难吗...
  13. 系统漏洞利用与提权攻击机场景
  14. HITCTF2018-web全题解
  15. css浮动,清除浮动,溢出属性,定位,设置透明度
  16. 彩色图像转灰度图像原理python
  17. 计算机启动一下就停机,电脑启动一下就停了怎么办_电脑启动一下就停了是什么原因-win7之家...
  18. python launcher卸载后蓝屏_大毒瘤!卸载WeGame解决XPS 15蓝屏问题
  19. 文档的相似性可以使用Shingling算法进行比较
  20. win10安装MySQL解压缩版 8.0.15(非转载,较详细)

热门文章

  1. 相约,一朵春天的微笑
  2. 在Linux下制作工资表(转)
  3. 如何减少手机辐射?——七招减少手机对您的危害
  4. 如何使用ArcGIS绘制经纬网
  5. 国内外开源社区资源汇总
  6. Java基础 DAY08
  7. csr sha2生成 linux,Openssl生成csr的解决方案
  8. Qt小程序之自绘震动铃铛提示控件
  9. 中国微型无刷直流电动机市场趋势报告、技术动态创新及市场预测
  10. 运动控制中的速度控制