IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 8.2 自制操作系统: risc-v Machine寄存器说明mstatus和mstatush -> 正文阅读

[嵌入式]8.2 自制操作系统: risc-v Machine寄存器说明mstatus和mstatush

机器模式下的CSRs

寄存器名字

全称

权限

功能

描述

misa

Machine ISA Register misa

WARL read-write

描述支持ISA

mvendorid

Machine Vendor ID Register

32-bit read-only

描述JEDEC制造商ID

marchid

Machine Architecture ID Register

MXLEN-bit read-only

用于描述微架构ID

mipid

Machine Implementation ID Register

处理器实现的唯一编码

mhartid

Hart ID Register

MXLEN-bit read-only register

硬件处理器线程ID

Machine Status Registers (mstatus and mstatush)

mstatues寄存器是一个MAXLEN-bit?读写寄存器。mstatus寄存器用于跟踪和控制当前hart操作的状态。

mstatus各个字段含义

作用:mstatus 寄存器跟踪和控制 hart 的当前操作状态。

在S-level ISA的status寄存器看来mstatus是受限制的。

字段名称

bit

含义

功能

模式

RV

其他

SIE

1

Global interrupt-enable bits

开关全局中断比特位, 可以使用csr指令set/cleared。

当高特权级的中断位被禁止时,低特权级的中断位无论是否开启,都将会被禁止

S-mode

RV32/64

MIE

3

Global interrupt-enable bits

开关全局中断比特位, 可以使用csr指令set/cleared

M

RV32/64

SPIE

5

the interrupt-enable bit

active prior to the trap

在当前trap之前,中断的状态

S

RV32/64

用于中断嵌套

MPIE

7

M

RV32/64

SPP

8

previous privilege mode

之前的特权模式。

xPP字段是WARL字段,只能包含特权模式x和小于x的任何实现的特权模式。如果没有实现特权模式x,则xPP必须是只读0。

S

RV32/64

MPP

[12:11]

M

RV32/64

SXL

[35:34]

控制XLEN的值,

对于RV64系统,如果不支持S模式,则SXL值为0,如果不支持U模式,UXL为0

S

RV64

对于RV32系统,SXL和UXL不存在,但是SXLEN=32和UXLEN=32

UXL

[33:32]

U

RV64

MPRV

17

Modify PRiVilege

1.用来修改有效的特权模式。

2.当MPRV=0, loads和stores行为是正常的,用当前的特权模式来做translation和protection。

3.当PMRV=1, load和store内存地址是被翻译和保护,当前的特权模式被设置到MPP中。

如果 U模式不支持的话,MPRV是只读为0.

4.当使用MRET或SRET指令来改变特权模式时,修改后的模式的权限低于M模式时,MPRV被设置为0

RV32/64

MXR

19

Make eXecutable Readable

1.加载访问虚拟内存的特权

2.当MXR=0时,只能从标记为可读的页面加载( R=1)

3.当MXR=1时,从标记为可读或可执行(R=1或X=1)的页面加载将成功。当基于页的虚拟内存无效时,MXR没有作用.

如果S模式没有实现, MXR为0,并且只读

RV32/64

MXR 和 SUM 机制只影响在页表条目中编码的权限的解释。 特别是,它们对是否由于 PMA 或 PMP 引发访问错误异常没有影响

SUM

18

permit Supervisor User Memory access

1.修改S模式下loads和stores虚拟内存权限

2.当SUM=0,U模式(U=1)下访问S模式下内存页面将发送fault

3.当SUM=1,访问是被允许的

4.当基于虚拟内存不生效时,SUM没有用

5.当不执行在S模式下时,SUM将被忽略。

6.SUM生效条件是MPVR=1且MPP=S。如果S模式不支持或satp.MODE是只读位0,那么SUM也将是只读为0.

RV32/64

MBE

37或5

mstatus寄存器第37bit?

mstaush寄存器第5bit

MBE 控制从 M 模式(假设 mstatus.MPRV=0)进行的非指令取指内存访问是 little-endian (MBE=0) 还是 big-endian (MBE=1)。

RV32/64

控制除指令取指之外的内存访问的字节顺序。 取指令总是小端的。

对于管理器级内存管理数据结构(如页表)的隐式访问,字节顺序总是由SBE控制。 由于SBE的改变会改变实现对这些数据结构的解释,如果任何这样的数据结构在SBE改变时仍在使用,m模式软件必须在SBE改变后执行SFENCE rs1=x0和rs2=x0的VMA指令。??

SBE

36或4

mstatus寄存器第36bit?

mstaush寄存器第4bit

如果不支持s模式,则SBE为只读0。否则,SBE控制从s模式进行的显式加载和存储内存访问是小端(SBE=0)还是大端(SBE=1)。

RV32/64

UBE

6

如果不支持 U-mode,则 UBE 为只读 0。否则,UBE 控制从 U-mode 进行的显式加载和存储内存访问是 little-endian (UBE=0) 还是 big-endian (UBE=1)。

RV32/64

TVM

20

Trap Virtual Memory

1.支持拦截管理器虚拟内存管理操作??

2.当TVM=1,试图读取或写satp CSR或执行SFENCE.VMA或SINVAL.VMA指令在s模式下,将引发非法指令异常

3.当TVM=0,这些操作是允许的

4.当s模式不支持时,TVM是只读0

RV32/64

TW

21

Timeout Wait

1.支持WFI指令

2.当TW=0时,WFI指令在没有被其他原因阻止的情况下,可能会在低特权模式下执行

3.当TW=1时,如果WFI以任何低特权模式执行,并且它没有在特定实现的有限时间内完成,WFI指令会导致一个非法的指令异常。

4.当s模式被实现时,在u模式下执行WFI会导致一个非法的指令异常,除非它在实现特定的,有限制的时间内完成。该规范的未来修订可能会增加一个特性,允许s模式有选择地允许u模式下的WFI。

RV32/64

TSR

22

Trap SRET

1.支持supervisor?异常返回的指令 SRET

2.当TSR=1时,尝试在s模式下执行SRET将引发非法的指令异常

3.当TSR=0时,在s模式下允许此操作。当不支持s模式时,TSR为只读0

S

RV32/64

FS

[14:13]

1.FS域描述浮点数单元状态,包括浮点数寄存器f0-f31和CSRs fcsr,frm和fflags

RV32/64

FS、VS的 WARL域?和XS只读域是用作降低context保存和恢复的成本,通过设置和跟踪当前浮点数单元和别的u模式扩展。

这些域可以快速的决定是否保存或恢复状态。如果保存或恢复是必须的,通常需要额外的指令和CSRs是需要和优化流程

VS

[10:9]

1.VS域描述向量扩展状态,包括向量寄存器v0-v31和CSRs vcsr, vxrm, vxsat, vstart, vl, vtype,?和vlenb

RV32/64

XS

[16:15]

1.XS字段编码其他U模式扩展和相关状态的状态

RV32/64

SD

31或63

1.SD 位是一个只读位,它总结了 FS、VS 或 XS 字段是否表示存在一些需要将扩展用户上下文保存到内存的脏状态。 如果 FS、XS 和 VS 都为只读零,则 SD 也始终为零

RV32/64

MRET和SRET指令分别用作从M-mode和S-mode的trap返回。

当执行xRET指令时,假设xPP保存的值为y,

1.xIE设置到xPIE

2.特权模式改为y

3.xPIE设置为1

4.xPP设置为最小权限的模式(如果实现了U模式,则设置U模式,否则设置为M模式)

5.如果xPP不等于M模式,xRET也要设置MPRV=0

FS[1:0]和VS[1:0] WARL字段和XS[1:0]只读字段的作用:

分别通过设置和跟踪浮点单元和任何其他用户模式扩展的当前状态来降低上下文保存和恢复的成本。

FS:?浮点数单元的编码状态,包括浮点数寄存器f0-f31,和CSRs fcsr/frm/fflags。

VS:?向量扩展的编码状态,包括向量寄存器v0-v31,和CSRs vcsr/vxrm/vxstat/v1/vtype/vlenb。

XS:? 额外u模式扩展和相关状态的扩展。

上下文切换例程可以检查这些字段,以快速确定是否需要状态保存或恢复。如果保存或恢复,通常需要需要额外的指令和CSRs来处理和优化流程。

该设计预计大多数上下文切换不需要在浮点单元或其他扩展中的一个或两个中保存/恢复状态,因此通过 SD 位提供快速检查。

FS/VS/XS字段用相同的状态编码:

SD位是一个只读位,它总结FS、VS或XS字段是否表明存在一些脏状态,需要将扩展的用户上下文保存到内存中。如果FS, XS和VS都是只读零,那么SD也总是零。

在上下文保存期间,负责的特权代码只需要在其状态为脏时写出相应的状态,然后可以将扩展的状态重置为clean。 在上下文恢复期间,如果状态为 Clean(在恢复时绝不应该是 Dirty),则只需要从内存中加载上下文。 如果状态为 Initial,则必须在上下文恢复时将上下文设置为初始常量值以避免安全漏洞,但这可以在不访问内存的情况下完成。 例如,浮点寄存器可以全部初始化为立即数 0.

FS和XS字段在保存上下文之前由特权代码读取。FS字段是在恢复用户上下文时由特权代码直接设置的,而XS字段是通过写入单个扩展的状态寄存器来间接设置的。无论特权模式如何,状态字段也将在执行指令期间更新。

下图显示了 FS、VS 或 XS 状态位的所有可能状态转换。 请注意,标准浮点和向量扩展不支持用户模式取消配置或禁用/启用指令。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-11 22:23:57  更:2022-03-11 22:24:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:23:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码