一个非常简单CPU设计.docx
《一个非常简单CPU设计.docx》由会员分享,可在线阅读,更多相关《一个非常简单CPU设计.docx(23页珍藏版)》请在冰豆网上搜索。
![一个非常简单CPU设计.docx](https://file1.bdocx.com/fileroot1/2023-1/26/4c18c73f-68e9-48f0-859d-0e065675e843/4c18c73f-68e9-48f0-859d-0e065675e8431.gif)
一个非常简单CPU设计
课程设计
课程名称:
计算机硬件及其组成原理
设计题目:
一个非常简单的CPU的设计
学院:
信息工程与自动化学院
专业:
计算机科学与技术
年级:
09级
学生姓名:
指导教师:
日期:
2011.7.11-2011.9.9
教务处制
课程设计题目一个非常简单的CPU的设计-1-
摘要-1-
1总体说明-2-
1.1指令系统:
-2-
1.1.1指令格式分类-2-
1.1.2相关指令流程图:
-4-
1.1.3指令数据通路的构建:
-5-
1.2微代码-8-
1.2.1微代码定义-8-
1.2.2微指令代码化-9-
2详细设计-13-
2.1系统分析-13-
2.1.1系统需求分析-13-
2.1.2系统目标-13-
2.1.3功能分析-13-
2.1.4详细步骤-13-
3总结-16-
课程设计题目一个非常简单的CPU的设计
课程设计主要内容:
设计一模型计算机。
根据功能和用途确定指令系统,要求:
(1)定义数据通路,要把框图画出。
(2)设计每条指令的执行流程。
(3)可以利用组合逻辑控制器或微程序进行设计,至少实现4条CPU指令(从ADD,SUB,XOR,AND,OR中选择);
(4)在设计中要求详细定义指令系统的格式。
(5)用具体的芯片以及连线实现该模型机,用Protel画连线逻辑图
摘要
随着社会科技的发展,计算机被应用到各行各业,人们步入自动化、智能化的生活阶段。
本次课程设计课题是基本模型机的设计与实现,它正体现了这一点。
利用CPU与简单模型机来实现计算机组成原理课程及实验中所学到的实验原理和编程思想,硬件设备自拟,编写指令的应用程序,用微程序控制器实现了一系列的指令功能,最终达到将理论与实践相联系。
本次设计完成了各指令的格式以及编码的设计,实现了各机器指令微代码,形成具有一定功能的完整的应用程序。
部件实验过程中,各部件单元的控制信号是人为模拟产生的,本课程设计将能在微程序控制下自动产生各部件单元的控制信号,实现特定指令的功能,通过设计流程图,编写机器指令,微指令和控制信号程序。
首先向存储器(RAM)中装入数据和程序,然后检查写入是否正确,启动程序执行。
另外,还需设计三个控制台操作微程序:
存储器读操作(READ),存储器写操作(WRITE),运行程序(RUN)。
以上各微指令设计完毕后,连接线路在ZY15CompSys12BB计算机组成原理教学实验箱运行程序,并将实验结果显示输出。
这一课题的实现不仅使我们对各种微指令有了熟练的掌握,更对以后的学习、工作中有深远的影响。
关键词:
微指令,机器指令,READ,WRITE,RUN,ZY15CompSys12BB
1总体说明
1.1指令系统:
计算机的指令是用户使用计算机与计算机本身运行的最小功能单位。
一台计算机支持的全部指令就构成该机的指令系统。
从计算机本身的组成看,指令系统直接与计算机系统的性能和硬件结构的复杂程度等密切相关,它是CPU设计的起始点和基本依据。
设计指令系统的核心问题是选定指令的格式和功能。
具体到我们的设计来说,指令的功能应该包括简单的算术和逻辑运算,移位操作,数据传送,跳转,读写内存,另外还可能包括一些其他功能如置条件码等。
为了指令的规整性和便于译码,我们主要采用了定长的操作码组织方案,操作码为8位。
寻址方式包括了寄存器寻址、立即数寻址、直接地址和相对寻址。
1.1.1指令格式分类
部件实验过程中,各部件单元的控制信号是人为模拟产生的,而本次实验将能在微程序控制下自动产生各部件单元控制信号,实现特定指令的功能,这里,计算机数据通路的控制将由微程序控制器来完成,CPU从内存中取出一条机器指令到指令执行结束的一个指令周期全部由微指令组成的序列来完成,即一条机器指令对应一个微程序。
本实验采用六条机器指令:
IN,OUT,STA,加ADD,减SUB,循环左移RLC其指格式如下:
地址 内容 助记符 说明
00 00 IN ;输入开关数据→R0,采集数据
01 10 ADD[0AH] ;R0+[0AH]→R0
02 0A ;地址
03 20 STA[0BH] ; R0→[0BH]
04 0B ;地址
05 30 OUT[0BH] ;[0BH] →BUS,输出显示
06 0B ;地址
07 40 SUB[0AH] ;R0-[0AH] →R0
08 0A ;地址
09 50 RLC
0A 01
0B
为了向RAM中装入程序和数据,检查写入是否正确,并能启动程序执行,还必须设计三个控制台操作微程序.
存储器读操作:
拨动总清开关CLR后,控制台开关SWB,SWA为”00”时,按START微动开关,可对RAM连续手动读操作.
存储器写操作:
拨动总清开关CLR后,控制台开关SWBSWA置为”01”时,按START微动开关可对RAM进行连续手动写入.
启动程序:
拨动总清开关CLR后,控制台开关SWBSWA置为“11”时,按START微动开关,既可转入到第01号“取址”微指令,启动程序运行.
上述三条控制台指令用两个开关SWBSWA的状态来设置,其定义如下
表1读写变化
SWB
SWA
控制台指令
0
0
1
0
1
1
读内存(KRD)
写内存(KWE)
启动程序(RP)
根据以上要素设计数据通路框图,如图1:
图1数据通路框图
1.1.2相关指令流程图:
1.算术逻辑运算指令2.访存指令
3.访寄存器指令4.跳转指令
1.1.3指令数据通路的构建:
1.取指令数据通路的构建
取指令的微操作安排如下:
T0:
PCBUSMAR,PCBUSA,1READ
T1:
M(MAR)MDRBUSIR,ALU(A+2)Y
T2:
YBUSPC,IRID
数据通路如下:
2.算逻指令执行周期数据通路构建
算逻指令执行周期微操作安排如下:
T0:
$R2BUSA
T1:
$R3BUSB
T2:
ALU(A,B)YBUS$R1
数据通路如下:
3访存指令执行周期数据通路构建
LDRR指令执行周期的微操作安排如下:
T0:
Ad(IR)扩位BUSMAR,1READ
T1:
M(MAR)MDR
T2:
MDRBUS$R
STRR指令执行周期的微操作安排如下:
T0:
$RBUSMDR
T1:
Ad(IR)扩位BUSMAR,1WRITE
T2:
4.访寄存器组指令执行周期数据通路构建
访寄存器指令执行周期微操作安排如下:
T0:
$R2BUS$R1
T1:
T2:
数据通路如下:
5.跳转指令执行周期数据通路构建
跳转指令执行周期的微操作安排如下:
T0:
Im(IR)扩位和移位BUSA
T1:
PCBUSB
T2:
ALU(A+B)YBUSPC
1.2微代码
1.2.1微代码定义
微代码定义如表2所示:
表2微代码的定义
微程序
24
23
22
21
20-
19
18
17
16
15
14
13
控制信号
S3
S2
S1
S0
M
CN
RD
M17
M16
A
12
11
10
9
8
7
6
5
4
3
2
1
B
P
uA5
uA4
uA3
uA2
uA1
uA0
表3A,B,P字段内容
A字段B字段P字段
15
14
13
控制信号
12
11
10
控制信号
9
8
7
控制信号
0
0
0
.0
0
0
0
0
0
0
0
1
LDRI
0
0
1
RS_G
0
0
1
P1
0
1
0
LDDR1
0
1
0
0
1
0
0
1
1
LDDR2
0
1
1
0
1
1
1
0
0
LDIR
1
0
0
1
0
0
P4
1
0
1
LOAD
1
0
1
ALU_G
1
0
1
1
1
0
LDAR
1
1
0
PC_G
1
1
0
LDPC
当拟定“取指令”微指令时,该微指令的判别测试字段为P1测试。
由于“取指”微指令是所有微程序都使用的公用微指令,因此P1测试结果出现多路分支。
本次课程设计用指令寄存器的前4位(I7-I4)作为测试条件,出现6路分支,占用6个固定微地址单元。
控制台操作为P4测试,它以控制台开关SWB,SWA作为测试条件,出现了3路分支,占用3个固定微地址单元。
当分支微地址单元固定后,剩下的其他地方就可以一条微指令占用控存一个微地址单元随意填写。
1.2.2微指令代码化
当全部微程序设计完毕之后,应将每条微指令代码化:
运行:
01
02
10
INADDSTAOUTSUBRLC
101112131415
010307163135
0426173236
0501253337
063425
01
37
01
01
25
01
控制台
00
20
WRITE(01)READ(00)RUN(11)
212023
2422
01
3027
图2微程序流程图
表4二进制微代码表
微地址
S3~CN
RD
M17M16
A
B
P
uA5~uA0
00
000000
0
11
000
000
100
010000
01
000000
0
11
110
110
110
000010
02
000000
0
01
100
000
001
001000
03
000000
0
01
110
000
000
000100
04
000000
0
01
011
000
000
000101
05
000000
0
11
010
001
000
000110
06
100101
0
11
001
101
000
000001
07
000000
0
01
110
000
000
010110
10
000000
0
00
001
000
000
000001
11
000000
0
11
110
110
110
000011
12
000000
0
11
110
110
110
000111
13
000000
0
11
110
110
110
001110
14
000000
0
11
110
110
110
011001
15
001100
0
11
000
001
000
011101
16
000000
0
01
110
000
000
001111
17
000000
0
01
010
000
000
010101
20
000000
0
11
110
110
110
010010
21
000000
0
11
110
110
110
010100
22
000000
0
01
010
000
000
010111
23
000000
0
11
000
000
000
000001
24
000000
0
00
010
000
000
011000
25
000001
1
10
000
101
000
000001
26
000000
1
01
000
001
000
000001
27
000001
1
10
000
101
000
010000
30
000001
1
01
000
101
000
010001
31
000000
0
01
110
000
000
000100
32
000000
0
01
011
000
000
000101
33
000000
0
11
010
001
000
000110
34
011000
0
11
001
101
000
011111
35
000110
0
11
000
100
000
011110
36
000000
0
11
001
100
000
011111
37
000000
0
11
010
001
000
010101
下面介绍指令寄存器(IR):
指令寄存器用来保存当前正在执行的一条指令。
当执行一条指令时,先把他从内存取到缓冲寄存器中,然后再传送至指令寄存器。
指令划分为操作码和地址码字段,由二进制数构成,为了执行任何给定的指令,必须对操作码进行测试[P
(1)],通过节拍脉冲T4的控制以便识别所要求的操作。
“指令译码器:
”(实验板上标有“INSDECODE”的芯片)根据指令中的操作码译码强置微控器单元的微地址,使下一条微指令指向相应的微程序首地址。
本系统有两种外部I/O设备,一种是二进制代码开关,它作为输入设备(INPUTDEVICE);另一种是数码块,它作为输出设备(OUTDEVICE)。
例如:
输入时,二进制开关数据直接经过三态门送到总线上,只要开关状态不变,输入的信息也不变。
输出时,将输出数据送到数据总线上,当写信号(W/E)有效时,将数据打入输出锁存器,驱动数码块显示。
2详细设计
2.1系统分析
2.1.1系统需求分析
一台计算机所能执行的各种指令集合称为指令系统或指令集。
一台特定的计算机只能执行自己指令系统中的指令。
因此,指令系统就是计算机的机器语言。
指令系统表征着计算机的基本功能和使用属性,它是计算机系统设计中的核心问题。
指令系统的设计主要括指令功能、操作类型的设计,寻址方式和指令格式的设计。
计算机的性能与它所设置的指令系统有很大的关系,指令系统反映了计算机的主要属性,而指令系统的设置又与机器的硬件结构密切相关。
指令是计算机执行某种操作的命令,而指令系统是一台计算机中所有机器指令的集合。
通常性能较好的计算机都设置有功能齐全、通用性强、指令丰富的指令系统,而指令功能的实现需要复杂的硬件结构来支持。
2.1.2系统目标
在基本模型机的基础上改进并实现IN,OUT,STA,加ADD,减SUB,循环左移RLC六条指令。
2.1.3功能分析
该系统实现的功能是对输入的数据可以和内存中的数据进行连续的加、减及循环左移运算,并对其结果进行存储,显示等功能,从而得到一个简易的复杂模型机所实现的功能。
2.1.4详细步骤
(1)按图3连接实验线路。
图3实验线路图
(2)写程序
联机读/写程序
按照规定格式,将机器指令及表5-2微指令二进制表成十六进制的如下格式文件。
微指令格式中的微指令代码微将表5-2中的24位微代码按从左到右分成3个8位,将此三个8位二进制代码化为相应的十六进制数即可。
程序
$P0000
$P0110
$P020A
$P0320
$P040B
$P0530
$P060B
$P0740
$P080A
$P0950
$P0A01
微程序
$M00018110
$M0101ED82
$M0200C048
$M0300E004
$M0400B005
$M0501A206
$M06959A01
$M0700E016
$M08001001
$M0901ED83
$M0A01ED87
$M0B01ED8E
$M0C01ED99
$M0D31821D
$M0E00E00F
$M0F00A015
$M1001ED92
$M1101ED94
$M1200A017
$M13018001
$M14002018
$M15070A01
$M16028201
$M17070A10
$M18068A11
$M1900E01A
$M1A00B01B
$M1B01A21C
$M1C619A1F
$M1D19881E
$M1E01981F
$M1F01A215
(3)运行程序
①.单步运行程序
A使编程开关处于”RUN’的状态,STEP为”STEP”状态,STOP为”RUN”状态’
B拨动总清处于CLR(0_1),微地址清零,程序计数器清零,程序首址为00H..
C单步运行一条微指令,每按动一次START键,即单步运行一条指令,对照微程序流程图,观察微地址显示是否和流程一致.
D当运行结束后.可检查存数单元中的结果是否和理论植一致.
②.连续运行程序
A使”STARTUNIT”中的STEP开关置为”ECEX”状态.STOP开关置为”RUN”状态.
B拨动CLR开关,清微地址及程序计数器,然后按动START,系统连续运行程序,稍后将”STOP”拨至”STOP”时,系统停机.
C停机后,可检查存数单元结果是否正确.
③.若联机运行程序时,进入DEBUG调试界面,总清开关CLR清零后,程序首址为00H.按相应功能键既可联机运行调试程序。
3总结
经过这次课程设计,我体会到自己所学的东西太少了,很多都不知道。
虽然这次设计的只是一个小程序,但是这其间我还是学到了不少东西。
在这次课程设计的过程,有些很基本的知识出现记混淆的现象,通过查书及询问同学,最终明白了。
本次课程设计我们要设计一个简单的CPU,以对计算机能有一个整机的概念,完成对计算机组成原理这门课程的综合应用,达到学习本书的作用。
作为一个计算机系学生这是必需掌握的,使我们对数据选择器,移位器,加法器,运算器,存储器和微程序控制器,有了比较透彻的认识。
由于计算机设计的部件较多,结构原理较复杂,对于我们这样的初设计者来说感到无从下手,所以我们在整个过程中采取由浅入深,由简单到复杂的放法,通过这次设计,使我们能清楚的了解计算机的基本组成,基本原理和设计步骤,设计思路和调试步骤,最终能清晰的建立起整机概念,为独立完成计算机设计奠定了基础。
课程设计结束了,从中我们也学到了不少知识。
虽然计算机组成原理的课程设计与学习已经结束,可我们学习之路并没有结束,我们会继续努力学习其相关的知识,以适应社会的发展与需要,这样才能真正成为一名合格的大学生。
在此次的设计中,感谢老师对我们的帮助和指导。
过程还不够完善,希望老师继续指导。