为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

计算机组成原理CPU设计实验报告

2017-10-11 50页 doc 595KB 124阅读

用户头像

is_620441

暂无简介

举报
计算机组成原理CPU设计实验报告计算机组成原理CPU设计实验报告 计算机组成原理专题实验报告 ——CPU设计 指导教师 姜欣宁 小组成员列表 成员 姓名 学院 班级 学号 教师评分 组长 冯福力 电信 计算机75班 07055111 组员 王智 电信 计算机75班 07055123 组员 杜建营 电信 计算机75班 07055110 组员 沈培均 电信 计算机75班 07055121 组员 刘大方 电信 计算机75班 06055118 完成时间:2010年4月23日 1 目录 1 实验方法............................
计算机组成原理CPU设计实验报告
计算机组成原理CPU设计实验报告 计算机组成原理专题实验报告 ——CPU设计 指导教师 姜欣宁 小组成员列 成员 姓名 学院 班级 学号 教师评分 组长 冯福力 电信 计算机75班 07055111 组员 王智 电信 计算机75班 07055123 组员 杜建营 电信 计算机75班 07055110 组员 沈培均 电信 计算机75班 07055121 组员 刘大方 电信 计算机75班 06055118 完成时间:2010年4月23日 1 目录 1 实验方法................................................................................................................................... 4 2 总体说明 ...................................................................................................................................... 5 2.1指令系统: ........................................................................................... 5 2.1.1指令格式分类(按指令字长和操作数不同): .............................................................. 5 2.1.2具体指令汇总表: ............................................................................................................ 6 2.1.3相关指令图: ............................................................................................................ 7 2.1.4指令数据通路的构建: .................................................................................................... 8 2.1.5指令的分组及节拍: ...................................................................................................... 11 2.1.6指令执行状态图:(见下页) ........................................................................................... 12 2.1.7具体微指令: .................................................................................................................. 12 2.2 系统整体介绍 .................................................................................... 15 2.2.1系统基本模块划分 .......................................................................................................... 15 2.2.2总体结构图:(见下页) ................................................................................................... 16 3 CPU的控制逻辑与具体数据通道设计 ..................................................................................... 17 3.1取指令逻辑的设计 ............................................................................................................. 18 3.1.1指令地址的保存 .............................................................................................................. 18 3.1.2指令存储器 ...................................................................................................................... 19 3.1.3下一条指令地址的计算 .................................................................................................. 19 3.2指令译码逻辑的设计 ......................................................................................................... 20 3.3指令执行逻辑的设计 ......................................................................................................... 21 3.4存储器访问逻辑的设计 ................................................................................................. 22 3.5结果写回逻辑的设计 ......................................................................................................... 23 3.6单周期CPU的总成 ........................................................................................................... 24 4各部分说明 ................................................................................................................................. 25 4.1 ALU..................................................................................................................................... 25 4.2数据选择器BUS_MUX ..................................................................................................... 27 4.3器件T1 ............................................................................................................................... 29 4.4标志寄存器FLAG_REG ................................................................................................... 30 4.5 T2: .................................................................................................................................... 32 4.6程序计数器PC ................................................................................................................... 32 4.7地址寄存器AR和指令寄存器IR: ................................................................................ 33 4.8寄存器、寄存器组和寄存器的选择 ................................................................................. 35 4.9一位控制信号/WR ......................................................................................................... 36 4.10 节拍发生器 ...................................................................................................................... 36 4.11控制逻辑 ........................................................................................................................... 38 4.12 T3 ...................................................................................................................................... 41 4.13 REG_OUT ........................................................................................................................ 42 4.14存储器............................................................................................................................... 43 4.15总线选择器 ....................................................................................................................... 44 2 4.16 REG_TEST ....................................................................................................................... 45 5附录: ......................................................................................................................................... 46 附录A:组员分工: ............................................................................................................... 46 附录B:组员设计总结: ................................................................................................... 46 3 1 实验方法 实验要完成的工作主要包括:指令系统的设计,FPGA-CPU的整体结构设计及其细化,逻辑设计的具体实现(VHDL语言程序的编写),软件模拟,以及硬件调试。这几部分的工作之间是先行后续的关系,也就是只有前一个步骤完成了下一个步骤才可以开始进行,不存在并行完成的情况。实验主要流程如下图所示: 设计FPGA-CPU的指令集。我们 选择了不做流水及Cache。 指令系统设计 并确定CPU主要功能模块,分 析每条指令的执行过程,数据的流向 和控制信号的产生,画出逻辑结构图 逻辑设计 按模块分别实现并模拟 具体实现 整体模拟仿真,检查时序关系配 合是否正确 软件模拟 下载到FPGA中进行硬件调试 硬件调试 其中指令系统和逻辑结构的设计主要参考了相关文献。 然后根主要的方法是先确定CPU所要实现的功能,根据寄存器等的情况划分指令格式,据功能写出指令,根据不同指令的特点将它们分组并确定操作码;接下来设想每条指令的执行过程,需要哪些硬件支持,最后确定整个CPU的逻辑结构图。 在各个功能模块的实现中主要使用了自底向上的设计方法。先实现寄存器,再实现寄存器组,等等,最后将各个器件和模块之间互连,得到顶层设计图。 4 2 总体说明 2.1指令系统: 计算机的指令是用户使用计算机与计算机本身运行的最小功能单位。一台计算机支持的全部指令就构成该机的指令系统。从计算机本身的组成看,指令系统直接与计算机系统的性能和硬件结构的复杂程度等密切相关,它是CPU设计的起始点和基本依据。 设计指令系统的核心问题是选定指令的格式和功能。具体到我们的设计来说,指令的功能应该包括简单的算术和逻辑运算,移位操作,数据传送,跳转,读写内存,另外还可能包括一些其他功能如置条件码等。 为了指令的规整性和便于译码,我们主要采用了定长的操作码组织,操作码为8位。寻址方式包括了寄存器寻址、立即数寻址、直接地址和相对寻址。 2.1.1指令格式分类(按指令字长和操作数不同): ? 单字单操作数指令 15 8 7 4 3 0 OPCODE DEST_REG 0000 OPCODE OFFSET 包括: JNC, JNZ ? 单字双操作数指令 15 8 7 4 3 0 OPCODE DEST_REG SOUR_REG 包括:ADD, SUB, AND, CMP, OR, MVRTR , LDRR, STRR ? 单字无操作数指令 15 8 7 4 3 0 OPCODE 0000 0000 包括:CLC, STC ? 双字双操作数指令 15 8 7 4 3 0 OPCODE DEST_REG 0000 DATA 包括:MVRTD 5 2.1.2具体指令汇总表:(*指令的格式设计参照何种指令集,来源,) 类型 名称 15-12 11-8 7-4 3-0 功能 操CZV 作S 个 数 ADD 0000 0000 Rg1 Rg2 Rg1<-Rg1+Rg2 2 **** SUB 0000 0001 Rg1 Rg2 Rg1<-Rg1-Rg2 2 **** AND 0000 0010 Rg1 Rg2 Rg1<-Rg1andRg2 2 **** 算 CMP 0000 0011 Rg1 Rg2 Rg1-Rg2 2 **** 第一逻 OR 0000 0100 Rg1 Rg2 Rg1<-Rg1orRg2 2 **** 类指运 MOV 0000 0111 Rg1 Rg2 Rg1<-Rg2 2 …. 令 算 DEC 0000 1000 Rg1 0000 Rg1<-Rg1-1 1 **** INC 0000 1001 Rg1 0000 Rg1<-Rg1+1 1 **** SHL 0000 1010 Rg1 0000 Rg1,C<-Rg1*2 1 *… SHR 0000 1011 Rg1 0000 Rg1,C<-Rg1/2 1 *… 跳 JMP 0100 0000 OFFSET 无条件跳转 1 …. 转 JC 0100 0100 OFFSET C=1时跳转 1 …. 指 JNC 0100 0101 OFFSET C=0时跳转 1 …. 令 JZ 0100 0110 OFFSET Z=1时跳转 1 …. JNZ 0100 0111 OFFSET Z=0时跳转 1 …. 置CLC 0111 0000 0000 0000 C=0 0 0… 位 STC 0111 0000 0000 0000 C=1 0 1… LDRR 1000 0010 Rg1 Rg2 Rg1<-[Rg2] 2 …. 第二 类指访 STRR 1000 0011 Rg1 Rg2 [Rg1]<-Rg2 2 …. 令 存 MOV1000 0001 Rg1 0000 Rg1<-Data 1 R …. (*表示状态位在指令执行后会被重置,,.表示状态位在指令执行后不会被修改) 6 2.1.3相关指令流程图: 1.算术逻辑运算指令 2.访存指令 将指令中存储器将参与运算的两个操作数分将寄存器中数 地址经地址总线别放入ALU的A端和B端 据经数据总线 送入MAR当中,送入MDA 并把存储器读写 使能端置为读 ALU进行运算,结果存入暂将地址经地址存器Y中 总线送入 MAR,并读写将存储器中数据 使能端为写 送入MDR 将暂存器Y中结果经总线送 回指定寄存器 将MDR中数据将MDR中数经数据总线送入据存入存储器 寄存器 3.访寄存器指令 4.跳转指令 取指令中立即数送入将寄存器中将立即数经 ALU的A端,将PC操作数送入符号扩展后 得值送入B端 总线 送入总线 ALU完成加运算,将 结果送到暂存器Y中 将总线上的数送 往寄存器 将Y中数据经数据总 线送入PC 7 2.1.4指令数据通路的构建: 取指令数据通路的构建 1. 取指令的微操作安排如下: T0: PC, BUS , MAR, PC , BUS , A, 1 , READ T1: M(MAR) , MDR,BUS,IR, ALU(A+2) , Y T2: Y , BUS , PC, IR , ID 数据通路如下:(再配合流程图来说明工作流程,说明每一个部件的功能;以下同) PC_IN IR_IN Y P C IR ALUOP ALU A B A_IN B_IN B BUS_MUX U S MUX MAR_I N MAR MDR_IMEM N MDR 2. 算逻指令执行周期数据通路构建 算逻指令执行周期微操作安排如下: T0: $R2 , BUS , A T1: $R3 , BUS , B T2: ALU(A ,B) , Y, BUS , $R1 8 数据通路如下: IR RF Y ALUOP RF_IN BALU U A B A_IN B_IN S BUS_MUX MUX 3访存指令执行周期数据通路构建 IR RF Y RF_IN ALU A B B BUS_MUX U S MUX MAR MDR_IMEM N MDR 9 LDRR 指令执行周期的微操作安排如下: T0: Ad(IR) , 扩位 , BUS , MAR, 1 , READ T1: M(MAR) , MDR T2: MDR , BUS , $R STRR 指令执行周期的微操作安排如下: T0: $R , BUS , MDR T1: Ad(IR) , 扩位 , BUS , MAR, 1 , WRITE T2: 4. 访寄存器组指令执行周期数据通路构建 访寄存器指令执行周期微操作安排如下: T0: $R2 , BUS , $R1 T1: T2: 数据通路如下: IR RF B RF_IN U 扩位 BUS_MUX S MUX 10 5. 跳转指令执行周期数据通路构建 跳转指令执行周期的微操作安排如下: T0: Im(IR) , 扩位和移位 , BUS , A T1: PC , BUS , B T2: ALU(A+B) , Y, BUS , PC Y ALUOP P C IR B ALU U PC_IN 扩位 A B S BUS_MUX MUX 2.1.5指令的分组及节拍: 由于没有中断操作,本机指令的执行步骤可概括如下:(画图描述) 读取指令:地址寄存器<-指令地址,修改PC内容使其指向下一条将要执行的指令; 读内存,指令寄存器<-读出的内容。 分析指令: 指令译码。 执行指令:通用寄存器之间的运算或传送,可1步完成; 读写内存,通常要两步完成。 根据指令的执行步骤不同,可以把全部指令分为A、B两组。其中A组指令完成的是通用寄存器之间的数据运算或传送,或其他一些特殊操作,在取指之后可一步完成,包括: 11 ADD,SUB,AND,CMP,XOR,TEST,OR,MVRR,DEC,INC,SHL,SHR,ADC,SBB,JR,JRC,JRNC,JR Z,JRNZ,JRS,JRNS,CLC,STC;B组指令完成的是一次内存读写操作,在取指之后可两步完成,包括:JMPA,LDRR,STRR,MVRD。在编码的时候以指令操作码的最高位来区分 A、B组指令,0为A组指令,1为B组指令。 在控制器方面我们选用了组合逻辑控制器方案。使用节拍来标记每条指令的执行步骤。由指令而定,在我们的系统中不同的执行步骤只有5个,,故使用3位节拍就足够了。 100 AR<-PC, PC<-PC+1 000 读内存, IR<-读出内容 001 B组指令 控制器译码 传送地址 读写内存 AR<-地址 101 111 A组指令 011 寄存器之间的数 据运算或传送 2.1.6指令执行状态图:(见下页) 2.1.7具体微指令:(以下设计过程(思路)的描述解释) <1>ADD DR,SR T1:MEM_ADDR?PC WR?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:RESULT?SR+DR T3:DR?RESULT PC?PC_NEXT GENERATE Z GENERATE C <2>SUB DR,SR T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 12 T2:RESULT?SR-DR T3:DR?RESULT PC?PC_NEXT GENERATE Z GENERATE C 上图的名称和标号,解释改图,图再画清楚一些。 <3>CMP DR,SR T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:RESULT?SR-DR T3:PC?PC_NEXT GENERATE Z <4>MOVRTR DR,SR 13 T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:RESULT?SR T3:DR?RESULT PC?PC_NEXT <5>JMP ADDR T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA T2:RESULT?ADDR+PC T3:PC?RESULT 6>JNC ADDR T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:GENERATE CFLAG RESULT?ADDR+PC T3:if(CFLAG==0) PC?RESULT else PC?PC_NEXT <7>JNZ ADDR T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:GENERATE ZFLAG RESULT?ADDR+PC T3:if(ZFLAG==0) PC?RESULT else PC?PC_NEXT <8>CLC T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:C?0 T3:PC?PC_NEXT <9>STC T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:C?1 T3:PC?PC_NEXT <10>LDRR DR,SR T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:MEM_ADDR?SR T3:WE?1 MEM_DATA?OB DR?MEM_DATA PC?PC_NEXT <11>STRR DR,SR T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:MEM_ADDR?DR 14 T3:WE?0 MEM_DATA?SR OB?MEM_DATA PC?PC_NEXT <12> MOVDTR DR,DATA T1:MEM_ADDR?PC WE?1 MEM_DATA?OB IR?MEM_DATA PC_NEXT?PC+1 T2:MEM_ADDR?PC_NEXT T3:WE?0 MEM_DATA?OB DR?MEM_DATA PC?PC+2 2.2 系统整体介绍 2.2.1系统基本模块划分 整个系统可划分为控制器,寄存器,ALU,寄存器组,数据选择器,相关时序部件及组合逻辑部件,总线和主存等。 整个CPU系统以控制器为中心,负责指令的译码及发出各种相关控制信号。节拍发生器控制着整个系统的时钟信号,系统的相关部件在统一的节拍控制下发挥自己的作用。IR为指令寄存器,负责存储即将执行的下一条指令,AR为地址寄存器,存放被访问存储单元的地址。PC为程序计数器,存放现行指令的地址,具有计数功能。ALU负责处理相关数据运算操作。寄存器组负责存放相关操作数和中间临时变量。多路数据选择器在相关控制信号的作用下将相关数据输入ALU处理。总线分数据总线和地址总线,负责MM和相关寄存器之 间的数据交换。MM为存储器,存放相关数据和程序。 建议下图用ConceptDraw绘图工具完成,画起图来更加快捷;并对此图工作过程进行解释(画流 程图等) 节 IR AR 拍 PC 控制器 寄 ALU 存 器 组 数据选择器 15 总线 MM 2.2.2总体结构图:(见下页) 我们设计的系统没有流水和Cache,CPU的结构还是比较简单的。主要的部件就是算逻单元ALU、控制逻辑、通用寄存器组、指令寄存器IR、地址寄存器AR、程序计数器PC、标志寄存器、节拍发生器以及一些数据选择器和译码电路。 运算器方面,由一个ALU部件完成全部算数、逻辑、移位操作,输出设置了4个标志位:C——进位标志位,Z——是否为0标志位,V——溢出标志位,S——是否为负标志位,保存在标志寄存器内。与之相关的还有寄存器组和数据选择器。16个16位的通用寄存器既是参与运算的数据的来源,又是运算结果的暂存地,而数据选择器为ALU正确选择了两个输入数据。 控制器方面,使用了组合逻辑控制器,这也是当前RISC类型计算机普遍选用的控制器方案。它的基本运行原理是,用组合逻辑门线路直接提供控制计算机各功能部件协同运行所需 要的控制信号。其优点是,形成这些控制信号所必需的线路延迟时间少,对提高系统运行速度有利,并且由于使用了大规模现场可编程器件,这些逻辑线路的设计和修改变得非常简单易行。 组合逻辑控制器主要由4个部件组成: 程序计数器PC,保存指令在内存中的地址; 指令寄存器IR,保存从内存读来的指令内容,在指令执行过程中提供指令本身的主要信息; 节拍发生器,用于标记出每条指令的各执行步骤的相对次序关系; 控制逻辑,或称时序控制信号产生部件,它根据指令内容(由IR提供)和指令的执行步骤(由节拍发生器提供)及其他一些条件信号(标志寄存器输出),形成并提供出计算机各部件当前时刻要用到的控制信号。 16 1. 解释系统电路的工作原理,可画流程图 2. 系统电路的设计过程 3(解释个部件的功能 Output MM 3 CPU的控制逻辑与具体数据通道设计 CPU在处理指令时需要经过以下几个步骤: 1)取指令(IF):根据程序计数器PC中的指令地址,从存储器中取出一条指令,转到 译码状态。同时,在PC中产生下一条指令的地址。 2)指令译码(ID):对取指令操作中得到的指令进行译码,确定该指令需要完成的操 17 作,从而产生相应的控制信号,驱动执行状态中的各种动作。 3)指令执行(EXE):根据指令译码得到的控制信号,具体执行指令动作,转入下一个状态。 4)存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给出访问存储器的地址,从存储器的指定地址读取数据,或者将指定数据写入指定地址。 5)结果写回(WB):该步骤把指令执行的结果或者访问存储器所得到的数据写入到相应的目的寄存器中。 图3-1显示了单周期CPU中5个指令处理步骤的执行顺序。 取指令 指令译码 指令执行 存储器访问 结果写回 IF ID EXE MEM WB 图3-1:单周期CPU指令处理过程 3.1取指令逻辑的设计 CPU执行指令时,第一步要把指令从存储器中取出来。这个动作由(IF)步骤完成。 如图3-2所示,IF步骤需要完成以下几个操作: 1)给出需要取得的指令的存储器地址。因为指令保存在程序计数器PC中,所以只需要把PC中的地址输出到地址总线上即可。 2)从存储器读取指令字。 3)计算下一条指令的地址。 下条指令地址 计算逻辑 指令 PC PC Data Out 指令存储器 clk 图3-2:取指令操作示意图 3.1.1指令地址的保存 在CPU体系结构中,计算机指令保存在一个16位的专用寄存器PC中。本设计使用 18 一个16位的寄存器来实现程序寄存器PC,如图3-3所示。(应该在画下面实现的电路图之前, 补图 先设计(画)逻辑部件框图,即确定输入/输出,控制信号等,以下同) 3.1.2指令存储器 计算机指令保存在指令存储器中。在本设计中,使用IR来实现指令存储器。如图3-4所示。 指令存储器输入信号:mem_data[15..0]。 控制信号:rec为10时,IR接收从MM获得的指令。 指令存储器输出信号:INSTOUT[15..0]。 图3-4:指令存储器的逻辑电路图 3.1.3下一条指令地址的计算 在计算下一条指令地址时,有如下几种情况: )如果当前指令不是分支或跳转指令,则可以简单的在当前指令的基础上加2,就得 1 到了下一条指令的地址,保存到程序计数器PC中。 2)当前指令为分支或者跳转指令时,则需要根据当前指令来计算跳转地址。 具体而言,在计算分支指令时,首先需要把分支指令中的8位立即数进行符号扩展;把结果加到当前指令的指令地址上,从而产生分支转移地址。 8位立即数为INSTOUT[7..0],符号位是INSTOUT[7],如图1-5所示,可将INSTOUT[7]扩展到高8位。 由此可得到计算下一条指令地址的数据选通电路。(如图3-5) (如何工作,画流程图或 19 状态图) bus_dir wrdata_bus[15..0]alu_out[15..0]mem_data[15..0] inst ariralu_out[15..0]q[15..0]pc[15..0]mem_data[15..0]q[15..0]rec[1..0]rec[1..0]clkclkresetreset inst9inst11 alupccinalu_out[15..0]alu_out[15..0]q[15..0]alu_a[15..0]calu_b[15..0]zenalu_func[2..0]vclksreset inst10inst7 t2 offset_8[7..0]offset_16[15..0] inst12 图3-5 取指令地址的数据选通电路的实现 3.2指令译码逻辑的设计 在得到了指令字之后,将转入指令译码阶段。 指令译码操作步骤完成如下的功能: 1)识别指令; 2)根据不同的指令给出各种控制信号; 3)根据指令从相应的源数据寄存器中取出操作数,为下一步的指令执行做好准备。 指令译码动作由控制部件CtrlUnit完成。 20 其中CtrlUnit的输入timer、instruction、czvs分别表示时钟节拍信号、指令字、标志位,这些输入的组合可用于识别指令,并输出相关控制信号。具体信号的相关功能见CU部件说明。在译码阶段,具体来说,在一定的节拍下,CU首先将接收的指令的前八位和后八位分开,用于分离操作数和操作码,然后将操作数的前四位和后四位分开,用于区分源操作数和目的操作数,然后根据具体的指令输出相关控制信号。 3.3指令执行逻辑的设计 经过指令译码操作,正在处理的指令需要使用算术逻辑单元执行何种操作已经由信号alu_func[2..0]确定下来。经过去操作数操作,ALU需要使用的操作数也已经准备好。这样, 就可以进行指令执行操作。 ALU的两个操作数可能来自pc,也可能是SR/DR,可能来自寄存器,也可能使用指令字中的立即数。具体使用什么操作数由bus_mux来确定。 由此可得到指令执行的数据选通电路。(如图3-6) (如何工作,画流程图或状态图) 21 pc alu_out[15..0]q[15..0]enbus_dirclkresetwrdata_bus[15..0]alu_out[15..0]mem_data[15..0]inst18 inst17 alubus_muxcinalu_out[15..0]t2alu_a[15..0]calu_in_sel[2..0]alu_sr[15..0]alu_b[15..0]zdata[15..0]alu_dr[15..0]offset_8[7..0]offset_16[15..0]alu_func[2..0]vpc[15..0]soffset[15..0]sr[15..0]instinst16dr[15..0] inst13 controllerreg_muxtimer[2..0]dest_reg[3..0]reg_0[15..0]en_0instruction[15..0]sour_reg[3..0]reg_1[15..0]en_1coffset[7..0]reg_2[15..0]en_2zsst[1..0]reg_3[15..0]en_3vsci[1..0]reg_4[15..0]en_4srec[1..0]reg_5[15..0]en_5alu_func[2..0]reg_6[15..0]en_6alu_in_sel[2..0]reg_7[15..0]en_7en_regreg_8[15..0]en_8en_pcreg_9[15..0]en_9wrreg_a[15..0]en_ainst14reg_b[15..0]en_breg_c[15..0]en_creg_d[15..0]en_dreg_e[15..0]en_ereg_f[15..0]en_fdest_reg[3..0]dr[15..0]sour_reg[3..0]sr[15..0]reg_sel[3..0]reg_out[15..0]en inst15 图3-6:指令执行逻辑电路图 3.4存储器访问逻辑的设计 在指令执行阶段(EXE)之后,CPU指令处理将进入到存储器访问阶段。在MIPS体系结构中定义了两种当问存储器的指令:Load和Store指令。CPU能且仅能通过这两种指令来访问存储器。这是RISC架构处理器通用的做法。在本节设计的CPU中,Load指令为LDRR, Store指令为STRR。在指令执行阶段(EXE)完成之后,将要进行存储器访问操作。在 访问存储器的时候,CPU需要给出以下几种控制信号和数据: 1)访问存储器的方式:读还是写,由CU的信号/wr来确定。 2)访问存储器的地址。无论是LDR是STRR,都需要使用ALU把寄存器rs和指令 22 字中的立即数相加得到数据地址。所以ALU的计算结果alu_out[15..0]即为需要访问数据的数 据地址。 3)如果是写存储器,则还需要给出写入的数据。写入存储器的数据来源为寄存器rt。 在指令译码步骤中,寄存器r从寄存器堆中读出的内容为data[15..0],该数据即为存储器的写 入数据。 由此可得到访问存储器的数据选通电路。(如图3-7) (如何工作,画流程图或状态图) 图3-7:访问存储器逻辑电路图 3.5结果写回逻辑的设计 完成了指令执行阶段(EXE)和存储器访问阶段(MEM)后,进入到结果写回阶段(WB)。所涉及到的数据和信号如下: 1)要写入的数据。寄存器堆中要写入的数据来源有2种,一种是ALU计算的结果alu_out[15..0],另一种是来自存储器的数据,该数据由外部输入到CPU中。在指令译码过程(ID) 中,控制部件CU可根据不同的指令来区分两种不同的数据来源,具体来讲,MOVR指令表示写回数据来自存储器,而 2)寄存器组使能信号en_reg和寄存器写信号。该信号控制寄存器组是否执行写入操作。图3-8为结果写回逻辑电路图。(如何工作,画流程图或状态图) 23 图3-8:结果写回逻辑电路图 3.6单周期CPU的总成 在完成了图4-1所示的5个阶段的控制逻辑与数据通道的设计后,就可以将各个部分集成在一起,组成单周期的CPU。总成的关键在于时序信号的控制。 如图4-14所示的时序节拍发生器Time将伴随CLK的输入,在timer[2..0]输出端循环产生“100”、“000”、“001”、“011”、 “101” 、“111”的输出。将timer[2..0]的7个信号接到CU模块的时钟上,即可实现不同模块之间的协调工作。 七个时钟信号的连接方式如表3-9所示: 表3-9:节拍时钟信号的连接方式 节拍输出 CU控制 指令执行阶段 S0(100) 初始状态 IF S1(000) 读取指令第一拍 IF S2(001) 读内存,放到指令寄存器 MEM S3(011) 执行A组指令 ID,EXE S4(101) 执行B组指令 ID,EXE S5(111) 读写内存 WB 24 注意到S3/S4时钟到达时,ID和EXE阶段同时完成。可合并两个指令执行阶段的原因是,ID阶段实际上是在IF阶段的时钟S2到达后,在读出指令字后的瞬间完成的,在S3/S4到达时,不但ID已经完成,而且ALU所需的所有数据也都已在IF时钟S2到达后的瞬间取得,S3/S4到达时已经输出结果,故S3/S4可同时作为ID和EXE阶段完成的标志 4各部分说明 4.1 ALU 功能:。。。。。。。。。 组合逻辑部件,对两个16位的输入及进位输入Cin可进行由3位控制信号控制的如下操作。由于在我们的设计中只有ALU部件有加法器的功能,而对程序计数器的自增并没有再另设一个加法器,故ALU的输入组合情况较多。在对全部指令的执行步骤进行了分析后,共列出了表中所示的6种情况,故使用了3位控制信号。补图 I2I1I0 功能 000 A+B+Cin 001 A-B-Cin 010 A与B 011 A或B 100 A异或B 101 B 左移 110 B右移 由Quartus生成的.bsf图如下: 设计思想: 用三位二进制代码代表部件ALU所能具有的功能,ALU从控制单元中取得二进制代码 25 指令,通过译码获知进行那一功能的运算,进行相应的操作。 ALU运行流程图: 端口说明: 输入信号: cin: 进位信号,表示当前运算是否存在进位,可以强制置位; alu_a: 存放当前运算的操作数,来自多路数据选择器; alu_b: 存放当前运算的操作数,来自多路数据选择器; alu_func:来自控制器,用于控制ALU进行何种运算。 输出信号:alu_out:输出ALU的运算结果,送入相关寄存器; c:进位标志,1表示有进位; z:零标志位,1表示运算结果为零; v:溢出标志位,1表示当前运算结果溢出; s:负标志位,1表示当前运算结果为负; 标志位均送入标志寄存器 这部分主要要注意的地方就是标志位C和V的数值。溢出标志位OF:在运算过程中,如操作数超出了机器能标似的范围称为溢出,此时OF位置1,否则置0。进位标志CF:记录运算时从最高有效位产生的进位值,例如,执行加法指令时,最高有效位有进位时置1,否则置0。 26 根据这一说明,可以这样判断V和C标志位的值: V:如果正数(符号位为0)与正数之和为负数(符号位为1),或是负数与负数之和为正数,则发生了溢出,V置1; C:两数之和大于1111111111111111,则产生了进位,C置1;被减数小于减数,则产生借位,C置1。 另外要注意的是,只有算术运算需要考虑进位和溢出标志位,逻辑运算,除非带C移位和循环,否则无需考虑这两个标志位。 以上叙述清楚 Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 4.2数据选择器BUS_MUX 功能:。。。。。。。。。 组合逻辑器件,其输入包括:源寄存器数据,目标寄存器数据,带符号位扩展的偏移地址,PC,以及从内存读取的立即数、跳转地址等数据。在3位控制信号的控制下它进行ALU 模块A、B端输入的选择:补图 I5I4I3 ALU_A ALU_B 000 SR DR 001 SR 0 010 0 DR 011 OFFSET PC 27 100 0 PC 101 0 DATA 由Quartus生成的.bsf图如下: 设计思想: 用三位二进制代码代表数据选择器按照什么样的选择哪个端口的数据输送到ALU中,数据选择器从控制单元中获得控制序列即相应的二进制代码,得知数据选择的条件,进行选择。 数据选择器运行示意图: 端口说明: 28 输入信号:sr:源操作数,来自通用寄存器组; dr:目的操作数,来自于通用寄存器组; alu_in_sel:控制信号,用于控制选择何数据通过数据选择器; data:来自寄存器组或者数据总线; pc:来自PC寄存器,主要用于PC自增操作; offset:偏移地址,与pc相加后找到操作数的地址 输出信号:alu_sr:输出到ALU,参与ALU运算的操作数之一; alu_dr:输出到ALU,参与ALU运算的操作数之一; Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 4.3器件T1 功能:。。。。。。。。。 组合逻辑器件,用于产生ALU的进位输入Cin,受两位控制信号SCI的选择控制,输入 为标志寄存的输出FLAG_C: SCI Cin 00 0 01 1 10 FLAG_C 由Quartus生成的.bsf图如下: 29 设计思想: 用二位二进制代码表示输入何种进位数据输送到ALU中。具体来说, 当SCI为00, 进位alu_cin输出强制为0:;当SCI为01,进位alu_cin输出强制为1;当SCI为10,进位 alu_cin输出为标志寄存器的输出。 端口说明: 输入信号: flag_c:状态寄存器的c标志位; sci:CU输出的控制信号,用于控制进位数据信号; 输出信号:alu_cin:输出到运算器的进位输入。 Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 4.4标志寄存器FLAG_REG 功能:。。。。。。。。。 时序逻辑部件,带有清零端RESET,输出只在时钟正跳变时发生变化;接收ALU的标志 位输出,在控制信号SST的控制下输出实际需要的标志位: SST C Z V S 00 接受ALU的运算结果 01 0 Z V S 30 10 1 Z V S 11 Null Null Nul Null 由Quartus生成的.bsf图如下: 设计思想:标志码是CPU根据运算结果由硬件设置的位,如运算会产生正、负、零或 溢出等结果。标志码可以被测试,作为分支运算的依据。此外,设置两位二进制代码可以对 有些标志码进行重置置,如最高进位标志C,可用指令对它置位和复位。 端口说明: 输入信号:sst: 控制信号,来自控制器; c、z、v、s:标志位, 来自ALU的输出; clk:时钟脉冲 ; reset:复位控制端; 输出信号:flag_c,flag_v,flag_s,flag_z:送往控制器; Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 31 4.5 T2: 功能: 逻辑器件,将8位的OFFSET(来自指令的低8位)带符号位扩展到16位; 由Quartus生成的.bsf图如下: 设计思想: 由于跳转指令偏移为8位,必须扩展为16位数据后,才能与PC相加得到跳转指令的地 址。的当指令的第一位为“1”时,扩展后的前8为全部为1;当指令的第一位为“0”时, 扩展后的前8位全部为0。 端口说明: 输入信号:0ffset[7...0]:来自CU,为跳转指令的8位的offset; 输出信号:0ffset[15...0]为扩展后的16位的offset。 Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 4.6程序计数器PC 功能: 时序逻辑器件,16位寄存器,在控制信号pc_en的控制下可接收ALU的运算结果(高 电平接收,否则保持不变)。输出送往地址寄存器(读取指令内容)以及数据选择器(进行自 32 增运算)。补图 由Quartus生成的.bsf图如下: 设计思想:PC为程序计数器,存放现行指令的地址,具有计数功能。由于在设计中没有设置专门的PC自增电路,所以,PC的运行结果必须送入ALU运算得到下一条指令的地址。 端口说明: 输入信号:alu_out :来自ALU的运算结果,表示下一条指令的地址; en :控制信号; clk:时钟脉冲信号; reset:复位; 输出信号:q:输出信号,送往地址寄存器AR 4.7地址寄存器AR和指令寄存器IR: 功能: 这两个寄存器都是16位的寄存器,地址寄存器用于存放要读写的内存地址单元的地址,输出送往地址总线,输入可能为PC内容,也可能为ALU的输出(对读写内存指令);指令寄存器存放当前执行指令的内容,它的输入来自从内存读取的指令和数据,输出送往控制逻辑。二者共用两位控制信号REC,说明如下: REC 操作 00 无操作 01 AR接收PC 11 AR接收ALU输出 10 IR接收 由Quartus生成的.bsf图如下: 33 设计思想:用二位二进制代码控制相关数据进入地址寄存器或者指令寄存器。在CU 的控制下,完成指令和地址的读写。 端口说明:AR 输入信号:alu_out:alu的运算结果 pc:来自程序计数器PC的运算结果 rec: 控制信号,主要用于控制AR接收何种数据 clk:时钟脉冲 reset:复位信号 输出信号:q:送往地址总线 IR 输入信号:mem_data:来自数据总线 rec: 控制信号,主要用于控制IR接收何种数据 clk:时钟脉冲信号 reset:复位信号 输出信号:q:送往控制器的指令 Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 34 4.8寄存器、寄存器组和寄存器的选择 本实验中的寄存器都为16位,带有清零端和使能端,实际上在写VHDL程序时,通用寄存器以及AR、IR、PC使用的都是同一个模板。按照我们的设计,通用寄存器共有16个,由指令的低8位的全部或其中的高4位或低4位来从寄存器组中选择源寄存器和目的寄存器。安排寄存器选择器件reg_mux,为组合逻辑器件,用于输出选定寄存器的内容。另外,由控制逻辑给出1位控制信号reg_en,控制是否对选中寄存器进行写操作,也须由寄存器选择器件给出对特定寄存器的写使能信号。不然若由一个使能信号控制全部16个寄存器将对实际不参与写操作的寄存器造成不稳定的情况。为了便于调试时查看寄存器内容,另外由外部输入选定寄存器读出其内容,其中读取通用寄存内容的工作也由这个器件完成。 画图说明工作原理 由Quartus生成的.bsf图如下: 设计思想:通用寄存器可指定许多功能,可用于存放操作数,也可作为满足某种寻址方式所需的寄存器。在设计中,我们用三个四位二进制代码控制源操作数,目的操作数,和其他数据的在寄存器组中的存储地址,相应的设置三个输出端口分别用于输出源操作数,目的操作数和其他相关数据. 端口说明: 35 输入信号:reg 0-15: 通用寄存器,可用于存储相关临时数据; dest_reg:来自控制器,表示源操作数在寄存器组中的存储地址; sour_reg:来自控制器,表示目的操作数在寄存器组中的存储地址; en:来自控制器,控制是否对选中寄存器进行写操作; reg_sel: 由外部输入选定寄存器读出其内容。 输出信号: en 0-f:由寄存器选择器件给出对特定寄存器的写使能信号 sr:输出到数据选择器 dr:送往数据选择器 reg_out: 输出由外部输入选定寄存器的内容 Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 4.9一位控制信号/WR 控制对地址寄存器AR指定的内存地址进行何种操作。低电平为写操作,高电平为读操作。 4.10 节拍发生器 时序逻辑器件,作用是用多位触发器的输出信号的不同组合状态,来标识每条指令的执行步骤。其功能相当于一个状态机。前文已述,我们设计的节拍发生器共有3位触发器。在编码方面,遵循了这样的原则:从一个状态变到下一个状态时,状态发生变化的触发器数目应尽量少。 由Quartus生成的.bsf图如下: 36 设计思想: 节拍发生器作为标记每条指令的执行步骤的器件,其功能相当于一个状态机,在特定的输入下转换到特定的次状态。对我们的节拍设计可画出如下状态转换图: RESET s0 100 s5 111 s3 s1 011 000 101 0 s4 1 s2 001 (输入为指令操作码的最高位) 对应在相关节拍CPU的相关活动: 37 上图不清楚,如何解释这张图? 端口说明: 输入信号:clk:时钟信号; reset:复位信号; instruction:指令信号,获取指令的信号的第15位,用于区分A组指令和B组指令。 输出信号:timer:节拍信号 Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 4.11控制逻辑 组合逻辑器件,前面已提到,它根据指令内容(由IR提供)和指令的执行步骤(由节拍发生器提供)及其他一些条件信号(标志寄存器输出),形成并提供出计算机各部件当前时刻要用到的控制信号。根据前面所总结的全部控制信号的意义、作用和数值,可以比较容易地写出控制逻辑部件。 (过程?) 由Quartus生成的.bsf图如下: 38 设计思想:CU单元接收timer发出的节拍信号,然后在不同的节拍下,进行相应的取指,译码,输出控制信号等操作。具体来说,CU首先将接收的指令的前八位和后八位分开,用于分离操作数和操作码,然后将操作数的前四位和后四位分开,用于区分源操作数和目的操作数,然后根据具体的指令输出相关控制信号。再配合图说明 端口说明: 输入信号:timer:节拍信号,是整个CPU的的统一时钟信号; instruction:来自指令寄存器,存放即将执行的指令 c:进位标志位,来自标志寄存器; z:零标志位,来自标志寄存器; v:溢出标志位,来自标志寄存器; s:负标志位,来自标志寄存器; 输出信号: dest_reg:目的操作数寄存器地址,由控制器经过译码输出; sour_reg:目的操作数寄存器地址,由控制器经过译码输出; offset : 8位偏移地址,经过扩展后为16位 sst:控制信号,输出到标志寄存器,控制相关标志位的输出; sci:控制信号,输出到器件T1,控制标志位c的相关输出; rec:控制信号,控制IR和AR接收相关数据; alu_func:控制信号,输出到ALU,控制alu进行何种算逻运算; alu_in_sel: 控制信号,输出到数据选择器,控制数据选择器的输出数据; en_reg: 控制信号,输出到寄存器组,寄存器组的使能信号; en_pc: 控制信号,输出到PC部件,PC寄存器的使能信号; 39 wr: 控制信号,输出到t3部件,控制读写操作。 综上,在对指令寄存器中的指令进行译码后由控制逻辑产生了15位控制信号,共同控制着ALU和寄存器完成各种操作。下表是各指令的具体控制信号值:准备解释这张表的形成过程(方法) 节 拍 指令 编码 Sci SST I7I6 I5I4I3 I2I1I0 /WR REC 注释 000 01 11 10 100 000 1 01 AR<-PC,PC<-PC+1 001 00 11 00 000 000 1 10 IR<-MEM 011 ADD 00000000 00 00 01 000 000 1 00 DR<-DR+SR SUB 00000001 00 00 01 000 001 1 00 DR<-DR-SR AND 00000010 00 00 01 000 010 1 00 DR<-DR and SR CMP 00000011 00 00 00 000 001 1 00 DR-SR XOR 00000100 00 00 01 000 100 1 00 DR<-DR xor SR TEST 00000101 00 00 00 000 010 1 00 DR and SR OR 00000110 00 00 01 000 011 1 00 DR<-DR or SR MVRR 00000111 00 11 01 001 000 1 00 DR<-SR DEC 00001000 01 00 01 010 001 1 00 DR<-DR-1 INC 00001001 01 00 01 010 000 1 00 DR<-DR+1 SHL 00001010 00 00 01 010 101 1 00 DR,C<-DR*2 SHR 00001011 00 00 01 010 110 1 00 DR,C<-DR/2 ADC 00001100 10 00 01 000 000 1 00 DR<-DR+SR+C SBB 00001101 10 00 01 000 001 1 00 DR<-DR-SR-C JR 01000000 00 11 10 011 000 1 00 PC<-OFFSET+PC JRC 01000100 00 11 C0 011 000 1 00 PC<-OFFSET+PC JRNC 01000101 00 11 /C0 011 000 1 00 PC<-OFFSET+PC JRZ 01000110 00 11 Z0 011 000 1 00 PC<-OFFSET+PC JRNZ 01000111 00 11 /Z0 011 000 1 00 PC<-OFFSET+PC JRS 01000001 00 11 S0 011 000 1 00 PC<-OFFSET+PC JRNS 01000011 00 11 /S0 011 000 1 00 PC<-OFFSET+PC CLC 01111000 00 01 00 000 000 1 00 C=0 STC 01111010 00 10 00 000 000 1 00 C=1 101 JMPA 10000000 01 11 10 100 000 1 01 AR<-PC,PC<-PC+1 MVRD 10000001 01 11 10 100 000 1 01 AR<-PC,PC<-PC+1 LDRR 10000010 00 11 00 001 000 1 11 AR<-SR STRR 10000011 00 11 00 010 000 1 11 AR<-DR 111 JMPA 10000000 00 11 10 101 000 1 00 PC<-MEM MVRD 10000001 00 11 01 101 000 1 00 DR<-MEM LDRR 10000010 00 11 01 101 000 1 00 DR<-MEM STRR 10000011 00 11 00 001 000 0 00 MEM<-SR (表中的I7对应pc_en,I6对应reg_en,I5I4I3对应alu_in_sel,I2I1I0对应alu_func_sel) 40 Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 4.12 T3 组合逻辑器件,作用相当于一个双向门,是为了解决数据总线的冲突问题设置的。 控制信号就是控制逻辑输出的读写控制信号wr,进行读操作时输出高阻态,写操作时输出 ALU的运算结果。 由Quartus生成的.bsf图如下: 设计思想:其输入包括读写信号(WR)和ALU的输出:当WR为高电平即读入数据时,T3输出为高阻态;当WR为低电平即写出数据时,T3输出即为ALU输出。将T3的输出与数据总线与起来,就可以实现一个双向门的作用了。示意图如下: MEM_DATA DATA_BUS Z or DATA WR 41 T3 ALU_OUT 端口说明: 输入信号:wr: 读写信号; alu_out:ALU输出结果; 输出信号:output:输出到存储器; Quartus仿真结果:对仿真的结果要说明(用箭头指向图中的目标) 4.13 REG_OUT 对外输出寄存器内容的译码电路,组合逻辑器件,根据外部输入的寄存器选择信号输出制定的寄存器内容(包括为了便于观察引出的内部信号寄存器)。 由Quartus生成的.bsf图如下: 设计思想:通过对寄存器内容的输出,可以及时的指导寄存器在某一时刻的内容,方便对 系统的控制和调试。 端口说明: 42 输入信号:ir:来自指令寄存器; pc:来自程序计数器; reg_in:来自寄存器组的某个寄存器单元; offset:T2输出的扩展后的偏移地址; alu_a:来自数据选择器,ALU的操作数之一; alu_b: 来自数据选择器,ALU的操作数之一; alu_out:ALU的输出结果; reg_testa:部件testa的输出结果,可能为某一时刻的CU控制信号; reg_sel:用于选择输出的某个寄存器的地址; 输出信号:reg_data:输出选定的寄存器数据。 4.14存储器 它和TEC—CA实验台上存储器的接口部分。向实验台上的存储器送出16存储器地址总线Mem_addr,16位双向数据总线ob,读写信号/wr。当/wr为1时,实验台上的存储器作为读存储器信号处理;当/wr信号为0时,实验台上的存储器作为读存储器信号处理。实验台上的存储器由2片静态存储器6116和少量附加电路构成。(在TEC—CA实验台上具体实: 2片6116并联构成16位字长的存储器,6116所需的片选信号cs为低,读信号oe由rw反相产生,写信号we直接选用rw)。实验CPU中存储器部分传统上属于控制器部分,实验台上的存储器属于计算机的存储器部分。由Quartus生成的.bsf图如下: 设计思想:存储器在CPU系统占有重要的位置,存放着程序的相关指令和数据。 在设计方面,/wr控制存储器的读写操作。通过对存储器的读写操作,可以从存储器获得下 43 一条将要执行的指令,获得相关源操作数和目的操作数,同时,也可以将相关数据写回主存储器。 端口说明: 输入信号:reset:复位端; clk:时钟信号; /wr:存储器读写控制端; Mem_addr:相关指令数据地址; SR_data:立即数 alu_out:ALU的运算结果 输出信号:ob:送往总线; ar:送往地址寄存器; data_read:读存储器的数据 DR_data_out: 存储器数据作为写DR的数据或者运算结果作为写DR的数据 4.15总线选择器 组合逻辑电路, 解决在总线复用的条件下数据冲突的问题。通过总线选择器可以将ALU的相关运算结果通过不同的总线送回。在设计方面,wr控制对总线的读写操作,data_bus将数据输入到数据总线,mem_bus则将数据输入到地址总线。 由Quartus生成的.bsf图如下: 端口说明: 输入信号:wr:来自控制器,控制总线选择器的读写操作; alu_out: 来自ALU的运算结果; 输出结果:data_bus:结果送往数据总线; mem_bus:结果送往地址总线 44 4.16 REG_TEST 对外输出控制器在一定条件下的控制信号的译码电路,组合逻辑器件。 由Quartus生成的.bsf图如下: 设计思想:通过对控制信号的输出,可以及时的了解控制器在某一时刻发出的相关控制指令,方便对系统的控制和调试。 端口说明:输入信号:clk:时钟信号; reset:复位控制端; input_a:来自Timer的输出端,用于输出节拍信号; input_b:来自控制器alu_func,输出ALU在当前时刻的运算操作信号; input_c:来自控制器alu_in_sel,输出数据选择器控制信号; cin:来自T1部件,输出cin的进位标志; rec:来自来自控制器rec,输出IR和AR接收相关数据的控制信号; pc_en:来自来自控制器en_pc, 输出PC寄存器的使能控制信号; 的使能控制信号; reg_en:来自来自控制器reg_pc,输出寄存器组 输出信号:q:送往reg_out 至此全部的功能部件都已实现,要做的是把它们正确连接起来。在Quartus中可以为每一个功能部件(现在是.vhd文件)创建一个符号文件(.bsf),它可以自动根据功能部件的输入输出画出外观图,而屏蔽掉内部细节;然后新建一个Block Diagram File(.bdf),按照整个FPGA-CPU的结构图将各个部件的外观图摆上去,对应管脚连接起来,引出输入输出管脚, 45 最后根据使用的器件和前面画出的FPGA-CPU外观图指定管脚,通过编译就可以下载到芯片 中了,当然在这之前还应当进行反复的模拟验证。 5附录: 附录A:组员分工: 冯福力(07055111):总体设计,控制器部分; 王智(07055123):指令系统部分; 沈培均(07055120):节拍发生器及其他部分; 杜建营(07055109):数据选择器及ALU; 刘大方(06055118):寄存器部分。 附录B:组员设计总结: 王智:在这次组成原理小组设计实验中,我负责指令系统的设计,在实验之前,我原本以为指令系统的设计会非常简单,只要将常用的几条计算机指令罗列出来,并结合自己上学期学过的计算机组成原理课本知识,简要描述一下这些指令的基本功能和原理就可以了,但真正经过老师的讲解和同学们的交流后,我才明白设计一个指令系统远没有那么随便,大致而言,首先,指令系统直接关系到用户使用计算机时对计算机各个部件功能的调用和实现,因此作为一个指令系统,它首先要明确当前计算机有哪些部件,要实现哪些功能,以及如何将这些功能通过指令尽可能简单的呈现给用户,以达到既让用户通过自己设计的这些指令能够实现所有必要功能,同时还保证没有一个部件被闲置或浪费。其次,设计一个指令系统,一定要对当前整个系统有一个比较充分的了解和认识,需要认真研究系统的整体框架,以及各个部件的指令流图,控制信号,在这个过程当中,让我明显感到了自己以前学过的知识的不足,对计算机具体工作流程的认识不够,虽然自己趁这个机会对相关知识有所学习和补充,不过在这方面以后还是一定要好好加强。最后,在具体确定指令系统大概有哪些指令,这些指令如何通过部件实现时,还要明确自己小组的实力,不能盲目给系统增加功能,因为每增加一条指令都可能会给接下来整个大系统的实现带来很大的困难,也正是由于这个原因,我只选择了比较少的几条必要指令来作为自己指令系统的基础,当然在整个设计过程中还要积极与其他组员交流,互相了解自己的某一步设计会不会给他人带来很大的麻烦从而对这一部分重新设计。 总之,通过这次对指令系统的设计,让我对整个计算机基本原理和系统结构都有了很深的体会和认识,也强迫自己在以前不足的地方去学习了一些新的知识,最重要的是,真正让自己认识到了自己现在所学过的知识还太少太少,根本不足以完成一个哪怕是最简单的计算机项目,自己以前只满足于将课本知识学会的想法也有很大的问题,需要好好反省,在接下来的时间里,自己一定要好好把握,既要加强基础知识的学习,也要锻炼自己的实验能力,努力让自己的专业素质有很大的提高。 谈的很好,其他同学呢, 系统的设计基本完成,但5人的工作量(包括“质”)还需加强: 1.. 要加强系统整体风格的统一(概念的描述,文字,绘图); 2. 所有叙述工作原理的地方,都要画流程图或状态图描述,它也为后面调试带来方便; 3. 每一个部件、概念的定义都要准确,可查阅“权威”的资料,说明出处; 4. 先出“设计框图”再得“仿真后的电路图”;“设计中的原图要保留” 5. 5 人再合理分配工作,抓紧时间。建议有人研究一下FPGA芯片下载后的“映射、布局和布线“等实际的工程问题(可参见TP271/90第6章等) 46 6. 考核:每人的具体工作有一定的“质”和“量”的要求,请每人务必重视。每人应该完成 20页的内容(量),设计的内容要很清楚。 7. 本月20日开始验收。 47
/
本文档为【计算机组成原理CPU设计实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索