计算机组成原理课程设计报告.docx
《计算机组成原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计报告.docx(30页珍藏版)》请在冰豆网上搜索。
计算机组成原理课程设计报告
计算机组成原理
课程设计
指导教师:
XXXX
学生班级:
XXX
学生姓名:
XX
学号:
XX
班内序号:
XX
课设日期:
2012/12/17~2012/12/28
1、设计目的·······································1
2、设计要求·······································1
3、设计方案·······································1
4、较详细的设计过程·······························2
5、编程与调试程序方法的介绍·······················19
6、结果及分析·····································20
7、收获、体会及建议·······························21
一、设计目的
1.主要掌握微程序控制结构计算机的设计方法,通过对机器指令和相对应微程序的设计,加深对微程序控制器的理解,加深对微程序设计特点的了解,加深对计算机各部件的理解以及对整机结构的理解。
2.掌握几种寻址方式的控制执行过程。
3.了解多累加器计算机的特点。
4.熟悉VHDL语言的编程。
2、设计要求
1.硬件设计,包括运算器、寄存器、寄存器、微程序控制器的VHDL描述。
2.软件设计,包括指令系统设计及应用程序的设计。
3.硬件和软件联合调试,利用设计的模型计算机执行应用程序,通过数码管显示结果。
三、设计方案
1.首先设计整机逻辑框图,并分析各主要部件中所使用的关键器件,彻底理解主要芯片的工作原理。
根据设计要求,对实验仪硬件模块进行逻辑剪辑组合,便可设计出该实验计算机的整机逻辑框图。
为利于调试,应在逻辑框图上表明各器件的控制信号及必要的输出信号。
2.指令系统和指令执行流程设计
①指令系统
需确定实验计算机的指令系统具体由哪里指令组成,包括哪几种类型指令,指令操作数有哪几种寻址方式,以及指令编码等。
②指令执行流程
应根据实验计算机整机逻辑图来设计指令系统中每条指令的执行流程。
一条指令从内存取出到执行完,需要若干个机器周期(节拍)。
任何指令的第一个机器周期都是“取指令周期”,或称为公操作周期。
而一条指令共需几个机器周期取决于指令在机内实现的复杂程度。
3.微操作控制信号和微程序设计
①微操作控制信号及其实现方法
综合实验计算机指令系统各指令执行流程中所涉及到的微操作控制信号,统计总共需要多少个微控制信号,每个信号的有效性,决定这些信号中哪些由软件(微指令)直接产生,哪些需用硬件实现。
②设计微指令格式,微指令由32位组成,设计出每位微操作的定义。
③确定微程序控制方式
设计任务包括设计各微程序入口地址的形成方法和控存的顺序控制(即下地址形成)方法。
4编写各指令的微程序
根据指令流程和微指令格式仔细地逐条填写微指令各码位。
为减少填写错误,可边把本条微指令用到的微码(微操作控制信号)按预定的有效性填入,检查无误后,再对本条微指令用不到的微码(微操作控制信号)填入与预定的有效性相反的代码,核对无误后,最后将这32位微码缩写成8位十六进制微指令。
4.设计接线表
要仔细设计接线表,因为它是组装计算机的依据。
①为了避免遗漏,应按模块逐个归纳整理,明确各模块中器件各控制信号的处理方法。
②对于模块中不用的器件,也应有所处理。
4、较详细的设计过程
1.先熟悉课程设计任务。
2.
实现基本门电路。
利用如右图所示软件,启动,建立
一个新工程。
具体操作步骤,参考《第二章电路生成与下载
步骤.ppt》
最后,我们可以得到如下图。
电路生成结束,再来实现电路的下载。
启动桌面图标,
选择下载配置,加载下载文件,再实现电路下载。
可得下图:
3.熟练掌握VHDL语言。
4.用VHDL描述计算机各部件,包括存储器的VHDL描述、寄存器的VHDL描述、运算器的VHDL描述以及总线的VHDL描述。
1 存储器的VHDL描述
a.存储器的硬件描述图
b.存储器实验过程与信号
首先利用开关S0~S7设置一个8位的数据,用于写入内存时使用。
第二步,利用开关S8、S9的组合生成一个4个字节的内存,内存地址如下:
地址
S9
S8
0
0
0
1
0
1
2
1
0
3
1
1
第三步,当S10=0ANDS11=1时,发出写内存信号,将开关S0~S7设置的8位数据写入由开关S8、S9的组合指定的内存地址单元。
第四步,当S10=1ANDS11=0时,发出读内存信号,将由开关S8、S9的组合指定的内存地址单元中的数据读出,由发光二极管L9~L12显示。
c.存储器的VHDL描述
LibraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
useIEEE.std_logic_arith.all;
entitybusv1is
Port(
CI:
bufferstd_logic_vector(19downto0);
CO:
instd_logic_vector(11downto0)
);
endbusv1;
architecturebusv1_behavofbusv1is
signalmux:
std_logic_vector(1downto0);
signalWR,RD:
std_logic;
begin
mux<=CO(9downto8);
RD<=CO(11);
WR<=CO(10);
CI(11downto0)<=CO(11downto0);
process(WR,RD)
VARIABLETMP1,TMP2,TMP3,TMP4:
std_logic_vector(7downto0);
begin
if(WR='0'andRD='1')then--写内存
casemuxis
when"00"=>TMP1:
=CO(7downto0);--写入地址0号
when"01"=>TMP2:
=CO(7downto0);--写入地址1号
when"10"=>TMP3:
=CO(7downto0);--写入地址2号
whenothers=>TMP4:
=CO(7downto0);--写入地址3号
endcase;
elsif(WR='1'andRD='0')then--读内存
casemuxis
when"00"=>CI(19downto12)<=TMP1;--读地址0号
when"01"=>CI(19downto12)<=TMP2;--读地址1号
when"10"=>CI(19downto12)<=TMP3;--读地址2号
whenothers=>CI(19downto12)<=TMP4;--读地址3号
endcase;
endif;
endprocess;
endbusv1_behav;
2 寄存器的VHDL描述
a.寄存器的硬件描述图
b.寄存器实验过程与信号
首先利用开关S0~S7设置一个8位的数据,寄存在74LS244A,使开关S13(U244AOE)为低电平,使寄存在74LS244中的数据向总线输出。
第二步,利用S8~S10的组合在R~0R7中选择一个寄存器,选择表如下:
S10
S9
S8
R0
0
0
0
R1
0
0
1
R2
0
1
0
R3
0
1
1
R4
1
0
0
R5
1
0
1
R6
1
1
0
R7
1
1
1
第三步,当WRE(写寄存器)脉冲信号从0变1时,将总线上的数据写入某寄存器。
第四步,当RDE(读寄存器)脉冲信号从0变1时,将某寄存器的值输出到74LS244B。
c.计算机部件实验之寄存器的VHDL描述
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityjicunqiis
port(
CI:
inoutstd_logic_vector(12downto0);
CO:
instd_logic_vector(14downto0)
);
endjicunqi;
architectureBehavioralofjicunqiis
signalRS:
std_logic_vector(2downto0);
signalR0,R1,R2,R3,R4,R5,R6,R7:
std_logic_vector(7downto0);
signalWRE,RDE,U244AOE,U244BOE:
std_logic;
signalU244A,U244B:
std_logic_vector(7downto0);
signalDBB,DBX:
std_logic_vector(7downto0);
constantbz:
std_logic_vector:
="ZZZZZZZZ";
FunctionsizeIt(a:
std_logic;len:
integer)returnstd_logic_vectoris
variablerep:
std_logic_vector(len-1downto0);
beginforiinrep'rangelooprep(i):
=a;endloop;returnrep;
endsizeIt;
begin
--Definethree-stateports
U244A<=CO(7downto0);
DBX<=(SizeIt(U244AOE,8)andU244A)or(SizeIt(U244BOE,8)andU244B);
CI(7downto0)<=DBXwhen((U244AOEorU244BOE)='1')elsebz;
DBB<=CI(7downto0);
RS<=CO(10downto8);
process(WRE,RDE)begin
if(WRE'eventandWRE='1')then--写寄存器
caseRSis
when"000"=>R0<=DBB(7downto0);
when"001"=>R1<=DBB(7downto0);
when"010"=>R2<=DBB(7downto0);
when"011"=>R3<=DBB(7downto0);
when"100"=>R4<=DBB(7downto0);
when"101"=>R5<=DBB(7downto0);
when"110"=>R6<=DBB(7downto0);
whenothers=>R7<=DBB(7downto0);
endcase;
endif;
if(RDE'eventandRDE='1')then--读寄存器
caseRSis
when"000"=>U244B<=R0;
when"001"=>U244B<=R1;
when"010"=>U244B<=R2;
when"011"=>U244B<=R3;
when"100"=>U244B<=R4;
when"101"=>U244B<=R5;
when"110"=>U244B<=R6;
whenothers=>U244B<=R7;
endcase;
endif;
endprocess;
U244BOE<=CO(14);
U244AOE<=CO(13);
WRE<=CO(11);
RDE<=CO(12);
CI(12downto8)<=CO(12downto8);
endBehavioral;
3 运算器的VHDL描述
a.运算器的硬件描述图
b.运算器实验过程与信号
首先利用开关S0~S7设置一个8位的数据,寄存在74LS244A,使开关S13(U244AOE)为低电平,使寄存在74LS244中的数据向总线输出。
L13反映S13的状态。
在总线上的数据可以通过L0~L7看到。
第二步,把总线上的数据送入74LS377保存,当S14为低电平(U377EN=0)并且S15有一个脉冲信号时从它输出送ALU的A端。
第三步,利用开关S0~S7设置一个8位的数据,寄存在74LS244A,使开关S13(U244AOE)为低电平,使寄存在74LS244中的数据向总线输出。
L13反映S13的状态。
在总线上的数据可以通过L0~L7看到。
第四步,当S16、S17都为1时,控制74LS373从总线接收数据,寄存。
当当S16为1、S17为0时,控制74LS373中的数据送ALU的B端。
第五步,利用S8~S10的组合在8种计算中选择一个进行计算,选择表如下:
(L8~L10反映S8~S10的状态,CIN由开关S11确定,L11反映S11的值)。
FF
S10
S9
S8
FA+CIN
0
0
0
FA-CIN
0
0
1
FAorFB
0
1
0
FAandFB
0
1
1
FA+FB+CIN
1
0
0
FA-FB-CIN
1
0
1
FA*FB
1
1
0
FAxorFB
1
1
1
计算结束后,运算结果F送74LS244B,L15反映向高位的进位COUT。
第六步,当S12为0时(L12反映S11的值),将74LS244B中的值送总线,一次运算结束。
c.计算机部件实验之运算器的VHDL描述
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityyunsuanis
port(
--DB:
inoutstd_logic_vector(7downto0);
CI:
inoutstd_logic_vector(15downto0);
CO:
instd_logic_vector(17downto0)
);
endyunsuan;
architectureBehavioralofyunsuanis
signalU377Q:
std_logic_vector(7downto0);
signalU373Q,U244A,U244B:
std_logic_vector(7downto0);
signalDBB,DBX:
std_logic_vector(7downto0);
signalU377CLK,U377EN,U373GT,U373OE,U244AOE,U244BOE:
std_logic;
signalFA,FB,FF:
std_logic_vector(8downto0);
signalS:
std_logic_vector(2downto0);
signalCIN,COUT:
std_logic;
constantbz:
std_logic_vector:
="ZZZZZZZZ";
--sizeItreplicatesavaluetoanarrayofspecificlength.
FunctionsizeIt(a:
std_Logic;len:
integer)returnstd_logic_vectoris
variablerep:
std_logic_vector(len-1downto0);
beginforiinrep'rangelooprep(i):
=a;endloop;returnrep;
endsizeIt;
begin
--Define74377
process(U377CLK)begin
if(U377CLK'eventandU377CLK='0')then
if(U377EN='0')thenU377Q<=DBB;
endif;
endif;
endprocess;
--Define74373
U373Q<=DBBwhen(U373GT='1'andU373OE='0')else("11111111"andU373Q);
--definetheALU
FA<='0'&U377Q;
FB<='0'&U373Q;
FF<=FA+CINwhenS="000"else
FA-CINwhenS="001"else
FAorFBwhenS="010"else
FAandFBwhenS="011"else
FA+FB+CINwhenS="100"else
FA-FB-CINwhenS="101"else
FA*FBwhenS="110"else
FAxorFBwhenS="111";
COUT<=FF(8);
U244B<=FF(7downto0);
--Definethree-stateports
U244A<=CO(7downto0);
DBX<=(SizeIt(U244AOE,8)andU244A)or(SizeIt(U244BOE,8)andU244B);
CI(7downto0)<=DBXwhen((U244AOEorU244BOE)='1')elsebz;
DBB<=CI(7downto0);
--CI(7downto0)istheBUS
CIN<=CO(11);
U244BOE<=CO(12);
U244AOE<=CO(13);
U377EN<=CO(14);
U377CLK<=notCO(15)orU377EN;
U373OE<=CO(16);
U373GT<=CO(17);
S(2downto0)<=CO(10downto8);
CI(14downto8)<=CO(14downto8);
CI(15)<=COUT;
endBehavioral;
4 总线的VHDL描述
a.总线的硬件描述图
b.总线实验过程与信号
1.实验设计:
使用VHDL来完成本实验时,需注意以下问题:
1).透明锁存7应使用组合电路实现。
2).XC2S150的RAM应外加三态门。
3).RAM,244,373,374四个三态门可用一个多路开关加一个三态门构成。
2.实验步骤
1).输入并编译生成BIT文件,下载到XC2S150中。
2).从开关通过244把数据(如10010110)输入到373中。
3).从开关通过244把数据(如10100101)输入到374中。
4).把373的数据传送到RAM中。
5).把374的数据写到373中。
6).把RAM的数据传送到374中。
7).通过377检查373和374的内容。
首先利用开关S0~S7设置一个8位的数据,寄存在74LS244A,使开关S13(U244AOE)为低电平,使寄存在74LS244中的数据向总线输出。
第二步,利用S8~S10的组合在R~0R7中选择一个寄存器,选择表如下:
S10
S9
S8
R0
0
0
0
R1
0
0
1
R2
0
1
0
R3
0
1
1
R4
1
0
0
R5
1
0
1
R6
1
1
0
R7
1
1
1
第三步,当WRE(写寄存器)脉冲信号从0变1时,将总线上的数据写入某寄存器。
第四步,当RDE(读寄存器)脉冲信号从0变1时,将某寄存器的值输出到74LS244B。
c.计算机部件实验之总线的VHDL描述
LibraryIEEE;
useIEEE.std_logic_1164.all;
useIEEE.std_logic_unsigned.all;
useIEEE.std_logic_arith.all;
entitybusv1is
Port(
DB:
inoutstd_logic_vector(15downto0);
AB:
bufferstd_logic_vector(15downto0);
MUX:
instd_logic_vector(0to2);
CLKG,CLK,RESET,RUN:
instd_logic;
CI:
inoutstd_logic_vector(31downto0);
CO:
instd_logic_vector(31downto0);
CWR,CRD,IOW,IOR,CTRL1,CTRL2,CTRL3,CTRL4,MCLK:
bufferstd_logic;
PRIX,KRIX:
instd_logic
);
endbusv1;
architecturebusv1_behavofbusv1is
signalU377Q:
std_l