11章 哈佛还是比亚迪(存储器)
write by ChiHuiXuan
主要内容:处理器架构(蜂鸟处理器等)
介绍蜂鸟E200处理器核存储器子系统的微架构和源码分析
11.1 存储器架构
11.1.1 无缓存(cache)
- 缓存
- 缓存的一些基础知识
- 低功耗处理器不配备缓存的原因
-
无法保证实时性
由于缓存的容量是有限的,因此访问缓存存在着相当大的不确定性。一旦缓存不命中,则需要从外部的存储器中存取数据,造成较长的延迟 因此更加倾向于使用延迟确定的ITCM或者DTCM
-
软件规模较小
ITCM/DTCM便可以满足其需求
-
面积功耗大
-
11.1.2 处理器一定要有存储器
虽然处理器不一定需要缓存,但是处理器是一定需要存储器的。
-
冯诺依曼结构(普林斯顿结构)
-
指令和数据合并
-
哈佛结构
- 指令和数据分开存储
-
两种结构的界限变得模糊
- 从软件的角度来,系统往往只有一套地址空间,因此这符合冯·诺依曼体系结构的准则。
- 从硬件实现的角,现代处理器配备指令和数据存储器,因此符合哈佛结构。
- 冯·诺依曼结构和哈佛结构并不是一种非此即彼的选择。
11.1.3 ITCM 和 DTCM
- ITCM 和 DTCM比cache更适合嵌入式低功耗处理器。
- 能够保证实时性
- 能够满足软件需求
- 面积功耗小
11.2 risc-v 对于访存指令的简化
1.仅支持小端格式
2.无地址自增自减模式
3.一次只读/写一个数据
11.2.1 仅支持小端格式
- 可以简化硬件的实现,无须做特别的数据转换
11.2.2 无地址自增自减模式
- 简化生成逻辑
11.2.3 一次只读/写一个数据
- 硬件设计十分简单
11.3 risc-v访存指令
11.3.1 Load和Store指令
-
除了load和store指令,其他指令都无法访存
-
7条访存指令
LH,LHU,LB,LBU,LW,SB,SH,SW
- 推荐使用地址对齐的操作
11.3.2 Fence指令
-
松散存储器模型,对执行顺序不做要求
-
Fence和Fence.I两条存储器屏障指令
-
Fence
“在Fence指令之前指令的访存结果”必须比“在Fence指令之后指令的访存结果”先被观测到。
-
Fence.I
“在Fence.I指令之后指令的操作”必须能观测到“在Fence.I指令之前指令的操作”。
-
11.3.3 A扩展指令
- 用于支持多线程情况下访存的原子或同步操作
- AMO指令
- Load-Reserved和Store-Conditional指令
11.4 蜂鸟E200存储系统的硬件实现
11.4.1 总体设计思路
主要包含四个组件
-
AGU
生成读和写指令的访存地址
-
LSU
控制模块
-
ITCM
指令存储部件
-
DTCM
数据存储部件
11.4.2 AGU
主要用于产生读/写指令等的访存地址
-
将第一个寄存器索引的源操作数和立即数相加,复用了ALU单元
-
RISC-V 架构对于地址非对齐的读和写指令,可以使用硬件支持, 也可以使用软件通过异常服务程序的方式采用软件支持。
11.4.3 LSU
蜂鸟E200处理器核存储器子系统的主要控制单元
- 代码实现和BIU相似
- LSU 有2组输入 ICB 总线接口,分别来自于 AGU 单元和 EAl 协处理器;有3组输出 ICB 总线接口,分别分发给 BIU,DTCM,ITCM 。
- “ICB汇合”
- "ICB分发”
- 最终的返回数据经过操作尺寸对齐之后,经过 LSU 的写回接口写回。
11.4 4 ITCM和DTCM
蜂鸟E200配备了专用的 ITCM(数据宽度为 64 位)和 DTCM(数据宽度为 32 位)。
-
哈佛结构和冯诺依曼结构的严格界限已经变得模糊
-
蜂鸟E200处理器有专用的总线分别访问 ITCM和DTCM---------哈佛结构
-
ITCM所在的地址区间同样能够通过 LSU 被读和写指令访问到用,于存储数据-------冯诺依曼结构
-
-
ITCM 的存储器主体由一块数据宽度为 64 位的单口 SRAM 组成。
-
ITCM 用数据宽度为 64 位能够取得更低的功耗消耗。
1.比32位的SRAM面积更加紧凑 2.64位宽的ITCM可以1次取出64位的指令流
-
ITCM 的相关源代码
-
3组输入 ICB 总线“ICB 汇合”,采用的仲裁机制是优先级仲裁
- LSU 的访问接口
- IFU专用的 ICB 接口
- 外部直接访问接口
- DTCM 的微架构
- DTCM 的存储器主体由一块数据宽度为32位的单口SRAM组成
- DTCM 有两组输入 ICB 总线接口,经过一个“ICB 汇合”
- LSU接口
- 外部直接访问接口
11.4.5 “A”扩展指令处理
“A”扩展子集对于蜂鸟 E200 这样的极低功耗处理而言未必是必须要支持的部分
默认支持“A”扩展子集。
-
“A”扩展指令分为两类
-
Load-Reserved和Store-Conditional 指令的硬件实现
在LSU单元中设置了互斥检测器 当有Load-Reserved执行时,设置互斥检测器的有效标志 当有Store-Conditional执行时,如果写指令访问存储器的地址和互斥检测器中存储的地址一样,则将互斥检测器的有效标志清除掉
-
AMO指令的硬件实现
-
在AGU单元中使用了状态机将 AMO 指令拆分为若干个不同的微操作
1.先拆分出一个存储器读操作 2.算术运算 3.写入存储器
-
-
-
蜂鸟E200只能够在单核独自访问存储器时,才能保证程序执行的“A”扩展指令结果正确。(局限性)
11.4.6 Fence与Fence.I指令
- 派遣Fence和Fence.I指令之前必须等待所有己经滞外的指令执行完毕
- e203_exu_disp.v 源代码(github)
11.4.7 BIU
- 蜂鸟 E200 处理器核还能通过 BIU 访问外部的存储器
11.4.8 ECC
- 使用 ECC (Error Checking and Correction)算法对 SRAM 进行保护
11.4.9 小结
- 使用了两级流水线的超低功耗架构
- 配备了 ITCM 和 DTCM 及其专用的访问通道
- 配备了多样的外部存储器访问接口