计算机组成原理课程设计报告 第五天.doc

上传人:飞****2 文档编号:56397059 上传时间:2022-11-01 格式:DOC 页数:28 大小:1.15MB
返回 下载 相关 举报
计算机组成原理课程设计报告 第五天.doc_第1页
第1页 / 共28页
计算机组成原理课程设计报告 第五天.doc_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《计算机组成原理课程设计报告 第五天.doc》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计报告 第五天.doc(28页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、计算机组成原理课程设计报告专业名称: 网络1001班级学号: 学生姓名: 赵一昕指导教师:丁伟设计时间: 年 月 日 年 月 日第一天 取操作数微程序的设计和调试一、设计目标 设计并调试取操作数的微程序。二、取操作数微流程三、测试程序、数据及运行结果格式如下:1、测试内容:立即数寻址、直接寻址测试指令(或程序):MOV #5678H,0010H 机器码: 内存地址(H)机器码(H)汇编指令0000077A 5678 0010MOV #5678H,0010H运行结果及分析:四、设计中遇到的问题及解决办法 这次试验中在取源操作数和取目的操作数时对微程序的入口地址的编写时我出现了问题,还有在编写时我

2、由于粗心也出现了错误。这次试验我了解了相关软件的应运,了解了取操作数的设计及调试,学会了对每一步操作的分析和验证。第二天 运算指令的微程序设计与调试一、设计目标 设计并调试运算指令的微程序。二、运算指令微程序入口地址指令助记符指 令 编 码入口地址(H)FEDCBA9876543210MOVsrc, dst000001源地址码目的地址码044ADDsrc, dst000010源地址码目的地址码048ADDCsrc, dst000011源地址码目的地址码04CSUB src, dst000100源地址码目的地址码050SUBBsrc, dst000101源地址码目的地址码054CMPsrc, d

3、st000110源地址码目的地址码058ANDsrc, dst000111源地址码目的地址码05COR src, dst001000源地址码目的地址码060XOR src, dst001001源地址码目的地址码064TESTsrc, dst001010源地址码目的地址码068INC dst00000010001目的地址码0A4DEC dst00000010010目的地址码0A8NOT dst00000010011目的地址码0AC三、运算类指令微程序微地址(H)微指令(H)微命令BMNA注释0070000 0800OP4指令执行入口0489870 006FTRoe, ADD, Sce, PSWc

4、e006FADD04C98B0 006FTRoe,ADDC,SV,PSWce006FADDC05098F0 006FTRoe,SUB,SV,PSWce006FSUB06F0000 0E70NOP7070存结果070Soe,GRSoe0000ALU运算,结果存寄存器071Soe,DRce0072072DRoe,ARoe,WR0000四、测试程序、数据及运行结果1、测试内容:立即数寻址、直接寻址测试指令(或程序):ADD #5678H,0010H 机器码: 内存地址(H)机器码(H)汇编指令00000B7A 5678 0010ADD #5678H,0010H运行结果及分析:2. 测试内容:立即数寻

5、址、寄存器间接寻址测试指令(或程序):AND #1234H,(R0) 机器码: 内存地址(H)机器码(H)汇编指令00001F68 1234 AND #1234H,(R0)运行结果及分析:3. 测试内容:立即数寻址、寄存器寻址测试指令(或程序):DEC (0111H) 机器码: 内存地址(H)机器码(H)汇编指令0000025B 0111 DEC (0111H)运行结果及分析:4. 测试内容:立即数寻址、寄存器寻址测试指令(或程序):TEST #1234 R1 机器码: 内存地址(H)机器码(H)汇编指令00002B61 1234 TEST #1234 R1运行结果及分析:五、设计中遇到的问题

6、及解决办法 在这次实验中,输入微程序的代码必须足够仔细,否则你检查起来会比较麻烦,而且这次试验我对有些运算指令代码的功能并不是十分了解,比如CMP,在老师和同学的帮助之下,我顺利完成了编写。第三天 CPU硬件的初级设计与验证一、设计目标 在运算器实验的基础上对硬件进行扩充,建立初级CPU的数据通路,构造一个只支持运算指令的初级CPU。二、硬件设计1、PC模块设计(加上适当注释)timescale 1ns / 1psmodule PC(d,q,n_reset,clk,ce,PCinc); input 15:0 d; input n_reset,clk,ce; input PCinc;output

7、 15:0 q;reg 15:0 data;always (posedge clk or negedge n_reset)begin if (!n_reset)data = 0; /采用异步复位,当n_reset有效时,PC清0else if (ce)data = d;/在时钟信号clk的上升沿如果数据装入使能ce有效则dqelse if(PCinc)data=data+1; /如果自加信号PCinc有效则q+1q。PC通过三态门与IB相连endassign q = data;endmodule2、DR模块设计module DR #(parameter DATAWIDTH=16)(input

8、wire DATAWIDTH-1:0 data_IB, input wire DATAWIDTH-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; /DR采用异步复位,复位时DR清0 else if (DRce_IB)q = data_IB;/否则在时钟信号的上升沿,当DRce_IB有效时则da

9、ta_IBq elseif(DRce_DB) q =data_DB; /当DRce_DB有效时则data_DBqendendmodule3、顶层模块设计(自己增加的设计部分)/TRR #(DATAWIDTH) TR (.d(IB),.q(TR_out),.clk(clock),.ce(TRce),.n_reset(n_reset);buffer #(DATAWIDTH) reg_buffer(.q(IB), .d(TR_out), .oe(TRoe);/ ARR #(DATAWIDTH) AR (.d(IB),.q(AR_out),.clk(clock),.ce(ARce),.n_reset(

10、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);/IRR #(DATAWIDTH) IR (.d(IB),.q(IR_out),.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

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

12、);三、验证1、测试内容:立即数寻址、直接寻址测试指令(或程序):ADD #5678H,0010H 机器码: 内存地址(H)机器码(H)汇编指令00000B7A 5678 0010ADD #5678H,0010H运行结果及分析:2. 测试内容:立即数寻址、寄存器间接寻址测试指令(或程序):AND #1234H,(R0) 机器码: 内存地址(H)机器码(H)汇编指令00001F68 1234 AND #1234H,(R0)运行结果及分析:3. 测试内容:立即数寻址、寄存器寻址测试指令(或程序):DEC (0111H) 机器码: 内存地址(H)机器码(H)汇编指令0000025B 0111 DEC

13、 (0111H)运行结果及分析:4. 测试内容:立即数寻址、寄存器寻址测试指令(或程序):TEST #1234 R1 机器码: 内存地址(H)机器码(H)汇编指令00002B61 1234 TEST #1234 R1运行结果及分析:四、设计中遇到的问题及解决办法这次实验中我对Verilog HDL语言的运用并不是十分熟悉,在编写代码中出现了问题,例如在PC模块中,我没有注意到已经设计好的DATA变量,而q只是一个信号,无法参与运算,使得在实现中出现了错误。第四天 为CPU扩充转移指令一、设计要求 在初级CPU的基础上进行功能扩充,使其支持转移类指令。二、硬件uAG模块设计(自己修改的设计部分,

14、加上适当注释)3d3: uAGout = NA8:1, BM3_uAR0; /条件转移指令产生两条分支(即条件满足/条件不满足两种情况)2b00: Flag_MUX = SZOC0; /IR7,IR6为00时,选择PSW的最低位,即CF2b01: Flag_MUX = SZOC1; /IR7,IR6为01时,选择PSW的倒数第二位,即OF2b10: Flag_MUX = SZOC2; /IR7,IR6为10时,选择PSW的第二位,即ZF2b11: Flag_MUX = SZOC3; /IR7,IR6为11时,选择PSW的最高位,即SF三、转移指令微程序的设计四、测试程序、数据及运行结果1、测试

15、内容:01 MOV #0001H, R1 02 MOV #1234H, R2 03 ADD #0010H, R2 04 JZ (R1)运行数据:0761 0001 0762 1234 0B62 0010 0189 运行结果及分析:将0001送人到R1中, 将1234送入到R2中,将0010与R2中的1234进行加法运算得到结果为1244存入到R2中,而相加结果不产生进位,CF=0,条件不满足,不执行JC,PC的值顺序执行2、测试内容:01 MOV #0001H, R1 02 MOV #0010H, R2 03 ADD #FFF0H, R2 04 JZ (R1)运行数据:0761 0001 07

16、62 0010 0B62 FFF0 0189 运行结果及分析:把0100存入R1中,把0010存入R2中,将FFFF与R2中的0010相加,相加之后产生进位,CF=1,且结果为零,ZF=1,满足条件uAR0=1,可执行JC,PC的值由007直接跳转至010。五、设计中遇到的问题及解决办法 在这次试验中,我对移位指令的功能并不是十分清楚,所以在模块设计时存在疑问,而且,我对Verilog HDL语言还是不大了解,在编译中出现了很多问题,在老师和同学的帮助下我解决了这些问题。第五天 为CPU扩充移位指令一、设计目标 在前面CPU的基础上扩充硬件,使其支持移位指令。二、硬件设计1、SHIFTER模块

17、设计(加上适当注释)module SHIFTER(q,d,clk,sv,sl,sr,n_reset,IR76,CF); parameter DATAWIDTH = 16;output DATAWIDTH-1:0 q; input DATAWIDTH-1:0 d;input 1:0IR76; input clk,n_reset,CF; input sv, sl, sr;reg DATAWIDTH-1:0 data;wire data_lsb;wire data_hsb;mux#(1) mux_1(.d1(0),.d2(0),.d3(d15),.d4(CF),.addr(IR76),.q(data

18、_lsb); /实例化最低有效位生成的四选一多路选择器 /addr选择哪种移位操作,为01时,选择逻辑左移(与/算术左移相同),最低位补0;为10时,选择循环左移/最低位用最高位补;为11时,选择带进位循环左移,/最低位用CF补mux#(1) mux_2(.d1(d15),.d2(0),.d3(d0),.d4(CF),.addr(IR76),.q(data_hsb);/实例化最高有效位生成的四选一多路选择器 /addr选择哪种移位操作,为00时,选择算是右移,最高/位复制;为01时,选择逻辑右移,最高位补0;为10时,/选择循环左移最高位用最低位补;为11时,选择带进位/循环左移,最高位用CF

19、补always (posedge clk or negedge n_reset) beginif (!n_reset) data = 0;else if(sv) data = d;else if (sl) data = dDATAWIDTH-2:0, data_lsb;else if (sr) data = data_hsb, dDATAWIDTH-1:1; endassign q = data;endmodule2、CF模块设计timescale 1ns / 1psmodule CF(d15, d0, Cout, q, SL, SR);input d15, d0, Cout;input SL

20、, SR;output q;reg q;always (*)begin case (SL, SR) 3b01: q = d0; /右移时,最低位送CF 3b10: q = d15;/左移时,最高位送CF default:q = Cout;/其他情况CF不变 endcaseendendmodule3、IR_DECODE模块设计(自己增加修改的设计部分) 2b00: BM4_uA=5b01001,IR7:5,1b0;/移位类指令微程序的入口地形成规则4、顶层模块设计(增加自己修改的设计部分)wire CF = CF_out;CF CF (.d15(ALU_out15),.d0(ALU_out0),

21、.Cout(Cout),.q(CF_out),.SL(SL),.SR(SR);/CF实例化,ALU_out15,输入,来自移位数据的最高位;ALU_out0,输入,来自移位数据的最低位;Cout,输入,来自ALU的进位输出;SL,输入,SHIFTER移位器的左移信号;SR,输入,SHIFTER移位器的右移信号;q,输出,来自进位的输出。 R #(DATAWIDTH) PSW(.q(PSW_out), .clk(clock),.n_reset(n_reset),.ce(PSWce),.d(12b0,SF,ZF,OF,CF_out);三、移位指令微程序的设计微地址(H)微指令(H)微指令字段(H)

22、微命令F0F1F2F3F4F5F6F7F8F9092F0 6010000006FSR,PSWce094F06020000006FSL,PSWce096F06010000006FSR,PSWce098F06020000006FSL,PSWce09AF06010000006FSR,PSWce09CF06010000006FSL,PSWce09EF06010000006FSR,PSWce四、测试程序、数据及运行结果1、测试内容: SAR 0010H运算数据:003A 0010指令功能: 再将0010中的内容算术右移2.测试内容:SHL 0100H 运算数据:005A,0100指令功能:将0100单元

23、中的内容逻辑左移3、 测试内容:ROR 0110H运算数据:00BA 0110指令功能:将0110中的内容循环右移4、 测试内容:RCL 0101H运算数据:00DA 0101指令功能:将0101中的内容带进位循环左移5、 测试内容:SHR 0111H运算数据:007A 0111指令功能:将0111单元中的内容逻辑右移6、 测试内容:ROL 0110H运算数据:009A 0110指令功能:将0110单元中内容循环左移7、 测试内容:RCR 0011H 运算数据:00FA 0011指令功能:将0011单元中的内容带进位循环右移四、设计中遇到的问题及解决办法在这次试验中,在用Verilog HDL

24、语言编写程序时我遇到了问题,在添加CF的实例化语句中,出现了很多错误,CF,CF_out起先我对其没有声明定义,以致出现了很多错误,在老师和同学的帮助之下我最终成功编译了程序。 第六天 为CPU扩充堆栈类指令一、设计目标 在前面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; i

25、nput clk,ce,n_reset; reg DATAWIDTH-1:0 q;always (posedge clk or negedge n_reset)beginif (!n_reset) q =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);/堆栈SP的输入来自总线IB;输

26、出为SP_out;时钟信号以及复位信号就是总的定义的信号;/使能为SPce.buffer #(DATAWIDTH) SP_IB(.q(IB),.d(SP_out),.oe(SPoe);/三态门的输入来自SP的输出;输出连接到总线IB;使能为SPoe.三、PUSH、POP、CALL、RET指令微程序的设计PUSH(堆栈指令)微地址(H)微指令(H)微命令BMNA注释0C0F43000C1SV,SPoe,Ace00C10C162B300C2Soe,DRce,DEC,SV00C20C27C0800C3Soe, SPce, ARce00C30C3DRoe, ARoe, WR0000POP(压栈指令)微

27、地址(H)微指令(H)微命令BMNA注释0C8B00000C9ARoe, TRce00C90C9F40800CASPoe, ARce, Ace00CA0CACBRD, ARoe, DRce, INC,SV00CB0CBCCTRoe, ARce00CC0CC7CARoe,DRoe,WR,Soe,SPce0000CALL(子程序调用指令)微地址(H)微指令(H)微命令BMNA注释0D0F40000D1SPoe, Ace00D1栈顶单元减一,并保存原PC内容0D1B2B000D2DEC,SV, ARoe, TRce00D20D27C0800D3Soe,ARce,SPce00D3将新地址送入SP和AR

28、中0D3D4PCoe,DRce00D4将PC内容放入DR0D4ARoe,DRoe,WR,TRoe,PCce0000写入栈顶单元RET(返回指令)微地址(H)微指令(H)微命令BMNA注释03CFDSPoe, ARce, Ace003D03DFRD, ARoe, DRce, INC,SV003F03FCDRoe, PCce00400407CSoe, SPce0000四、测试程序、数据及运行结果1、测试内容:PUSH 0010H运行数据:031A 0010运行结果及分析:将0010单元的内容入栈,将其存入到SP中,同时SP的栈顶指针减12、测试内容:POP 0010H运行数据:033B 0010运

29、行结果及分析:将SP内容出栈,同时SP的栈顶指针加1,主存中的内容变成SP的内容。3、测试内容:CALL 0030H运行数据:035A 0030运行结果及分析:此指令为子程序调用指令,使PC地址进行跳转,跳转至0030,同时SP的栈顶指针减1。4、测试内容:RET 运行数据:0002运行结果及分析:此指令为子程序调用指令的逆过程,使PC地址进行恢复,跳回至0002,同时SP的栈顶指针加1。四、设计中遇到的问题及解决办法 在今天的试验中我在对CALL,RET的功能的理解中,我遇到了很大的问题,使得一直无法编写出RET和CALL的微程序代码,在经过老师的讲解,反复与同学的讨论中我才明白了其功能,得

30、以编成。第七天 为CPU扩充中断系统一、设计目标 二、硬件设计1、(可只写自己增加修改部分。并加上适当注释)2、3、 4、顶层模块设计(自己增加修改的设计部分)三、微程序设计1中断响应隐指令的微程序设计微地址(H)微指令(H)微命令BMNA注释2。中断返回指令RETI的微程序设计微地址(H)微指令(H)微命令BMNA注释四、测试程序、数据及运行结果1、(1)测试内容:运行数据:运行结果及分析:2、(1)测试内容:运行数据:运行结果及分析:3、五、设计中遇到的问题及解决办法总结 这次的课程设计是进行了简易的CPU的设计,首先他对我们对课堂上对CPU的理解进行了加深,让我对指令的执行过程,寻址方式有了更进一步的了解,不只是停留于理论的表面;其次,我对VHDL和Verilog HDL硬件语言有了初步的了解,但在编写时我依然会出现各种错误,这说明我对这种语言并没有做到足够的了解,在接下来的时间我应该加强这方面的学习。内容提示:课程设计的总结,收获、心得体会,对课程设计的评价及建议。有话则多、无话则少,请勿模仿、复制其他同学的。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com