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

更新时间:2024-03-01 01:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

设计时间:

专业名称:班级学号:学生姓名:指导教师:年 6 月11

网络工程

网络1002

张珍丽

丁伟

日—— 2012年 6 月 20 日

2012

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

一、设计目标

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

004取源操作数入口5:M→mAR1,0008寄存器寻址寄存器间接寻址变址寻址00A立即/直接/间接/相对寻址00BPCoe, ARcePCoe, ARce00C00FARoe′, RD,DRce′, PCincARoe′, RD, DRce′, PCinc6:M′→mAR2,1010相对间接直接立即00D010012DRoe, AceDRoe, AceDRoe, ARce00EGRSoeADD, SV011013PCoeADD, SVARoe′, RD, DRce′009017014GRSoe, ARceSoe,ARceDRoe, ARce008015GRSoe, TRce0:NA→mAR006ARoe′, RD,DRce′016DRoe, TRce0:NA→mAR006进入取目标操作数

2

006取目的数入口5:M→mAR1,0018寄存器寻址寄存器间接寻址变址寻址01A直接/间接/相对寻址01BPCoe, ARcePCoe, ARce01C01FARoe′, RD,DRce′, PCincARoe′, RD, DRce′, PCinc6:M′→mAR2,1020相对间接直接01D020022DRoe, AceDRoe, AceDRoe, ARce01EGRSoeADD, SV021023PCoeADD, SVARoe′, RD, DRce′019027024GRSoe, ARceSoe,ARceDRoe, ARce018025GRSoe, Ace0:NA→mAR007ARoe′, RD,DRce′026DRoe, Ace0:NA→mAR007EXEC

3

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

格式如下:

1、测试内容:立即数寻址 测试指令(或程序):MOV #1234H,R1 机器码: 内存地址(H) 0000 机器码(H) 0761 1234H 汇编指令 MOV #1234H,R1

运行结果及分析:

分析:首先查看微指令流程,如果执行的微地址依次是:001——002——003——004——00B——00F——016——006——018——007——004——046——000……(后面的MOV指令的EXE微指令是由老师提供的),根据前面指令微流程的设计,所执行的微指令次序是正确的。在上图中,测试指令微程序最后一条微指令的地址为046,微指令是88000000,所代表的微操作应该是TRoe,GRSce。执行后GRS=0000,而执行后的结果都是存放在GRS当中的,这里好像出错了。但在下一条微指令时GRS=1234,这是因为GRS的装入使能信号GRSce受时钟信号的影响,内容在微指令周期结束时才被保存,所以观察到的数据慢了一步。

四、设计中遇到的问题及解决办法 1.①编写取源操作数的指令微程序时,输入微指令经常出错②用软件的时候,忘记设置输出装载方式,导致输出结果不完全,而且对软件UniDebugger的操作也不太熟悉。③搞不清楚‘取操作数入口’的微程序是由什么组成。

2.解决办法:①预习工作要做好,输入微指令的时候要对照设计指导书,一步一步进行。②在使用软件之前,要先知道自己的目标,不能盲目的做。逐步熟悉软件步骤,在验证之前设置好输出与装载设置,在输入微指令的时候不能贪快,以保证输入的数据是正确的以及软件的顺畅使用。③认真复习课本上内容,可以知道原来取操作数的入口的微命令是空的(NOP)。

4

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

一、设计目标

设计并调试运算指令的微指令

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

指令助记符 指 令 编 码 F E D C B A 9 8 7 6 5 4 3 2 1 0 入口地址(H) 目的地址码 目的地址码 目的地址码 目的地址码 目的地址码 目的地址码 目的地址码 目的地址码 目的地址码 目的地址码 044 048 04C 050 054 058 05C 060 064 068 0A4 0A8 0AC MOV src, dst ADD src, dst ADDC src, dst SUB src, dst SUBB src, dst CMP src, dst AND src, dst OR src, dst XOR src, dst TEST src, dst INC dst DEC dst NOT dst

三、运算类指令微程序

微地址(H) 007 048 04C 050 06F 070 071 072 微指令(H) 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 1 0 源地址码 源地址码 源地址码 源地址码 源地址码 源地址码 源地址码 源地址码 源地址码 源地址码 0 0 0 0 0 0 1 0 0 0 1 目的地址码 0 0 0 0 0 0 1 0 0 1 0 目的地址码 0 0 0 0 0 0 1 0 0 1 1 目的地址码 微命令 BM NA 注释 00000800 NOP 9870006F TRoe, ADD, Sv, PSWce 98B0006F TRoe,ADDC,Sv,PSWce 98F0006F TRoe,SUB,SV,PSWce 00000070 NOP 68000000 Soe,GRSce 60030072 Soe,DRce 00052000 DRoe',ARoe',WR 4 0 0 0 7 0 0 0 *** 06F 06F 06F 070 000 072 000 指令执行入口 ADD ADDC SUB 存结果 ALU运算,结果送寄存器 结果送存储器

5

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

1、测试内容:①AND #1234,R1

运行数据:机器码:1F61,1234H 结果为:

分析:此AND指令的执行的微指令依次是:001——002——003——004——00B——00F—016—006——018——007——05C——06F——070——000根据前面指令过程微流程的设计,所执行的微指令次序是正确的.

②INC(0001)

运行数据 :0239 0001H 结果为:

分析:此INC指令的执行的微指令依次是:001——002——003——006——01B——01F—022—024——025——026——007——0A4——06F——071——072——000根据前面指令过程微流程的设计,所执行的微指令次序是正确的.0001自增之后为0002,DR显示是对的.

③ADD #1234,1234

运行数据:0B7A 1234 1234H 结果为:

6

分析:此ADD指令的执行的微指令依次是:001——002——003——004——00B——00F—016—006——01B——01F——024——025——026——007——048——06F——071——072——000根据前面指令过程微流程的设计,所执行的微指令次序是正确的.

④TEST #1234,+0010H

运行数据为:2B78 1234 0010H 结果为:

分析:此TEST指令的执行的微指令依次是:001——002——003——004——00B——00F—016—006——01B——01F——022——023——024——025——026——007——068——000根据前面指令过程微流程的设计,所执行的微指令次序是正确的.

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

问题:①没有理解入口地址的意思②对于BM=7时的原理也不太理解

解决:听老师讲授课程之后,我知道了入口地址怎么理解了。双操作数的入口地址为:{3‘b001,IR【13:10】,2’b00}→uAR,其中3‘b001指的是前三位数为001,IR【13:10】指的是中间四位数由各操作指令编码的第十位到底是三位组成,2’b00指的是最后俩位数为00,根据这些理解,很快就能写出ADDC:04C、SUB: 050、SUBB: 054 、CMP: 058、AND: 05C、OR: 060 、XOR: 064、DEC: 0A8、NOT: 0AC等操作的入口地址。而当BM=7时,由硬件完成,当结果送寄存器时,{NA【8:1】,1’b0}→uAR,当结果送存储器时,{NA【8:1】,1’b1}→uAR。

7

第三天 CPU硬件的初级设计与验证

一、设计目标

在运算器实验的基础上对硬件进行扩充,建立初级CPU的数据通路,构造一个只支持运算指令的初级CPU。 二、硬件设计 1、PC模块设计

/*程序计数器PC与R模块一样采用异步复位,当n_reset有效时,PC清0,否则在时钟信号clk的上升沿如果数据装入使能ce有效则d→q,如果自加信号PCinc有效则q+1→q。PC通过三态门与IB相连。*/

2、IR模块设计

/* DR连接内部总线IB和系统总线的DB ;DR有两路数据输入data_IB、data_DB,分别来自IB、DB,相应的有两个装入使能信号DRce_IB、DRce_DB,输出端q分别通过两个三态门连到IB、DB。DR采用异步复位,复位时DR清0,否则在时钟信号的上升沿,当DRce_IB有效时则data_IB→q,当DRce_DB有效时则data_DB→q。 */

3、顶层模块设计(自己增加的设计部分) ①TR寄存器的实例化:

R #(DATAWIDTH) TR(.q(TR_out),.d(IB), .clk(clock), .ce(TRce), .n_reset(n_reset));

//TR的输出连接到三态门上,输出即为CPU.v中已经定义好的TR_out //TR的输入是从IB总线上输入的,因此连接IB

//TR的时钟信号,以及复位信号,都是顶层模块中的统一时钟信号和复位信号 //TR的使能信号即为CPU.v中定义的TRce。

8

②AR寄存器的实例化

R #(ADDRWIDTH) AR(.q(AR_out), .d(IB), .clk(clock), .ce(ARce), .n_reset(n_reset)); //AR的输出连接到三态门上,输出即为CPU.v中已经定义好的AR_out //AR的输入是从IB总线上输入的,因此连接IB

//AR的时钟信号,以及复位信号,都是顶层模块中的统一时钟信号和复位信号 //AR的使能信号即为CPU.v中定义的ARce。

③IR寄存器的实例化

R #(DATAWIDTH) IR(.q(IR_out), .d(IB), .clk(clock), .ce(IRce), .n_reset(n_reset)); //IR的输出连接到三态门上,输出即为CPU.v中已经定义好的IR_out //IR的输入是从IB总线上输入的,因此连接IB

//IR的时钟信号,以及复位信号,都是顶层模块中的统一时钟信号和复位信号 //IR的使能信号即为CPU.v中定义的IRce。

三、验证

①AND #1234,R1 运行数据:1F61,1234H

9

②INC(0001) 运行数据 :0239 0001H

③ADD #1234,1234 运行数据:0B7A 1234 1234H

10

④TEST #1234,+0010H 运行数据为:2B78

1234 0010H

分析:因为这次的验证数据及操作都和第二天的一样,所以当俩天的结果都相同的时候,就说明第三天硬件设计成功了.

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

问题:①截图后发现PC自增的特别快,例如下图所示:

②在验证硬件的时候老是出现各种各样的错,导致无法配置和生成

解决:①-PC自增的特别快是因为一开始在PC模块中把语句if(PCinc)写成了 if(!PCinc),导致PC无法自动清零,上一次的操作结束之后,下一次操作当中的PC会在原基础上继续增,所以自增很快,所以得把括号里的!去掉

②验证的时候出现的错误,主要有语句结束的分号丢失、字母输入大小写混淆、以及模块当中的语句写错。得仔细输入代码以及认真检查,写语句的时候按照设计指导书上的提示写,弄清楚各个信号的表示方式以及功能再写。

11

第四天 为CPU扩充转移指令

一、设计要求

在初级CPU的基础上进行功能扩充,使其支持转移类指令 二、硬件uAG模块设计

3’d3: uAGout={NA[8:1],BM3_uAR0}; case(IR[7:6]) // 条件转移类指令 * 2'b00: Flag_MUX<=1'b0; 2'b01:Flag_MUX<=1'b0; // 添加第四天的代码,参照指导书图2-10 2'b10: Flag_MUX<=1'b0; // 根据标志位正确生成BM3_uAR0 2'b11: Flag_MUX<=1'b0; default:Flag_MUX<=1'b0; endcase

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

EXEC转移指令入口3:转移条件满足YN条件不满足076077076条件满足ARoe,PCce0:固定转移0000:固定转移000000NOP1àFIC(a)(b)

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

1、测试内容: MOV #1234H, R1

MOV #0010H, R0 ADD #5678H, R0 JZ (R1)

运行数据:0761 1234 0760 0010 0B60 5678 0189

12

运行结果及分析:将1234送人到R1中, 将0010送入到R0中,将1234与R0中的0010进行加法运算得到结果5688为存入到R0中,而相加结果不产生进位,CF=0,条件不满足,不执行JC,PC的值顺序执行

2、测试内容: MOV #1234H, R1 MOV #0001H, R2 ADD #FFFFH, R2 JZ (R1)

运行数据:0761 1234 0762 0001 0B62 FFFF 0189

13

运行结果及分析:把1234存入R1中,把0001存入R2中,将FFFF与R2中的00

01相加,相加之后产生进位,CF=1,且结果为零,ZF=1,满足条件uAR0=1,可执行JC,PC的值由007直接跳转至234。

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

问题①不知道怎么验证微程序②执行满足条件的指令,但是PC怎么也没有跳转

解决①用俩个数据相加,如果有溢出,则PC会由自增跳转到另一地址,这样就可以验证微程序是否正确了②满足溢出的微指令,PC没有溢出,经过仔细检查发现是机器码输入错误了,所以还是得仔细。

14

第五天 为CPU扩充移位指令

一、设计目标

在前面CPU的就出上扩充硬件,使其支持移位指令 二、硬件设计

1、SHIFTER模块设计

2、CF模块设计

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

2'b00: BM4_uA<={5'b01001,IR[7:5],1'b0}; //移位类指令微程序的入口地形成规则

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

//CF实例化,ALU_out[15]:输入,来自移位数据的最高位;ALU_out[0]:输入,来自移位数据的最低位;Cout:输入,来自ALU的进位输出;SL:输入,SHIFTER移位器的左移信号;SR:输入,SHIFTER移位器的右移信号;q:输出,来自进位的输出。

15

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

微地址(H) 092 094 096 098 09A 09C 09E 微指令(H) F0 F1 F2 0 0 0 0 0 0 0 F3 1 2 1 2 1 1 1 F4 0 0 0 0 0 0 0 F5 0 0 0 0 0 0 0 F6 0 0 0 0 0 0 0 F7 0 0 0 0 0 0 0 F8 0 0 0 0 0 0 0 F9 06F 06F 06F 06F 06F 06F 06F 微指令字段(H) 微命令 1810006F 0 6 1820006F 0 6 1810006F 0 1820006F 0 1810006F 0 1820006F 0 1810006F 0 6 6 6 6 6 SR,PSWce SL,PSWce SR,PSWce SL,PSWce SR,PSWce SL,PSWce SR,PSWce

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

1、测试内容:

运行数据:

运行结果及分析:

…… ……

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

16

第六天 为CPU扩充堆栈类指令

一、设计目标

二、硬件设计 1、SP模块设计

(加上适当注释)

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

三、PUSH、POP、CALL、RET指令微程序的设计 微地址(H) 微指令(H) 微命令 BM NA 注释

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

1、

测试内容:

运行数据:

运行结果及分析:

…… ……

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

17

第七天 为CPU扩充中断系统

一、设计目标

二、硬件设计 1、

(可只写自己增加修改部分。并加上适当注释) 2、

3、………… …………

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

三、微程序设计

1.中断响应隐指令的微程序设计 微地址(H) 微指令(H) 微命令 BM NA 注释

2。中断返回指令RETI的微程序设计 微地址(H) 微指令(H) 微命令 BM NA 注释

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

18

1、

(1)测试内容:

运行数据:

运行结果及分析:

2、

(1)测试内容:

运行数据:

运行结果及分析:

3、

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

19

总结

20

内容提示:课程设计的总结,收获、心得体会,对课程设计的评价及建议。有话则多、无话则少,请勿模仿、复制其他同学的。

21

本文来源:https://www.bwwdw.com/article/o3ja.html

Top