高速缓冲存储器的设计与实现
作者:魏素英,彭 洪,林正浩 时间:2006-10-12 01:20 来源:
摘 要:随着芯片集成度的提高,在高速CPU与低速内存之间插入有缓冲作用的速度较快、容量较小的高速缓冲存储器,解决了两者速度的平衡和匹配问题,对微处理器整体性能有很大提高。本文从高速缓存的结构和基本理论出发,理论结合实际,介绍了32位高性能、低功耗嵌入式微处理器中高速缓存的实现方法,从RTL设计到版图设计的各个部分进行了论述,并介绍了该模块全定制部分电路和版图的实现。
关键词: 32位嵌入式CPU;高速缓存;基本结构;全定制;电路和版图设计
引言早期计算机的CPU与主存的工作速度较为接近,主存的速度并不影响整机的运算速度。随着IC设计和半导体制造工艺的发展,CPU的运行速度远高于主存的速度。这要求系统中主存的存取速度提高,存储容量增大。而主存储器一般采用DRAM (动态随机存储器) ,其容量的提高是比较快的,但是读取速度的提高却很慢,因此在速度上与CPU主频的提高产生了不相配的情况。为解决高速CPU 与低速内存之间的速度差异,最经济、有效的方法是在两者之间插入容量不大但操作速度很高的存储器高速缓存(Cache) ,起到缓冲作用,使CPU既可以以较快速度存取Cache 中的数据,又不使系统成本过高。
基本原理Cache由控制和存储器2部分组成,如图1所示,其中虚线框内为控制部分。Cache的存储器中存放着主存的部分拷贝,其控制部分有3 个功能:
(1) 判断要访问的数据是否在Cache中,若在,为命中;否则,为未命中。
(2) 命中时,进行Cache 的寻址。
(3) 未命中时,按替换原则,确定主存中的信息块要读入到Cache 中的哪个信息块空间。

图1 Cache 的逻辑结构
CPU提供给Cache的地址是主存的地址,要访问Cache,就必须将这个地址变换成Cache 的地址,这种地址变换为地址映射,Cache的地址映射有如下3 种:
(1) 直接映射
一种最简单而又直接的映射方法,指主存中每个块只能映射到Cache的一个特定的块。在该方法中,Cache块地址j 和主存块地址i的关系为:
j =imod Cb 来计算,其中
Cb 是Cache 的块数。这样,整个Cache 地址与主存地址的低位部分完全相同。图1 的块地址变换部件收到CPU 送来的主存块地址后,根据映射函数及标记,就能判断出访问是否命中。直接映射法的优点是所需硬件简单,只需要容量较小的按地址访问的区号标志表存储器和少量比较电路;缺点是Cache块冲突概率较高,只要有两个或两个以上经常使用的块恰好被映射到Cache中的同一个块位置时,就会使Cache 命中率急剧下降。
(2) 全相联映射
这种映射方式允许主存的每一块信息可以存到Cache的任何一个块空间,也允许从已被占满的Cache中替换掉任何一块信息。全相联映射的优点是块冲突概率低,其缺点是访问速度慢,并且成本太高。
(3) 组相联映射
在这种映射方式中,把Cache分为2
e组,每组包含2
r个信息块,Cache 共有2
n =2
e+r个信息块,主存共有2
m =2
t+e+r个信息块,是Cache的2
t倍。这种映射方式在组间是直接映射,而组内是全相联映射,其性能和复杂性介于直接映射和全相联映射之间。当r =0时,就成为直接映射方式;当r =n时,就是全相联映射。
Cache tag和Cache index是Cache映射的两个常用术语。在本设计中指令/数据采用直接映射(direct mapped)的规则。其存储层次结构如图2所示,由有效位块、标签块和数据块3 部分组成。地址的高20位作标签,低12位作索引,其中最低两位作字选择的索引,而高10 位作Cache行的索引。4 kB 的Cache,每个Cache 块为16 B,共有256个Cache行。在读/写Cache时,每行4个字用2 位来选择。

图2 存储层次结构
相应的,Cache tag以及对应的数据就组成一条Cacheline,还有一位有效位(Valid Bit) 是标志位。如图3 所示。

图3 Cache line
Cache block为一条Cache line中所包括的数据。在图2中block 大小为4 个字,即16B。
Cache 设计与实现在MIPS324Kc中,数据/指令Cache用虚拟地址作索引、物理地址作标签,Cache的访问和虚拟地址到物理地址的转化同时进行,标签包括22位物理地址、4位有效位、1位锁标志位和替换标志位。基于MIPS32 4Kc指令集,本课题在研究、开发高性能低功耗的32位嵌入式微处理器芯片中,Cache的设计采用哈佛总线结构,支持4 kB指令Cache和4kB数据Cache 的并发访问,访问方式为用虚拟地址作行(块)索引、用物理地址作比较标记(virtual indexed,physical tagged) ,实现的读写策略为直通写加写缺失不分配(noallocated) ,写数据时,无论Cache命中与否都将数据和物理地址送入BIU 的write buffer;读数据Cache缺失时,将数据的物理地址送到BIU ,并把从BIU 读的数据写入readbuffer,在适当时候写回Cache。
电路设计和版图设计都属于物理设计阶段,此阶段主要有2 种设计方法:全定制(full-custom)设计和自动综合。
采用全定制设计方法,RTL 设计后,用手工实现电路和版图,这种方法开发周期长,但可以使芯片获得更好的性能。采用自动综合的方法是将RTL设计阶段的代码用综合工具生成网表,再将生成的网表用自动综合工具自动生成版图,这种方法相对全定制设计开发周期短、工作量小,但芯片性能相对差。
以下通过介绍微处理器中Dcache的电路(图4)实现来说明高速缓冲存储器的电路结构。数据缓存Dcache的电路由4部分组成:控制单元(control unit)、数据静态存储器(data SRAM)、标签静态存储器(tag SRAM)和数据通道(datapath),数据存储器大小为1024×32B,可进行字节操作;标签存储器大小为256×24B,可进行位操作。设计中针对不同的部分采用不同的设计方法,对时延要求较小、逻辑功能复杂的控制模块采用自动综合方法;对时延要求较高,改善空间较大的数据通道部分采用全定制设计。全定制数据通道电路如图5 所示。

图4 数据缓冲存储器的电路
其电路分为4个部分:32位数据和地址传输部分、标志位锁存比较部分、12位索引地址传输部分以及驱动部分。采用的电路单元主要有: LATCH (同步寄存器)、MUX21(2选1选择器)、COMPARATOR(比较器)、INVERTER (反相器)。这些单元都是整个项目设计中共用的模块,设计简单,不仅降低了版图设计的工作量,而且提高了整个芯片的性能。设计出来的电路逻辑是否正确,时延是否满足要求,分别需要做功能验证和电路仿真。在验证了各个小模块的正确性之后,验证小模块之间的逻辑连接正确性,最后对整个模块的进行验证,确定了该模块能达到预期的逻辑设计要求。进一步分析电路,找出模块中的最长路径,通过仿真、更改电路再仿真的过程,最后达到满足设计时延要求。

图5 数据缓冲存储器的数据通道部分的电路
当前芯片生产工艺达到深亚微米,导线负载的比重日益增加。采用全定制的芯片设计,可以根据数据通道电路的规则手工设计出合理的版图。其优势是在实现上可以尽量减小每个单元的面积和时延,降低器件的负载电容。
版图设计全定制过程分两步完成,每个大单元电路总是由各种基本电路组合而成,所以第一步是绘制基本电路的版图,画完后做DRC (Design Rule Check) 和LVS(Layout VsSchematic),保证基本电路的正确性。第二步用这些基本电路来组合成大的单元。数据缓冲存储器的数据通道部分的版图实现如图6 所示。上端与数据静态存储器连接,左侧与标签静态存储器连接,右端与控制单元连接。此版图通过了DRC/LVS,逻辑功能正确。

图6 数据缓冲存储器的数据通道部分版图
结 语
本项目设计开发的32位全定制高性能嵌入式CPU已经测试成功,从测试结果可知,CPU中高速缓冲存储器的设计在逻辑功能和时延上都达到了预期的要求。项目中采用全定制设计流程完成,实现了整个芯片高频率、低功耗和低芯片面积的设计要求。