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

更新时间:2023-09-19 23:32:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机组成原理报告

课程设计题目:16位CPU设计

学院: 信息学院 班级:电子A班 学号:1115102015 姓名:方茹

1

目录

1 实验方法 ...................................................................................................................................... 4 2 总体说明 ...................................................................................................................................... 5

2.1指令系统: .............................................................................................. 5

2.1.1指令格式分类(按指令字长和操作数不同): .............................................................. 5 2.1.2具体指令汇总表: ............................................................................................................ 6 2.1.3相关指令流程图: ............................................................................................................ 6 2.1.4指令数据通路的构建: .................................................................................................... 7 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指令格式分类(按指令字长和操作数不同):

(1)单字指令

单字节指令格式

(2)双字指令

5

2.1.2指令操作码

操作码功能表

2.1.3相关指令流程图:

1.算术逻辑运算指令 2.访存指令

6

将参与运算的两个操作数分别放入ALU的A端和B端

ALU进行运算,结果存入暂

存器Y中

将指令中存储器地址经地址总线送入MAR当中,并把存储器读写使能端置为读

将寄存器中数据经数据总线送入MDA

将暂存器Y中结果经总线送

回指定寄存器

将存储器中数据送入MDR

将地址经地址总线送入MAR,并读写使能端为写

将MDR中数据经数据总线送入

寄存器

将MDR中数据存入存储器

3.访寄存器指令 4.跳转指令

将寄存器中操作数送入总线 将立即数经符号扩展后送入总线

取指令中立即数送入ALU的A端,将PC得值送入B端

将总线上的数送往寄存器

ALU完成加运算,将结果送到暂存器Y中

将Y中数据经数据总

线送入PC

2.1.4指令数据通路的构建:

7

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 ALUOP ALU A_IN A B B_IN P C IR B U BUS_MUX MUX MAR_I MEM MAR MDR_IMDR

2. 算逻指令执行周期数据通路构建 算逻指令执行周期微操作安排如下:

T0: $R2 ? BUS ? A T1: $R3 ? BUS ? B

T2: ALU(A ,B) ? Y? BUS ? $R1 数据通路如下:

S

8

IR RF Y ALUOP BU RF_IN ALU A_IN BUS_MUX A B B_IN S MUX

3访存指令执行周期数据通路构建

IR RF Y RF_IN ALU A BUS_MUX B B U S MUX MEM MAR MDR_IMDR

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

BU

BUS_MUX

RF_IN

扩位

S

MUX

10

5. 跳转指令执行周期数据通路构建

跳转指令执行周期的微操作安排如下: T0: Im(IR) ? 扩位和移位 ? BUS ? A T1: PC ? BUS ? B

T2: ALU(A+B) ? Y? BUS ? PC

P C IR Y ALU PC_IN 扩位 A BUS_MUX B ALUOP B U S 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组指令 控制器译码 传送地址

101 AR<- 地址 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 总线

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 clk PC Data Out 指令存储器 指令

图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下一条指令地址的计算

在计算下一条指令地址时,有如下几种情况:

1)如果当前指令不是分支或跳转指令,则可以简单的在当前指令的基础上加2,就得到了下一条指令的地址,保存到程序计数器PC中。

2)当前指令为分支或者跳转指令时,则需要根据当前指令来计算跳转地址。

具体而言,在计算分支指令时,首先需要把分支指令中的8位立即数进行符号扩展;把结果加到当前指令的指令地址上,从而产生分支转移地址。

8位立即数为INSTOUT[7..0],符号位是INSTOUT[7],如图1-5所示,可将INSTOUT[7]扩展到高8位。

由此可得到计算下一条指令地址的数据选通电路。(如图3-5) (如何工作?画流程图或

19

状态图)

bus_dirwralu_out[15..0]data_bus[15..0]mem_data[15..0]instariralu_out[15..0]pc[15..0]rec[1..0]clkresetinst9q[15..0]mem_data[15..0]rec[1..0]clkresetq[15..0]inst11alupccinalu_out[15..0]czvsinst10alu_out[15..0]enclkresetq[15..0]alu_a[15..0]alu_b[15..0]alu_func[2..0]inst7t2offset_8[7..0]offset_16[15..0]inst12

图3-5 取指令地址的数据选通电路的实现 3.2指令译码逻辑的设计

在得到了指令字之后,将转入指令译码阶段。 指令译码操作步骤完成如下的功能: 1)识别指令;

2)根据不同的指令给出各种控制信号;

3)根据指令从相应的源数据寄存器中取出操作数,为下一步的指令执行做好准备。 指令译码动作由控制部件CtrlUnit完成。

20

本文来源:https://www.bwwdw.com/article/spph.html

Top