根据程序的局部性原理,在主存与CPU之间设置的一个高速的容量较小的存储器,叫做cache。

ARM cache架构由cache存储器和写缓冲器(write-buffer)组成。其中Write_buffer是cache按照FIFO原则向主存写的缓冲器。

cache可以分为Dcache,Icache。分别cache data和 instruction。其中Dcache必须在MMU开启后才能在CP15寄存器中使能,Icache在MMU未使能的情

况下,也是可以使能的。

在armv6版本之前的memory attribute:

一般会在使能MMU的过程中,规定MMU page table的definition。其中20bit表示每一page的memory attributes。12位表示每一page的基地址。一共32

位。每一page都会设置两个属性,cacheable,bufferable。其中每一page的memory attribute有

strong ordered,

Outer and inner write-back, write allocate,

Outer and inner write-through, no write allocate,

Outer and inner write-through, no write allocate,shared Device.

Shared Device.

non-cacheable.

MMU_CACHE:

.word            0x5000_0000|strong ordered;(其中strong order由20bit来表示)

其中arm的基本memory attribute有四种:

NCNB(Non-cacheable,non-bufferable,Strongly-ordered),

NCB(Non-cacheable,bufferable,Device),

Write-Through Cacheable bufferable,

Write-Back Cacheable bufferable

Write-Through方式:CPU向cache写入数据时,同时也向memory写一份,使得cache和memory的数据保持一致,缺点是每次都要访问memory,速度较

慢。

Write-Back方式:CPU更新cache时,只是把更新的cache区标记一下,并不同步更新memory,只有在cache区被新进入的数据取代时,才更新memory。

会引起memory和cache的一致性问题。

Write-allocate方式:在cache miss的情况下,先对存储器进行read操作,将操作数读入cache,在进行读写,这样便cache hit。

Bufferable与non-bufferable的区别,主要表现在ack信号的返回上,bufferable--将结果写入buffer(某个component)便返回ack,

non-bufferable等到结果写入外存,返回ack。

在AMBA3---AXI中,有四位的arcache/awcache信号,来表示transaction的这种属性。

arcache/awcache[0]表示,bufferable信号,表示interconnect或其他compnonent可以先返回ack,之后再写向final distination,只用在write操作。

arcache/awcache[1]表示,cacheable信号,对写操作,表示可以有不同的write megered together。

对读操作,表示该地址的数据可以pre-fetched,可被用在多个read transaction中。

arcache/awcache[2]表示,Read Allocate信号,如果一个transfer 读操作cache miss,它会allocated后再读。

arcache/awcache[3]表示,Write Allocate信号,如果一个write transfer cache miss,它会allocated,后读外存,在write-back方式的写回。

      这两bit的信号在AXI3中主要是Cache的互联中,会进行设置,通过smmu出来之后的transaction,之间简单的加载外存的值。

在armv7及其之后的版本,Bus AXI4中的memory attribute:

主要的基点改动,

  1) AxCache[1]表示modified的意思;

  2) AXI4对non-modified的transaction有order的限制;

  3) RA,WA变为了对memory attribute的编码。

modifiable transaction表示,

  1)一个大的transaction,可以被分割为多个小的transaction;

  2)多个小的transaction,可以被merge为一个大的transaction;

  3)一个read operation,可以读取超过需要的数据,prefetch数据,这样之后可能可以少发送一些read transaction;

  4)一个write operation,也可以访问一个更大的地址空间,不合理的地址对应的数据,使用strb信号关闭;

  5)所以一个transaction,从源到目的地,AxAddr,AxSize,AxLen,AxBurst信号的值,都可以改动。

对于non-modifiable transaction,这些信号在传输过程中,是不能被修改的,transaction也就是不能被merge和split

  但是AxCache信号,从Bufferable转换为Non-Bufferable是可以的,

  一个burst length大于16的transaction,也可以被split为几个小的burst length的transaction。这是个例外可以改length的地方

Bus memory attribute的更多相关文章

  1. Bus,Exclusive access,memory attribute

    指令LDREX,STREX是在armv6中新加的指令,配合AMBA3--AXI中的lock[1:0]信号. 在Atomic Access一节中是这么规定的:ARLOCK[1:0]/AWLOCK[1:0 ...

  2. armv8 memory translation

    AArch32,arm的32bit架构: AArch64,arm的64bit架构: ARMv8.2-LPA,是armv8.2中的新feature,扩大了IPA和PA的支持范围,从48bit扩展到52b ...

  3. armv8 memory system

    在armv8中,由于processor的预取,流水线, 以及多线程并行的执行方式,而且armv8-a中,使用的是一种weakly-ordered memory model, 不保证program or ...

  4. memory consistency

    目前的计算机系统中,都是shared memory结构,提供统一的控制接口给软件, shared memory结构中,为了memory correctness,可以将问题分为:memory consi ...

  5. Memory Ordering in Modern Microprocessors

    Linux has supported a large number of SMP systems based on a variety of CPUs since the 2.0 kernel. L ...

  6. Interrupt distribution scheme for a computer bus

    A method of handling processor to processor interrupt requests in a multiprocessing computer bus env ...

  7. arm-cache coherency

    提高一个系统的performance,有两种办法: 1) 不断提高一个core的performance,手段就是不断提高freq,减小Vt,这样都会在增加power(dynamic,leakage) ...

  8. Linux内存初始化(二)identity mapping和kernel image mapping

    一.前言 本文没有什么框架性的东西,就是按照__create_page_tables代码的执行路径走读一遍,记录在初始化阶段,内核是如何创建内核运行需要的页表过程.想要了解一些概述性的.框架性的东西可 ...

  9. Method, apparatus, and system for speculative abort control mechanisms

    An apparatus and method is described herein for providing robust speculative code section abort cont ...

随机推荐

  1. thinkCMF----公共模板的引入

    这个主要用于前台模板的 头部和底部分离: 具体引入方法: <include file="public@source"/> <include file=" ...

  2. JAVA基础知识点转载

    JAVA部分: 1.Java 指定线程执行顺序(三种方式) 转载link:https://blog.csdn.net/difffate/article/details/63684290 2.jdk7中 ...

  3. Linux命令记录----chkconfig命令

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...

  4. 小程序中的block

    <block/> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性. 因为 wx:if 是一个控制属性,需要将它添加到一个标签上.如果要一次性判断多个组件标签, ...

  5. 畅通工程 HDU - 1863 最小生成树模板

    两个模板: kruskal #include<stdio.h> #include<queue> #include<algorithm> #include<io ...

  6. CCCC L2-017. 人以群分 贪心

    https://www.patest.cn/contests/gplt/L2-017 题解:贪心,一点小数学 坑:XJB改下标改错了 #include <iostream> #includ ...

  7. abi-api, arm target triplet https://en.wikipedia.org/wiki/ARM_architecture

    GNU软件用target triplet来描述工作平台,target triplet是一种规范化的名称,形如cpu-vendor-os(where os can be ‘system’ or ‘ker ...

  8. LDAP summary-- Python ldap

    A DN is comprised of a series of RDNs (Relative Distinguished Names) found by walking UP the tree (D ...

  9. REQUEST FORM 实例

    https://www.programcreek.com/python/example/51524/flask.request.form

  10. 解决eslint空格报错等问题

    eslint检查代码风格是好的,不过 有些换行报错   空格报错  还有在代码中有 console也是报错   这有些烦人 为了把这些烦人的报错给禁止掉 我们可以在package.json文件中 找到 ...