本次笔记内容:
P31 计算机组成原理(31)
P32 计算机组成原理(32)
我的计组笔记汇总:计算机组原理成笔记
视频地址:计算机组成原理 清华大学刘卫东 全58讲 国家精品课程 1080P 更完
幻灯片见我的 GitHub 仓库:计算机组成原理 src/slides
本节课继续由老师讲解实验;本节课后的下周周一、周四由同学们来讲解自己的进度。
本将标题为:支持指令流水的计算机系统设计与实现。
尽量做流水,实在不行做多周期。
这节课也是对计算机组成原理的综述、复习。很重要。
文章目录
内容提要
- 实验目的及目标
- 指令系统分析
- 指令执行骤举例
- CPU框架设计
- 讨论
做计算机第一件事,干什么呢?设计指令系统。老师已经给大家了。指令系统分析实际上就是需求分析。
实验目的
- 进一步理解和掌握 Von Neumann 结构计算机各部件组成及内部工作原理
- 进一步掌握计算机指令系统及指令功能的实现方法
- 进一步加深对指令流水概念、实现机制和流水冲突等的理解
- 培养硬件设计(计算机系唯一需要在硬件上动手的课,此外,CS国防生可能以后还要做很多硬件相关的东西)和调试的能力
- 培养团队管理、合作精神及表达沟通能
实验目标
最低目标
- 实现 THCO MIPS 指令系统,能运行已有的监控程序
-
- 多周期/指令流水CPU
-
- 支持I/O操作
- 可在监控程序下运行应用程序
- 完善监控程序等辅助软件系统
更高目标
- 更好地解决流水线“冲突”问题
- 中断、分时、双机通信
- 应用程序
- 与编译系统的结合
- …
指令系统设计
- 16位字长单字指令
- 满足指令系统的基本要求
-
- 完备性、规整性、高效性、兼容性
- 容易实现指令流水
-
- 指令格式简单、寻址方式简单
- MIPS 16e 指令系统格式
- 建议的指令系统
-
- 见实验指导书
指令分类和指令格式
- 基本可归结到寄存器型、立即数型和跳转型三类MIPS典型指令格式类型中
- 指令格式简单,寻址方式较少,容易实现流水
状态转移图和指令各执行步骤的操作功能
上图是多周期的转移图。可以用于参考。
我们的下一条指令 PC = PC + 1 ,因为我们的指令系统是按照字进行编址的。
如果加入中断,可以在取指前,加一个中断跳转。
流水的实现
如上是一个参考,我们至少要加入“暂停”,至少能检测出冲突。
指令的分类
按照指令的操作类型可分为4种:
- 纯数据:R型、I型
- 控制流相关:B型、J型。
R型指令(寄存器-寄存器型)从寄存器堆中读取源操作数,结果写回寄存器堆:SLL、SRL、SRA、SLLV、SRLV、SRAV、MTSP、MOVE、ADDU、SUBU、MFPC、SLT、SLTU、CMP、NEG、AND、OR、xOR、NOT、MFIH、MTIH。
I型指令(立即数型)使用一个(4位或5位或8位或11位)立即数作为一个源操作数:SW_Rs、SW_SP、SW、LW_SP、LW、 ADDIU3、 ADDSP3、 ADDSP、ADDIU、LI、SLTI、 SLTUI、CMPI、INT。
B型指令(立即数跳转型)使用一个立即数作为跳转的目标地址:B、BEQZ、BNEZ、 BTEQZ、 BTNEZ。
J型指令(寄存器跳转型)使用寄存器的值作为跳转的目标地址:JR、JRRA、JALR
指令格式功能描述
R型指令:
具体可见参考书。
从指令分析中能得到什么?
老师希望同学们得到如下问题的答案:
- ALU需要完成哪些功能?
- 寄存器组构成?
- PC增量?(刚才讨论了,在我们的指令系统中是1个字)
ALU需要完成哪些功能?
+ - << >> AND NOT OR XOR
此外,还要考虑操作数的来源。
寄存器组构成?
两类: 通用寄存器 、 专用寄存器 。
通用寄存器:8个,R0到R7。
专用寄存器:
- PC:指令寄存器;
- SP:栈顶寄存器;
- RA:返回值寄存器;
- RH:中断寄存器;
- T:标志寄存器。
指令功能及执行步骤
数据通路画好了,绘制指令流程图、指令流程表。
填完一条指令,在数据通路上走一遍看看。
CPU总体设计
CPU的外部特性
输入信号
- CLK、INT、 Reset
输出信号
- 对基本存储的控制信号(总线)
- 基本存储的地址信号
- 对扩展存储的控制信号(总线)
- 扩展存储的地址信号
入出信号
- 基本存储的数据
- 扩展存储的数据
即,考虑总体的外部条件。
CPU主要组成
- ALU:另设加法器完成地址计算
- Register File
- PC、SP、IH、RA
- 步骤间寄存器组
- 控制信号生成部件(Decoder):
-
- Forwarding
-
- Hazard testing
-
- 动态预测
体现设计功力的地方,而实现可以分工进行。
ALU设计
功能:
- 加、减、与、或、非、比较…
接口:
- 输入:A、B、OpCode
- 输出:F
寄存器组设计
功能:
- 通用寄存器:多少个?
- 提供数据访问:什么时候读?什么时候写?写的条件是什么?
接口:
- A口地址、B口地址、写入寄存器地址
- A口数据、B口数据、写入数据
- 写入信号
- 时钟信号
与内存和外设的接口
与串口通讯时,是一个异步操作(握手)。
阶段寄存器设计
阶段间需要传递的所有信息:
- 中间数据
- 参数
- 控制信号
流水冲突
- 结构冲突(一定要做)
- 数据冲突(可以作为重点)
- 控制冲突(牵扯精力较多,可不做)
- 检测
- 处理
流水线CPU基本结构
最后要呈现类似这种图,给老师。上面这个图画的不太好。
实验步骤
确定指令系统
- 指令功能
- 指令格式
确定指令的执行流程
- 指令执行步骤划分
- 各步骤完成的具体功能
确定硬件组成模块
- ALU、RegisterFile、InsDecoder、PCAdder、MemInterface
确定每个模块的功能
- 能否完成每条指令的功能要求
给出每个模块的功能描述
- 具体实现,注意时序关系
时间安排
基本部分:
- 指令功能分析
- 数据通路设计、主要部件的功能及控制信号(18日)
- 指令执行步骤划分(指令流程图)
- 指令分步骤控制信号(指令流程表)
- 控制器详细设计(流水冲突控制)(21日)
- 模块结构及参数(25日)
- 系统实现及调试
扩展部分:
- 如果是硬件扩展,要在前面各步骤中体现
最终完成时间:
- 12月6日(检查完成,回收上交盒子)
- 12月13日(实验报告提交)
检查点:
- 实验目标确定:每组给出目标和方案,准备PPT(数据通路设计、指令执行步骤、各部件主要控制信号)
- 指令流程图和指令流程表,完整设计框图(包括控制信号):每组给出较为详细的设计,并准备PPT