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