理解cache,SET、WAY、TAG、INDEX,这几个概念是关键。 tag是内存地址的高位部分,存储在cache中用于标识相应的数据。一般来说cache的大小指的是所保存的数据规模,并不包括其中需要储存tag的物理空间。很多时候并不是一个tag对应一个数据,而是对应一组数据,这一组数据块称为cache line,即cache读写的最小的粒度。 cac...
Cache本质就是一个硬件hash表(Tag RAM)+SRAM(DATA RAM),一般来说Cache的大小指的是DATA RAM的数据规模,并不包括Tag RAM的物理空间。 Cache的属性 line:代表一个cacheline,cache中最小访问单元,常见的cache …
一般来说,一个主流的 CPU 的 Cache Line 是 64 Bytes(也有的 CPU 用 32Bytes 和 128Bytes),64Bytes也就是 16 个 32 位的数字,这就是 CPU 从内存中捞数据上来的最小数据单位。比如:Cache Line是最小单位(64Bytes),所以先把 Cache 分布多 个Cache Line。比如:L1有 32KB,那么 32KB/64B = 512 个 Cac...
我们将cache平均分成相等的很多块,每一个块大小称之为cache line,其大小是cache line size。例如一个64 Bytes大小的cache。如果我们将64 Bytes平均分成64块,那么cache line就是1字节,总共64行cache line。如果我们将64 Bytes平均分成8块,那么cache line就是8字节,总共8行cache line。现在的硬件设计中,一般cache l...
Way -- 相当于Cache的一页,如上述示例,Cache就有2 Ways Set -- 每个Way里的同一Cache Line组成Set 这里理解了,英飞凌描述的2-way set associative DCache是不是就手拿把攥了。 英飞凌每个CPU都有16K DCache,Cache Line为32Bytes,因此总共有512个Cache Line。那么针对memory地址就可以分为: ...
Offset:地址编码中的offset域,cache line中的偏移量,可按word和byte来寻址; Tag:Tag在cache中占用实际的物理空间,用于存储缓存地址的高位部分,通过与地址编码中的Tag域进行比较来确定是否cache hit; Way:cache分成大小相同的子块,每个子块以相同的方式进行索引; ...
由于是4-way 组相连结构,cache line 可以存在与任意一个way中,所以我们的cache way可能为0,1,2,3中任意一个数字。 求得了set和way的index后,需要对其进行编码,然后写入到Data Cache Tag Read Operation Register寄存器中。其编码规则如下图所示,只需将Set和way的值写入对应的bit中即可,其中Rd[5:3]为cahche...
(考虑page 0和page 1的line 0都映射到cache line 0, 而程序又试图交替访问page 0和page 1中的line 0)- 组关联(set associative): cache被划分成多个等大小(典型的值是2, 4, 8, 16, …)的部分, 每一个部分称作是一个 cache way; 而主存则会被划分成多个cache page, 每个cache page...
取消index信号,每个cache line占一个way。其实就相当于不考虑offset的3bit,其余地址一个一个放在表中的一条一条上,在这个表里挨个查,显而易见只适合小容量的cache。 此时查找是否命中,需要将地址的tag与所有组的tag进行比较。 因为不存在index,任意数据可以存在任意位置,可以最大程度降低cache的颠簸性。 硬件成本最...
Cache line(缓存行)。 line中的数据部分被称为数据块(Cache data block) 一些Cache line不只有这两部分,有个有效位(valid)和脏位(dirty)甚至还有的把历史位加上去的设计(分支历史) 一系列Cache line组成了Cache Way(缓存路)。 能够被同一个地址找到的所有Cache line称为Cache Set(缓存组)。 Cache基本组成 Cac...