计算机组成原理-L06-Control_Unit
本文最后更新于:9 个月前
计算机组成与实践 -控制单元(Control Unit)
一.控制概述
数据通路中的控制

ALU需要实现正确的运算
多个单元的信号来源有多种选择(寄存器、ALU、加法器、多选器、符号扩展、存储器等)
状态单元的写入需要写控制信号与时钟共同决定(寄存器、数据存储器)
ALU控制单元
让各个单元实现正确的功能(运算、读、写)
控制数据流的来源(多选器)
上述控制信息来自于指令


总结:
- op字段在31~ 26位
- 源操作数寄存器rs和rt字段分别在25 - 21位和20 - 16位
- lw和sw指令中的基址寄存器是rs(25~21位)
- 保存写回数据的寄存器有两个:
- lw指令:rt(20~16位)
- R型指令:rd(15~11位)
- 立即数字段(15~0位)
加入ALU控制单元

主控制器产生ALUOp信号(2 bits)
ALU控制单元产生ALUcontrol信号(4 bits)
二.ALU控制设计
ALU控制信号
由ALU控制单元生成的4位控制信号及其定义的操作
| ALU control输入 | 操作 |
|---|---|
| 0000 | 与 |
| 0001 | 或 |
| 0010 | 加 |
| 0110 | 减 |
| 0111 | 小于则置位 |
| 1100 | 或非 |
生成ALU控制信号
- 由2 bits ALUOp和6 bits funct功能字段生成ALU控制信号
- 采用多级译码的方法
- 主控制单元生成ALUOp信号(不使用11)
- ALU控制单元生成ALUcontrol信号
| 指令操作码 | ALUOp | 指令操作 | funct字段 | ALU操作 | ALUcontrol |
|---|---|---|---|---|---|
| lw | 00 | lw | XXXXXX | add | 0010 |
| sw | 00 | sw | XXXXXX | add | 0010 |
| beq | 01 | beq | XXXXXX | subtract | 0110 |
| R类型 | 10 | add | 100000 | add | 0010 |
| R类型 | 10 | sub | 100010 | subtract | 0110 |
| R类型 | 10 | and | 100100 | and | 0000 |
| R类型 | 10 | or | 100101 | or | 0001 |
| R类型 | 10 | slt | 101010 | slt | 0111 |
ALU控制单元真值表
| ALUOp | Funt字段 | 操作 | ||||||
|---|---|---|---|---|---|---|---|---|
| ALUOp1 | ALUOp0 | F5 | F4 | F3 | F2 | F1 | F0 | |
| 0 | 0 | X | X | X | X | X | X | 0010 |
| X | 1 | X | X | X | X | X | X | 0110 |
| 1 | X | X | X | 0 | 0 | 0 | 0 | 0010 |
| 1 | X | X | X | 0 | 0 | 1 | 0 | 0110 |
| 1 | X | X | X | 0 | 1 | 0 | 0 | 0000 |
| 1 | X | X | X | 0 | 1 | 0 | 1 | 0001 |
| 1 | X | X | X | 1 | 0 | 1 | 0 | 0111 |
X:表示与结果无关
ALU控制逻辑实现
根据真值表实现的ALU控制单元逻辑

三.主控制单元的设计
主控制信号
控制信号源于指令
9位控制信号:7个1位控制信号和2位ALUOp信号

带主控制单元的数据通路

控制信号:执行R型指令


控制信号:执行lw指令


控制信号:执行sw指令


控制信号:执行beq指令


主控制单元真值表
| 输入或输出 | 信号名 | R型 | lw | sw | beq |
|---|---|---|---|---|---|
| 输入 | Op5 | 0 | 1 | 1 | 0 |
| Op4 | 0 | 0 | 0 | 0 | |
| Op3 | 0 | 0 | 1 | 0 | |
| Op2 | 0 | 0 | 0 | 1 | |
| Op1 | 0 | 1 | 1 | 0 | |
| Op0 | 0 | 1 | 1 | 0 | |
| 输出 | RegDst | 1 | 0 | X | X |
| ALUSrc | 0 | 1 | 1 | 0 | |
| MemtoReg | 0 | 1 | X | X | |
| RegWrite | 1 | 1 | 0 | 0 | |
| MemRead | 0 | 1 | 0 | 0 | |
| MemWrite | 0 | 0 | 1 | 0 | |
| Branch | 0 | 0 | 0 | 1 | |
| ALUOp1 | 1 | 0 | 0 | 0 | |
| ALUOp0 | 0 | 0 | 0 | 1 |
主控制单元逻辑实现

四.跳转的实现
回顾:跳转实现
26 bits常数符号扩展成28 bits
用28 bits将PC+4的低28位替换
课堂练习:带跳转的实现

五.单时钟周期实现
- 单时钟周期实现简单,适合小指令集
- 对于不同指令,不能使用不同时钟周期
- 最长延迟决定时钟周期
- 那种类型的指令执行最慢?
最慢的指令决定时钟周期
假设我们只关注指令运行中的:取指令、读寄存器、ALU运算、访问数据存储器、写回寄存器:
访问指令和数据存储器:4ns
ALU和加法器:2ns
访问寄存器:1ns
| 指令类型 | 取指令 | 读寄存器 | ALU运算 | 访问数据存储器 | 写回寄存器 | 时间 |
|---|---|---|---|---|---|---|
| R型 | 4 | 1 | 2 | 0 | 1 | 8 |
| lw | 4 | 1 | 2 | 4 | 1 | 12 |
| sw | 4 | 1 | 2 | 4 | 0 | 11 |
| beq | 4 | 1 | 2 | 0 | 0 | 7 |
| j | 4 | 0 | 0 | 0 | 0 | 4 |
六.小结
- 状态单元的写入需要写控制信号与时钟共同决定
- ALU控制器采用多级译码的方法
- 主控制单元与数据通路共同实现指令的正确执行
- 单时钟周期实现效率低
计算机组成原理-L06-Control_Unit
https://www.emokable.top/计算机组成原理-L06-Control-Unit/

