-
冯诺依曼结构(普林斯顿结构)
-
指令和数据合并
-
哈佛结构
- 指令和数据分开存储
-
两种结构的界限变得模糊
- 从软件的角度来,系统往往只有一套地址空间,因此这符合冯·诺依曼体系结构的准则。
- 从硬件实现的角,现代处理器配备指令和数据存储器,因此符合哈佛结构。
- 冯·诺依曼结构和哈佛结构并不是一种非此即彼的选择。
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执行时,如果写指令访问存储器的地址和互斥检测器中存储的地址一样,则将互斥检测器的有效标志清除掉
- [**e203\_lsu\_ctrl.v 源代码(github)**](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)
-
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 访问外部的存储器