计算机组成原理课程设计报告(江苏大学适用于软件工程).doc

上传人:laozhun 文档编号:2882338 上传时间:2023-03-01 格式:DOC 页数:25 大小:2.86MB
返回 下载 相关 举报
计算机组成原理课程设计报告(江苏大学适用于软件工程).doc_第1页
第1页 / 共25页
计算机组成原理课程设计报告(江苏大学适用于软件工程).doc_第2页
第2页 / 共25页
计算机组成原理课程设计报告(江苏大学适用于软件工程).doc_第3页
第3页 / 共25页
计算机组成原理课程设计报告(江苏大学适用于软件工程).doc_第4页
第4页 / 共25页
计算机组成原理课程设计报告(江苏大学适用于软件工程).doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《计算机组成原理课程设计报告(江苏大学适用于软件工程).doc》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计报告(江苏大学适用于软件工程).doc(25页珍藏版)》请在三一办公上搜索。

1、 江苏大学 计算机组成原理课程设计报告 专业名称: 软件工程班级学号:软件1001 学生姓名: 张建彬指导教师: 杨旭东 设计时间: 2012年6月 11 日 2012年6月20日第一天 取操作数微程序的设计和调试一、 设计目标 设计并调试取操作数的微程序 二、取操作数微流程三、测试程序、数据及运行结果1、测试内容:立即寻址,直接寻址运行数据:内存地址(H)机器码(H)汇编指令0000077A 5678 0010MOV #5678H,0010H运行结果及分析:从微地址可以看出,先是取指令001-002-003-004,再是取源操作数,004-00B-00F-016-006,是立即数寻址方式,再

2、是取目的操作数,006-01B01F-024-025-026-007,是直接寻址方式,最后是执行阶段,007-044-047-072-000,将结果mov到内存里。2、测试内容:立即寻址,寄存器运行数据:内存地址(H)机器码(H)汇编指令00000761 5678 MOV #5678H,R1运行结果及分析:从微地址可以看出,先是取指令001-002-003-004,再是取源操作数,004-00B-00F-016-006,是立即数寻址方式,再是取目的操作数,006-018-007,是寄存器寻址方式,最后是执行阶段,007-044-046-000,将结果mov到寄存器里。由GRS可以看出最终结果由

3、0000变成了5678。四、 设计中遇到的问题及解决办法 才开始的时候,对软件的应用不是很熟悉,遇到一些麻烦,在同学的帮助下,解决了软件应用问题。第二天 运算指令的微程序设计与调试一、 设计目标 设计并调试运算指令的微程序。二、运算指令微程序入口地址指令助记符指 令 编 码入口地址(H)FEDCBA9876543210MOVsrc, dst000001源地址码目的地址码044ADDsrc, dst000010源地址码目的地址码048ADDCsrc, dst000011源地址码目的地址码04CSUB src, dst000100源地址码目的地址码050SUBBsrc, dst000101源地址码

4、目的地址码054CMPsrc, dst000110源地址码目的地址码058ANDsrc, dst000111源地址码目的地址码05COR src, dst001000源地址码目的地址码060XOR src, dst001001源地址码目的地址码064TESTsrc, dst001010源地址码目的地址码068INC dst00000010001目的地址码0A4DEC dst00000010010目的地址码0A8NOT dst00000010011目的地址码0AC三、运算类指令微程序微地址(H)微指令(H)微命令BMNA注释00700000800OP4XXX指令执行入口0489870006FTR

5、oe, ADD, Sce, PSWce006FADD04C98B0006FTRoe,ADDC,SV,PSWce006FADDC05098F0006FTRoe,SUB,SV,PSWce006FSUB06F00000E707070存结果07068000000Soe,GRSce0000ALU运算,结果送寄存器07160030072Soe,DRce0072结果送存储器07200052000DRoe,ARoe,WR0000四、测试程序、数据及运行结果1、测试内容:ADD运算运行数据:内存地址(H)机器码(H)汇编指令000000020761 56780B61 F000MOV #5678H,R1ADD #

6、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,是寄存器寻址

7、方式,最后是执行阶段,007-048-04F-070-000,是ADD运算,结果存放在寄存器GRS中,可以看出结果为4678,并且产生进位,SZOC=0001,正确。五、设计中遇到的问题及解决办法 指令的入口地址开始时没看懂,在同学的点拨下明白了。再是写微程序阶段,完成微程序的输入后,输入时由于不太仔细有一些错误,经过调试发现并改正了错误。经过对每条运算的测试,一些结果不对,在自己的一步一步的查找中,通过和同学的微程序的对照,一一弄懂并改正了。第三天 CPU硬件的初级设计与验证一、设计目标 在运算器实验的基础上对硬件进行扩充,建立初级CPU的数据通路,构造一个只支持运算指令的初级CPU。二、硬

8、件设计1、PC模块设计(加上适当注释)module PC(d,q,n_reset,clk,ce,PCinc); input 15:0 d; input n_reset,clk,ce; input PCinc; output 15:0 q; reg 15:0 data;always (posedge clk or negedge n_reset) begin if (!n_reset)data = 0; else if (ce)data = d;else if(PCinc)data = data+1; endassign q = data;endmodule2、IR模块设计module IR #

9、(parameter DATAWIDTH=16)(input wire DATAWIDTH-1:0 d, input wire clk, input wire ce, input n_reset, output reg DATAWIDTH-1:0 q);always(posedge clk or negedge n_reset) begin if (!n_reset)q = 0; else if (ce)q = d;endDR:module DR #(parameter DATAWIDTH=16)(input wire DATAWIDTH-1:0 data_IB, input wire DAT

10、AWIDTH-1:0 data_DB, input wire clk, input wire DRce_IB, input wire DRce_DB, input n_reset, output reg DATAWIDTH-1:0 q);always(posedge clk or negedge n_reset) begin if(!n_reset)q=0;else if(DRce_IB)q=data_IB;else if(DRce_DB)q=data_DB; endendmodule3、顶层模块设计(自己增加的设计部分)/TR/TR寄存器的实例化R #(DATAWIDTH) TR(.q(TR

11、_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(

12、AR_out), .oe(ARoe_IB);/IR/IR寄存器的实例化R #(DATAWIDTH) IR(.q(IR_out),.d(IB),.clk(clock),.ce(IRce),.n_reset(n_reset);/PCPC PC(.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);/DRDR #(DATAWIDTH) DR(.q(DR_out), .data_IB(

13、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)汇编指令000000020761 56780B61 F000MOV #5678H,R1ADD #F000, R1结果和第

14、二天的一样,说明硬件扩充正确。四、设计中遇到的问题及解决办法 在写TR,AR,IR的实例化代码时,没注意是用寄存器模块R实例化得到的,经过报错和仔细看书后,发现了问题,成功改正过来了。完成程序运行出了问题,经过查找发现是DR模块出了问题,if(!n_reset)q=0;else if(DRce_IB)q=data_IB;else if(DRce_DB)q=data_DB;这一句被我写成了if(!n_reset)q=0;else if(DRce_IB)q=data_IB;else q=data_DB。第四天 为CPU扩充转移指令一、设计要求 在初级CPU的基础上进行功能扩充,使其支持转移类指令二

15、、硬件uAG模块设计(自己修改的设计部分,加上适当注释)3d3:uAGout = NA8:1,BM3_uAR0; /3,根据条件转移指令操作码PSW的ZF,OF,SF,CF状态标志决定微地址/第四天always(SZOC, IR) begin case(IR7:6)/ 条件转移类指令 2b00: Flag_MUX=SZOC0; 2b01: Flag_MUX=SZOC1; 2b10: Flag_MUX=SZOC2; 2b11: Flag_MUX=SZOC3; default:Flag_MUX002-003-004,再是取源操作数,004-00B-00F-016-006,是立即数寻址方式,再是取目

16、的操作数,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,有进位,所以条件满

17、足,执行的是075-077-000,正确。五、设计中遇到的问题及解决办法 程序中误将赋值符号=写成了=, 被同学发现,及时修改,并成功得到解决。第五天 为CPU扩充移位指令一、设计目标 在前面的CPU的基础上扩充硬件,使其支持移位指令。二、硬件设计1、SHIFTER模块设计(加上适当注释)wire data_lsb; wire data_hsb; /*/ */ 第五天要修改的代码 */assign data_lsb = 1b0 ; /assign data_hsb = 1b0 ; mux#(1) mux_1(.d1(0),.d2(0),.d3(d15),.d4(CF),.q(data_lsb)

18、,.addr(IR76); mux#(1) mux_2(.d1(d15),.d2(0),.d3(d0),.d4(CF),.q(data_hsb),.addr(IR76);/ 根据不同的移位指令,实例化两个四选一多路器,重新形成data_lsb和data_lsb */ 多路器mux在工程文件中已提供 */ */*2、CF模块设计timescale 1ns / 1psmodule CF(d15, d0, Cout, q, SL, SR);input d15, d0, Cout;input SL, SR;output q;reg q;always (*)begincase (SL, SR)3b01:

19、 q = d0;3b10: q = d15;default:q = Cout;endcaseendendmodule3、IR_DECODE模块设计(自己增加修改的设计部分)2b00:BM4_uA002-003再是取目的操作数,006-01B-01F-024-025-026-007,是直接寻址方式,最后是执行阶段,007-092-06F-070,执行SAR指令。由下一条指令可以看出结果变成了03B0,为右移后的结果,正确。四、设计中遇到的问题及解决办法 在实例化两个四选一多路器时,给data_lsb,data_hsb初始化了,导致运行结果出错,经过老师的指导,改正正确。第六天 为CPU扩充堆栈类

20、指令一、设计目标 在前面的CPU的基础上增加堆栈,使其支持与堆栈有关的PUSH、POP、CALL、RET指令二、硬件设计1、SP模块设计(加上适当注释)timescale 1ns / 1psmodule SP(q,d,clk,ce,n_reset); parameter DATAWIDTH=16; output DATAWIDTH-1:0 q; input DATAWIDTH-1:0 d; input clk,ce,n_reset; reg DATAWIDTH-1:0 q;always (posedge clk or negedge n_reset)beginif (!n_reset) q =

21、16 h003F; /当复位信号有效时,SP的输出为03Felse if (ce) /当使能信号有效时,输出就是输入的内容q = d; endendmodule2、顶层模块设计(自己增加修改的设计部分)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)微命令BMNA注释0C0F43

22、000C1SPoe,Ace,SV00C1取sp0C162B300C2Soe,DEC,SV,DRce00C2Sp-10C27C0800C3Soe, SPce, ARce00C3Sp-1后的地址0C300052000DRoe, ARoe, WR0000将内容写入sp-1所指向的内存中POP(压栈指令)微地址(H)微指令(H)微命令BMNA注释0C8B00000C9ARoe, TRce00C9将目标地址先存放在暂存器中0C9F40800CASPoe, ARce, Ace00CA取sp 0CA027610CBRD, ARoe, DRce, INC,SV00CB读出sp所指向的内容,sp-10CB800

23、800CCTRoe, ARce00CC取目标地址0CC7C052000ARoe,DRoe,WR,Soe,SPce0000将sp中的内容写入目标地址CALL(子程序调用指令)微地址(H)微指令(H)微命令BMNA注释0D0F40000D1SPoe, Ace00D1栈顶单元减一,并保存原PC内容0D1B2B000D2DEC,SV, ARoe, TRce00D20D27C0800D3Soe,ARce,SPce00D3将sp-1送入SP和AR中0D3200300D4PCoe,DRce00D4将PC内容放入DR0D484052000ARoe,DRoe,WR,TRoe,PCce0000写入栈顶单元RET(

24、返回指令)微地址(H)微指令(H)微命令BMNA注释03CF408003DSPoe, ARce, Ace003D03D0276103FRD, ARoe, DRce, INC,SV003F03FC4000040DRoe, PCce00400407C000000Soe, SPce0000四、测试程序、数据及运行结果1、测试内容:PUSH(堆栈指令)运行数据:内存地址(H)机器码(H)汇编指令0000031A 0004PUSH 0004H运行结果及分析:从微地址可以看出,第一阶段先是取指令001-002-003再是取目的操作数,006-01B-01F-024-025-026-007,是直接寻址方式,

25、最后是执行阶段,0C0-0C1-0C2-0C3-000,执行PUSH指令。DR中为0004H里的内容5EE2。同时可以看出SP始终为3F。PUSH指令正确。2、测试内容:POP(压栈指令) 运行数据:内存地址(H)机器码(H)汇编指令0002033A 0008HPOP 0004H运行结果及分析:从微地址可以看出,第一阶段先是取指令001-002-003再是取目的操作数,006-01B-01F-024-025-026-007,是直接寻址方式,最后是执行阶段,0C8-0C9-0CA-0CB-0CC-000,执行POP指令。SP减一变为3E。在内存中可以看出,0008H中的内容变成了0004H中的内

26、容5EE2。POP指令执行正确。3、测试内容:CALL(子程序调用指令) 运行数据:内存地址(H)机器码(H)汇编指令00000010035A 00100760 5555CALL 0010HMOV #5555,R0运行结果及分析:从微地址可以看出,第一阶段是取第一条指令(CALL 0010H),001-002-003,再是取目的操作数,006-01B-01F-024-025-026-007,最后是执行阶段,007-0D0-0D1-0D2-0D3-0D4-000,SP减一变为3E,PC转到0010H;第二阶段先是取第二条指令(MOV #5555H,R0)001-002-003-004,再是取源操

27、作数,004-00B-00F-016-006,是立即数寻址方式,再是取目的操作数,006-018-007,是寄存器寻址方式,最后是执行阶段,007-044-046-000,将结果mov到寄存器里。在GRS可以看出由0000变成了5555。4、测试内容:RET(返回指令)运行数据:内存地址(H)机器码(H)汇编指令000200120761 56780002MOV #5678,R1RET运行结果及分析: CALL执行完后,PC跳转到0012H,所以第一阶段先是取第二条指令(RET)001-002-003,然后执行RET,007-03C-03D-03F-040-000,SP加一变为3F,跳转回到原P

28、C,0002H处,进入第二阶段,先是取第一条指令(MOV #5678,R1),001-002-003,再是取源操作数,004-00B-00F-016-006,是立即数寻址方式,再是取目的操作数,006-018-007,是寄存器寻址方式,最后是执行阶段,007-044-046-000,将结果mov到寄存器里。在GRS可以看出由0000变成了5678。 四、设计中遇到的问题及解决办法 写微指令时遇到许多问题,刚开始没弄明白各条指令的意思,然后经过同学的讲解,弄懂了各个指令的意思,通过参考书籍,成功的写出了各个指令的微程序。第七天 为CPU扩充中断系统一、设计目标 在前面CPU的基础上增加中断系统,

29、使其支持键盘中断。二、硬件设计1、IF(可只写自己增加修改部分。并加上适当注释)if(!n_reset or cli)IF=0;else if(sti)IF=1;2、INTCif(KR)VA_out=h0020;else if(PR)VA_out=h0021;3、顶层模块设计(自己增加修改的设计部分)/第七天:IF、INTC的实例化 *IF IF(.clk(clock), .n_reset(n_reset), .sti(STI), .cli(CLI), .IF(IF_out);INTC INTC(.KR(KR), .PR(PR), .INTR(INTR), .VA_out(VA_out);bu

30、ffer #(DATAWIDTH) VA_B(.q(DB), .d(VA_out), .oe(INTA);三、微程序设计1中断响应隐指令的微程序设计微地址(H)微指令(H)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F9081F4005082750000050082CLI,SPoe,Ace08222B3008310A303000083DEC,SV,PCoe,DRce08374080084350020000084Soe,ARce,Ace08400052085000011020085ARoe,DRoe,WR08502B3308600A303030086DEC,SV,PSWoe,DRc

31、e0867C080087370020000087Soe,ARce,SPce08700052088000011020088ARoe,DRoe,WR08800026089000002010089INTA,DRce089C008008A60002000008ADRoe,ARce08A0006108B00001201008BARoe,RD,DRce08BC4000001610000000001DRoe,PCce2。中断返回指令RETI的微程序设计微地址(H)微指令(H)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F903EF4080028750020000028SPoe,Ace,ARce

32、02802761029009312010029INC,ARoe.RD,DRce,SV029D000002A64000000002ADRoe,TRce02A7408002B35002000002BSoe,Ace,ARce02B0276102C00931201002CARoe,RD,DRce,INC,SV02CC400002D61000000002DDRoe,PCce02D7C004000370000040000Soe,SPce,STI 总结: 这次关于CPU的课程设计,按照老师的计划,每天完成一定的量,使我们能够更加清晰的了解CPU组成以及数据通路,并且对实例化的语句有所了解,通过自己编写的程序使CPU能够实现转移、移位等功能,让我更加加深了对CPU的各种功能的理解。 在设计的过程中我也遇到了很多麻烦,虽然最后结果不是很成功,但是通过老师和同学的指导,解决了很多问题,让我了解到自己的不足。另一方面,通过本次课程设计能够联系之前的学习内容,发现自己在理解的基础上,实践能力得到了很大的提升。同时,也意识到还有很多东西不会,在今后的学习中,一定要认真对待,学会多和同学交流,发现自己存在的不足,让自己的学习能力强化。

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号