计算机组成原理课程设计报告江苏大学软件工程_第1页
计算机组成原理课程设计报告江苏大学软件工程_第2页
计算机组成原理课程设计报告江苏大学软件工程_第3页
计算机组成原理课程设计报告江苏大学软件工程_第4页
计算机组成原理课程设计报告江苏大学软件工程_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算机组成原理课程设计报告第一天获取操作数的微程序设计与调试设计目标设计和调试采用操作数的微程序二、取操作数微流三、测试程序、数据及运行结果1、测试内容:立即寻址、直接寻址运行数据:店铺地址(H)机器码 (H)组装说明0000077A 5678 0010MOV #5678H, 0010H运行结果及分析:从微地址可以看出,先取指令001-002-003-004,然后源操作数004-00B-00F-016-006为立即寻址模式,然后是目标操作数,006-01B01F-024-025-026-007,也就是直接寻址模式,最后是执行阶段,007-044-047 -072-000 ,将结果移动到存储中。

2、2、测试内容:立即寻址、寄存器运行数据:店铺地址(H)机器码 (H)组装说明00000761 5678MOV #5678H,R1运行结果及分析:从微地址可以看出,先取指令001-002-003-004,然后源操作数004-00B-00F-016-006为立即寻址模式,然后是取目的操作数,006-018-007,也就是寄存器寻址模式,最后是执行阶段,007-044-046-000,将结果移动到寄存器中.从GRS可以看出,最终结果从0000变成了5678。设计问题和解决方案刚开始的时候,对软件的应用不是很熟悉,遇到了一些麻烦。在同学的帮助下,我解决了软件应用问题。第二天操作指令的微程序和调试设计目

3、标设计和调试根据指令运行的微程序。2.操作指令微程序入口地址指令助记符指令码入口地址 (H)F乙DC乙一个9876543210MOVsrc, dst000001源代码目的地代码044ADDsrc, dst000010源代码目的地代码048ADDCsrc, dst000011源代码目的地代码04CSUB src, dst000100源代码目的地代码050SUBBsrc, dst000101源代码目的地代码054CMPsrc, dst000110源代码目的地代码058ANDsrc, dst000111源代码目的地代码05C或 src, dst001000源代码目的地代码060XORsrc, dst

4、001001源代码目的地代码064TESTsrc, dst001010源代码目的地代码068INC 日期00000010001目的地代码0A4DECdst00000010010目的地代码0A8非标准00000010011目的地代码0AC3. 操作指令微程序微地址 (H)微指令 (H)微指令BM不适用笔记00700000800OP4XXX命令执行入口0489870006FTRoe、ADD、Sce、PSWce006F添加04C98B0006FTRoe,ADDC,SV,PSWce006FADDC05098F0006FTRoe,SUB,SV,PSWce006F子06F00000E707070保存结果0

5、7068000000索,GRSce0000ALU 运算,结果送入寄存器07160030072苏, DRce0072结果被致到内存07200052000D罗伊 , 阿罗 , WR00004、测试程序、数据及运行结果1、测试内容:ADD操作运行数据:店铺地址(H)机器码 (H)组装说明000000020761 56780B61 F000MOV #5678H,R1添加#F000,R1运行结果及分析:从微地址可以看出,第一阶段是取第一条指令( MOV#5678H,R1 ) 001-002-003-004,然后取源操作数,004-00B- 00F-016-006为立即寻址方式,然后目的操作数006-01

6、8-007为寄存器寻址方式,最后执行阶段007-044-046-000将结果是移入寄存器。在GRS中可以看到从0000变成了5678。第二阶段是取第二条指令( ADD#F000,R1 )001-002-003-004,然后取源操作数,004 -00B-00F-016-006,即立即数寻址方式,然后目的操作数,006-018-007,为寄存器寻址方式,最后是执行阶段,007-048- 04F-070-000,是加法运算,结果存放在寄存器GRS中,可以看出结果为4678,产生了一个进位,SZOC=0001,正确。五、设计中遇到的问题及解决方法一开始没看懂指令的入口地址,后来在同学的指导下看懂了。然

7、后在写微程序的阶段,在完成微程序的输入后,由于不小心输入了一些错误,调试后发现并纠正。每次操作测试后,有些结果是错误的。在我一步一步的搜索中,通过和同学的微程序对比,我一一理解并改正。CPU硬件初步设计与验证第三天一、设计目标在算子实验的基础上,扩展了硬件,建立了主CPU的数据通路,构建了只支持操作指令的主CPU。2.硬件设计1. PC模块设计(带有适当的评论)模块 PC(d,q,n_reset,clk,ce,PCinc);输入15:0d;输入 n_reset,clk,ce;输入 PCinc;输出 15:0 q;注册 15:0 数据;总是(posedge clk 或 negedge n_res

8、et)开始如果(!n_reset)数据 = 0; 否则如果 (ce)数据 = d;否则如果(PCinc)数据=数据+1;结尾分配 q = 数据;端模块2、IR模块设计模块红外#(参数 DATAWIDTH=16)(输入线 DATAWIDTH-1:0 d,输入线时钟,输入线ce,输入n_reset,输出 reg DATAWIDTH-1:0 q);总是(posedge clk 或 negedge n_reset)开始如果(!n_reset)q = 0; 否则如果 (ce)q = d;结尾博士:模块 DR #(参数 DATAWIDTH=16)(输入线 DATAWIDTH-1:0 data_IB,输入线

9、 DATAWIDTH-1:0 data_DB,输入线时钟,输入线DRce_IB,输入线 DRce_DB,输入n_reset,输出 reg DATAWIDTH-1:0 q);总是(posedge clk 或 negedge n_reset)开始如果(!n_reset)q=0;否则如果(DRce_IB)q=数据_IB;否则如果(DRce_DB)q=data_DB;结尾端模块3.顶层模块设计(自己添加的设计部分)/TR/TR寄存器的实例化R #(DATAWIDTH) TR(.q(TR_out),.d(IB),.clk(clock),.ce(TRce),.n_reset(n_reset);缓冲区#(D

10、ATAWIDTH) reg_buffer(.q(IB), .d(TR_out), .oe(TRoe);/ 增强现实/AR寄存器的实例化R #(DATAWIDTH) AR(.q(AR_out),.d(IB),.clk(clock),.ce(ARce),.n_reset(n_reset);缓冲区 #(ADDRWIDTH) AR_AB(.q(AB), .d(AR_out), .oe(ARoe_AB);缓冲区#(ADDRWIDTH) AR_IB(.q(IB), .d(AR_out), .oe(ARoe_IB);/红外/IR寄存器的实例化R #(DATAWIDTH) IR(.q(IR_out),.d(I

11、B),.clk(clock),.ce(IRce),.n_reset(n_reset);/个人电脑PC PC(.d(IB),.q(PC_out),.n_reset(n_reset),.clk(时钟),.ce(PCce),.PCinc(PCinc);缓冲区#(DATAWIDTH) PC_buffer(.q(IB), .d(PC_out), .oe(PCoe);/DRDR #(DATAWIDTH) DR(.q(DR_out), .data_IB(IB), .data_DB(DB), .clk(clock), .DRce_IB(DRce_IB), .DRce_DB(DRce_DB), .n_reset

12、(n_reset);缓冲区#(DATAWIDTH) DR_DB(.q(DB), .d(DR_out), .oe(DRoe_DB);缓冲区#(DATAWIDTH) DR_IB(.q(IB), .d(DR_out), .oe(DRoe_IB);3. 验证1、测试内容:ADD操作运行数据:店铺地址(H)机器码 (H)组装说明000000020761 56780B61 F000MOV #5678H,R1添加#F000,R1结果和第二天一样,说明硬件扩容是正确的。四、设计中遇到的问题及解决方法在写TR、AR、IR的实例化代码的时候,没有注意到是通过实例化寄存器模块R得到的,报错仔细阅读后发现问题并成功改

13、正。程序完成有问题。经过查找,发现是DR模块有问题。如果(!n_reset)q=0;否则如果(DRce_IB)q=data_IB;否则如果(DRce_DB)q=data_DB;这句话是我写的if(!n_reset)q=0;else if(DRce_IB)q=data_IB;else q=data_DB 。第 4 天扩展 CPU 的传输指令一、设计要求在主CPU的基础上扩展功能,支持传输指令2.硬件uAG模块设计(设计部分自己修改,有适当的注释)3d3:uAGout = NA8:1,BM3_uAR0; /3、根据条件分支指令操作码PSW的ZF、OF、SF、CF状态标志确定微地址/ 第四天总是(S

14、ZOC,IR)开始case(IR7:6) / 条件分支指令 2b00:标志_MUX=SZOC0; 2b01:标志_MUX=SZOC1;2b10: Flag_MUX=SZOC2;2b11:标志_MUX=SZOC3;默认值:Flag_MUX002-003-004,然后取源操作数,004-00B- 00F-016-006为立即寻址方式,然后目的操作数006-018-007为寄存器寻址方式,最后执行阶段007-044-046-000将结果是移入寄存器。在GRS中可以看到从0000变成了5678。第二阶段是取第二条指令( ADD#F000,R1 )001-002-003-004,然后取源操作数,004

15、-00B-00F-016-006,即立即数寻址方式,然后目的操作数,006-018-007,为寄存器寻址方式,最后是执行阶段,007-048- 04F-070-000,是加法运算,结果存放在寄存器GRS中,可以看到结果是4678,产生了一个进位,SZOC=0001,是正确的。第三阶段,进入JC指令,因为C=1,有进位,所以条件满足,执行075-077-000,正确。五、设计中遇到的问题及解决方法程序中,作业符号=被误写为=,被同学发现,及时修改,成功解决。第 5 天扩展了 CPU 的移位指令一、设计目标在上一代CPU的基础上,对硬件进行了扩展,支持移位指令。2.硬件设计1.SHIFTER模块设

16、计(带有适当的评论)线数据_lsb;线data_hsb;/* */ */第五天要修改的代码*/赋值 data_lsb = 1b0 ;/赋值 data_hsb = 1b0 ;mux#(1) mux_1(.d1(0),.d2(0),.d3(d15),.d4(CF),.q(data_lsb),.addr(IR76);mux#(1) mux_2(.d1(d15),.d2(0),.d3(d0),.d4(CF),.q(data_hsb),.addr(IR76);/根据不同的移位指令,实例化两个四对一多路复用器,重新形成data_lsb和data_lsb */ 多路复用器 mux 在工程文件中提供*/ */

17、* *2.CF模块设计时间刻度 1ns / 1ps模块 CF(d15, d0, Cout, q, SL, SR);输入d15,d0,Cout;输入 SL、SR;输出 q;注册q;总是 (*)开始案例 (SL, SR)3b01:q = d0;3b10: q = d15;默认值:q = Cout;端盖结尾端模块3. IR_DECODE模块设计(自行添加修改设计部分)2b00:BM4_uA002-003,然后取目的操作数,006-01B-01F-024-025-026-007 ,即直接查找地址模式,最后执行阶段,007-092-06F-070,执行SAR指令。从下一条指令可以看出,结果变成了03B0

18、,也就是右移后的结果,是正确的。四、设计中遇到的问题及解决方法例化两个四对一复用器时,data_lsb和data_hsb被初始化,导致运行结果出错。经老师指导,改正无误。第 6 天扩展了 CPU 的堆栈类指令一、设计目标在之前的CPU基础上增加了栈,支持栈相关的PUSH、POP、CALL、RET指令。2.硬件设计1、SP模块设计(带有适当的评论)时间刻度 1ns/1ps模块 SP(q,d,clk,ce,n_reset);参数 DATAWIDTH=16;输出 DATAWIDTH-1:0 q;输入 DATAWIDTH-1:0 d;输入时钟,ce,n_reset;注册 DATAWIDTH-1:0 q

19、;总是(posedge clk 或 negedge n_reset)开始如果(!n_reset)q =16 h003F; /复位信号有效时,SP的输出为03Felse if (ce) /使能信号有效时,输出为输入的内容q = d;结尾端模块2.顶层模块设计(自行添加修改设计部分)SP #(DATAWIDTH) SP(.d(IB), .q(SP_out), .clk(clock), .ce(SPce), .n_reset(n_reset);缓冲区#(DATAWIDTH) SP_IB(.q(IB),.d(SP_out),.oe(SPoe);3、PUSH、POP、CALL、RET指令微程序设计PUS

20、H(堆栈指令)微地址 (H)微指令 (H)微指令BM不适用笔记0C0F43000C1SPoe, 王牌, SV00C1服用 sp0C162B300C2Soe,DEC,SV , DRce00C2Sp -10C27C0800C3苏,SPce,ARce00C3Sp -10C300052000德罗,阿罗,WR0000将内容写入sp-1指向的内存POP(推送指令)微地址 (H)微指令 (H)微指令BM不适用笔记0C8B00000C9AROE,TRce00C9先将目标地址存入暂存器0C9F40800CASPoe,ARce,Ace00CA服用 sp0CA027610CBRD,ARoe,DRce,INC,SV0

21、0CB读取sp、sp-1指向的内容0CB800800CC特罗,阿塞00CC获取目标地址0CC7C052000ARoe,DRoe,WR,Soe,SPce0000将sp中的内容写入目标地址CALL(子程序调用指令)微地址 (H)微指令 (H)微指令BM不适用笔记0D0F40000D1SPoe,王牌00D1栈顶单元减一,保存原始PC内容0D1B2B000D2DEC,SV,ARoe,TRce00D20D27C0800D3苏,ARce,SPce00D3将 sp-1 喂入 SP 和 AR0D3200300D4PCe, DRce00D4将PC放入DR0D484052000ARoe,DRoe,WR,TRoe,

22、PCce0000写入栈顶RET(返回命令)微地址 (H)微指令 (H)微指令BM不适用笔记03CF408003DSPoe,ARce,Ace003D03D0276103FRD,ARoe,DRce,INC,SV003F03FC4000040德罗,PCce00400407C000000苏,SPce00004、测试程序、数据及运行结果1、测试内容: PUSH(栈指令)运行数据:店铺地址(H)机器码 (H)组装说明0000031A 0004推 0004H运行结果及分析:从微地址可以看出,第一阶段是取指令001-002-003,然后取目的操作数,006-01B-01F-024-025-026-007 ,即

23、直接查找地址模式,最后执行阶段,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 减 1 变为 3E。可以看出000

24、8H的容量变成0004H的容量5EE2的存在。 POP 指令正确执行。3.测试内容: CALL(子程序调用指令)运行数据:店铺地址(H)机器码 (H)组装说明00000010035A 00100760 5555呼叫 0010H移动 #5555,R0运行结果及分析:从微地址可以看出,第一阶段是取第一条指令( CALL 0010H ), 001-002-003,然后取目的操作数,006-01B-01F-024- 025-026-007,最后是执行阶段,007-0D0-0D1-0D2-0D3-0D4-000,SP减1到3E,PC到0010H ;第二阶段是取第二条指令( MOV #5555H, R0

25、) 001-002-003-004,那么源操作数004-00B-00F-016-006就是立即寻址模式,然后取目标操作数,006-018-007,也就是寄存器寻址模式,最后是执行阶段,007-044-046-000,将结果移动到寄存器中。在GRS中可以看到从0000变成了5555。4.测试内容: RET(返回命令)运行数据:店铺地址(H)机器码 (H)组装说明000200120761 56780002移动 #5678,R1RET运行结果及分析:CALL执行完后,PC跳转到0012H,所以第一阶段取第二条指令( RET ) 001-002-003,然后执行RET,007-03C-03D-03F-

26、 040-000,SP加一变成3F,跳回原来的PC,0002H,进入第二阶段,先取第一条指令( MOV#5678,R1 ),001-002-003,再取源操作数004-00B-00F-016-006是立即寻址方式,然后目的操作数006-018-007是寄存器寻址方式,最后是执行阶段,007- 044-046-000,将结果移动到寄存器。在GRS中可以看到从0000变成了5678。四、设计中遇到的问题及解决方法我在写微指令的时候遇到了很多问题。起初我不明白每条指令的含义。经过同学们的讲解,我明白了每一条指令的含义。通过参考书,我成功编写了每条指令的微程序。第七天为CPU扩展中断系统一、设计目标在

27、之前的CPU基础上,增加了中断系统,支持键盘中断。2.硬件设计1.如果(您可以自己编写并添加修改的部分。并添加适当的注释)if(!n_reset 或 cli)如果=0;否则如果(sti)如果=1;2. 国际贸易中心如果(韩)VA_out=h0020;否则如果(公关)VA_out=h0021;3.顶层模块设计(自行添加修改设计部分)/第 7 天:IF、INTC 的实例化*IF IF(.clk(时钟),.n_reset(n_reset),.sti(STI),.cli(CLI),.IF(IF_out);INTC INTC(.KR(KR), .PR(PR), .INTR(INTR), .VA_out(VA_out);缓冲区#(DATAWIDTH) VA_B(.q(DB), .d(VA_out), .oe(INTA);3. 微程序1. 中断响应隐式指令的微编程微地址 (H)微指令 (H)微指令场 (H)微指令F0F1F2F3F4F5F6F7F8F9081F4005082750000050082CLI,SPoe,王牌08222B3008310一个303000083DEC,S

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论