一,介绍
在接下来的几节课中,我们将描述如何构建处理器。
处理器由两部分组成:
- 实现计算的DataPath
- 查看指令并告诉数据路径要做什么的Control Logic
DataPath 就像人的四肢,Control Logic 就像人的大脑一样,操控四肢,从而实现创造。
现在,让我们从了解DataPath 开始吧!
首先,我们需要回顾之前学习的指令。我们知道,四肢之所以人够运动,是因为大脑在发出命令,从而实现的。同理, DataPath, 在此我们把命令看成由数字组成的指令。
以下就是我们之前学习的所有指令的格式:
One-Instruction-Per-Cycle RISC-V Machine
在时钟的每个滴答声中,处理器执行一条指令
- 当前状态输出驱动组合逻辑的输入, 其输出稳定在值下一个时钟之前的状态边缘
- 在时钟的上升沿,所有的状态元素更新为组合逻辑输出,执行移至下一个 时钟周期
- 独立的指令/数据存储器: 为简化起见,内存是 异步读取(无时钟), 但同步写入(有时钟)
状态元素就是0/1,随着Clock发生变化。(包含延迟)
五个阶段
- (IF)获取指令:将地址发送到指令存储器(IMEM),并在该处读取IMEM地址
- (ID)译码:从指令位生成控制信号,生成立即数,并从RegFile中读取寄存器。
- 执行(ALU):执行ALU操作,并进行分支比较。
- (MEM)访存:读取后写入数据存储器(DMEM)
- (WB)写回:写回PC+4、ALU操作的结果后来自内存的dataR到RegFile DataD
接下来,我们将从简单的指令(add)开始,一步步的实现完整的DataPath.
SUB
首先,对比一下ADD与SUB的差异——ALUSel
求同存异——所有R型指令,就完成啦!
Implementing the addi
多了一个立即数生成器、多路复用器、ImmSel、BSel
实现I型指令——指令格式的改变。(立即数imm[31:0])
Implementing Load Word
Implementing Store Word
I 型指令已实现
集成I&S
Implementing Branches——增加分支比较器,alu(PC+4的竞争对手)——这意味着B型指令,比I型指令跨越的距离更远(地址)