ARM体系架构—ARMv7-A协处理器

一、ARMv7-A协处理器

ARM体系架构支持协处理器,用于扩展ARM处理器功能。协处理器指令用于访问协处理器。协处理器支持16个协处理器,编号0-15,使用CP0-CP15(Coprocessor)描述。
CP0-CP15协处理器的基本功能如下:

  • CP15:提供系统控制功能。包括架构和特性ID,以及控制,状态信息和配置支持。
  • CP14:提供硬件Debug功能。
  • CP10,CP11:共同支持浮点运算和向量操作。控制和配置浮点和高级SIMD扩展架构。
  • CP8,9,12,13:为ARM架构保留协处理器。
  • CP0-7:由厂家定义协处理功能。

二、CP15协处理器

CP15协处理器称之为系统控制协处理器,被用于控制和配置ARM处理器系统。其主要功能在于对系统内存的控制,包括cache,页表,TLB(Translation Lookaside Buffer),MMU(Memory Management Unit)等组件的控制。
除了对系统内存的控制外,CP15处理器还负责控制CP0-CP13的访问。CP0-CP13对于ARMv7-A架构可能是可选特性,其中CP10-CP11用于支持浮点运算指令,而CP0-CP7的实现由厂家定义。

2.1、CP15协处理器寄存器

CP15寄存器的实现和ARM体系架构的实现强相关:

  • ARMv7-A实现VMSA (Virtual Memory System Architecture),支持虚拟地址,使用MMU(Memory Management Unit)管理地址空间;
  • ARMv7-R实现PMSA (Protected Memory System Architecture),支持虚拟地址,使用MPU(Memory Protection Unit)管理地址空间;

本文只关心ARMv7-A架构。

CP15提供了16个32位主寄存器,命名为c0-c15。c0-c15寄存器可能对应多个不同的物理寄存器,常见的寄存器见下表。

register physical register 描述
c0 MIDR 主ID寄存器,用于记录厂商版本信息
MPIDR Multiprocessor Affinity Register
c1 SCTLR 系统控制寄存器
ACTLR 辅助控制寄存器
CPACR 协处理器访问控制寄存器,控制访问除了CP14和CP15的协处理器
SCR 安全配置寄存器
c2 c3 TTBR0 一级转换页表基址寄存器0
TTBR1 一级转换页表基址寄存器1
TTBCR 页表转换控制寄存器
c5 c6 DFSR 数据异常(Data Fault)状态寄存器
IFSR 指令异常(Instruction Fault)状态寄存器
DFAR 数据异常(Data Fault)地址寄存器
IFAR 指令异常(Instruction Fault)地址寄存器
c7 predictor cache及分支预测
barrier 数据及指令屏障
c8 TLB TLB操作
c9 performance monitors 性能监视器
c12 VBAR 非安全模式异常基址寄存器
MVBAR 安全模式异常基址寄存器
c13 ASID 上下文ID寄存器,软件线程ID寄存器
c15 CBAR 配置基址寄存器,用于GIC(Generic Interrupt Controller)和定时器类型外设

2.2、CP15协处理器寄存器组织

CP15协处理器保护c0-c15共16个寄存器,寄存器32位的组织形式如下:

### CIFAR-10 数据集的使用方法与下载 对于希望利用 CIFAR-10 进行研究或开发工作的用户来说,了解该数据集的具体结构以及掌握其获取途径至关重要。 #### 下载 CIFAR-10 数据集 官方提供了两种主要形式的数据文件供下载: - Python 版本:`cifar-10-python.tar.gz` - MATLAB 版本:`cifar-10-matlab.tar.gz` 为了方便大多数开发者,通常推荐下载 Python 版本。可以通过访问官方网站[^4] 或者直接通过命令行工具 wget 来完成下载操作。如果选择后者,则可以在终端输入如下指令来自动下载并解压数据包至指定路径 `./data` 中: ```bash mkdir -p ./data && cd $_ wget http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz tar zxvf cifar-10-python.tar.gz ``` 上述脚本会创建名为 `data` 的新目录(如果不存在的话),进入此目录后再从互联网上拉取压缩后的数据档案,并将其展开以便后续处理。 #### 使用 CIFAR-10 数据集 一旦成功下载并准备好了本地副本之后,就可以着手加载这些图像用于训练机器学习模型了。考虑到兼容性和易用性的因素,在 Python 生态系统内有许多库能够帮助简化这一过程;其中最常用的就是 NumPy 和 TensorFlow/Keras 组合。 下面给出一段简单的代码片段展示如何读入 CIFAR-10 并构建一个基础卷积神经网络来进行分类任务: ```python import tensorflow as tf from tensorflow.keras import datasets, layers, models (train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data() # Normalize pixel values to be between 0 and 1 train_images, test_images = train_images / 255.0, test_images / 255.0 model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10)) model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels)) ``` 这段程序首先调用了 Keras 提供的方法轻松地完成了数据导入工作,接着定义了一个小型 CNN 架构并通过 Adam 优化器进行了编译配置,最后指定了迭代次数为 10 轮次开始正式训练流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值