精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx

上传人:b****2 文档编号:22897128 上传时间:2023-04-28 格式:DOCX 页数:28 大小:1.72MB
下载 相关 举报
精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx_第1页
第1页 / 共28页
精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx_第2页
第2页 / 共28页
精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx_第3页
第3页 / 共28页
精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx_第4页
第4页 / 共28页
精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx

《精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx》由会员分享,可在线阅读,更多相关《精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx(28页珍藏版)》请在冰豆网上搜索。

精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41.docx

精品计算机组成原理毕业论文报告40江苏大学适用于软件工程41

(此文档为word格式,下载后您可任意编辑修改!

江苏大学

《计算机组成原理》课程设计报告

专业名称:

软件工程

班级学号:

软件1001

学生姓名:

张建彬

指导教师:

杨旭东

设计时间:

2012年6月11日——2012年6月20日

 

第一天取操作数微程序的设计和调试

1、设计目标

设计并调试取操作数的微程序

二、取操作数微流程

三、测试程序、数据及运行结果

1、

测试内容:

立即寻址,直接寻址

运行数据:

内存地址(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、

测试内容:

立即寻址,寄存器

运行数据:

内存地址(H)

机器码(H)

汇编指令

0000

07615678

MOV#5678H,R1

运行结果及分析:

从微地址可以看出,先是取指令001->002->003->004,再是取源操作数,004->00B->00F->016->006,是立即数寻址方式,再是取目的操作数,006->018->007,是寄存器寻址方式,最后是执行阶段,007->044->046->000,将结果mov到寄存器里。

由GRS可以看出最终结果由0000变成了5678。

4、设计中遇到的问题及解决办法

才开始的时候,对软件的应用不是很熟悉,遇到一些麻烦,在同学的帮助下,解决了软件应用问题。

第二天运算指令的微程序设计与调试

1、设计目标

设计并调试运算指令的微程序。

二、运算指令微程序入口地址

指令助记符

指令编码

入口地址(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

三、运算类指令微程序

微地址(H)

微指令(H)

微命令

BM

NA

注释

007

OP

4

XXX

指令执行入口

048

TRoe,ADD,Sce,PSWce

0

06F

ADD

04C

98B0006F

TRoe,ADDC,SV,PSWce

0

06F

ADDC

050

98F0006F

TRoe,SUB,SV,PSWce

0

06F

SUB

06F

00000E70

7

070

存结果

070

Soe,GRSce

0

000

ALU运算,结果送寄存器

071

Soe,DRce

0

072

结果送存储器

072

DRoe’,ARoe’,WR

0

000

四、测试程序、数据及运行结果

1、

测试内容:

ADD运算

运行数据:

内存地址(H)

机器码(H)

汇编指令

0000

0002

07615678

0B61F000

MOV#5678H,R1

ADD#F000,R1

运行结果及分析:

从微地址可以看出,第一阶段先是取第一条指令(MOV#5678H,R1)001->002->003->004,再是取源操作数,004->00B->00F->016->006,是立即数寻址方式,再是取目的操作数,006->018->007,是寄存器寻址方式,最后是执行阶段,007->044->046->000,将结果mov到寄存器里。

在GRS可以看出由0000变成了5678。

第二阶段先是取第二条指令(ADD#F000,R1)001->002->003->004,再是取源操作数,004->00B->00F->016->006,是立即数寻址方式,再是取目的操作数,006->018->007,是寄存器寻址方式,最后是执行阶段,007->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

if(!

n_reset)

q=0;

elseif(ce)

q=d;

end

DR:

moduleDR#(

parameterDATAWIDTH=16)

(inputwire[DATAWIDTH-1:

0]data_IB,

inputwire[DATAWIDTH-1:

0]data_DB,

inputwireclk,

inputwireDRce_IB,

inputwireDRce_DB,

inputn_reset,

outputreg[DATAWIDTH-1:

0]q);

always@(posedgeclkornegedgen_reset)

begin

if(!

n_reset)

q=0;

elseif(DRce_IB)

q=data_IB;

elseif(DRce_DB)

q=data_DB;

end

endmodule

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));

三、验证

1、

测试内容:

ADD运算

运行数据:

内存地址(H)

机器码(H)

汇编指令

0000

0002

07615678

0B61F000

MOV#5678H,R1

ADD#F000,R1

结果和第二天的一样,说明硬件扩充正确。

四、设计中遇到的问题及解决办法

在写TR,AR,IR的实例化代码时,没注意是用寄存器模块R实例化得到的,经过报错和仔细看书后,发现了问题,成功改正过来了。

完成程序运行出了问题,经过查找发现是DR模块出了问题,if(!

n_reset)q=0;elseif(DRce_IB)q=data_IB;elseif(DRce_DB)q=data_DB;这一句被我写成了if(!

n_reset)q=0;elseif(DRce_IB)q=data_IB;elseq=data_DB。

第四天为CPU扩充转移指令

一、设计要求

在初级CPU的基础上进行功能扩充,使其支持转移类指令

二、硬件uAG模块设计

(自己修改的设计部分,加上适当注释)

3'd3:

uAGout={NA[8:

1],BM3_uAR0};3,根据条件转移指令操作码PSW的ZF,OF,SF,CF状态标志决定微地址

第四天

always@(SZOC,IR)begin

case(IR[7:

6])条件转移类指令

2'b00:

Flag_MUX<=SZOC[0];2'b01:

Flag_MUX<=SZOC[1];

2'b10:

Flag_MUX<=SZOC[2];

2'b11:

Flag_MUX<=SZOC[3];

default:

Flag_MUX<=1'b0;

endcase

end

assignBM3_uAR0=Flag_MUX^IR[5];

三、转移指令微程序的设计

四、测试程序、数据及运行结果

1、

测试内容:

JC命令

机器码:

内存地址(H)

机器码(H)

汇编指令

0000

0002

0004

07615678

0B61F000

011A0010

MOV#5678H,R1

ADD#F000,R1

JC0010H

运行数据:

运行结果及分析:

从微地址可以看出,第一阶段先是取第一条指令(MOV#5678H,R1)001->002->003->004,再是取源操作数,004->00B->00F->016->006,是立即数寻址方式,再是取目的操作数,006->018->007,是寄存器寻址方式,最后是执行阶段,007->044->046->000,将结果mov到寄存器里。

在GRS可以看出由0000变成了5678。

第二阶段先是取第二条指令(ADD#F000,R1)001->002->003->004,再是取源操作数,004->00B->00F->016->006,是立即数寻址方式,再是取目的操作数,006->018->007,是寄存器寻址方式,最后是执行阶段,007->048->04F->070->000,是ADD运算,结果存放在寄存器GRS中,可以看出结果为4678,并且产生进位,SZOC=0001,正确。

第三阶段,进入JC指令,因为C=1,有进位,所以条件满足,执行的是075->077->000,正确。

五、设计中遇到的问题及解决办法

程序中误将赋值符号<=写成了=,被同学发现,及时修改,并成功得到解决。

第五天为CPU扩充移位指令

一、设计目标

在前面的CPU的基础上扩充硬件,使其支持移位指令。

二、硬件设计

1、SHIFTER模块设计

(加上适当注释)

wiredata_lsb;

wiredata_data_lsb=1'b0;

assigndata_

case({SL,SR})

3'b01:

q=d0;

3'b10:

q=d15;

default:

q=Cout;

endcase

end

endmodule

3、IR_DECODE模块设计(自己增加修改的设计部分)

2'b00:

BM4_uA<={5'b01001,IR[7:

5],1'b0};

4、顶层模块设计(增加自己修改的设计部分)

wire[DATAWIDTH-1:

0]SP_out,GRS_out,TR_out,A_out,ALU_out,MUX_out,PSW_out,IR_out,shifter_out,MUX2_out,PC_out,CF_out;

CFCF(.d15(ALU_out[15]),.d0(ALU_out[0]),.Cout(Cout),.q(CF_out),.SL(SL),.SR(SR));

R#(DATAWIDTH)PSW(.q(PSW_out),.clk(clock),.n_reset(n_reset),.ce(PSWce),.d({12'b0,SF,ZF,OF,Cout}));

三、移位指令微程序的设计

微地址(H)

微指令(H)

微指令字段(H)

微命令

F0

F1

F2

F3

F4

F5

F6

F7

F8

F9

092

0

6

0

1

0

0

0

0

0

06F

SR,PSWce

094

0

6

0

2

0

0

0

0

0

06F

SL,PSWce

096

0

6

0

1

0

0

0

0

0

06F

SR,PSWce

098

0

6

0

2

0

0

0

0

0

06F

SL,PSWce

09A

0

6

0

1

0

0

0

0

0

06F

SR,PSWce

09C

0

6

0

1

0

0

0

0

0

06F

SL,PSWce

09E

0

6

0

1

0

0

0

0

0

06F

SR,PSWce

四、测试程序、数据及运行结果

1、

测试内容:

SAR指令

运行数据:

内存地址(H)

机器码(H)

汇编指令

0000

003A0010

SAR0010H

运行结果及分析:

从微地址可以看出,第一阶段先是取指令001->002->003再是取目的操作数,006->01B->01F->024->025->026->007,是直接寻址方式,最后是执行阶段,007->092->06F->070,执行SAR指令。

由下一条指令可以看出结果变成了03B0,为右移后的结果,正确。

四、设计中遇到的问题及解决办法

在实例化两个四选一多路器时,给data_lsb,data__reset);

parameterDATAWIDTH=16;

output[DATAWIDTH-1:

0]q;

input[DATAWIDTH-1:

0]d;

inputclk,ce,n_reset;

reg[DATAWIDTH-1:

0]q;

always@(posedgeclkornegedgen_reset)

begin

if(!

n_reset)

q=16'h003F;当复位信号有效时,SP的输出为03F

elseif(ce)当使能信号有效时,输出就是输入的内容

q=d;

end

endmodule

2、顶层模块设计(自己增加修改的设计部分)

SP#(DATAWIDTH)SP(.d(IB),.q(SP_out),.clk(clock),.ce(SPce),.n_reset(n_reset));

buffer#(DATAWIDTH)SP_IB(.q(IB),.d(SP_out),.oe(SPoe));

三、PUSH、POP、CALL、RET指令微程序的设计

PUSH(堆栈指令)

微地址(H)

微指令(H)

微命令

BM

NA

注释

0C0

F43000C1

SPoe,Ace,SV

0

0C1

取sp

0C1

62B300C2

Soe,DEC,SV,DRce

0

0C2

Sp-1

0C2

7C0800C3

Soe,SPce,ARce

0

0C3

Sp-1后的地址

0C3

DRoe’,ARoe’,WR

0

000

将内容写入sp-1所指向的内存中

POP(压栈指令)

微地址(H)

微指令(H)

微命令

BM

NA

注释

0C8

B00000C9

ARoe,TRce

0

0C9

将目标地址先存放在暂存器中

0C9

F40800CA

SPoe,ARce,Ace

0

0CA

取sp

0CA

027610CB

RD,ARoe’,DRce’,INC,SV

0

0CB

读出sp所指向的内容,sp-1

0CB

800800CC

TRoe,ARce

0

0CC

取目标地址

0CC

7C052000

ARoe’,DRoe’,WR,Soe,SPce

0

000

将sp中的内容写入目标地址

CALL(子程序调用指令)

微地址(H)

微指令(H)

微命令

BM

NA

注释

0D0

F40000D1

SPoe,Ace

0

0D1

栈顶单元减一,并保存原PC内容

0D1

B2B000D2

DEC,SV,ARoe,TRce

0

0D2

0D2

7C0800D3

Soe,ARce,SPce

0

0D3

将sp-1送入SP和AR中

0D3

200300D4

PCoe,DRce

0

0D4

将PC内容放入DR

0D4

ARoe’,DRoe’,WR,TRoe,PCce

0

000

写入栈顶单元

RET(返回指令)

微地址(H)

微指令(H)

微命令

BM

NA

注释

03C

F408003D

SPoe,ARce,Ace

0

03D

03D

RD,ARoe’,DRce’,INC,SV

0

03F

03F

DRoe,PCce

0

040

040

7C000000

Soe,SPce

0

000

四、测试程序、数据及运行结果

1、

测试内容:

PUSH(堆栈指令)

运行数据:

内存地址(H)

机器码(H)

汇编指令

0000

031A0004

PUSH0004H

运行结果及分析:

从微地址可以看出,第一阶段先是取指令001->002->003再是取目的操作数,006->01B->01F->024->025->026->007,是直接寻址方式,最后是执行阶段,0C0->0C1->0C2->0C3->000,执行PUSH指令。

DR中为0004H里的内容5EE2。

同时可以看出SP始终为3F。

PUSH指令正确。

2、

测试内容:

POP(压栈指令)

运行数据:

内存地址(H)

机器码(H)

汇编指令

0002

033A0008H

POP0004H

运行结果及分析:

从微地址可以看出,第一阶段先是取指令001->002->003再是取目的操作数,006->01B->01F->024->025->026->007,是直接寻址方式,最后是执行阶段,0C8->0C9->0CA->0CB->0CC->000,执行POP指令。

SP减一变为3E。

在内存中可以看出,0008H中的内容变成了0004H中的内容5EE2。

POP指令执行正确。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 化学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1