计算机设计与实践 第九讲 移动计算研究中心张展 1
本讲内容 微处理器设计实例 2
实验目的 根据计算机组成原理课程所学的知识和本课程所讲的设计思想, 设计一个给定指令系统的处理器, 包括 VHDL 语言的实现 FPGA 芯片的编程实现 对处理器的结构和计算机系统的整体工作过程有深刻的了解 为以后应用和设计处理器系统打下基础 3
实验要求 给出处理器的设计方案 用 VHDL 语言实现处理器的设计 将设计下载到 FPGA 实验板的 FPGA0 芯片中进行实际测试, 要求观察显示输出 4
FPGA 实验板 采用南京伟福实业有限公司研制的 COP2000 计算机组成原理实验仪, 通过 FPGA 扩展板在 COP2000 实验仪上完成实验 处理器 晶体振荡器 5
处理器的设计方案 给出处理器的设计方案, 要求包括 : 指令格式设计 微操作的定义 节拍的划分 处理器结构设计框图及功能描述 各功能模块结构设计框图及功能描述 各模块输入输出接口信号定义 ( 以表格形式给出 ) 进度安排 6
VHDL 语言实现处理器设计 在设计方案通过后, 方可进入实际设计环节, 要求采用结构化设计方法, 用 VHDL 语言实现处理器的设计 设计包括 : 各模块的详细设计 ( 包括各模块功能详述, 设计方法,VHDL 语言实现等 ) 各模块的功能测试 ( 每个模块作为一个部分, 包括测试方案 测试过程和测试波形等 ) 系统的详细设计 ( 包括系统功能详述, 设计方法, VHDL 语言实现等 ) 系统的功能测试 ( 包括系统整体功能的测试方案 测试过程和测试波形等 ) 7
处理器功能及指令系统定义 该处理器在给定的指令集下构建, 支持十条指令 假定主存可以在一个时钟周期内完成一次存取操作, 而且可以和 CPU 同步工作 系统使用一个主存单元 : 指令读取和数据访问都使用同一组存储器 8
处理器功能及指令系统定义 处理器的指令字长为 16 位, 包含 8 个 8 位通用寄存器 R0~R7 1 个 16 位的指令寄存器 IR 1 个 16 位的程序计数器 PC 取指令时, 可以直接从主存中提取 16 位的指令信息, 而进行数据访问时, 与主存进行 8 位的数据交换 处理器的地址总线宽度是 16 位, 数据总线宽度也是 16 位, 无论是取指还是数据访问, 都使用同一组数据总线, 只是数据信息的宽度不同 9
处理器功能及指令系统定义 加法指令 ADD Ri, Rj 减法指令 SUB Ri, Rj 寄存器传送指令 MOV Ri, Rj 立即数传送指令 MVI Ri, X 存数指令 STA Ri, X 取数指令 LDA Ri, X 条件转移 ( 零则转 ) 指令 JZ Ri, X 无条件转移指令 JMP X 输入指令 IN Ri, PORT 输出指令 OUT Ri, PORT 10
处理器接口信号定义 11
第一步 : 指令格式设计 12
给定的指令系统 ADD Ri,Rj SUB Ri, Rj MOV Ri, Rj MVI Ri, X LDA STA JMP JZ Ri, X Ri, X X Ri, X IN Ri, PORT OUT Ri, PORT Ri Ri+ Rj Ri Ri - Rj Ri Rj Ri X Ri [R7//X] [R7//X] Ri PC [R7//X] If(Ri=0) Then PC [R7//X] [PORT] Ri Ri [PORT] 13
指令格式设计 指令是由操作码和地址码两部分组成的, 由于固定操作码格式便于硬件设计, 指令译码时间短, 所以进行 RISC 处理器设计时采用这种格式 指令系统中指定所有的指令都是二地址指令 通用寄存器的数量为 8, 需 3 位地址与之对应 访存的形式地址为 8 位 定义指令的高 5 位表示操作码 14
操作码 操作码占据了 5 位, 最多可支持 32 种指令的设计 目前的指令系统仅包含了 10 种操作, 下表定义这 10 种操作的操作码 指令名称 助记符 二进制操作码 无条件跳转 JMP 00000 条件跳转 JZ 00010 减法操作 SUB 00100 加法操作 ADD 00110 立即数传送 MVI 01000 寄存器传送 MOV 01010 存数操作 STA 01100 取数操作 LDA 01110 输出操作 OUT 10000 输入操作 IN 10010 15
每条指令的格式描述 16
指令格式举例 4701 0100011100000001:MVI R7,01H 4111 0100000100010001:MVI R1,11H 6100 6 00 0110000100000000:STA R1,00 17
第二步 : 微操作及节拍设计 18
CPU 内四个重要寄存器 MAR 与地址总线相连, 存放欲访问的存储单元地址 MDR 与数据总线相连, 存放欲写入存储器的信息或最近从存储器中读出的信息 PC 存放现行指令的地址, 具有自动加 1 的功能 IR 存放现行指令 19
取指阶段微操作 PC MAR;1 R; M(MAR) MDR; MDR IR; PC+1 PC; 20
执行阶段微操作 不同指令执行阶段的微操作是不同的, 分别讨论非访存指令 访存指令和转移类指令的微操作 指令中的地址码定义为 : Ad1(IR):IR 的 8-10 位, 表示指令的第一个地址码, 表示寄存器地址 ; Ad2(IR):IR 的 0-2 位, 表示指令的第二个地址码, 表示寄存器地址 ; Ad(IR):IR 的 0-7 位, 表示指令的第二个地址码, 表示形式地址 ; 21
非访存指令 加法指令 ADD Ri, Rj Reg(Ad1(IR)) + Reg(Ad2(IR)) Reg(Ad1(IR)) 减法指令 SUB Ri, Rj Reg(Ad1(IR)) - Reg(Ad2(IR)) Reg(Ad1(IR)) 寄存器传送指令 MOV Ri, Rj Reg(Ad2(IR)) Reg(Ad1(IR)) 立即数传送指令 MVI Ri, X X Reg(Ad1(IR)) 22
访存指令 只考虑扩充寻址的情况, 不考虑其他寻址方式 存数指令 STA Ri, X Reg(R7)//Ad(IR) MAR;1 W; Reg(Ad1(IR)) MDR; MDR M(MAR) 取数指令 LDA Ri, X Reg(R7)//Ad(IR) MAR;1 R; M(MAR) MDR; MDR Reg(Ad1(IR)) 23
表示零值判别操作 转移类指令 不访问存储器 条件转移 ( 零则转 ) 指令 JZ Ri, X Zero(Reg(Ad1(IR))) Reg(R7)//Ad(IR) +Nzero(Reg(Ad1(IR))) PC PC 无条件转移指令 JMP X Reg(R7)//Ad(IR) PC 24
对微操作进行分类 取指微操作 运算微操作 访存微操作 其他微操作, 包括 : 回写 PC 回写寄存器 25
机器周期与节拍定义 每个指令周期包含 4 个机器周期 取指周期 (MEM) 运算周期 (ALU) 访存周期 (MEM) 回写周期 (REG) 每个机器周期包含 1 个节拍 26
取指周期 取指阶段完成指令的提取, 同时改变 PC, 为下一次取指做准备 T:M(PC) IR,1 R,PC+1 PC 27
运算周期 运算阶段完成操作数的准备和实际运算, 运算包括数据加减及访存实际地址的计算 操作数的准备 : T:Reg(Ad1(IR)) A,Reg(Ad2(IR)) B, Reg(R7)//Ad(IR) Addr; 运算包括 : 当操作码为 ADD 时, 运算内容为 A+B ALUOUT; 当操作码为 SUB 时, 运算内容为 A-B ALUOUT; ALUOUT A, B, Addr: 临时寄存器 当操作码为 MVI 时, 运算内容为 Ad(IR) ALUOUT; 当操作码为 MOV 时, 运算内容为 B ALUOUT; 当操作码为 JZ 时, 运算内容为 A ALUOUT; 当操作码为 STA 时, 运算内容为 A ALUOUT; ALUOUT: 临时寄存器 28
访存周期 访存阶段完成数据向主存的写入操作, 或从主存中读取数据的操作 对于取数操作 : T:M(Addr) Rtemp,1 R 对于存数操作 : T:ALUOUT M(Addr),1 W 29
回写周期 回写阶段把访存的结果或运算的结果写入到寄存器中保存, 同时根据转移指令的要求更新 PC 寄存器的内容 当操作码为 LDA 时,Rtemp Reg(A); 当操作码为 ADD,SUB,MVI,MOV 时, ALUOUT Reg(A); 当操作码为 JMP 时,Addr PC; 当操作码为 JZ 时,if A=0 then Addr PC 30
第三步 : 处理器结构设计 31
CPU 设计方法 CPU 设计的基本思想有组合逻辑设计和微程序设计两种 组合逻辑设计根据微操作的节拍安排, 列出微操作命令的操作时间表, 然后写出每一个微操作命令的逻辑表达式, 最后根据逻辑表达式画出相应的组合逻辑电路图 ; 微程序设计思想是将一条机器指令编写成一个微程序, 每一个微程序包含若干条微指令, 每一条微指令对应一个或几个微操作命令, 然后把这些微程序存到一个控制存储器中, 用寻找用户程序机器指令的办法来寻找每个微程序中的微指令 微程序设计方法虽然简便, 但需要占用较大的空间存放微程序 32
CPU 设计方法 在 RISC 计算机中一般都采用组合逻辑设计方法, 这有利于进行流水线的设计, 也能大大节省 CPU 的门数, 对于降低 CPU 的功耗也有好处 这里的设计方法是组合逻辑设计的一种, 但设计中不直接使用逻辑表达式, 而是根据信息流的思想进行了模块的划分, 给出 CPU 的基本结构框图 33
基本的系统组成 根据机器周期的定义, 系统划分为四个主要模块 取指管理模块掌管取指周期 运算管理模块掌管运算周期 存储管理模块掌管访存周期 回写管理模块掌管回写周期写周期 在一个指令周期中, 取指 运算 访存 回写四个机器周期依次执行, 由时钟管理模块统一进行调度 34
基本的系统组成 35
基本的系统组成 取指管理模块包含寄存器 PC 和 IR, 同时 IR 的内容将由该模块向其他模块提供 运算管理模块包含运算器算, 也就包含了通用寄存器, 同时也包含了暂存器 A B Addr ALUOUT 存储管理模块包含暂存器 Rtemp 回写模块包含暂存器 Rdata Raddr PCnew, 前两个用于寄存器回写, 第三个用于 PC 的更新 36
举例 通过 LDA 指令的执行过程展示一下各模块的功能 在第一个机器周期中, 取指管理模块根据 PC 的内容对主存进行访问, 向主存发送 16 位的地址 PC, 读回数据总线上的 16 位数据信息存放到 IR 寄存器中, 同时使 PC 前进, 为下一次取指做准备 在第二个机器周期中, 运算管理模块根据操作码的意义进行访存地址的准备, 从 R7 寄存器和 IR 的第二地址码两个部分组合形成实际地址 Addr 在第三个机器周期中, 存储管理模块根据操作码的意义进行访存, 向主存发送 16 位的地址 Addr, 读回数据总线上的 8 位数据信息存放到 Rtemp 暂存器中 在第四个机器周期中, 回写管理模块根据操作码的意义回写寄存器, 将暂存器 Rtemp 的内容写入指定的 Ri 寄存器中 37
细化的处理器结构 在取指周期, 存储器的访问是只读的, 存储器的地址来自 PC, 数据去往 IR 在访存周期, 存储器的访问可能是读也可能是写 存储器只有一组, 而取指周期和访存周期都可能对其进行访问, 而且数据 地址的来源和去向均不同 为避免访问冲突 保证空闲时总线不被占用, 应该对存储器的访问加以管理 38
存储器访问设计 39
细化的处理器结构 在主存储器与各管理模块之间增加一个访存控制模块 它接收来自取指管理模块的 PC 地址, 访存后将 IR 内容返回给取指管理模块 它接收来自运算管理模块的 ALUOUT, 为访存周期的控制作准备 它在数据访问读周期向存储管理模块传送数据总线的 16 位信息 增加了回写管理模块与取指 运算两模块之间的通路, 用以支持 PC 和通用寄存器的更新 40
寄存器访问设计 41
寄存器的回写 PC 寄存器的更新由 PCupdate 信号控制, 内容来自回写管理模块中的暂存器 PCnew 在回写周期里,PCupdate 信号将根据指令操作码 OP 产生, 当该信号发出时, 取指管理模块将把暂存器 PCnew 的内容写入 PC 寄存器中, 当下一条指令的取指周期到来时,PC 就把更新后的内容传递到地址总线上, 读取全新的指令 通用寄存器的更新由 Rupdate 信号控制, 寄存器的地址来自回写管理模块中的暂存器 Raddr, 将写入寄存器的内容来自回写管理模块中的暂存器 Rdata 在回写周期里, Rupdate 信号将根据指令操作码 OP 产生, 当该信号发出时, 运算管理模块将把暂存器 Rdata 的内容写入 Raddr 所对应的寄存器中 42
细化的处理器结构 43
第四步 : 各功能模块结构设计框图及功能描述 自行设计 在设计报告中体现 44
第五步 : 各模块输入输出接口信号定义 ( 以表格形式给出 ) 自行设计 在设计报告中体现 45
第六步 : 用 VHDL 语言实现处理器的设计 温馨提示 46
时钟模块 参见实验 2.3, 四拍循环 每一拍的输出控制哪些模块? 47
取指管理模块 IR 送到哪儿? PC 自加何时完成? 48
运算管理模块 通用寄存器组如何实现? 二维数组 根据操作码译码后, 哪些指令需要通过运算器运算? 操作数的准备 地址的准备 49
访存管理模块 是否需要译码? 访存地址怎么给? 存数操作中, 数据从哪来? 取数操作中, 取来的数据放到哪? 50
回写模块 仍然需要译码 包括回写寄存器和回写 PC 回写要注意同时给出回写的地址和数据 回写在什么时间完成 51
访存控制模块 地址线控制 通过取指还是取数区分地址的来源 数据线控制 三态门控制, 只在写存储器时将 ALUOUT 的数据给数据总线, 其余时刻均设高阻 CPU 的所有访存端口都通过访存控 CPU 的所有访存端口都通过访存控制模块输出 52
设计中需要思考的问题 一个输出能否直接连接到多个输入上? 多个输入能否直接连接到一个输出上? 暂存器和触发器的区别 8 位寄存器和 16 位数据线的问题 按字寻址还是按字节寻址要和主存控制结合 每一个模块的波形仿真, 要按照节拍给出正确输入 53
以上设计仅供参考! 祝大家设计成功! 54
The End 55