or1200处理器中的特殊寄存器

2023-05-16

以下内容摘自《步步惊芯——软核处理器内部设计分析》一书


      OR1200中的寄存器分为两类:通用寄存器r0-r31、特殊寄存器。特殊寄存器又分为11组,在本书第1.3.3节简单地列出了所有的特殊寄存器组。从列表中可以发现除第0组外的其余特殊寄存器组都是与具体的硬件模块相关联的,比如:第2组特殊寄存器与指令MMU有关、第4组特殊寄存器与指令缓存ICache有关、第9组特殊寄存器与中断控制单元PIC有关。

      OR1200有两种工作模式:用户模式、特权模式,在这两种模式下对特殊寄存器的访问权限不同,第0组特殊寄存器中的SR寄存器的SM位(即SR[SM])决定了OR1200当前处于何种模式,其值为1表示OR1200处于特权模式,其值为0表示OR1200处于用户模式。表5.1列出了每一组特殊寄存器中具体的寄存器,以及在两种模式下的访问权限。




      有如下几点说明:

      (1)其中的读写权限是OR1200手册中描述的,也是OpenRISC 1000架构所设计的,但在OR1200的实现中没有按照设计实现,比如在表5.1中有的特殊寄存器在用户模式下是不能读取的,在OR1200中并没有考虑到这一点,所有的特殊寄存器都可以在用户模式下读取。我们在分析SPRS模块的时候会发现这一点。

      (2)在用户模式下,对TTCR的操作权限是“R*”,原本表示当SR[SUMRA]为1时,用户模式才可以读取TTCR,这一点在OR1200中也没有实现,用户模式可以读取TTCR的值,而不用考虑SR[SUMRA]的值。

      (3)对比表1.2可知与性能计数单元有关的第7组特殊寄存器在OR1200中没有实现,所以OR1200中的特殊寄存器组只有10组。

      (4)所有的特殊寄存器都是可寻址的,其地址是16位,高5位存放的是组号,低11位存放的是特殊寄存器在组中的索引。比如:TTCR对应的地址是(0xA<<11)+0x1,即0x5001。


第0组特殊寄存器


      除第0组特殊寄存器外的其余特殊寄存器都与特定硬件模块有关,本书在分析具体硬件模块的时候再探讨该模块内部是如何响应特殊寄存器访问类指令。本章将只介绍第0组特殊寄存器,第0组特殊寄存器一共有12个,此外NPC、PPC、通用寄存器r0-r31也可以映射到第0组特殊寄存器的地址空间,从而可以使用特殊寄存器访问类指令访问NPC、PPC、通用寄存器。本小节给出第0组特殊寄存器中VR、UPR、NPC、SR、PPC、EPCR0、EEAR0、ESR0的内容及功能描述。


1、VR

      Version Register(VR)是一个32位只读寄存器,其中存放了处理器的版本信息。其格式如表5.2所示。


各标志位含义如下:

  •   Revision:处理器的修订版本号
  •   CFG:没有作用,默认为0
  •   VER:处理器的版本,对OR1200处理器而言,固定为0x12

2、UPR

       UnitPresent Register(UPR)是一个32位只读寄存器,其中的标志位表示当前处理器具有的功能单元信息,其格式如表5.3所示。



各标志位含义如下:

  •   UP:表示UPR寄存器是否存在,为1表示存在,为0表示不存在
  •   DCP:表示数据缓存是否存在,为1表示存在,为0表示不存在
  •   ICP:表示指令缓存是否存在,为1表示存在,为0表示不存在
  •   DMP:表示数据MMU是否存在,为1表示存在,为0表示不存在
  •   IMP:表示指令MMU是否存在,为1表示存在,为0表示不存在
  •   MP:表示MAC单元是否存在,为1表示存在,为0表示不存在
  •   DUP:表示调试单元是否存在,为1表示存在,为0表示不存在
  •   PCUP:表示性能计数单元是否存在,为1表示存在,为0表示不存在
  •   PMP:表示电源管理单元是否存在,为1表示存在,为0表示不存在
  •   PICP:表示可编程中断控制单元是否存在,为1表示存在,为0表示不存在
  •   TTP:表示计时器单元是否存在,为1表示存在,为0表示不存在
  •   FPP:表示浮点处理单元是否存在,为1表示存在,为0表示不存在
  •   CUP:表示用户自定义单元存在与否


3、NPC

      NPC是一个32位只读寄存器,存储的是当前处于流水线执行阶段的指令地址,如果当前处于流水线执行阶段的指令是填充指令(如:0x1461000、0x1441000),那么NPC存储的将是当前处于流水线译码阶段的指令地址。


4、SR

      监管模式寄存器SR在本书之前已多次提及,读者朋友应该还记得算术处理类指令中有些指令(如:l.add)就会在执行过程中改写SR的CY、OV、F标志位。用户模式只能读SR,特权模式则可以读、修改SR寄存器。其格式如表5.4所示。



各标志位含义如下:

  •   SM:表示是否处于特权模式,为1表示处于特权模式,为0表示处于用户模式,复位的时候OR1200处于特权模式
  •   TEE:计时器中断使能标志位,为1表示允许计时器中断,为0表示不允许计时器中断
  •   IEE:外部中断使能标志位,为1表示允许外部中断,为0表示不允许外部中断
  •   DCE:数据缓存(DCache)使能标志位,为1表示使能数据缓存,为0表示禁止数据缓存
  •   ICE:指令缓存(ICache)使能标志位,为1表示使能指令缓存,为0表示禁止指令缓存
  •   DME:数据MMU(DMMU)使能标志位,为1表示使能DMMU,为0表示禁止DMMU
  •   IME:指令MMU(IMMU)使能标志位,为1表示使能IMMU,为0表示禁止IMMU
  •   LEE:小端模式(Little-Endian)使能标志位,为1表示使用小端模式,为0表示使用大端模式
  •   CE:CID(Context ID)有效标志位,为1表示CID有效,处理器使用影子寄存器组,为0表示CID无效,处理器不使用影子寄存器组
  •   F:标记,一般通过上一章介绍的比较指令l.sfxx设置F的值
  •   CY:进位标记,为1表示最后一次算术运算产生进位,为0表示最后一次算术运算没有产生进位
  •   OV:溢出标记,为1表示最后一次算术运算产生溢出,为0表示最后一次算术运算没有产生溢出
  •   OVE:溢出异常使能标志位,为1表示溢出会引起异常,为0表示溢出不会引起异常
  •   DSX:引起异常的指令或者异常发生时正在执行的指令是否位于延迟槽中,为1表示该指令位于延迟槽中,为0表示该指令不在延迟槽中
  •   EPH:异常处理例程地址选择标志位,为1表示异常处理例程的地址位于内存0xF0000000开始的空间,为0表示异常处理例程的地址位于内存0x0开始的空间
  •   FO:该位固定为1
  •   SUMRA:为1表示某些特殊寄存器可以在用户模式下读取,为0表示所有的特殊寄存器都不可以在用户模式下读取
  •   CID:上下文ID(Context ID),取指范围是0-15,代表的是当前处理器的上下文。OpenRISC架构设计中允许存在多组通用寄存器,也就是实现影子寄存器组,这样当异常发生时,可以迅速切换到另一组通用寄存器,而不用花费时间保存当前的通用寄存器到堆栈,异常处理完毕后再切换回当前的通用寄存器,从而实现对异常的快速响应,CID代表当前使用的是哪一个通用寄存器组。OR1200没有实现影子寄存器组,所以CID没有意义


5、PPC

      PPC(Previous Program Counter)是一个32位只读寄存器,保存上一条执行完毕的指令地址。

6、EPCR0

      EPCR0(Exception Program Counter Register)是一个32位寄存器,在特权模式下可读可写。当异常发生时,依据不同的异常类型,EPCR0会保存不同的数据,可能是引起异常的指令的地址,也可能是引起异常的指令的下一条指令地址。具体情况在分析异常处理类指令时会介绍。

7、EEAR0

      EEAR0(Exception Effective AddressRegister)是一个32位寄存器,在特权模式下可读可写。当异常发生时,EEAR0保存引起异常的指令产生的有效地址EA(Effective Address)。在OR1200中存在有效地址、物理地址PA(Physical Address),当没有MMU时,有效地址等于物理地址,当有MMU时,需要MMU将CPU输出的有效地址转为物理地址,然后访问该物理地址。

8、ESR0

      ESR0(Exception SR)是一个32位寄存器,在特权模式下可读可写。当异常发生时,会将当前SR寄存器的值保存到ESR0中。






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

or1200处理器中的特殊寄存器 的相关文章

  • 在Ubuntu 18.04上安装Apollo 6.0

    文章目录 1 前期准备1 1 安装Ubuntu1 2 安装NVIDIA GPU驱动1 3 安装Docker Engine1 4 安装NVIDIA Container Toolkit 2 下载Apollo源文件3 启动Docker容器4 进入
  • R2LIVE安装与测试

    文章目录 1 R2LIVE2 安装依赖2 1 Ubuntu和ROS2 2 Ceres Solver2 3 livox ros driver 3 编译R2LIVE4 运行示例 1 R2LIVE R2LIVE 是一个强大的 实时的 紧密耦合的多
  • 图像标注工具labelme在WIndows系统上的安装和使用

    1 前言 labelme可对图像进行标注 xff0c 包括多边形 xff0c 矩形 xff0c 线 xff0c 点和图像级标注 它是用Python编写的 xff0c 并使用Qt作为其图形界面 详细内容见 xff1a https github
  • Windows环境使用和编译CMake记录

    以下为两种使用方式 xff0c 第一种较为简单 xff0c 第二种需提前安装vs软件 1 二进制方式安装 下载win平台的安装包 xff0c 安装解压后将bin目录添加到环境变量即可 打开命令窗口 xff0c 查看当前版本 百度云下载链接
  • 激光雷达和相机的联合标定(Camera-LiDAR Calibration)之Autoware

    1 前言 单一传感器不可避免的存在局限性 xff0c 为了提高系统的稳健性 xff0c 多采取多传感器融合的方案 xff0c 融合又包含不同传感器的时间同步和空间同步 这里要讲的激光雷达和相机的联合标定就属于空间同步范畴 另外 xff0c
  • 如何使用Keras fit和fit_generator(动手教程)

    写在前面 被Adrian Rosebrock圈粉后 xff0c 就一直期待他的更新 xff0c 作者每周一更新 xff0c 考虑到时差问题 xff08 作者在美国 xff09 xff0c 一般北京时间周二才能看到 作者根据读者留言中的问题写
  • CMake 的常用命令

    目录 0 CMake常用的命令或函数 xff1a 1 定义项目 project 2 多个目录 add subdirectory 3 常用命令 add executable add library 4 常用命令 改变最终目标文件输出位置 5
  • Libcurl的编译_HTTP/HTTPS客户端源码示例

    HTTP HTTPS客户端源码示例 环境 zlib 1 2 8 openssl 1 0 1g curl 7 36 Author Kagula LastUpdateDate 2016 05 09 阅读前提 xff1a CMake工具的基本使用
  • CNN卷积神经网络原理详解(上)

    CNN卷积神经网络原理详解 xff08 上 xff09 前言卷积神经网络的生物背景我们要让计算机做什么 xff1f 卷积网络第一层全连接层训练 前言 卷积网络 xff08 convolutional network 也叫作卷积神经网络 xf
  • 啥也不会照样看懂交叉熵损失函数

    啥也不会照样看懂交叉熵损失函数 什么是损失函数损失函数的作用有哪些损失函数交叉熵 xff08 Cross Entroy 损失函数 什么是损失函数 损失函数 loss function 是用来估量模型的预测值与真实值的不一致程度 xff0c
  • 可变形卷积从概念到实现过程

    可变形卷积从概念到实现过程 什么是可变形卷积 xff1f 为什么要可变形卷积 xff1f 可变形卷积结构形式 xff1f 可变形卷积的学习过程 xff1f 可变形卷积如何实现 xff1f 上期回顾 卷积神经网络进阶用法 残差网络如何解决梯度
  • 导航定位系统的原理解析(一个小白写给另一个小白)

    导航定位系统的原理解析 xff08 写给小白 xff09 前言 三星 定位基本原理 xff08 导航定位的原理 xff09 传输误差后记 前言 无人驾驶是这几年大火的一个研究方向 xff0c 研究无人驾驶需要了解的知识非常多 xff0c 但
  • 一张图详细说明自动驾驶车辆如何搭建硬件系统

    一张图详细说明自动驾驶车辆如何搭建硬件系统 文章结构说明第一部分 xff08 1 xff09 一图展示自动驾驶硬件系统的总体架构 xff08 2 xff09 庖丁解牛说内容1 线控模块2传感器模块 第二部分 xff08 1 xff09 传感
  • Tensorflow安装教程详解(图文详解,深度好文)

    Tensorflow安装教程详解 xff08 图文详解 xff0c 深度好文 xff09 前言安装前的准备工作关于python关于Anaconda 开始使用Tensorflow系统内配置Anaconda使用路径Anaconda Naviga
  • 二级指针 *(unsigned char**)(buf+0) = (unsigned char*)(buf+1)

    RTT里面的代码 1 rt err t rt mp init struct rt mempool mp 2 const char name 3 void start 4 rt size t size 5 rt size t block si
  • 子类以private方式继承父类

    子类以private方式继承父类 xff0c 则父类的pubic protected接口在子类变为private接口 xff0c 而父类的private接口在子类变为不可访问的接口 xff0c 而且不存在子类到父类的转换 所以子类以priv
  • CNN实战之如何分析影评-好看又有趣的讲解

    CNN实战之如何分析影评 好看又有趣的讲解 前言认识影评数据集了解TextCNN模型获取影评数据生成文本数据集生成TextCNN模型评估模型 前言 话说老王买了两张电影票打算请女神小丽去看电影 xff0c 老王希望看完电影趁着热度可以和小丽
  • 无人驾驶时代的室外组网技术研究

    无人驾驶时代的室外组网技术研究 车载自组网车载自组网简介车载自组网特点车载自组网组成及建构 主流自组网通信方式ZigBeeWIFIBlue ToothWiMAXDSRC4G 5G 参考文献 车载自组网 车辆通信网络就是在汽车上装载移动通信设
  • 这本关于机器学习的书---牛XXX

    机器学习好书推荐 如图所示 xff0c 这是一本可读性非常强 xff0c 非常有趣的一本介绍机器学习概率论的书 xff0c 让人看了会上瘾 看到这里 xff0c 作者摊牌了 本书作者即本人
  • ROS下运行rqt报错

    解决方案 xff1a 从上面可以看到ROS是通过python2 7编译 xff0c 查看自己python版本 xff0c 修改为对应版本即可成功运行rqt和rqt graph

随机推荐

  • zed2相机SDK安装及ROS安装

    一 安装相机SDK 相机SDK即相机的软件开发工具包 1 查看CUDA版本 xff1a nvcc version 2 相机SDK xff08 Software Development Kit xff09 下载网址 xff1a ZED SDK
  • zed2相机标定

    一 标定相机 1 刷新ros工作空间 source devel setup bash 2 打开相机ros节点 roslaunch zed wrapper zed2 launch 3 准备棋盘格标定板 xff0c 修改标定板checkboar
  • zed2相机标定(IMU)

    二 IMU标定 陀螺仪模型 xff1a 其中 xff0c 为陀螺仪测量值 xff1b 为陀螺仪真实值 xff1b 为陀螺仪零偏 xff08 也叫偏置 xff09 xff1b 为陀螺随机噪声项 xff08 包括白噪声和随机游走噪声 xff09
  • zed2相机标定(相机+imu)

    相机和imu单独标定请参考前面的博客 1 准备文件 checkboard yaml相机标定文件camera calibration yamlimu标定文件imu calibration yaml IMU标定文件格式需要改为如下 xff1a
  • Opencv中三个光流跟踪函数

    在slam里 xff0c 光流跟踪判断图像中某一物体的动态性 xff0c 主要包括3个函数 xff1a 1 goodFeaturesToTrack函数 作用 xff1a 提取输入图像中像素级别的角点 xff0c 支持harris角点和Shi
  • 算法:二分查找

    给定一个n个元素有序的 xff08 升序 xff09 整型数组 nums 和一个目标值 target xff0c 写一个函数搜索 nums 中的 target xff0c 如果目标值存在返回下标 xff0c 否则返回 1 1 条件 查找的数
  • 一行代码解决selenium进入抖音出现验证滑块

    我正常从浏览器进入抖音是不出现验证滑块的 xff0c 然后用selenium进入抖音网站发现会出现滑块验证 如下如这是原代码 xff1a 运行代码后就会发现浏览器出现验证滑块 xff0c 这是是因为网站识别出你是使用selenium 这个时
  • 激光点云有关目标检测与目标跟踪的消息定义

    1 jsk recognition msgs BoundingBoxArray msg 安装jsk recognition msgs xff1a sudo apt get install ros melodic jsk recognitio
  • Linefit_ground_segmention文章梳理及代码阅读

    2013年专门针对地面分割的文章 xff1a Fast segmentation of 3D point clouds for ground vehicles 代码链接 xff1a https github com lorenwel lin
  • 使用MFC+GDI编写地图编辑器补充

    使用MFC 43 GDI编写地图编辑器补充 小宝乱猜 在编写MapEdit时我遇到一个问题 xff0c 那就是在程序开始时一切正常 xff0c 但在打开一个地图文件后 xff0c 程序就会因找不到资源文件而画面混乱 调试了半天才发现是相对路
  • 基于select模型的TCP服务器

    之前的一篇博文是基于TCP的服务器和客户机程序 xff0c 今天在这我要实现一个基于select模型的TCP服务器 xff08 仅实现了服务器 xff09 socket套接字编程提供了很多模型来使服务器高效的接受客户端的请求 xff0c s
  • 路由器端口介绍

    路由器所在的网络位置比较复杂 xff0c 既可是内部子网边缘 xff0c 也可位于内 外部网络边缘 同时为了实现强大的适用性 xff0c 它需要连接各种网络 xff0c 这样 xff0c 它的接口也就必须多种多样 对于这些 xff0c 不要
  • 光流(Optical Flow)

    光流的概念 光流是一种描述像素随时间在图像之间运动的方法 随着时间流逝 同一个像素会在图像中运动 我们希望追踪他的运动过程 稀疏光流 计算部分像素 稠密光流 计算全部像素 稀疏光流以Lucas Kanade光流为代表 简称LK光流 光流的两
  • 模块化程序 点与圆的关系 类中成员函数的声明和实现分开写入头文件和源文件中

    64 TOC 模块化程序 点和圆的关系 在黑马程序员课程4 1 3成员属性设置为私有 课后案例 点和圆的关系中 谈到了文件的封装 此案例是判断点与圆的关系 xff0c 重点是以另外一个类作为本类中的成员 xff1b 在比较大的开发中 xff
  • c++模板类/模板函数的声明与定义应该放在头文件里

    如果函数模板按照普通的函数声明放在头文件的 xff0c 定义放在 cpp文件 xff0c 会出现错误 xff1a 模板函数声明 定义 引用有什么要注意的问题么 xff1f xff1f mylib h template lt class T
  • checksum-8位和16位校验和代码示例

    span class hljs comment linux 系统编译通过 span span class hljs comment gcc filename c o filename span span class hljs comment
  • 安卓鉴权方式的总结

    HTTP Basic Authentication 这种授权方式是浏览器遵守http协议实现的基本授权方式 HTTP协议进行通信的过程中 xff0c HTTP协议定义了基本认证认证允许HTTP服务器对客户端进行用户身份证的方法 效果 xff
  • 手把手教你使用Vue搭建注册登录界面及前端源码

    文章目录 一 前言二 概况三 搭建注册页面四 改造登录页面四 整体效果动画演示五 前端源码下载六 后续 一 前言 本文将在vue admin template模板基础上完成搭建注册与登录页面 文末处有完整的前端源码下载 环境准备 浏览器 x
  • 从传感器和算法原理讲起,机器人是如何避障的

    导语 xff1a 本文内容来自大道智创CTO邢志伟在雷锋网硬创公开课的分享 xff0c 由雷锋网旗下栏目 新智造 整理 编者按 xff1a 本文内容来自大道智创CTO邢志伟在雷锋网 公众号 xff1a 雷锋网 硬创公开课的分享 xff0c
  • or1200处理器中的特殊寄存器

    以下内容摘自 步步惊芯 软核处理器内部设计分析 一书 OR1200中的寄存器分为两类 xff1a 通用寄存器r0 r31 特殊寄存器 特殊寄存器又分为11组 xff0c 在本书第1 3 3节简单地列出了所有的特殊寄存器组 从列表中可以发现除