首页 > 编程知识 正文

arch模型定阶,固件库编程一般包括哪几个文件夹

时间:2023-05-05 14:14:41 阅读:130456 作者:1296

1 .内存系统架构1.1系统级存储系统架构Armv8的a -profile架构包括虚拟内存系统架构(虚拟内存系统架构)

1.2 系统级可见内存属性类型说明Normal这通常用于大容量内存操作,包括读写和只读操作。 系统中的大多数内存可能与此类型的设备对这种类型的内存进行读写有关。 (side-effects,表示对一个内存位置的读写会影响另一个内存位置。 )或从某个内存位置加载的值可能会随加载次数而变化。 内存映射外围设备通常是指使用内存访问方法进行访问的外围设备,使用这种类型的内存

(1)上表Shareability为与一致性有关的内存属性,为用来指示一个内存位置对于一些处理器是否是可共享的。 共享意味着需要硬件保证个内存中的内容对于可以在一定范围内访问该位置的多个处理器是一致的。 Cache知识(1)- 9 .域共享

)2)缓存可用性是指缓存的回写策略。 Cache知识(1)-8.2参阅Cache回写策略

2 .混合字节序支持a如果在AArch32异常级别实现了混合字节序支持,则字节序由PSTATE.E控制。 如果AArch32状态返回异常,PSTATE.E将从SPSR_ELx.E复制。 如果目标异常级别仅支持小端访问,则SPSR_ELx.E为RES0。 如果目标异常级别仅支持大终端访问,则SPSR_ELx.E为RES1。1. AArch64 显式数据访问和转换表遍历的endianness

http://www.Sina.com/http://www.Sina.com /

(1)如果使用AArch32支持异常级别的混合端,则端由PSTATE.E控制。 当异常从AArch64状态返回到AArch32状态时,将从SPSR_ELx.E复制PSTATE.E。

)2)如果目标异常级别仅支持小端访问,则SPSR_ELx.E为RES0。 如果目标异常级别仅支持大终端访问,则SPSR_ELx.E为RES1。 PSTATE.E在AArch64的状态下被忽略。

3 .缓存支持3.1缓存Armv8缓存id由一系列寄存器组成,该寄存器描述位于缓存操作指令2. AArch32 显式数据访问和转换表遍历的endianness上的APP应用的缓存。 包括在内

类型AArch64AArch32影响整个缓存。 例如http://www.Sina.com/(instructioncacheinvalidatealltopou ),例如http://www.Sina.com/(instructioncacheinvalidation ) innershareable(va操作示例: http://www.Sina.com/(instructioncachelineinvalidatebyvatopou )示例: http://www.Sina.com/(instruction set )组)操作示例: http://www.Sina.com/(dataorunifiedcachelineinvalidation,例如http://www.Sina.com/(datachelineinvinvation )

寄存器类型AArch64寄存器名AArch32寄存器名说明cachetyperegister(CTR_El0CTR寄存器定义

)1)受注意影响的指令缓存的最小长度;

)2)受将如何影响影响的数据或统一缓存的最小长度;

)3)主指令缓存的缓存索引和标记策略。 cachelevelidregisterclidr _ El1CLI dr此寄存器定义

)1)缓存类型

)2) levelofunificationinnershareable (Louis ),levelofcoherence (loc ) andthelevelofunification (Lou ) );

)3)可选的ICB字段。 显示内部可缓存内存区域和外部可缓存内存区域之间的边界。 cachesizeselectionregistercsselr _ El1CSS elr此寄存器定义如下

(1)选择当前缓存的缓存级别(级别1至级别7 ); cachesizeidentificationregisterccsidr _ el1表示在应用FEAT_CC时

IDX时:
CCSIDR/ CCSIDR2

当未应用FEAT_CCIDX时:
CCSIDR该寄存器主要提供有关当前选定缓存的体系结构的信息,比如NumSets, Associativity, and LineSize;3.2 Cacheability, cache allocation hints, and cache transient hints

可缓存性 仅适用于normall类型的内存,并为内部和外部缓存位置单独定义。所有device类型的设备内存总是被视为不可缓存的。内存属性Cacheability表示一个内存位置是否可以被分配到缓存中。

内存属性包括一个可缓存属性,参见:8.2 cache的回写策略

3.3 启用和禁用内存访问的缓存

在Armv8中,可缓存性控制字段可以强制所有具有Normal内存类型的内存位置被视为不可缓存,而不管它们的可缓存性属性是什么。每一阶段的地址转换都有独立的控制:

数据访问。这些控件也适用于对 translation tables 的访问。指令访问。 3.3.1在AArch64状态下,可缓存性控制字段及其效果如下 translation regimeNon-secure/secure寄存器说明EL1&0-SCTLR_EL1.C == 0(1) 访问的内存数据在所有stage1转换都是 Non-cacheable
(2) 对stage1转换表的访问是 Non-cacheableEL1&0-SCTLR_EL1.I == 0(1) 访问内存时的指令在所有stage1转换都是 Non-cacheableEL1&0-HCR_EL2.CD == 1(1) 访问的内存数据在stage2转换都是 Non-cacheable
(2) 对stage2转换表的访问是 Non-cacheableEL1&0-HCR_EL2.ID == 1(1) 访问内存时的指令在所有stage2转换都是 Non-cacheableEL1&0-HCR_EL2.DC == 1(1) 所有 stage1转换和对stage1转换表的所有访问都被视为对 Non-shareable Inner Write-Back Cacheable Read-Allocate Write-Allocate, Outer Write-Back Cacheable Read-Allocate Write-Allocate memory的内存进行访问,无论 SCTLR_EL1.{I, C}的值如何,这适用于数据和指令访问的转换EL1&0-SCTLR_EL1.M == 0禁用了stage1 的translations ,并且HCR_EL2.DC的值为0
(1) 如果 SCTLR_EL1.I的值为0,从stage1访问内存的指令是 Outer Shareable, Inner Non-cacheable, Outer Non-cacheable;
(2) 如果 SCTLR_EL1.I的值为1,从stage1访问内存的指令是 Outer Shareable, Inner Write-Through cacheable, Outer Write-Through cacheable;EL2-SCTLR_EL2.C == 0(1) 访问的内存数据都是 Non-cacheable
(2) 对转换表的访问是 Non-cacheableEL2-SCTLR_EL2.I == 0(1) 访问内存时的指令都是 Non-cacheableEL2&0-SCTLR_EL2.C == 0(1) 访问的内存数据都是 Non-cacheable
(2) 对转换表的访问是 Non-cacheableEL2&0-SCTLR_EL2.I == 0(1) 访问内存时的指令都是 Non-cacheableEL3-SCTLR_EL3.C == 0(1) 访问的内存数据都是 Non-cacheable
(2) 对EL2转换表的访问是 Non-cacheableEL3-SCTLR_EL3.I == 0(1) 访问内存时的指令都是 Non-cacheable!(EL1&0)-SCTLR_ELx.M == 0禁用了stage1 的translations ,并且HCR_EL2.DC的值为0
(1) 如果 SCTLR_ELx.I的值为0,从stage1访问内存的指令是 Outer Shareable, Inner Non-cacheable, Outer Non-cacheable;
(2) 如果 SCTLR_ELx.I的值为1,从stage1访问内存的指令是 Outer Shareable, Inner Write-Through cacheable, Outer Write-Through cacheable;3.3.2在AArch32状态下,可缓存性控制字段及其效果如下 translation regimeNon-secure/secure寄存器说明PL1&0Non-secureSCTLR.C == 0(1) 访问的内存数据在stage1转换都是 Non-cacheable
(2) 对stage1转换表的访问是 Non-cacheablePL1&0Non-secureSCTLR.I == 0(1) 访问内存时的指令在所有stage1转换都是 Non-cacheablePL1&0Non-secureHCR2.CD == 1(1) 访问的内存数据在stage2转换都是 Non-cacheable
(2) 对stage2转换表的访问是 Non-cacheablePL1&0Non-secureHCR2.ID == 1(1) 访问内存时的指令在stage2转换都是 Non-cacheablePL1&0Non-secureHCR.DC == 1(1) 所有stage1阶段转换和对 EL1&0 stage1转换表的所有访问都被视为对Non-shareable Inner Write-Back Cacheable Read-Allocate Write-Allocate, Outer Write-Back Cacheable Read-Allocate Write-Allocate的内存进行访问,无论SCTLR.C的值如何,这适用于数据和指令访问的转换PL1&0Non-secureSCTLR.M == 0禁用了stage1 的translations ,则如果EL2使用AArch32并且HCR.DC的值为0,或者如果EL2使用AArch64并且HCR_EL2.DC的值为0,则:
(1) 如果SCTLR.I的值为0,从stage1访问内存的指令是 Outer Shareable, Inner Non-cacheable, Outer Non-cacheable;
(2) 如果SCTLR.I的值为1,从stage1访问内存的指令是 Outer Shareable, Inner Write-Through cacheable, Outer Write-Through cacheable;PL1&0secureSCTLR.C == 0(1) 访问的内存数据在stage1转换都是 Non-cacheable
(2) 对stage1转换表的访问是 Non-cacheablePL1&0secureSCTLR.I == 0(1) 访问内存时的指令都是 Non-cacheablePL1&0secureSCTLR.M == 0禁用了stage1 的translations ,则如果EL2使用AArch32并且HCR.DC的值为0,或者如果EL2使用AArch64并且HCR_EL2.DC的值为0,则:
(1) 如果SCTLR.I的值为0,从stage1访问内存的指令是 Outer Shareable, Inner Non-cacheable, Outer Non-cacheable;
(2) 如果SCTLR.I的值为1,从stage1访问内存的指令是 Outer Shareable, Inner Write-Through cacheable, Outer Write-Through cacheable;EL2-HSCTLR.C == 0(1) 对内存的数据访问都是 Non-cacheable
(2) 对EL2转换表的访问是 Non-cacheableEL2-HSCTLR.I == 0(1) 访问内存时的指令都是 Non-cacheableEL2-HSCTLR.M == 0禁用了stage1 的translations ,则如果EL2使用AArch32并且HCR.DC的值为0,或者如果EL2使用AArch64并且HCR_EL2.DC的值为0,则:
(1) 如果 HSCTLR.I 的值为0,从stage1访问内存的指令是 Outer Shareable, Inner Non-cacheable, Outer Non-cacheable;
(2) 如果 HSCTLR.I 的值为1,从stage1访问内存的指令是 Outer Shareable, Inner Write-Through cacheable, Outer Write-Through cacheable;3.4 cache maintenance

1. Cache maintenance 指令对特定的内存位置起作用,指令作用的范围如下:

某个虚拟地址,称为VA操作。特定的高速缓存行或者组和路,称为 set/way操作。

2. 按set/way操作Cache maintenance 指令的术语

术语解释Level层次结构中的缓存级别,在Arm架构中,越低的缓存级别越靠近PE,armv8目前支持(Level 1 ~ Level 7)set(组)缓存的每一层都被分割成若干组。每一组是缓存层中的一组位置,可以为其分配一个地址。 在Arm架构中,组从0开始编号way(路)将cache平均分成多层,每一层称为一路。 在Arm架构中,路从0开始编号

3. Cache的管理的操作指令术语

术语解释Clean整个高速缓存或者某个高速缓存行。相应的高速缓存行会被标记为脏,数据会写回到下一级高速缓存中或者主存储器中。Invalidate整个高速缓存或者某个高速缓存行。高速缓存上的数据会被丢弃Clean and Invalidate与执行clean指令后紧接着执行invalidate指令的行为相同。这两条指令在同一个位置执行清零(Zero)操作在某些情况下,对高速缓存进行清零操作起到一个预取和加速的功效,比如当程序需要使用一大块临时内存,在初始化阶段对这个内存进行清零操作,这时高速缓存控制器会主动把这些零数据写入高速缓存行中。若程序主动使用高速缓存的清零操作,那么将大大减少系统内部总线的带宽。

4. PoU和PoC
参见:Cache的相关知识(一) -10. PoU和PoC的区别

5. A64/A32 Cache maintenance instructions
(1) A64 Cache maintenance instructions

(2) AArch32 cache and branch predictor maintenance instructions

参考:

(1) 《Arm® Architecture Reference Manual Armv8, for Armv8-A architecture profile - The AArch64 System Level Memory Model D4.4 Cache support》。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。