【计算机组成原理】RISC-V模型机的有限状态控制器设计

目录

一、RISC-V模型机的目标指令集

二、RISC-V模型机的部件设计

三、运算及传送指令的数据通路设计

四、访存指令的数据通路设计

五、转移类指令的数据通路设计

六、RISC-V模型机控制单元CU的有限状态机设计


一、RISC-V模型机的目标指令集

取指令并译码:根据PC从内存取出指令,PC+4 -> PC,译码

执行指令:首先根据指令字的字段,取出1~2个寄存器(rs1,rs2)内容,再根据指令具体功能,做不同操作

  • 算术逻辑运算:ALU运算,写寄存器
  • 传送类指令:生成立即数,写寄存器
  • 访存指令:计算存储器地址(ALU运算),读/写存储器
  • 转移类指令:比较数据(ALU运算),PC+偏移量 -> PC

二、RISC-V模型机的部件设计

CPU性能的重要指标:CPU速度(执行时间)

CPU执行指标 = 程序指令数 × 每条指令的时钟周期数(CPI)× 时钟周期长度

  • 单周期CPU:CPI = 1,但是时钟周期很长
  • 多周期CPU:CPI > 1,但是时钟周期很短,且某些硬件部件可共享

从CPU效率指标考虑,我们设计的RV32I的25条核心指令集,采用:

  • 直接连接(无总线)
  • 多周期CPU(性能和硬件成本优于单周期CPU)
  • 哈佛结构(指令和数据分开存储)

1. 指令存储器及取指令部件——取指令IF

  • 程序计数器 PC:存放指令地址,32位,取指令后自增4个字节(独立加法器)
  • 指令寄存器 IR:存放指令代码,32位
  • Mem[PC] -> IR, PC+4 -> PC
  • clk上跳沿:取指令(读存储器)
  • clk下跳沿:指令置入IR,更新PC

2. 指令译码器与立即数生成器——指令译码ID

(1)指令译码器

  • 初级译码器 ID1:①指令字段与格式解析器;②立即数生成器
  • 二级译码器 ID2:产生指令信号、ALU_OP

(2)立即数生成器

  • 立即数拼接与生成器:按照各格式,对立即数进行拼接与拓展,产生6个32位立即数
  • 6选1多路选择器:按照当前指令的格式,在6个立即数中选择一个输出,记为imm32

(3)指令二级译码器

  • 输入:ID1产生的opcode、func3、func7
  • 输出:指令信息8个,运算码ALU_OP

3. 运算器部件——执行EX

(1)通用寄存器堆 Regs

  • 32×32位寄存器,寄存器地址5位
  • 三端口:两个读端口,一个写端口(同时读出2个寄存器,写入1个寄存器)
  • 读出无需时钟,写入需要时钟
  • 读出的数据写入暂存器A和B,时钟clk_RR控制打入

(2)多功能运算部件 ALU

  • 32位,进行算术、逻辑、比较置数、移位运算
  • 选择信号:运算功能码ALU_OP
  • 组合逻辑电路:无需时钟信号
  • clk_F:将运算结果打入暂存器F

(3)标志位寄存器 FR 及标志位产生部件 FlagU

  • 组合逻辑电路
  • 输入:运算结果ALU_F
  • 输出:ZF、SF、CF、OF
  • 标志位寄存器 FR:保存ZF、SF、CF、OF信号
  • clk_F:将ZF、SF、CF、OF打入FR

(4)暂存器A、B、F

  • 32位寄存器,在多周期CPU中,一个机器周期操作的结果要存到暂存器中,供下个机器周期操作使用

4. 数据存储器 DM

  • 地址32位,数据32位,按字节编址,小端存储
  • clk_dm上跳沿:Mem_Write=0(读);Mem_Write=1(写)
  • DM_Addr:字地址(30位)
  • M_R_Data:读出数据
  • M_W_Data:写入数据

三、运算及传送指令的数据通路设计

如何连接部件?建立数据通路

1. 运算型指令——R型指令

  • 指令存储器 IM:取指令,由PC提供地址,在clk的上跳沿完成读操作,在clk下跳沿将机器指令写入IR
  • PC的控制:自增通过专有加法器完成,不受时钟控制,更新在clk下跳沿完成(PC_Write=1)
  • IR的控制:更新在clk的下跳沿完成(IR_Write=1)
  • 指令初级译码器:读出32位指令,各字段分别送数据通路部件(rs1、rs2、rd送寄存器堆地址,opcode、func3、func7送二级译码器ID2译码)
  • 寄存器堆:2个读端地址(rs1、rs2),一个写端地址(rd),2个读数据输出端口(直接打入暂存器A、B保存),一个写数据输出端口(从暂存器F的输出端引入),写控制信号在clk下跳沿有效(Reg_Write)
  • ALU:10种运算功能,由4位ALU_OP指定,输入A、B由暂存器A、B的输出端提供,运算结果输出暂存器F

2. 运算型指令——I型指令

3. 传送类指令——U型指令

 

 

四、访存指令的数据通路设计

①访问DM时,地址DM_Addr从哪里来?

  • EA = Reg[rs1] + imm32,如何实现地址加法?
  • Reg[rs1] -> A,rs2_imm_s = 1,则 A + imm32 -> F
  • 故访问DM时,地址DM_Addr可以直接由暂存器提供

 ②执行DM读操作时,读出的数据M_R_Data到哪里去?

  • lw指令执行DM读操作,读出的数据写入rd寄存器
  • 存储器读出数据端设置一个暂存器MDR,保存存储器读出的数据
  • 在下一个周期再将MDR的内容写回到rd寄存器
  • 故执行DM读操作时,读出的数据M_R_Data保存到MDR寄存器
  • 写回周期写入rd的写数据W_Data来源,多了MDR,故W_Data的二选一变成三选一

③执行DM写操作时,写入的数据M_W_Data由谁提供?

  • sw指令执行数据存储器的写操作,写入的数据是rs2寄存器的内容
  • rs2寄存器的内容保存在B暂存器中
  • 故执行DM写操作时,写入的数据M_W_Data由暂存器B提供

数据存储器

  • 地址:暂存器F提供,Why? EA = rs1 + imm32
  • 读出数据:接暂存器MDR,clk上跳沿读出,下跳沿打入MDR
  • 写入数据:从暂存器B引入,Why?sw指令:rs2 -> Mem,rs2内容在B中
  • 写使能信号:Mem_Write = 1,clk上跳沿写入

W_Data的三选一数据选择器

  • R型指令:w_data_s = 0,W_Data = F
  • I型运算指令:w_data_s = 0,W_Data = F
  • U型指令lui:w_data_s = 1,W_Data = imm32
  • I型访存指令lw:w_data_s = 2,W_Data = MDR

MDR

  • 输入:DMem读出数据
  • clk下跳沿读出数据打入MDR
  • 输出:数据写入W_Data

五、转移类指令的数据通路设计

转移地址专用加法器

  • 输入:PC0 + imm32
  • 输出:运算器结果写入PC受多路选择器控制

PC0暂存器

  • 输入:PC取指令周期,在clk下跳沿,PC0_Write = 1,将PC打入PC0
  • 输出:送入转移地址专用加法器

PC写入多路选择器:三选一

  • 所有指令的取值周期:PC_s = 0,PC + 4 -> PC
  • beq分支指令:ZF = 1 或 PC_s = 1,PC0 + imm32 -> PC
  • jal转移并链接指令:PC_s = 1,PC0 + imm32 -> PC
  • jalr转移并链接指令:PC_s = 2,F(=rs1+imm32) -> PC

W_Data的四选一数据选择器

  • R型指令:w_data_s = 0,W_Data = F
  • I型运算指令:w_data_s = 0,W_Data = F
  • U型指令lui:w_data_s = 1,W_Data = imm32
  • I型访存指令lw:w_data_s = 2,W_Data = MDR
  • J型转移指令jal:w_data_s = 3,W_Data = PC
  • I型转移指令jalr:w_data_s = 3,W_Data = PC
  • B型beq指令呢?w_data_s = ? S型sw指令呢?无所谓,因为不写rd,Reg_Write = 0

RV321目标指令集的25条核心执行执行的流程图

 

RV321目标指令集的25条核心执行执行的控制信号表

部件的控制信号表(高电平有效)

六、RISC-V模型机控制单元CU的有限状态机设计

如何产生部件控制信号?由操作控制信号形成部件(控制单元CU)产生

CU的实现方法

  • 硬布线控制器:组合逻辑电路
  • 微程序控制器:存储逻辑电路
  • 有限状态机 FSM:适用于FPGA器件,本质上是组合逻辑+时序逻辑

有限状态机原理:Finite State Machine,通过状态迁移来完成特定的顺序逻辑控制

有限状态机构成:1个状态存储器 + 2个函数

  • 状态存储器:由触发器构成,保存FSM的当前状态
  • 下一状态函数:根据输入和当前状态来产生状态触发器的激励信号,实现向次态转移
  • 输出函数:由当前状态、当前输入产生状态机的输出信号
  • 复位信号rst:初始化有限状态机为初始状态
  • 时钟信号clk:触发状态转移

1. 有限状态机原理

有限状态机设计步骤

  • 确定电路的输入、输出与状态,画出状态转移图
  • 状态化简:得到最简的状态转移图
  • 状态编码:采用8421码或格雷码或独热码都可
  • 求出下一状态和输出函数,用电路实现,或者采用HDL描述,用FPGA等器件实现

用有限状态机实现控制单元CU:

  • 输入变量:指令译码输出的指令信号(IS_R、IS_IMM等)
  • 输出变量:指令什么时间、要发送什么控制信号,由当前状态决定

2. 指令执行的状态转移图

指令执行流程图就是一个状态转移图,每个方框就是一个状态

  • 有重复状态,例如“Reg[rs1] -> A,Reg[rs2] -> B”
  • 合并重复状态,得到最简状态图

3. 状态编码及输出的控制信号

4. 控制单元CU的有限状态机

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllinTome

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值