组成原理课设报告Word下载.docx
- 文档编号:18635610
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:12
- 大小:406.67KB
组成原理课设报告Word下载.docx
《组成原理课设报告Word下载.docx》由会员分享,可在线阅读,更多相关《组成原理课设报告Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
然后根据系统的需要,事先编制各段微程序,将它存入控制存储器中。
图1微程序控制基本框
4、指令系统设计
所要设计的微程序控制器是由五条指令来完成的,即load、store、add、sub、bne。
实现功能与操作码分别如下所示:
Load:
从内存中取数,操作码为:
000;
store:
往内存中存数,操作码为:
001;
add:
指令实现加法操作,操作码为:
010;
sub:
指令实现减法操作,操作码为:
011;
bne:
指令实现送数操作,操作码为:
100;
5、模型机框图设计
模式机数据通路如下图所示,模型机采用单总线结构,主要包括运部件ALU,以及程序计数器PC、累加器ACC、指令寄存器IR、数据寄存器MDR、地址寄存器MAR和Mam内存。
模型机数据通路如下所示:
六、指令流程图
指令流程图如下图所示,共有5条指令,每条指令都要经过取指令、分析指令和执行指令3个步聚。
在取指令阶段时,5条指令是一样的,首先程序计数器PC的内容通过总线送入地址寄存MAR,存储信息,PC+1传送给PC,把读出的内容传入指令寄存器IR。
再接下来的操作中,根据不同的指令,执行顺序也不同。
7、微指令格式设计
微指令格式设计如下表所示:
8、微操作信号编码如下如示:
0=>
"
00010100000000000001"
1=>
10000000010110010001"
2=>
00001010000000000011"
3=>
00000100001000001111"
4=>
00100010000000000000"
5=>
00000000000100000000"
6=>
00000010000001000000"
7=>
00000010000000100000"
8=>
00000000000110010010"
9=>
01000001000000000101"
10=>
00000000000110010011"
11=>
00000000000110010100"
12=>
00000000000110010101"
13=>
10000010000000000000"
14=>
00000000000000000000"
15=>
16=>
17=>
00000001000000000010"
18=>
00000001000000000100"
19=>
00000001000000000110"
20=>
00000001000000000111"
21=>
00000001000000010000"
);
9、VHDL实现
以下是用元件列化语言总体连接接代码实现:
--*******************************
--总程序CPU
libraryieee;
useieee.std_logic_1164.ALL;
useieee.std_logic_unsigned.all;
useIEEE.NUMERIC_STD.ALL;
USEWORK.CPU_DEFS.ALL;
entitycpuis
port(
reset:
instd_logic;
clock:
PC1:
outstd_logic_vector(word_w-1downto0);
MDR1:
outstd_logic_vector(word_w-1downto0);
MAR1:
IR1:
sel5_1:
ACC1:
ALU1:
Memory1:
data_r_out1:
outstd_logic_vector(19downto0);
add_r_out1:
outstd_logic_vector(4downto0)
endentity;
architectureCPU_arcofCPUis
componentmicroprogramis
clock:
INSTD_LOGIC;
reset:
IR:
INSTD_LOGIC_VECTOR(word_w-1DOWNTO0);
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_add,ALU_sub:
OUTSTD_LOGIC;
add_r_out:
OUTUNSIGNED(4DOWNTO0);
data_r_out:
OUTSTD_LOGIC_VECTOR(19DOWNTO0)
endcomponent;
componentIRRis
load_IR:
DATA:
INSTD_LOGIC_VECTOR(7DOWNTO0);
IR_out:
BUFFERSTD_LOGIC_VECTOR(7DOWNTO0)
componentMDRis
load_MDR:
R_NW:
BUS_OUT:
MDR_out:
componentMARRis
load_MAR:
MAR_out:
componentPCis
load_PC:
INC_PC:
PC_out:
componentMemoryis
PORT(
cs:
MAR:
MDR_IN:
MDR_OUT:
BUFFERSTD_LOGIC_VECTOR(word_w-1DOWNTO0)
componentALUis
ALU_ADD:
ALU_SUB:
D_BUS:
INSTD_LOGIC_VECTOR(7downto0);
ACC:
Flags:
ALU:
componentACCis
INSTD_LOGIC;
load_ACC:
ALU:
INSTD_LOGIC_VECTOR(7DOWNTO0);
ACC:
componentsel5is
PORT(
PC_bus:
IR_bus:
MDR_bus:
ACC_bus:
Addr_bus:
Addr:
PC:
IR:
MDR:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
signalmicroprogram_out:
std_logic_vector(19downto0);
signaladd_r_out:
UNSIGNED(4DOWNTO0);
signalflags,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_add,ALU_sub:
std_logic;
Signaldata_ACC,data_ALU,data_pc,data_IR,data_mdr,data_mar,
data_memory,BUS_out:
std_logic_vector(7downto0);
begin
g1:
PCportmap(reset=>
reset,load_PC=>
load_PC,INC_PC=>
INC_PC,
DATA=>
BUS_out,PC_out=>
data_pc);
PC1<
=data_pc;
g2:
MDRportmap(reset=>
reset,load_MDR=>
load_MDR,R_nw=>
R_nw,
BUS_out=>
BUS_out,DATA=>
data_memory,MDR_out=>
data_mdr);
MDR1<
=data_mdr;
g3:
MARRportmap(reset=>
reset,load_MAR=>
load_MAR,DATA=>
BUS_out,
MAR_out=>
data_mar);
MAR1<
=data_mar;
g4:
IRRportmap(reset=>
reset,load_IR=>
load_IR,DATA=>
BUS_out,IR_out=>
data_IR);
IR1<
=data_ir;
g5:
sel5portmap(PC_bus=>
PC_bus,MDR_bus=>
MDR_bus,R_bus=>
ALU_ACC,
ACC_bus=>
ACC_bus,Addr_bus=>
Addr_bus,PC=>
data_pc,IR=>
data_IR,MDR=>
data_mdr,
ACC=>
data_ACC,Addr=>
data_IR,D_BUS=>
BUS_out);
sel5_1<
=BUS_out;
g6:
Memoryportmap(reset=>
reset,cs=>
cs,R_NW=>
R_NW,MAR=>
data_mar,
MDR_IN=>
data_mdr,MDR_out=>
data_memory);
Memory1<
=data_memory;
g7:
microprogramportmap(reset=>
reset,clock=>
clock,data_r_out=>
microprogram_out,
Load_PC=>
load_PC,ACC_bus=>
ACC_bus,Load_ACC=>
Load_ACC,PC_bus=>
PC_bus,
load_IR=>
load_IR,load_MAR=>
load_MAR,MDR_bus=>
MDR_bus,load_MDR=>
load_MDR,
ALU_ACC=>
ALU_ACC,INC_PC=>
INC_PC,ADDr_bus=>
ADDr_bus,CS=>
CS,
R_NW=>
R_NW,ALU_add=>
ALU_add,ALU_sub=>
ALU_sub,IR=>
data_IR,add_r_out=>
add_r_out
);
add_r_out1<
=STD_LOGIC_VECTOR(add_r_out);
data_r_out1<
=microprogram_out;
g8:
ACCportmap(reset=>
reset,load_ACC=>
load_ACC,ACC=>
data_ACC,
ALU=>
ACC1<
=data_ACC;
g9:
ALUportmap(ALU_ADD=>
ALU_ADD,ALU_SUB=>
ALU_SUB,D_BUS=>
Flags=>
flags,ALU=>
data_ALU,ACC=>
data_ACC);
ALU1<
=data_ALU;
endCPU_arc;
注:
本部分详细见文件夹(胡利民-CPU模型机2013-12-27)所示。
10、调试仿真
本程序总体设计图如下所示:
(放大图可以程序中自动生成)
1.从取内存指令00000100放指令寄存器中仿真图如下所示:
2.执行加法2+3结果放在ALU中结果如下图如示
11、课程设计回顾总结
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
总的来说,这次设计CPU8位模型机设计还是比较成功的,虽然在实际的过程中曾经遇到了大量的问题,但是经过自己的努力,都给妥善解决了,这样的积累对于现在大学生来说是十分宝贵的。
希望以后能有更多的动手实践机会,在硬件中发现自己的不足,弥补自己的不足,最终成为一个合格的大学生。
最后,特别感谢同学、老师对我的帮助!
参考文献
[1]李晶皎.李景宏.逻辑与数学系统设计.北京:
清华大学出版社(2008-05)
[2].计算机组成原理(第二版)蒋本珊编北京:
清华大学出版社(2008-09)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 组成 原理 报告