ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:1.51MB ,
资源ID:7385101      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7385101.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机组成原理课程设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机组成原理课程设计.docx

1、计算机组成原理课程设计计算机组成原理课程设计报告专业名称: 计算机学院班级学号: 网络1001 3100610019 学生姓名: 李嘉利指导教师: 丁伟设计时间:2012年6月 11日2012 年6 月19日第一天 取操作数微程序的设计和调试一、设计目标 设计并调试取操作数的微程序。二、取操作数微流程三、测试程序、数据及运行结果格式如下:1、 测试内容:直接寻址测试指令(或程序):MOV #5678H,0010H 运行结果及分析:此指令将5678存入到0010单元机器码: 内存地址(H)机器码(H)汇编指令0000077A 5678 0010MOV #5678H,0010H运行结果及分析:此指

2、令将5678存入到0010单元四、设计中遇到的问题及解决办法 在设计过程中开始对调试程序的运行不是特别熟悉,通过反复验证和询问熟悉的了解了此程序的运行,另外,在操作过程中,产生了输入二进制代码的顺序错误,经过重新输入解决了此问题。通过此次试验,详细的了解了取操作数微程序的设计和调试,了解了它的整个过程和对于每一步的分析和验证,对流程有了更深入的认识。第二天 运算指令的微程序设计与调试一、设计目标 设计并调试运算指令的微程序。二、运算指令微程序入口地址指令助记符指 令 编 码入口地址(H)FEDCBA9876543210MOV src, dst000001源地址码目的地址码044ADD src,

3、 dst000010源地址码目的地址码048ADDC src, dst000011源地址码目的地址码04CSUB src, dst000100源地址码目的地址码050SUBB src, dst000101源地址码目的地址码054CMP src, dst000110源地址码目的地址码058AND src, dst000111源地址码目的地址码05COR src, dst001000源地址码目的地址码060XOR src, dst001001源地址码目的地址码064TEST src, dst001010源地址码目的地址码068INC dst00000010001目的地址码0A4DEC dst000

4、00010010目的地址码0A8NOT dst00000010011目的地址码0AC三、运算类指令微程序微地址(H)微指令(H)微命令BMNA注释00700000800OP4XXX指令执行入口0489870006FTRoe, ADD, Sce, PSWce006FADD04C98B0006FTRoe,ADDC,SV,PSWce006FADDC05098F0006FTRoe,SUB,SV,PSWce006FSUB06F00000E707070存结果07068000000Soe,GRSce0000ALU运算,结果送寄存器07160030072Soe,DRce0072结果送存储器0720005200

5、0DRoe,ARoe,WR0000四、测试程序、数据及运行结果1、测试内容:ADD #1234H, 0010H运行数据:0B7A 1234 0010运行结果及分析:将值1234与0010单元内容相加所得的结果,并且将此结果存入到主存中。2、测试内容:OR #F000H,2(R0)运行数据:2370 F000 0002运行结果及分析:将值F000与R0寄存器中的值0010进行或运算得到结果0000存入到R0中。3、测试内容:INC R1运行数据:0221运行结果及分析:将R1中的内容进行加1操作,结果存入R1中。测试内容:TEST #1,(R0)运行数据:0760 0100运行结果:五、设计中遇

6、到的问题及解决办法 指令的机器码写正确,否则会带来一些不必要的麻烦和错误,要将指令在写微程序时有一些不懂,后来经过老师的讲解明白了大概,又有同学帮忙改错,终于完成微程序的输入,输入时由于不太仔细有一些错误,经过调试发现并改正完善了微程序。第三天 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; in

7、put PCinc; output 15:0 q; reg 15:0 data;always (posedge clk or negedge n_reset) /程序计数器PC采用异步复位beginif (!n_reset) /当n_reset有效时,PC清0data = 0; else if (ce) /在时钟信号clk的上升沿如果数据装入,且使能ce有效则dq(通过中间变量data)data = d;else if (PCinc) /如果自加信号PCinc有效则q+1q(通过中间变量data)data = data+1; endassign q = data;endmodule2、DR模块

8、设计 /DR连接内部总线IB和系统总线的DB / DR有两路数据输入data_IB、data_DB,分别来自IB、DB,相应的有两/个装入使能信号DRce_IB、DRce_DBtimescale 1ns / 1psmodule DR #( parameter DATAWIDTH=16) (input 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 DATAW

9、IDTH-1:0 q);always(posedge clk or negedge n_reset) / DR采用异步复位beginif(!n_reset) /当n_reset有效时,DR清0q=0; else if(DRce_IB) /在时钟信号的上升沿,当DRce_IB有效时则data_IBq q=data_IB; else if(DRce_DB) /当DRce_DB有效时则data_DBq q=data_DB;endendmodule3、IR模块设计/TR/TR寄存器的实例化R #(DATAWIDTH) TR(.q(TR_out), .d(IB), .clk(clock), .ce(TR

10、ce), .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/

11、IR寄存器的实例化R #(DATAWIDTH) IR(.q(IR_out), .d(IB), .clk(clock), .ce(IRce), .n_reset(n_reset);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的

12、使能信号即为CPU.v中定义的TRce。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(IRc

13、e), .n_reset(n_reset); /IR的输出连接到三态门上,输出即为CPU.v中已经定义好的IR_out /IR的输入是从IB总线上输入的,因此连接IB /IR的时钟信号,以及复位信号,都是顶层模块中的统一时钟信号和复位信号 /IR的使能信号即为CPU.v中定义的IRce。三、验证1.MOV #5678 0010077A 5678 00102.测试内容:OR #F000H,2(R0)运行数据:2370 F000 0002运行结果及分析:3.测试内容:INC R1运行数据:0221运行结果及分析:4.测试内容:TEST #1,(R0)运行数据:0760 0100运行结果及分析:四、

14、设计中遇到的问题及解决办法在验证PC.v程序代码的正确性时,出现错误,仔细观察代码发现,代码上面已经定义了一个中间变量data,而q只是一个信号,不能够参加运算,应用data写相关程序,再将数据送给q,程序实现才会正确。第四天 为CPU扩充转移指令一、设计要求 在初级CPU的基础上进行功能扩充,使其支持转移类指令。 二、硬件uAG模块设计(自己修改的设计部分,加上适当注释)3d3: uAGout = NA8:1, BM3_uAR0; /条件转移指令产生两条分支(即条件满足/条件不满足两种情况)2b00: Flag_MUX = SZOC0; /IR7,IR6为00时,选择PSW的最低位,即CF2

15、b01: 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、测试内容:01 MOV #10H, R1 02 MOV #1234H, R0 03 ADD #5678H, R0 04 JZ (R1)运行数据:0761 0010 0760 1234 0B60 5678 0189 运行结果及分析:将0010

16、送人到R1中, 将1234送入到R0中,将5678与R0中的1234进行加法运算得到结果为68AC存入到R0中,而相加结果不产生进位,CF=0,条件不满足,不执行JC,PC的值顺序执行2、测试内容:01 MOV #10H, R1 02 MOV #0001H, R2 03 ADD #FFFFH, R2 04 JZ (R1)运行数据:0761 0010 0762 0001 0B62 FFFF 0189 运行结果及分析:把0010存入R1中,把0001存入R2中,将FFFF与R2中的0001相加,相加之后产生进位,CF=1,且结果为零,ZF=1,满足条件uAR0=1,可执行JC,PC的值由007直接

17、跳转至010。五、设计中遇到的问题及解决办法起先对转移指令不了解,经过老师讲解明白了转移指令的条件。第五天 为CPU扩充移位指令一、设计目标 在前面CPU的基础上扩充硬件,使其支持移位指令。二、硬件设计1、SHIFTER模块设计(加上适当注释)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

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

19、化最高有效位生成的四选一多路选择器 /addr选择哪种移位操作,为00时,选择算是右移,最高/位复制;为01时,选择逻辑右移,最高位补0;为10时,/选择循环左移最高位用最低位补;为11时,选择带进位/循环左移,最高位用CF补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; endassi

20、gn q = data;endmodule2、CF模块设计timescale 1ns / 1psmodule CF(d15, d0, Cout, q, SL, SR);input d15, d0, Cout;input SL, 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

21、:5,1b0; /移位类指令微程序的入口地形成规则 4、顶层模块设计wire CF_out;CF#(DATAWIDTH)CF (.d15(ALU_out15),.d0(ALU_out0),.Cout(Cout),.q(CF_out),.SL(SL),.SR(SR);/CF实例化,ALU_out15,输入,来自移位数据的最高位;ALU_out0,输入,来自移位数据的最低位;Cout,输入,来自ALU的进位输出;SL,输入,SHIFTER移位器的左移信号;SR,输入,SHIFTER移位器的右移信号;q,输出,来自进位的输出。三、移位指令微程序的设计微地址(H)微指令(H)微指令字段(H)微命令F0

22、F1F2F3F4F5F6F7F8F90921810006F0 6010000006FSR,PSWce0941820006F06020000006FSL,PSWce0961810006F06010000006FSR,PSWce0981820006F06020000006FSL,PSWce09A1810006F06010000006FSR,PSWce09C1820006F06010000006FSL,PSWce09E1810006F06010000006FSR,PSWce四、测试程序、数据及运行结果1、测试内容:MOV #0101 R1 SAR R1 运算数据:0761 0101 0021 指令功

23、能:将0101送入R1中 再将R1算术右移 2.测试内容:SHL 0100H 3.运算数据:005A,0100指令功能:将0100单元中的内容逻辑左移3、 测试内容:ROR ( 0011H)运算数据:00B9 0011指令功能:将0011单元中的地址中的内容循环右移4、 测试内容:RCL + 0101H运算数据:00D8 0101指令功能:将0101+PC单元中的内容带进位循环左移5、 测试内容:SHR 0011H运算数据:007A 0011指令功能:将0010单元中的内容逻辑右移6、 测试内容:ROL ( 0011H)运算数据:0099 0011指令功能:将0010单元中的地址中的内容循环左

24、移7、 测试内容:RCR + 0011H 运算数据:00F8 0011指令功能:将0011+PC单元中的内容带进位循环右移四、设计中遇到的问题及解决办法第六天 为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; input clk,ce,n

25、_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;输出为SP_out;时钟信号以及复位信号就是总的定义的

26、信号;/使能为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, ARce00C30C300052000DRoe, ARoe, WR0000POP(压栈指令)微地址(H)微指令(H)微命令BMN

27、A注释0C8B00000C9ARoe, TRce00C90C9F40800CASPoe, ARce, Ace00CA0CA027610CBRD, ARoe, DRce, INC,SV00CB0CB800800CCTRoe, ARce00CC0CC7C052000ARoe,DRoe,WR,Soe,SPce0000CALL(子程序调用指令)微地址(H)微指令(H)微命令BMNA注释0D0F40000D1SPoe, Ace00D1栈顶单元减一,并保存原PC内容0D1B2B000D2DEC,SV, ARoe, TRce00D20D27C0800D3Soe,ARce,SPce00D3将新地址送入SP和AR中0D3200300D4PCoe,DRce00D4将PC内容放入DR0D484052000ARoe,DRoe,WR,TRoe,PCce0000写入栈顶单元

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

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