计算机组成和设计 - 存储器

201 阅读4分钟

很多低功耗的处理器并没有配备缓存,而是使用了延迟确定的指令紧密耦合存储器ITCM或者数据紧密耦合存储器DTCM。

处理器一定要有存储器

计算机体系结构:

冯诺依曼结构中,指令的存储地址和数据的存储地址指向同一存储器的不同物理空间。

哈佛结构:指令存储器和数据存储器分开的计算机体系结构。

哈佛结构特点:

程序和数据存储在不同存储空间,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问。

与两个存储器相对应的是两条指令总线和数据总线,这种分离的总线使处理器在一个时钟周期内同时获得指令字和操作数(来自数据存储器),从而提升速度和数据的吞吐率。

由于指令和数据存在于两个分开的物理空间,因此取址和执行完全并行。

现代处理器,有的,程序的指令存储地址和数据存储地址指向同一地址空间的不同物理地址,并且共享读写访问通道。因此符合冯诺依曼体系。

但对于有缓存的处理器来说,又属于哈佛体系。

蜂鸟E203

蜂鸟E203配备了专用的总线分别访问ITCM和DTCM。从这方面来说蜂鸟E203处理器核属于哈佛结构。

load和store

RV32I是一个load-store体系结构,也就是说,只有load和store指令可以访问存储器,而算术指令只在CPU寄存器上进行操作运算。RV32I提供了一个32位用户地址空间,它是字节寻址并且是小端的。执行环境将定义这个地址空间的哪些部分是可以合法访问的。

image.png

Load和store指令在寄存器和存储器之间传输数值。Load指令编码为I类格式,而store指令编码为S类格式。有效字节地址是通过将寄存器rs1与符号扩展的12位偏移量相加而获得的。Load指令将存储器中的一个值复制到寄存器rd中。

Store指令将寄存器rs2中的值复制到存储器中。

LW指令将一个32位数值从存储器复制到rd中。LH指令从存储器中读取一个16位数值, 然后将其进行符号扩展到32位,再保存到rd中。

LHU指令存储器中读取一个16位数值,然后将其进行零扩展到32位,再保存到rd中。对于8位数值,LB和LBU指令的定义与前面类似。SW、SH、SB指令分别将从rs2低位开始的32位、16位、8位数值保存到存储器中。

为了获得最高的性能,所有load和store指令的有效地址,应该与该指令对应的数据类型相对齐(也就是说,32位访问应该在4字节边界对齐,16位访问应该在2字节边界对齐)。基本ISA支持非对齐的访问,但是根据实现的不同,这可能会运行得非常慢。

CPU内部主要由:

寄存器(Register):多种寄存器各司其职,有程序计数器(即程序指针PC,Program Counter),用来记录要执行的指令的地址;指令寄存器,用来暂存指令内容;数据寄存器,一般为通用寄存器,用来保存指令执行过程中临时存放的寄存器操作数和中间(或最终)的操作结果。

控制单元(Control):以流水线的方式对指令进行取指,译码,执行,并且发出为完成每条指令所要执行的各个操作的控制信号。

算术逻辑运算单元(ALU,Arithmetic Logic Unit):用来执行定点或浮点算术运算操作、移位操作以及逻辑操作,也可执行地址运算和转换。

译码电路

1.根据指令内容,解析出当前具体是哪一条指令(比如add指令);

2.根据具体的指令,确定当前指令涉及的寄存器。比如读寄存器是一个还是两个,是否需要写寄存器以及写哪一个寄存器;

3.访存:访问通用寄存器,得到要读的寄存器的值(地址)