完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/FPGA/zdyz_linhanz.html 4)对正点原子FPGA感兴趣的同学可以加群讨论:876744900 5)关注正点原子公众号,获取最新资料 附录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多核配置如下图所示: 图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九种运行模式 在上表中,除了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个寄存器如下图所示: 图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寄存器。 图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的寄存器结构相同,如下图所示: 图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 指令类型 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 处理器模式位 本章参考了《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。 |
|
相关推荐
|
|
飞凌嵌入式-ELFBOARD 硬件知识分享-ELF 2电源电路讲解
800 浏览 0 评论
1569 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程介绍之烧写所需镜像
1394 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-mfgtools烧录流程之烧写方法
844 浏览 0 评论
飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
1335 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 21:21 , Processed in 0.584584 second(s), Total 65, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号