采用微程序控制器的CPU设计.docx
《采用微程序控制器的CPU设计.docx》由会员分享,可在线阅读,更多相关《采用微程序控制器的CPU设计.docx(22页珍藏版)》请在冰豆网上搜索。
![采用微程序控制器的CPU设计.docx](https://file1.bdocx.com/fileroot1/2022-10/29/f8a4b7ed-8300-431a-9b64-3e894d8af155/f8a4b7ed-8300-431a-9b64-3e894d8af1551.gif)
采用微程序控制器的CPU设计
计算机组成原理课程设计报告
题目采用微程序控制器的CPU设计
姓名
学号
指导老师
成绩
2013年1月11日
目录
1.课程设计目的与要求3
2.开发工具选择3
3.设计方案选择3
4.指令系统设计4
5.模型机总体结构设计4
6.指令流程设计6
7.微指令格式设计7
8.微程序流程设计7
9.微程序的编写8
9.VHDL实现9
10.调试仿真14
11.课程设计回顾总结19
参考文献19
1.课程设计目的与要求
1)课程设计目的:
①融会贯通计算机组成原理课程各章教学内容,通过知识的综合运用,加深对CPU各模块工作原理及相互联系的认识,建立计算机整机的概念。
2通过对一个简单模型机的设计,达到对计算机的基本组成、部件的设计、部件间的连接、微程序控制器的设计、微指令和微程序的编制与调试等过程有更深的理解,加深对理论课程的理解。
3学习运用大容量可编程器件开发技术,掌握设计和调试的基本步骤和方法。
4培养独立工作和创新思维的能力,取得设计与调试的实践经验。
2)课程设计要求:
设计一台微程序控制的模型计算机
①拟定指令系统(含机器指令的字长、格式、寻址方式及指令的种类等)
②设计数据通路,给出模型机中所含的部件及其间的连接,以及信息在数据通路中传送时所需的微命令。
3设计微程序的流程图
4设计微指令
5编写微程序
6使用VHDL编码,仿真检测实验的功能是否达到设计要求
撰写课程设计报告,要求报告中所规定的图文齐全、符合要求、结构合理,能对实验中出现的问题进行分析及给出解决的方法。
2.开发工具选择
以TEC-CA教学实验系统为平台,采用硬件描述语言VHDL为设计工具,应用QUARTUSⅡ5.1环境进行大规模集成电路的功能设计仿真。
3.设计方案选择
1)总线宽度:
该模拟机仅有一条总线,且总线宽度为8位。
2)寄存器:
所有的寄存器的位数均为8位:
1 通用寄存器R:
该模拟机有1个通用寄存器,用于寄存器寻址时存放结果,提供操作数。
2 指令寄存器IR:
为了提高取指令的速度,将指令从内存中读出,经数据总线直接置入IR。
3 数据寄存器MDR、地址寄存器MAR:
地址寄存器MAR提供访问主存的地址;数据寄存器MDR,把从内存取出的数据暂存于MDR中,在用到该数据进行运算时,再从MDR中取出数据进行运算。
4 程序计数器PC:
用于存放下一条指令的内存地址。
3)ALU可以实现8位操作数的运算,即ALU的位数为8位,ALU运算功能为:
加、减、逻辑与、逻辑或、条件转移
4)数据通路
4.指令系统设计
1)字长:
固定字长8位
2)指令格式:
操作码(3位)
标志位(1位)
地址码(4位)
3)操作码的位数:
3位,最多有8条指令
000
load
001
store
010
add
011
sub
100
and
101
or
110
bne
4)寻址方式:
直接寻址和寄存器间接寻址
load7:
:
将7单元的数据装入ACC寄存器中。
机器指令为00000111
store8:
将ACC寄存器中的数据存入8单元中。
机器指令为00101000
add9:
:
将ACC寄存器中的数据与9单元中的数据相加,结果存入ACC寄存器中。
机器指令为01001001
sub[R]:
将ACC寄存器中的数据与R寄存器中数据相减,结果存入ACC寄存器中。
and10:
将ACC寄存器中的数据与10单元中的数据相与,结果存入ACC寄存器中。
机器指令为10001010
or11:
将ACC寄存器中的数据与11单元中的数据相或,结果存入ACC寄存器中。
机器指令为10101011
ben12:
条件转移指令,如果Z_FLAG标志为0,则程序执行顺序发生转移,转向地址为12单元中的内容。
机器指令为11001100
对于双操作数指令,其中一个操作数为指令中指定的存储单元中的数据,另一操作数隐含为ACC。
5.模型机总体结构设计
6.指令流程设计
loadstoreadd
PC—>MARPC—>MARPC—>MAR
PC+1—>PCPC+1—>PCPC+1—>PC
M(MAR)—>MDRM(MAR)—>MDRM(MAR)—>MDR
MDR—>IRMDR—>IRMDR—>IR
IR中的地址码—>MARIR中的地址码—>MARIR中的地址码—>MAR
M(MAR)—>MDRACC—>MDRM(MAR)—>MDR
MDR—>ACCMDR—>M(MAR)MDR+ACC—>ACC
subandor
PC—>MARPC—>MARPC—>MAR
PC+1—>PCPC+1—>PCPC+1—>PC
M(MAR)—>MDRM(MAR)—>MDRM(MAR)—>MDR
MDR—>IRMDR—>IRMDR—>IR
IR中的地址码—>MARIR中的地址码—>MARIR中的地址码—>MAR
Ir_out(4)='1'
R→MARM(MAR)—>MDRM(MAR)—>MDR
M(MAR)—>MDRMDRandACC—>ACCMDRORACC—>ACC
ACC-MDR—>ACC
bne
PC—>MAR
PC+1—>PC
M(MAR)—>MDR
MDR—>IR
IR中的地址码—>MAR
M(MAR)—>MDR
Z_FLAG=0?
YES
MDR—>PC
7.微指令格式设计
微指令的格式:
操作控制字段
顺序控制字段
操作控制字段:
采用直接控制法,操作控制字段的位数与设计的微命令的个数一致。
15位
顺序控制字段:
决定如何产生下一条微指令的地址。
5位
如果微指令的执行是顺序执行,则顺序控制字段提供下一条微指令的地址;如果产生了分支,则顺序控制字段为标志,注意此标志所对应得微地址中不要存入微指令。
8.微程序流程设计
20
9.微程序的编写
微地址
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
0~4
r_bus
load_PC
ACC_bus
load_ACC
PC_bus
load_IR
load_MAR
MDR_bus
load_MDR
ALU_ACC
INC_PC
Addr_bus
cs
R_NW
ALU_and
ALU_or
ALU_add
ALU_sub
下地址
00
0
0
0
0
1
0
1
0
0
0
1
0
0
0
0
0
0
0
00001
01
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
00010
02
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
0
0
00011
03
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
11111
04
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
00000
05
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
00000
06
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
1
0
00000
07
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
10011
08
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
00100
09
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
00101
10
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
00110
11
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
11011
12
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
01111
13
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
10000
14
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
11110
15
0
0
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
0
00000
16
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
1
0
0
00000
17
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
00000
18
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
00000
19
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
1
00000
20
1
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
00111
各个控制信号:
控制信号
描述
ACC_bus
用ACC的内容驱动总线
load_ACC
将总线上的数据载入ACC
PC_bus
用PC的内容驱动总线
load_PC
将总线上的数据载入PC
load_IR
将总线上的数据装载至IR
load_MAR
将总线上的数据装载至MAR
MDR_bus
用MDR的内容驱动总线
load_MDR
将总线上的数据装载至MDR
ALU_ACC
用ALU的结果装载ACC
INC_PC
PC+1并将结果存至PC中
Addr_bus
用IR中指令的地址码部分驱动总线
CS
片选。
用MAR的内容设置存储器地址
R_NW
读取,不可写。
当R_NW无效且CS有效时,MDR的内容存储于存储器中
ALU_add
在ALU中执行加法操作
ALU_sub
在ALU中执行减法操作
ALU_and
在ALU中执行与操作
ALU_or
在ALU中执行或操作
R_bus
用R的内容驱动总线
9.VHDL实现
cpu_defs.vhd
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
PACKAGEcpu_defsIS
TYPEopcodeIS(load,store,add,sub,and0,or0,bne);
CONSTANTword