精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41Word文档下载推荐.docx
《精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41Word文档下载推荐.docx(26页珍藏版)》请在冰豆网上搜索。
内存地址(H)
机器码(H)
汇编指令
0000
077A56780010
MOV#5678H,0010H
运行结果及分析:
从微地址可以看出,先是取指令001->
002->
003->
004,再是取源操作数,004->
00B->
00F->
016->
006,是立即数寻址方式,再是取目的操作数,006->
-01B>
01F->
024->
025->
026->
007,是直接寻址方式,最后是执行阶段,007->
044->
047->
072->
000,将结果mov到内存里。
2、
立即寻址,寄存器
07615678
MOV#5678H,R1
018->
007,是寄存器寻址方式,最后是执行阶段,007->
046->
000,将结果mov到寄存器里。
由GRS可以看出最终结果由0000变成了5678。
4、设计中遇到的问题及解决办法
才开始的时候,对软件的应用不是很熟悉,遇到一些麻烦,在同学的帮助下,解决了软件应用问题。
第二天运算指令的微程序设计与调试
设计并调试运算指令的微程序。
二、运算指令微程序入口地址
指令助记符
指令编码
入口地址(H)
F
E
D
C
B
A
9
8
7
6
5
4
3
2
1
MOVsrc,dst
源地址码
目的地址码
044
ADDsrc,dst
048
ADDCsrc,dst
04C
SUBsrc,dst
050
SUBBsrc,dst
054
CMPsrc,dst
058
ANDsrc,dst
05C
ORsrc,dst
060
XORsrc,dst
064
TESTsrc,dst
068
INCdst
0A4
DECdst
0A8
NOTdst
0AC
三、运算类指令微程序
微地址(H)
微指令(H)
微命令
BM
NA
注释
007
OP
XXX
指令执行入口
TRoe,ADD,Sce,PSWce
06F
ADD
98B0006F
TRoe,ADDC,SV,PSWce
ADDC
98F0006F
TRoe,SUB,SV,PSWce
SUB
00000E70
070
存结果
Soe,GRSce
000
ALU运算,结果送寄存器
071
Soe,DRce
072
结果送存储器
DRoe’,ARoe’,WR
四、测试程序、数据及运行结果
ADD运算
0002
07615678
0B61F000
ADD#F000,R1
从微地址可以看出,第一阶段先是取第一条指令(MOV#5678H,R1)001->
在GRS可以看出由0000变成了5678。
第二阶段先是取第二条指令(ADD#F000,R1)001->
048->
04F->
070->
000,是ADD运算,结果存放在寄存器GRS中,可以看出结果为4678,并且产生进位,SZOC=0001,正确。
五、设计中遇到的问题及解决办法
指令的入口地址开始时没看懂,在同学的点拨下明白了。
再是写微程序阶段,完成微程序的输入后,输入时由于不太仔细有一些错误,经过调试发现并改正了错误。
经过对每条运算的测试,一些结果不对,在自己的一步一步的查找中,通过和同学的微程序的对照,一一弄懂并改正了。
第三天CPU硬件的初级设计与验证
一、设计目标
在运算器实验的基础上对硬件进行扩充,建立初级CPU的数据通路,构造一个只支持运算指令的初级CPU。
二、硬件设计
1、PC模块设计
(加上适当注释)
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)
data=0;
elseif(ce)
data=d;
elseif(PCinc)
data=data+1;
end
assignq=data;
endmodule
2、IR模块设计
moduleIR#(
parameterDATAWIDTH=16)
(inputwire[DATAWIDTH-1:
0]d,
inputwireclk,
inputwirece,
inputn_reset,
outputreg[DATAWIDTH-1:
0]q);
always@(posedgeclkornegedgen_reset)
begin
q=0;
q=d;
end
DR:
moduleDR#(
0]data_IB,
inputwire[DATAWIDTH-1:
0]data_DB,
inputwireDRce_IB,
inputwireDRce_DB,
if(!
q=0;
elseif(DRce_IB)
q=data_IB;
elseif(DRce_DB)
q=data_DB;
3、顶层模块设计(自己增加的设计部分)
TR
TR寄存器的实例化
R#(DATAWIDTH)TR(.q(TR_out),.d(IB),.clk(clock),.ce(TRce),.n_reset(n_reset));
buffer#(DATAWIDTH)reg_buffer(.q(IB),.d(TR_out),.oe(TRoe));
AR
AR寄存器的实例化
R#(DATAWIDTH)AR(.q(AR_out),.d(IB),.clk(clock),.ce(ARce),.n_reset(n_reset));
buffer#(ADDRWIDTH)AR_AB(.q(AB),.d(AR_out),.oe(ARoe_AB));
buffer#(ADDRWIDTH)AR_IB(.q(IB),.d(AR_out),.oe(ARoe_IB));
IR
IR寄存器的实例化
R#(DATAWIDTH)IR(.q(IR_out),.d(IB),.clk(clock),.ce(IRce),.n_reset(n_reset));
PC
PCPC(.d(IB),.q(PC_out),.n_reset(n_reset),.clk(clock),.ce(PCce),.PCinc(PCinc));
buffer#(DATAWIDTH)PC_buffer(.q(IB),.d(PC_out),.oe(PCoe));
DR
DR#(DATAWIDTH)DR(.q(DR_out),.data_IB(IB),.data_DB(DB),.clk(clock),.DRce_IB(DRce_IB),.DRce_DB(DRce_DB),.n_reset(n_reset));
buffer#(DATAWIDTH)DR_DB(.q(DB),.d(DR_out),.oe(DRoe_DB));
buffer#(DATAWIDTH)DR_IB(.q(IB),.d(DR_out),.oe(DRoe_IB));
三、验证
结果和第二天的一样,说明硬件扩充正确。
四、设计中遇到的问题及解决办法
在写TR,AR,IR的实例化代码时,没注意是用寄存器模块R实例化得到的,经过报错和仔细看书后,发现了问题,成功改正过来了。
完成程序运行出了问题,经过查找发