• Bus memory attribute


    根据程序的局部性原理,在主存与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的地方

  • 相关阅读:
    进阶学习项目实战链接
    Django与数据库操作
    xadmin的使用
    Django 常见的异常
    网站 安全 ---- 常见的 web 攻击
    nodejs--vue
    ECMAScript 6 简介
    Django -- DRF 认证流程
    Django -- 缓存
    Django --- celery异步任务与RabbitMQ模块
  • 原文地址:https://www.cnblogs.com/-9-8/p/4655243.html
Copyright © 2020-2023  润新知