S3C44B0X内部的Cache的作用:
当CPU运行存储于外部Flash中的代码时,由于受限于Flash自身的访问速度较慢(一般为75ns~120ns),CPU不得不降低速度运行,这对CPU来说是一种浪费。为了解决这个问题,S3C44B0X内部集成了8K的高速缓冲器(Cache)。
对于CPU内核来说,这8K的Cache是32bit宽度的“零等待”存储器,当CPU的Cache打开后,Cache会自动地从Flash中取指令,映射到其内部,而CPU实际上执行的是Cache里的指令(前提条件是Cache命中)。这样的机制可以最大程度地保证CPU
能接近其理论运算速度,而不受Flash速度的影响。
S3C44B0X 的Cache
处理器Wrapper 和总线优先级
处理器wrapper 包括一个cache写入缓冲器和CPU 内核。总线仲裁逻辑决定每个总线占用者的优先权。 处理器wrapper 有一个8k 直接的内部存储器。内部存储器可以以3 种方式采用。第一是8k 字节的存储空间作为8k 字节的统一(指令或数据)cache(高速缓冲存储器)。第二, 内部存储器可以用作一个4k 字节的统一cache 和一个4k 字节的内SRAM.第三,内部存储器可以整个地用作8k 字节的内部SRAM。 内部统一(指令或数据)cache 采用4 种方式与某个4 个字(16 个字节)的行建立链接结构。它采用一种写(writethrough)的原则保持数据的一致性。当在cache 中找不到相应的内容(称为cache miss),4 个字的存储内容从外部存储器连续地取得。它采用一种LRU(最近使用最少)算法来提升命中的比率。统一cache 通过有区别的方式来处理指令和数据。 内部SRAM 主要用来减少ISR 的执行时间。由于内部SRAM 具有最短的操作时间,因此能够减少ISR 的执行时间。当然ISR 在SRAM 运行也是非常有效率的因为大多数的ISR 代码都会引起cache miss。
总线仲裁逻辑可以决定总线占用者的优先级。总线仲裁逻辑支持一种round-robin 优先级模式和一种固定的优先级模式。同样LCD_DMA, BDMA, ZDMA, nBREQ(外部总线控制器)之间的优先级可以通过软件来修改。
Cache 的组织
S3C44B0X 的cache 有一个8k 字节的cache 存储器,4 个RAM 标签和一个LRU 存储器。
Cache 替换操作
在系统初始化之后,CS 的值被设置为“0000”,这表示set0, set1, set2 和set3 cache 存储器是无效的。当某个cache 填充发生,特定行的CS 的值改为“0110”,表明只有set0 是有效的。当并发的cache 填充发生,……
cache 禁止操作
S3C44B0X 的cache 提供整个对cache 进行使能/禁止的功能。你可以通过设置SYSCFG 中的CM 位为01 或11 来使能cache,或者将SYSCFG[2:1]设置为00 来禁止cache。如果cache 被禁止,指令和数据将一直从外部存储器中获取。S3C44B0X 还可以在cache 使能模式下提供非cache 区域,这样使能一些特殊的存储空间操作可以进行,例如DMA 操作。通过4 个特殊的寄存器可以指定2 个非cache 区域,后面将会介绍到。 当一个存储区域恢复cache 功能时,保持它与源数据的一致性是非常重要的,因为cache存储空间是不会自动刷新的.因此,你必须小心是否DMA 操作改变了外部存储空间的数据。允许DMA 操作的存储区域应该设置为非cache 区域,这样就保证了数据的一致性。S3C44B0X 采用的是写穿式(write-through)的方法来保持cache 和外部存储器之间数据的一致。
※写穿式(Write Through)
任一从CPU 发出的写信号送到Cache 的同时,也写入主存,以保证主存的数据能同步地更新。它的优点是操作简单,但由于主存的慢速,降低了系统的写速度并占用了总线的时间。
cache 刷新
一个cache 刷新能够重新使能cache 操作。当cache 被禁止,LRU RAM 可以作为一个通常
的存储器来操作。Cache 可以通过写入0 到LRU RAM 来实现刷新,并使得所有的cache 数
据无效。
注意:cache 刷新必须在cache 禁止的模式下进行。
非cache 区域
S3C44B0X 提供2 个非cache 区域。每个要求2 个cache 控制区域,控制区域展示了每个非cache 区域的开始地址和结束地址。在非cache 区域中,当发生了cache 读未命中,cache 区
域中的数据不会更新。 通常,cache 可以存储整个系统存储器内的任何数据,但是有时它需要非cache 区域,因为cache 不能跟踪外部存储设备的数据变化,如果外部设备的数据内容并不总是通过cpu 对它的读或写操作来更新的,例如允许DMA 的存储器空间,或者I/O 口,例如串口等。 非cache 空间的大小以4KB 的块为单位增加或减少。结束地址必须指向下一个4KB 的块。例如,如果非cache 的区域地址为0x10000~0x22fff,则NCACHEBEn 的开始地址值为0x10, 结束地址值为0x23。
通过使用cache 来提高程序的执行速度
1. 将经常执行的ISR 放置到内部SRAM 执行。
2. 让ISR 不使用cache,因为大部分的ISR 代码执行时都会发生cache 命中失败。而且在
ISR 执行完之后,cache 存储空间不能够再利用,它会立即被主程序代码覆盖。
3. 将相关的、互相调用的函数共同执行,这样提高cache 的命中率。
4. 有时,如果将数据区域被设计为非cache 区域,程序执行速度将会提高,因为大多数变量不会被再利用。对不需要再利用的数据变量,恢复16 字节的cache 存储空间的动作将
是浪费的
内部SRAM
S3C44B0X 具有一个最小8KB的4 组相连cache 或内部SRAM。如果内部SRAM为4KB, 另外4KB 内部存储器可以用来作为2 组相连cache。内部SRAM 的存储器操作周期1MCLK。
在每一个组的存储空间内,地址是连续增加的,在TAG/LRU 中的地址按照16 字节增加。不要对内部地址空间:0x10003004~0x1000300f 进行操作。
注意:cache 中的tag3:0 和LRU 必须以字(32bit)为单位进行读/写。tag3:0 和LRU 的地址.的最低3 位必须是0。例如,如果你希望读tag0 中128 个项目中的第2 个,你不应该使用地
址0x10002004,而是0x10002010。因此,tag0 中的地址为:0x10002000,0x10002010, 0x10002020,…,0x100027f0。
写缓冲区操作
写缓冲区操作,S3C44B0X 有4 个写缓冲区寄存器来提高存储器的写性能。当写缓冲器模式使能,CPU 不再将数据直接写入外部存储器而是将数据写入写缓存区。即便是外部总线已经有其它master 占用,例如DMA 操作的情况下,也如此。
写缓冲区模块在系统总线没有被别的更高优先级的master 占用时,将数据写入外部存储器。这样,CPU 的性能就提高了,因为CPU 不需要一直等到写操作结束。 写缓冲区具有4 个寄存器。每个寄存器包括一个32 位数据区域,28 位的地址区域和2 位的
状态区域
总线优先级地图
在S3C44B0X 中,有7 种总线master,LCD_DMA, BDMA0, BDMA1, ZDMA0, ZDMA1,
Nbreq(外部总线master)和CPU wrapper。复位之后,这些总线master 的优先级排列如下:
1. DRAM 刷新控制器;
2. LCD_DMA;
3. ZDMA0,1
4. BDMA0,1
5. 外部总线master
6. 写缓冲区
7. Cache 和cpu
LCD_DMA, ZDMA, BDMA 之间的总线优先级是可编程的,可以通过SBUSCON 寄存
器来设置。如果不考虑SBUSCON 的设置CPUwrapper 始终具有最低的优先级。 Round-robin 优先级模式或固定优先级模式是可以选择的。在round-robin 优先级模式中,已经被服务过依次的总线占有者将具有最低的优先级。通过这种方式,使得所有的master 都具有相同的优先级。
在固定优先级模式下,每个总线master 的优先级都写在SBUSCON 中,SBUSCON 寄存器决定第1 到第4 个优先级的总线master。
特殊寄存器
对于CPUwrapper 块(包括cache,write buffer,和ARM7TDMI)。SYSCFG 寄存器控
制了系统的总体操作。NCACHBE0 和NCACHBE1 寄存器提供非cache 区域的设置。
NCACHBE0:非cache 区1 的开始地址和结束地址;
NCACHBE1:非cache 区2 的开始地址和结束地址。
Cache-主存存储结构的命中率
命中率指CPU所要访问的信息在Cache中的比率,相应地将所要访问的信息不在Cache中的比率称为失效率.
Cache的命中率除了与Cache的容量有关外,还与地址映象的方式有关.
目前,Cache存储器容量主要有256KB和512KB等.这些大容量的Cache存储器,使CPU访问Cache的命中率高达90%至99%,大大提高了CPU访问数据的速度,提高了系统的性能.
Cache控制器将来自CPU的数据读写请求,转向Cache存储器,如果数据在Cache中,则CPU对Cache进行读写操作,称为一次命中.命中时,CPU从Cache中读(写)数据.由于Cache速度CPU速度相匹配,因此不需要插入等待状态,故CPU处于零等待状态,也就是说也就是说CPU与Cache达到了同步,因此,有时称高速缓存为同步Cache;若数据不在Cache中,则CPU对主存操作,称为一次失败.失败时, CPU必须在其总线周期中插入等待周期TW.
在主存—Cache存储体系中,所有的程序代码和数据仍然都存放在主存中,
Cache存储器只是在系统运行过程中,动态地存放了主存中的一部分程序块和
数据块的副本,这是一种以块为单位的存储方式.块的大小称为"块长",块长一般取一个主存周期所能调出的信息长度.
假设主存的地址码为n位,则其共有2n个单元,将主存分块(block),每块有B个字节,则一共可以分成2n/B块.Cache也由同样大小的块组成,由于其容量小,所以块的数目小得多,也就是说,主存中只有一小部分块的内容可存放在Cache中.在Cache中,每一块外加有一个标记,指明它是主存中哪一块的副本,所以该标记的内容相当于主存中块的编号.假定主存地址为n="M"+b位,其中M称为主存的块地址,而b则称为主存的块内地址,即:主存的块数为2M,块内字节数为2b;同样,假定Cache地址n="N"十b位,其中N称为Cache块地址,而b为Cache的块内地址,即Cache的块数为2N,块内字节数为2b,通常使主存与Cache的块内地址码数量相同,即b="b",即Cache的块内字节数与主存的块内字节数相同.
当CPU发出读请求时,将主存地址M位(或M位中的一部分)与Cache某块的标记相比较,根据其比较结果是否相等而区分出两种情况:当比较结果相等时,说明需要的数据已在Cache中,那么直接访问Cache就行了,在CPU与Cache之间,通常一次传送一个字;当比较结果不相等时,说明需要的数据尚未调入Cache,那么就要把该数据所在的整个字块从主存一次调进来
Software Driver
SST39VF1601/SST39VF1602
16 Mbit Multi-Purpose Flash (MPF+)
http://www.sst.com/downloads/software_driver/SST39VF160x.txt
文章评论(0条评论)
登录后参与讨论