当前位置: 首页 > news >正文

玄铁C906——物理内存保护(PMP)介绍

1、前言

(1)本文描述的是玄铁C906的物理内存保护机制的实现中,与RISC-V架构手册中完整PMP机制的差异部分
(2)RISC-V架构的PMP机制,参考博客:《RISC-V架构——物理内存属性和物理内存保护》;

2、PMP概览

在这里插入图片描述

3、PMP地址寄存器差异

在这里插入图片描述
在这里插入图片描述

4、PMP地址寄存器差异带来编程差异

(1)pmp配置项中的NAPOR地址匹配模式是计算pmp地址寄存器中值的低位有多少个零来计算的,但是c906的pmp地址寄存器读出来低九位只能是零,所以通过读PMP地址寄存器的值来反推保护区域范围就有问题,不能直接移植opensbi里的pmp_get函数,需要考虑低九位只读且为零的问题;
(2)举例:按照NAPOR地址匹配模式,写入38’ byy_yyyy_yyyy_yyyy_yyyy_yyyy_yyyy_yy01_1111_1111表示保护区域是2的(9+3)次方,也就是4KB。但是你将上面的值写入,然后从PMP地址寄存器中读出来是38’ byy_yyyy_yyyy_yyyy_yyyy_yyyy_yyyy_yy00_0000_0000,因为pmp地址寄存器的低九位只读且为零;

5、拓展

问题:为什么把低九位设计成只读且为零?
个人看法:
(1)芯片支持最小保护区域是4KB,也就是保护区域的大小的4KB的整数倍,4KB也就2的12次方;
(2)按照NAPOR地址匹配模式计算保护区域,大小是2的(n+3)次方,其中n是地址最低位连续1的个数。要表示4KB,刚好n=12-3=9,也就是低九位肯定是连续1,既然低九位是固定的,那干脆就硬件直接设计成只读为零,简化芯片设计;

http://www.lryc.cn/news/204316.html

相关文章:

  • 【进阶C语言】编译与链接、预处理符号详解
  • spring.profiles生效顺序
  • 【经典PageRank 】02/2 算法和线性代数
  • 【微客云】91优惠话费充值API接口开发功能介绍
  • Kubernetes - 一键安装部署 K8S(附:Kubernetes Dashboard)
  • Camera2开发基础知识篇——手机影像参数
  • Unity之ShaderGraph如何实现无贴图水球效果
  • 【C语言】指针错题(类型分析)
  • prosemirror 学习记录(二)创建 apple 节点
  • 自然语言处理---迁移学习
  • node 第十天 原生node封装一个简易的服务器
  • php实战案例记录(25)intval函数的用法
  • laravel框架介绍(二) composer命令下载laravel报错
  • 代码签名证书到期了怎么续费?
  • JAVA 同城服务预约家政小程序开发的优势和运营
  • 基于粒子群算法的无人机航迹规划-附代码
  • 前端使用qrcodejs2插件实现根据网址生成二维码
  • A股风格因子看板 (2023.10 第11期)
  • anaconda安装python 3.11
  • 问题:EventSource 收不到流数据及 EventSource 的 onmessage 方法为null
  • P2 B+树索引
  • 爬虫知识之BeautifulSoup库安装及简单介绍
  • 如何有效取代FTP来帮助企业快速传输大文件
  • 免登陆积分商城原理
  • muduo源码学习base——Atomic(原子操作与原子整数)
  • 最短路相关笔记
  • Web前端-Vue2+Vue3基础入门到实战项目-Day5(自定义指令, 插槽, 案例商品列表, 路由入门)
  • mysql json数据类型 相关函数
  • 如何实现前端实时通信(WebSocket、Socket.io等)?
  • 使用 SSSD 进行网络用户身份验证