计算机组成原理课程设计报告.docx
- 文档编号:10628379
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:60
- 大小:634.83KB
计算机组成原理课程设计报告.docx
《计算机组成原理课程设计报告.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计报告.docx(60页珍藏版)》请在冰豆网上搜索。
计算机组成原理课程设计报告
计算机组成原理课程设计报告
专业名称:
网络工程
班级学号:
3080610032
学生姓名:
黄秋月
指导教师:
丁伟
设计时间:
2010年7月8日——2010年7月15日
第一天取操作数微程序的设计和调试
一、设计目标
设计并调试取操作数的微程序
二、取操作数微流程
200800CC
025
025
三、测试程序、数据及运行结果
格式如下:
1、测试内容:
立即数寻址、直接寻址
测试指令(或程序):
MOV#5678H,0010H
指令功能:
将立即数5678H送到内存地址为0010单元,机器码如下
机器码:
内存地址(H)
机器码(H)
汇编指令
0000
077A56780010
MOV#5678H,0010H
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图1.2,分析过程如下:
对照图1.2,首先看微指令的执行次序:
001—>002—>003—>004—>00B—>00F—>016—>006—>01B—>01F—>024—>025—>026—>007—>004—>047—>072—>000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,在003的微指令执行后,下一步IR=077A,说明取指令是正确的;在016的微指令执行后,下一步TR=5678,说明取原操作数是正确的;在在026的微指令执行后,下一步A=FFFF(此时0010单元的内容为FFFF,见图1.2),说明取目的操作数是正确的。
最后分析指令执行的结果,指令执行前0010单元的内容为FFFF(见图1.1)指令执行后内容变为5678(在指令的最后一条微指令,微地址为072的下一步,见图1.5),说明结果是正确的。
图1.1指令执行前的RAM的内容
图1.2运行结果及分析:
图1.3指令执行后RAM的内容
2、测试内容:
相对寻址、间接寻址
测试指令(或程序):
MOV+0004H,(0010H)
指令功能:
将有效地址(PC+0004H)的内容送到0010H地址的地址中去
机器码:
内存地址(H)
机器码(H)
汇编指令
0000
071900040010
MOV+0004,(0010H)
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图2.2,分析过程如下:
对照图2.2,首先看微指令的执行次序:
001—>002—>003—>004—>00B—>00F—>010—>011—>017—>015—>016—>006—>01B—>01F—>022—>023—>024—>025—>026—>007—>044—>047—>072—>000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,在003的微指令执行后,下一步IR=0719,说明取指令是正确的;在016的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0004(此时0010单元的内容为FFFF,见图2.2),说明取目的操作数是正确的。
最后分析指令执行的结果,指令执行前0010单元的内容为FFFF,以FFFF为地址FFFF内容原为0004,最终指令执行后内容变为0000(在指令的最后一条微指令,微地址为072的下一步,见图2.2),说明结果是正确的。
图2.1
图2.2
3、测试内容:
寄存器寻址、寄存器间接寻址
测试指令(或程序):
MOVR1,(R2)
机器码:
内存地址(H)
机器码(H)
汇编指令
0000
042A
MOVR1,(R2)
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图3.2,分析过程如下:
对照图3.2,首先看微指令的执行次序:
001—>002—>003—>004—>008—>006—>019—>025—>026—>007—>044—>047—>072—>000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,在003的微指令执行后,下一步IR=042A,说明取指令是正确的;在008的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,A=0000说明取目的操作数是正确的。
最后分析指令执行的结果,指令执行前R1单元的内容为0000(见图3.2),指令执行后以R2内容0000为地址,即将0000转移到0000地址(在指令的最后一条微指令,微地址为072的下一步,见图3.2)说明结果是正确的
4、测试内容:
寄存器寻址、寄存器变址寻址
测试指令(或程序):
MOVR1,2(R2)
机器码:
内存地址(H)
机器码(H)
汇编指令
0000
04320002
MOVR1,2(R2)
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图2.2,分析过程如下:
对照图,首先看微指令的执行次序:
001—>002—>003—>004—>008—>006—>01A—>01C—>01D—>01E—>027—>025—>026—>007—>044—>047—>072—>000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,在003的微指令执行后,下一步IR=0719,说明取指令是正确的;在008的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0002,说明取目的操作数是正确的。
最后分析指令执行的结果,指令执行前R1单元的内容为0000(见图1.2),将其转移到0002+R2,开始0002+R2内容为0002指令执行后内容变为0000(在指令的最后一条微指令,微地址为072的下一步,见图1.5),说明结果是正确的。
四、设计中遇到的问题及解决办法
第一天主要是对各个寻址方式的了解,起初对各个寻址方式的寻址过程不熟悉,不能看懂调试微流程的各步骤,经过请教同学和查看课本,有了进一步的了解。
第二天运算指令的微程序设计与调试
一、设计目标
设计并调试运算指令的微流程
二、运算指令微程序入口地址
指令助记符
指令编码
入口地址(H)
F
E
D
C
B
A
9
8
7
6
5
4
3
2
1
0
MOVsrc,dst
0
0
0
0
0
1
源地址码
目的地址码
044
ADDsrc,dst
0
0
0
0
1
0
源地址码
目的地址码
048
ADDCsrc,dst
0
0
0
0
1
1
源地址码
目的地址码
04C
SUBsrc,dst
0
0
0
1
0
0
源地址码
目的地址码
050
SUBBsrc,dst
0
0
0
1
0
1
源地址码
目的地址码
054
CMPsrc,dst
0
0
0
1
1
0
源地址码
目的地址码
058
ANDsrc,dst
0
0
0
1
1
1
源地址码
目的地址码
05C
ORsrc,dst
0
0
1
0
0
0
源地址码
目的地址码
060
XORsrc,dst
0
0
1
0
0
1
源地址码
目的地址码
064
TESTsrc,dst
0
0
1
0
1
0
源地址码
目的地址码
068
INCdst
0
0
0
0
0
0
1
0
0
0
1
目的地址码
0A4
DECdst
0
0
0
0
0
0
1
0
0
1
0
目的地址码
0A8
NOTdst
0
0
0
0
0
0
1
0
0
1
1
目的地址码
0AC
三、运算类指令微程序
(参照指导书图2-6的形式)
四、测试程序、数据及运行结果
1、
测试内容:
ADDC0010H,(R2)
机器码:
内存地址(H)
机器码(H)
汇编指令
0000
0F4A0010
ADDC0010H,(R2)
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图,分析过程如下:
对照图1.4,首先看微指令的执行次序:
001—>002—>003—>004—>00B—>00F—>014—>015—>016—>006—>019—>025—>026—>007—>04C—>06F—>071—>072—>000,参照取指令,取操作数和ADDC执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,在003的微指令执行后,下一步IR=0F4A,说明取指令是正确的;在016的微指令执行后,下一步TR=FFFC,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0F4A,说明取目的操作数是正确的。
最后分析指令执行的结果:
即FFFC+0F4A结果,由072下一条指令可以看出其结果为0F47,说明结果是正确的。
运行结果:
2.
测试内容:
DEC0010H
机器码:
内存地址(H)
机器码(H)
汇编指令
0000
025A0010
ADDC0010H,(R2)
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图,分析过程如下:
对照图,首先看微指令的执行次序:
001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>0AB—>06F—>071—>072—>000,参照取指令,取操作数和DEC执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,DEC为单操作数指令,在003的微指令执行后,下一步执行取目的操作数,在026的微指令执行后,下一步A=FFFD,说明取目的操作数是正确的。
最后分析指令执行的结果:
即FFFD-1结果,由072下一条指令可以看出其结果为FFFC,说明结果是正确的。
运行结果
3.
测试内容:
CMP#0010,+0001H
机器码:
内存地址(H)
机器码(H)
汇编指令
0000
1B7800100001
CMP#0010,+0001H
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图,分析过程如下:
对照图,首先看微指令的执行次序:
001—>002—>003—>004—>00B—>00F—>016—>006—>01B—>01F—>020—>021—>027—>025—>026—>007—>058—>000,参照取指令,取操作数和ADDC执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,在003的微指令执行后,下一步IR=0F4A,说明取指令是正确的;在016的微指令执行后,下一步TR=FFFC,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0F4A,说明取目的操作数是正确的。
最后分析指令执行的结果:
CMP指令不保存结果,只有PSW记录,SZOC结果为1
运行结果
4.
测试内容:
.ANDR1,0010H
机器码:
内存地址(H)
机器码(H)
汇编指令
0000
1C3A0010
ANDR1,0010H
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图,分析过程如下:
对照图,首先看微指令的执行次序:
001—>002—>003—>004—>008—>006—>01B—>01F—>024—>025—>026—>007—>05C—>06F—>071—>072—>000,参照取指令,取操作数和AND执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,在003的微指令执行后,下一步IR=0F4A,说明取指令是正确的;在008的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步A=FFFC,说明取目的操作数是正确的。
最后分析指令执行的结果:
即0000ANDFFFC结果,由072下一条指令可以看出其结果为FFFB,说明结果是正确的。
运行结果
五、设计中遇到的问题及解决办法
第二天的实验主要目的是了解执行阶段的操作方式,本实验只要求简单的运算指令
执行阶段,根据不同指令操作码OP转向不同分支,该控制由微转移方式字段产生,预习时入口地址的形成根据指导书了解得到,不懂得地方就请教同学。
第三天CPU硬件的初级设计与验证
一、设计目标
在运算器实验的基础上对硬件进行扩充,建立初级CPU的数据通路,构造一个只支持运算指令的初级CPU
二、硬件设计
1、PC模块设计
程序计数器PC与R模块一样采用异步复位,PC通过三态门与IB相连。
`timescale1ns/1ps
modulePC(d,q,n_reset,clk,ce,PCinc);
input[15:
0]d;
inputn_reset,clk,ce;
inputPCinc;
output[15:
0]q;
reg[15:
0]data;
always@(posedgeclkornegedgen_reset)
begin
if(!
n_reset)当n_reset有效时,PC清0
data=0;
elseif(ce)在时钟信号clk的上升沿如果数据装入使能ce有效则d→q,
data=d;
elseif(PCinc)自加信号PCinc有效则q+1→q
data=data+1;
end
assignq=data;
endmodule
2、DR模块设计
DR采用异步复位
`timescale1ns/1ps
moduleDR#(//DR连接内部总线IB和系统总线的DB
parameterDATAWIDTH=16)
(inputwire[DATAWIDTH-1:
0]data_IB,//DR有两路数据输入data_IB、data_DB,分别来自IB、DB
inputwire[DATAWIDTH-1:
0]data_DB,
inputwireclk,
inputwireDRce_IB,//相应的有两个装入使能信号DRce_IB、DRce_DB
inputwireDRce_DB,
inputn_reset,
outputreg[DATAWIDTH-1:
0]q);//输出端q分别通过两个三态门连到IB、DB。
always@(posedgeclkornegedgen_reset)///在时钟信号的上升沿
begin
if(!
n_reset)//复位时DR清0
q=0;
elseif(DRce_IB)//当DRce_IB有效时则data_IB→q
q=data_IB;
elseif(DRce_DB)//当DRce_DB有效时则data_DB→q
q=data_DB;
end
endmodule
3、顶层模块设计(自己增加的设计部分)
//TR寄存器的实例化
R#(DATAWIDTH)TR(.q(TR_out),.d(IB),clk(clock),.ce(TRce),.TR_reset(TR_reset));
//AR寄存器的实例化
R#(ADDRWIDTH)AR(.q(AR_out),.d(AB),.clk(clock),.ce(ARce),.AR_reset(AR_reset));
//IR寄存器的实例化
R#(DATAWIDTH)IR(.q(IR_out),.d(IB),.clk(clock),.ce(IRce),.IR_reset(IR_reset));
三、验证
测试指令:
(1)ADDC0010H,(R2)
执行结果:
(2)DEC0010H
执行结果:
(3)CMP#0010
执行结果:
(4)+0001HANDR1,0010H
执行结果:
经过与DAY2实验结果的比较,结果与其相同,证明硬件设计是正确的
四、设计中遇到的问题及解决办法
DAY3的实验是自己设计初级的CPU及简单的运算功能,设计硬件的的大部分verilog语言都已经给出,只需根据要求补全DR,PC的代码,及在COU中实例化AR,IR,TR,DR,PC的代码根据其功能要求补全
第四天为CPU扩充转移指令
一、设计要求
在初级CPU的基础上进行功能扩充,使其支持转移类型指令
二、硬件uAG模块设计
(自己修改的设计部分,加上适当注释)
always@*
begin
case(BM)
3'd0:
uAGout=NA;//0,固定转移
3'd1:
uAGout={NA[8],INTR&IF,NA[6:
0]};//1,根据是否中断产生两分支
3'd2:
uAGout={NA[8:
2],BM2_uAR1,BM2_uAR0};
//2,取指令后的三分支转移,双单无操作数,即取源,
3'd3:
uAGout={NA[8:
1],BM3_uAR0};
3'd4:
uAGout=BM4_uA;//4,按OP多路转移
3'd5:
uAGout={NA[8:
2],BM5_uAR10};//5,按寻址方式M多路转移
3'd6:
uAGout={NA[8:
3],BM6_uAR21,1'b0};//6,按寻址方式M'多路转
3'd7:
uAGout={NA[8:
1],BM7_uAR0};
//7,结果回送时,按寄存器、存储器转移
default:
uAGout=9'b000000000;
endcase
end
//uAR1,uAR0双操作数=00,01;单操作数=10;无操作数=11
assignBM2_uAR1=!
(|IR[15:
10]);
assignBM2_uAR0=!
(|IR[9:
5]);
always@(SZOC,IR)begincase(IR[7:
6])//条件转移类指令
2'b00:
Flag_MUX<=SZOC[0]//选00时表示满足条件CF=12'b01:
Flag_MUX<=SZOC[1]//选01时表示满足条件OF=12'b10:
Flag_MUX<=SZOC[2]//选10时表示满足条件ZF=12'b11:
Flag_MUX<=SZOC[3]//选11时表示满足条件SF=1default:
Flag_MUX<=1'b0;endcaseend
三、转移指令微程序的设计
四、测试程序、数据及运行结果
1.测试内容:
JMP+0010
运行数据:
02180010
运行结果及分析:
内存地址(H)
机器码(H)
汇编指令
0000
02180010
JMP+0010
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图,分析过程如下:
对照图,首先看微指令的执行次序:
001—>002—>003—>006—>01B—>01F—>020—>021—>027—>025—>026—>007—>0A0—>000,参照取指令,取操作数和DEC执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,JMP为单操作数指令,在003的微指令执行后,下一步执行取目的操作数。
将PC无条件转移到0012地址
2.测试内容:
ADD#1000,0010HJC0014H//0010H->F000
运行数据:
0B7A10000010011A0014
运行结果及分析:
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图,分析过程如下:
对照图,首先看微指令的执行次序:
001—>002—>003—>004—>00B—>00F—>016—>006—>01B—>01F—>024—>025—>026—>007—>048—>06F—>071—>072—>000—>001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>075—>077—>000,参照取指令,取操作数和ADD执行微流程,及JC操作指令执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,ADD为双操作数指令,在003的微指令执行后,下一步IR=0B7A,说明取指令是正确的,执行取源操作数,在016的微指令执行后下一步TR=1000,说明取源操作数是正确的;执行取目的操作数,在026的微指令执行后,下一步A=F000,即取地址0010的内容,说明取目的操作数是正确的。
由结果可知SZOC=5,满足有进位条件,由第二条指令执行003的微指令执行后,下一步IR=011A,说明取指令是正确的,即将PC转移到0014,由运行结果证明是正确的
运行结果及分析:
3.测试内容:
ADD#8010,0010HJO0014H//0010H->8023
运行数据:
0B7A80100010015A0014
运行结果及分析:
在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。
扩展单步执行的结果如图,分析过程如下:
对照图,首先看微指令的执行次序:
001—>002—>003—>004—>00B—>00F—>016—>006—>01B—>01F—>024—>025—>026—>007—>048—>06F—>071—>072—>000—>001—>002—>003—>006—>01B—>01F—>024—>025—>026—>007—>075—>077—>000,参照取指令,取操作数和ADD执行微流程,及JC操作指令执行微流程分析,所执行的微指令顺序是正确的
其次分析执行的过程,ADD为双操作数指令,在003的微指令执行后,下一步IR=0B7A,说明取指令是正确的,执行取源操作数,在016的微指令执行后下一步TR=8010,说明取源操作数是正确的;执行取目的操作数,在026的微指令执行后,下一步A=8023,即取地址0010的内容,说明取目的操作数是正确的。
由结果可知SZOC=3,满足有溢出条件,由第二条指令执行003的微指令执行后,下一步IR=015A,说明取指令是正确的,执行取目的操作数,执行阶段,最终PC转移到0014地址上,由运行结果证明是正确的
运行结果:
4.测试内容:
A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 原理 课程设计 报告