The Processor
单周期处理器
核心子集
- 存储器访问指令:
ld和sd - 算术逻辑指令:
add/sub/and/or - 条件分支指令:
beq
指令执行核心逻辑
- 程序计数器(PC)发送到指令所在的存储单元,并从中取出指令
- 根据指令的某些字段选择要读取的一个或两个寄存器
- 对于
ld指令,只需要读取一个寄存器,但大多数其他指令需要读取两个寄存器
- 对于
- 所有类型的指令在读取寄存器后都使用算术逻辑单元(ALU)进行运算
- 经过 ALU 后完成各类指令的所需操作都不同
基础的抽象电路图
![[images/Pasted image 20260113211749.png]]
- PC 的数据来自两个加法器中的一个,需要根据一个数据选择器(multiplexor)进行选择
- ALU 的第二个输入来自寄存器或者立即数,也需要一个数据选择器进行选择
- ALU 的控制线会根据指令的字段来设置,从而控制 ALU 的运算类型
加入选择器的电路图
![[images/Pasted image 20260113212133.png]]
- 上面的 Mux 控制 PC,当 ALU 输出为 0 且指令为
beq时选择分支目标地址,否则为 PC + 4 - 中间的 Mux 控制是将 ALU 的输出还是数据存储器的输出存入寄存器堆
- 下面的 Mux 控制 ALU 第二个输入来自寄存器,还是立即数
- 控制单元 Control:根据指令确定 ALU 的运算类型、数据存储器的读写、寄存器堆的写入
逻辑设计的一般方法
RISC-V 实现的数据通路包含两种逻辑单元:
- 处理数据的单元:组合逻辑
- 无内部存储功能
- 输出仅依赖于当前输入
- 给定相同输入,总是产生相同输出
- 存储状态的单元:状态逻辑
- 有内部存储功能
- 至少有两个输入和一个输出
- 写入状态单元的数据值
- 决定写入时间的时钟信号
- 包含触发器、存储器、寄存器
- 写入时间由时钟确定,但可以随时被读
时钟同步方法
时钟同步方法(Clocking Methodology)规定了信号可以读出和写入的时间,避免新值和旧值的冲突
边沿触发时钟
- 存储在时序逻辑单元中的所有值仅在时钟边沿更新
- 如果状态单元在每个有效始终边沿都进行写入,则可忽略写控制信号
![[images/Pasted image 20260114102718.png]]
在边沿触发的时钟同步方法中,需在一个时钟周期内读出寄存器的值,并使之经过组合逻辑单元,将新值写入该寄存器
![[images/Pasted image 20260114103754.png]]
- 可以在同一个时间周期内进行读和写,不会因为竞争出现中间数据
- 但是时钟周期必须足够长,且没有反馈
所以不需要为状态单元准备备份
建立数据通路
数据通路单元(datapath element)
- 用来操作或保存处理器中数据的单元
- 包括指令存储器、数据存储器、寄存器堆、ALU、加法器
![[images/Pasted image 20260114104309.png]]
- 指令存储器只提供读
- 程序计数器是 64 位寄存器,在每个时钟周期结束时都会被写入,不需要写控制信号
- 加法器是固定控制信号为 Add 的 ALU
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 木素音的小站!