Menu Close

CPU cache设计由来

cpu的本质是一个解码和执行的指令的硬件逻辑。 几乎所有cpu都要执行:

读取指令(取指),即从存储设备上读取机器码,这些机器码是有软件编码形成的, 并且被存储在一个或者多个存储设备中。

翻译软件汇编语言形成的机器码(译码),即软件方面是编码过程, cpu 硬件执行的译码过程。

执行译码的结果(执行),即译码的内容被cpu翻译,执行相应的操作,包括加减乘除, 移位,存储,跳转等指令

访问存储器(访存),读取存储器里面的内容(数据)完成指令的执行

寄存器回写(回写),对cpu内部寄存器的内容进行更改。

以上5个步骤是被经常使用的, 其中可以合并某些步骤,但不能缺少; 也可以增加或者说细化某些步骤,使得逻辑链更短,cpu运行速度更高。现代cpu设计中往往通过细化这些步骤,实现5级,7级,13及。。。 33级。。等流水线,目的是在现有生产工艺不变的情况下,使得cpu运行速度更高。但同样也带来相应的问题:即cpu设计变得更加复杂。

其中在取指过程中, 现代cpu就遇到的实际问题。

1 cpu 缓存(cache)的由来

现代cpu设计中,往往使用eerpom,flash ,物理磁盘 等技术来存储要执行的程序,或者数据。cpu可以直接或者间接读取存储器里面的指令,数据实现取指操作,这种做法没有问题, 就是取指效率比较低,原因是eeprom,flash,物理磁盘等读取速度不是很快(和内存相比),带宽也不是太高。影响cpu执行速度。

在对cpu执行速度要求不高的设计中也可以直接读取存储器,实现cpu 取指操作,但对cpu执行速度要求高的场合, 这样的设计很显然不是很好了。这时人们就想如果在cpu内部设计出一个片内memory (片内存储器),每次cpu上电的时候, 将物理存储器中的指令,数据一次性搬移到片内存储器中,然后在片内存储器中执行,这样cpu取指速度不就提高了吗。 是的,这是一种设计方法, 有些cpu也确实可以这样设计。这种设计几乎完美。但也存在一些问题:

1)就是设计多大的片内存储器能够满足cpu程序的执行要求呢?,由于是片内存储器,答案是不知道。这不像是cpu外部存储器, 不够可以增加,片内存储器很难做到。

2)增大cpu 片内存储器会使得cpu芯片价格有显著的提高,即生产的cpu 价格会比较高。这对cpu的销售是极为不利的。

所以在一些以性能为主的cpu设计中,人们想到得了使用片内存储器结合片外存储器的设计。即cpu内部也设计存储器,但不是很大,使用片外存储器实现指令,数据的存储。这种设计也存在一些问题:

1)不能一次性将指令,数据搬移到片内存储器中,原因片内存储器不够大,装不下。但是节约了生产成本,有利于cpu销售。

2)cpu设计会复杂一些,需要根据执行的程序不同, 将外部存储器里面的指令,数据动态的搬移到片内存储器中,执行。

虽然有以上的问题, 但也是一个解决方案,并且这种设计已经成为追求性能的cpu中的主流设计。也是cache产生的最根本原因。

2.为什么不能直接使用片外存储器,而使用内部存储器呢。

主要原因是,现代外部存储器设计主要使用的的是ddr技术。优点是:

这种技术生产的memory单位价格便宜,

容量可以很大,

批量读取时,带宽也是非常高的。

缺点是

功耗较高,

p随机读取非常慢,(批量读取效率很高,但是随机读取不行),这一缺点直接影响了现代cpu设计。因此需要使用片内存储器将片外的指令,数据搬移到片内执行,即cache机制。

Posted in FPGA, Verilog, 教材与教案, 文章

发表回复

相关链接