搜索
bottom↓
回复: 0

【正点原子FPGA连载】附录A1 Coretx-A9 MPCore架构--摘自【正点原子】领航者 ZYNQ 之linux驱动开发指南

[复制链接]

出0入234汤圆

发表于 2020-9-10 15:22:11 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2020-9-16 12:22 编辑

1)实验平台:正点原子领航者ZYNQ开发板
2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html
4)正点原子官方B站:
https://space.bilibili.com/394620890
5)对正点原子FPGA感兴趣的同学可以加群讨论:876744900 点击加入:
QQ群头像.png                                                      
6)关注正点原子公众号,获取最新资料


100846rel79a9p4uelap24.jpg

100846f1ce1fg14zbg0va4.png

附录A1 Coretx-A9 MPCore架构



ZYNQ使用的是Cortex-A9内核,本章就给大家介绍一下Cortex-A9架构的一些基本知识。了解了Cortex-A9架构以后有利于我们的学习,因为有很多例程涉及到Cortex-A9架构方面的知识,比如处理器模型、Cortex-A9寄存器组等等,但是Cortex-A9架构很庞大,远不是一章就能讲完的,所以本章只是对Cortex-A9架构做基本的讲解。

A1.1        Cortex-A9 MPCore简介
有些读者可能听说过ARM,但对ARM处理器的命名感到疑惑,如Cortex-A9和ARM9有什么区别,是不是同一个处理器。其实ARM公司除了提供处理器IP和配套工具以外,主要还是定义了一系列的ARM兼容指令集来构建整个ARM的软件生态系统。
ARM920T是兼容ARMv5指令集的处理器架构,在此之前,比较流行的处理器架构ARM7-TDMI是兼容ARMv4指令集的。此后,兼容ARMv6指令集的处理器架构有ARM11MPCore。到了ARMv7指令集,处理器系列以Cortex命名,针对不同用途,又分成A、R和M系列,通常A系列(如Cortex-A9)面向大型的基于虚拟内存的操作系统和用户应用,R(Cortex-R5)系列针对实时性系统,M系列(如Cortex-M3,部分M系列采用ARMv6指令集)针对单片机市场对微控制器和低成本应用提供优化。Cortex-A系列处理器面市后,由于处理性能的大幅提高以及杰出功耗控制,使得手机和平板电脑市场迅猛发展。另外一些新的应用需求正在酝酿,如高度的可扩展性和高性能计算。为此,Xilinx将Cortex-A系列ARM处理器和FPGA结合,推出了行业第一个可扩展处理平台ZYNQ系列。我们领航者开发板使用的ZYNQ7020/ZYNQ7010就是将双核ARM Cortex-A9 MPCore处理器系统作为“主系统”,结合低功耗28nm工艺技术的7系列FPGA,以实现高度的灵活性、强大的配置功能和高性能。下面我们简单的了解下Cortex-A9 MPCore。
Cortex-A9处理器是一个具有双发射,长度可变的、动态分支预测的乱序超标量体系结构的多核处理器,具有可配置的缓存和使用ACP端口的系统一致性。在单核配置中,Cortex-A9处理器的性能比Cortex-A8处理器高出50%以上。
Cortex-A9 MPCore支持在一个处理器上选配1~4个内核,Cortex-A9 MPCore多核配置如下图所示:
阿莫论坛发帖领航者专用11058.png

图A1.1.1 多核配置图

Cortex-A9 MPCore的L1指令Cache和数据Cache可选择16KB、32KB、64KB。ZYNQ配置了32KB的L1指令Cache和32KB的L1数据Cache,以及512KB的L2 Cache。Cortex-A9 MPCore使用ARMv7-A指令集架构,主要特性如下:
、先进的单指令多数据(SIMD)体系结构扩展,用于整数和浮点向量运算。
、提供了与ARM VFPv3体系结构兼容的高性能的单双精度浮点指令,支持全功能的IEEE754。
、增强安全性的安全性扩展。
、支持硬件虚拟化。
、带有存储器管理单元(MMU)的哈佛1级存储器系统。
、支持NEON,可以加速多媒体和信号处理算法。
A1.2        Cortex-A处理器运行模型
以前的ARM处理器有7中运行模型:User、FIQ、IRQ、Supervisor(SVC)、Abort、Undef和System,其中User是非特权模式,其余6中都是特权模式。但新的Cortex-A架构加入了TrustZone安全扩展,所以就新加了一种运行模式:Monitor,新的处理器架构还支持虚拟化扩展,因此又加入了另一个运行模式:Hyp,所以Cortex-A9处理器有9中处理模式,如下表所示:
表A1.1.1九种运行模式
A111.png

在上表中,除了User(USR)用户模式以外,其它8种运行模式都是特权模式,在特权模式下,程序可以访问所有的系统资源。这几个运行模式可以通过软件进行任意切换,也可以通过中断或者异常来进行切换。
大多数的应用程序运行在用户模式,该模式下某些被保护的系统资源是不能被访问的,要想访问这些受限的资源就必须进行模式切换。不过用户模式是不能直接进行切换的,用户模式下需要借助异常来完成模式切换,当要切换模式的时候,应用程序可以产生异常,在异常的处理过程中完成处理器模式切换。
当中断或者异常发生以后,处理器就会进入到相应的异常模式中。每一种异常模式都有一组寄存器供异常处理程序使用,以保证在进入异常模式以后,用户模式下的寄存器不会被破坏。
如果学过STM32和UCOS、FreeRTOS就会知道,STM32只有两种运行模式,特权模式和非特权模式,但是Cortex-A就有9种运行模式。
A1.3        Cortex-A寄存器组
每一种运行模式都有一组与之对应的寄存器组。本节我们要讲的是Cortex-A的内核寄存器组,注意不是芯片的外设寄存器。本节主要参考《ARM Cortex-A(armV7)编程手册V4.0.pdf》的“第3章 ARM Processor Modes And Registers”。
ARM架构提供了16个32位的通用寄存器(R0~R15)供软件使用,前15个(R0~R14)可以用作通用的数据存储,R15是程序计数器PC,用来保存将要执行的指令。ARM还提供了一个当前程序状态寄存器CPSR(Current Program Status Register)和一个备份程序状态寄存器SPSR(Saved Program Status Register),SPSR寄存器是CPSR寄存器的备份。这18个寄存器如下图所示:
阿莫论坛发帖领航者专用12691.png

图A1.3.1  Cortex-A寄存器

Cortex-A的每一种模式可见的寄存器包括15个通用寄存器(R0~R14)、一个程序状态寄存器和一个程序计数器PC。在这些寄存器中,有些是所有模式共用的同一个物理寄存器,有一些是各模式自己所独立拥有的,各个模式所拥有的寄存器如错误!未找到引用源。所示。图中浅色字体的是与User模式所共有的寄存器,蓝绿色背景的是各个模式所独有的寄存器。可以看出,在所有的模式中,低寄存器组(R0~R7)是共享同一组物理寄存器的,只是一些高寄存器组在不同的模式有自己独有的寄存器,比如FIQ模式下R8~R14是独立的物理寄存器。假如某个程序在FIQ模式下访问R13寄存器,那它实际访问的是寄存器R13_fiq,如果程序处于SVC模式下访问R13寄存器,那它实际访问的是寄存器R13_svc。可见Cortex-A内核寄存器组成如下:
①34个通用寄存器,包括R15程序计数器(PC),这些寄存器都是32位的。
②8个状态寄存器,包括CPSR和SPSR。
⑤Hyp模式下独有一个ELR_Hyp寄存器。
阿莫论坛发帖领航者专用13203.png

图A1.3.2 九种模式所对应的寄存器

A1.3.1        通用寄存器
R0~R15是通用寄存器,通用寄存器可以分为一下三类:
①、未备份寄存器,即R0~R7。
②、备份寄存器,即R8~R14。
③、程序计数器PC,即R15。
分别来看一下这三类寄存器:
1、未备份寄存器
未备份寄存器指的是R0~R7这8个寄存器,因为在所有的处理器模式下这8个寄存器都是同一个物理寄存器,在不同的模式下,这8个寄存器中的数据就会被破坏。所以这8个寄存器并没有被用作特殊用途。
2、备份寄存器
备份寄存器中的R8~R12这5个寄存器有两种物理寄存器,在快速中断模式下(FIQ)它们对应着Rx_irq(x=8~12)物理寄存器,其他模式下对应着Rx(8~12)物理寄存器。FIQ是快速中断模式,看名字就是知道这个中断模式要求快速执行。FIQ模式下中断处理程序可以使用R8~R12寄存器,因为FIQ模式下的R8~R12是独立的,因此中断处理程序可以不用执行保存和恢复中断现场的指令,从而加速中断的执行过程。
备份寄存器R13一共有8个物理寄存器,其中一个是用户模式(User)和系统模式(Sys)共用的,剩下的7个分别对应7种不同的模式。R13通常用来做为栈指针SP。基本上每种模式都有一个自己的R13物理寄存器,应用程序会初始化R13,使其指向该模式专用的栈地址,这就是常说的初始化SP指针。
备份寄存器R14一共有7个物理寄存器,其中一个是用户模式(User)、系统模式(Sys)和超级监视模式(Hyp)所共有的,剩下的6个分别对应6种不同的模式。R14也称为链接寄存器(LR,Link Register),LR寄存器在ARM中主要用作如下两种用途:
①、每种处理器模式使用R14(LR)来存放当前子程序的返回地址。如果使用BL或者BLX来调用子函数的话,R14(LR)被设置成该子函数的返回地址,在子函数中,将R14(LR)中的值赋给R15(PC)即可完成子函数返回,比如在子程序中可以使用如下代码:
MOV PC, LR        @寄存器LR中的值赋值给PC,实现跳转
或者可以在子函数的入口处将LR入栈:
PUSH {LR}        @将LR寄存器压栈
在子函数的最后面出栈即可:
POP {PC}        @将上面压栈的LR寄存器数据出栈给PC寄存器
②、当异常发生以后,该异常模式对应的R14寄存器被设置成该异常模式将要返回的地址。另外R14也可以当作普通寄存器使用。
3、程序计数器R15
程序计数器R15也叫做PC(program counter),在ARM状态下,R15始终指向当前指令之前的八个字节,在Thumb状态下,它始终指向当前指令之前的四个字节,这是因为ARM的流水线机制导致的。ARM处理器3级流水线:取指->译码->执行,这三级流水线循环执行,比如当前正在执行第一条指令的同时也对第二条指令进行译码,第三条指令也同时被取出存放在R15(PC)中。我们喜欢以当前正在执行的指令作为参考点,也就是以第一条指令为参考点,那么R15(PC)中存放的就是第三条指令,换句话说就是R15(PC)总是指向当前正在执行的指令地址再加上2条指令的地址。对于32位的ARM处理器,每条指令是4个字节,所以:
R15 (PC)值 = 当前执行的程序位置 + 8个字节。
A1.3.2        程序状态寄存器
所有的处理器模式都共用一个CPSR物理寄存器,因此CPSR可以在任何模式下被访问。CPSR是当前程序状态寄存器,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位。所有的处理器模式都共用一个CPSR必然会导致冲突,为此,除了User和Sys这两个模式以外,其他7个模式每个都配备了一个专用的物理状态寄存器,叫做SPSR(备份程序状态寄存器),当特定的异常中断发生时,SPSR寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用SPSR中保存的值来恢复CPSR。
因为User和Sys这两个模式不是异常模式,所以并没有配备SPSR,因此不能在User和Sys模式下访问SPSR,会导致不可预知的结果。由于SPSR是CPSR的备份,因此SPSR和CPSR的寄存器结构相同,如下图所示:
阿莫论坛发帖领航者专用14979.png

图A1.3.3  CSPR寄存器

N(bit31):当两个补码表示的有符号整数运算的时候,N=1表示运算对的结果为负数,N=0表示结果为正数。
Z(bit30):Z=1表示运算结果为零,Z=0表示运算结果不为零,对于CMP指令,Z=1表示进行比较的两个数大小相等。
C(bit29):在加法指令中,当结果产生了进位,则C=1,表示无符号数运算发生上溢,其它情况下C=0。在减法指令中,当运算中发生借位,则C=0,表示无符号数运算发生下溢,其它情况下C=1。对于包含移位操作的非加/减法运算指令,C为移出值的最后一位,对于其它非加/减运算指令,C位的值通常不受影响。
V(bit28):对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出,对于其他的非加/减法运算指令,V的值通常不改变。
Q(bit27):在ARMv5及以上版本的E系列处理器中,用Q标志位表示增强的DSP运算指令是否发生了溢出,在其他版本的处理器中,Q标志位无意义。
IT[1:0](bit26:25):和IT[7:2](bit15:bit10)一起组成IT[7:0],作为IF-THEN指令执行状态。
J(bit24):仅ARM_v5TE-J架构支持,J=1表示处于Jazelle状态,此位通常和T(bit5)位一起表示当前所使用的指令集,如下表所示:
表A1.3.1 指令类型
131.png

GE[3:0](bit19:16):SIMD指令有效,大于或等于。
IT[7:2](bit15:10):参考IT[1:0]。
E(bit9):大小端控制位,E=1表示大端模式,E=0表示小端模式。
A(bit8):禁止异步中断位,A=1表示禁止异步中断。
I(bit7):I=1禁止IRQ,I=0使能IRQ。
F(bit6):F=1禁止FIQ,F=0使能FIQ。
T(bit5):控制指令执行状态,表明本指令是ARM指令还是Thumb指令,通常和J(bit24)一起表明指令类型,参考J(bit24)位。
M[4:0]:处理器模式控制位,含义如下表所示:
表A1.3.2 处理器模式位
132.png

本章参考了《Cortex-A9_trm.pdf》、《cortex_a9_mpcore_trm.pdf》和《ARM Cortex-A(armV7)编程手册V4.0.pdf》这三份文档。这三份文档都是ARM官方的文档,详细的介绍了Cortex-A9架构和ARMv7-A指令集。这三份文档我们都已经放到了开发板光盘中,路径为:领航者ZYNQ开发板资料盘(A盘)\8_ZYNQ&FPGA参考资料\ARM。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 08:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表