




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机组成原理课程设计报告专业名称: 网络工程班级学号: 网络0901 学生姓名: 指导教师:设计时间: 2011 年 6月 30 日2011 年 7 月8 日第一天 取操作数微程序的设计和调试一、设计目标 设计并调试取源取目的微流程二、取操作数微流程01701701601501501401301100E00D00F01500C00C0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-AR0:NA-ARD00000060006101650000006C00800156008001540080015000610142070001740700017C0080013D4000011D400000E00069C100006900D2008000F2008000C00000A0800000A00000A18三、测试程序、数据及运行结果格式如下:1、测试内容:立即数寻址、直接寻址测试指令(或程序):MOV #5678H,0010H 机器码: 内存地址(H)机器码(H)汇编指令0000077A 5678 0010MOV #5678H,0010H运行结果及分析:在调试软件UniDebugger中,根据表将机器码输入RAM。扩展单步执行的结果如下图。分析过程如下:对照图,首先看微指令的执行次序:00100200300400B00F01600601B01F024025026007004047072000,参照取指令,取操作数和MOV执行微流程分析,所执行的微指令顺序是正确的 其次分析执行的过程,在003的微指令执行后,下一步IR=077A,说明取指令是正确的;在016的微指令执行后,下一步TR=5678,说明取原操作数是正确的;在在026的微指令执行后,下一步A=FFFF(此时0010单元的内容为FFFF,见图1.2),说明取目的操作数是正确的。最后分析指令执行的结果,指令执行前0010单元的内容为FFFF(见图1.1)指令执行后内容变为5678(在指令的最后一条微指令,微地址为072的下一步,见图1.5),说明结果是正确的。 四、设计中遇到的问题及解决办法第一天主要是对各个寻址方式的了解,并根据寻址方式写了各个微流程,并对其做了编码。起初对各个寻址方式的寻址过程不熟悉,不能看懂调试微流程的各步骤,经过回顾以前学习的知识,经过请教同学和查看课本,有了进一步的了解。并尝试调试了各个寻址方式的功能,并验证了自己程序的正确性。 第二天 运算指令的微程序设计与调试一、设计目标 在第一天的基础上,增加执行微命令的代码,输入到miro中去,并进行调试各种运算类指令并查看运行结果。二、运算指令微程序入口地址指令助记符指 令 编 码入口地址(H)FEDCBA9876543210MOVsrc, dst000001源地址码目的地址码044ADDsrc, dst000010源地址码目的地址码048ADDCsrc, dst000011源地址码目的地址码04CSUB src, dst000100源地址码目的地址码050SUBBsrc, dst000101源地址码目的地址码054CMPsrc, dst000110源地址码目的地址码058ANDsrc, dst000111源地址码目的地址码05COR src, dst001000源地址码目的地址码060XOR src, dst001001源地址码目的地址码064TESTsrc, dst001010源地址码目的地址码068INC dst00000010001目的地址码0A4DEC dst00000010010目的地址码0A8NOT dst00000010011目的地址码0AC三、运算类指令微程序微地址(H)微指令(H)微命令BMNA注释007000008004048指令执行入口0489870006FTRoe, ADD, Sv, PSWce006FADD0A81AB0006FDEC,SV,PSWce006FDEC06099B0006FTRoe, OR, Sv, PSWce006FOR0649A30006FTRoe, XOR, Sv, PSWce006FXOR05C9970006FTRoe, AND, Sv, PSWce006FAND0AC19F0006FNOT, Sv, PSWce006FNOT05098F0006FTRoe, SUB, Sv, PSWce006FSUB0A41A70006FINC, Sv, PSWce006FINC0549930006FTRoe, ADD, Sv, PSWce006FSUBB04C98B0006FTRoe, ADD, Sv, PSWce006FADDC05898C00000TRoe, sub,PSWce0000CMP06899400000TRoe, AND, PSWce0000TEST06F00000E707070存结果07068000000Soe,GRSce0000寄存器保存07160030072Soe,Drce0072保存在主存07200052000Droe,Aroe,WR0000写入主存四、测试程序、数据及运行结果1、测试内容: 1. ADD #0123 0011运行数据:运行结果及分析:在调试软件UniDebugger中,根据表将机器码0B7A 0123 0011输入RAM,输入后如上图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400B00F01600601B01F02402502600704806F071072000,参照取指令,取操作数和ADDC执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,在003的微指令执行后,下一步IR=0B7A,说明取指令是正确的;在016的微指令执行后,下一步TR=0123,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0010,说明取目的操作数是正确的。最后分析指令执行的结果:即0133结果,由072下一条指令可以看出其结果为0133,说明结果是正确的。2.DEC 0010运行结果及分析在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如上图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601B01F0240250260070AB06F071072000,参照取指令,取操作数和DEC执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,DEC为单操作数指令,在003的微指令执行后,下一步执行取目的操作数,在026的微指令执行后,下一步A=FFFF,说明取目的操作数是正确的。最后分析指令执行的结果:即FFFF-1结果,由072下一条指令可以看出其结果为FFFE,说明结果是正确的。3. 测试内容:CMP #0010, +0001H在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400B00F01600601B01F020021027025026007058000,参照取指令,取操作数和ADDC执行微流程分析,所执行的微指令顺序是正确的 其次分析执行的过程,在003的微指令执行后,下一步IR=0F4A,说明取指令是正确的;在016的微指令执行后,下一步TR=FFFC,说明取原操作数是正确的;在在026的微指令执行后,下一步A=0F4A,说明取目的操作数是正确的。最后分析指令执行的结果:CMP指令不保存结果,只有PSW记录,SZOC结果为1运行结果4.测试内容:.AND R1,0010H在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400800601B01F02402502600705C06F071072000,参照取指令,取操作数和AND执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,在003的微指令执行后,下一步IR=0F4A,说明取指令是正确的;在008的微指令执行后,下一步TR=0000,说明取原操作数是正确的;在在026的微指令执行后,下一步A=FFFC,说明取目的操作数是正确的。最后分析指令执行的结果:即0000 AND FFFC结果,由072下一条指令可以看出其结果为FFFB,说明结果是正确的。运行结果五、设计中遇到的问题及解决办法这是第二天做课设,感觉比第一天好多了,对这些软件熟悉之后也就上手了,所以这次做的比较快了点。预习时入口地址的形成根据指导书了解得到,这次也没什么不懂的地方。只是有恢复的时候有点小问题,找了老师谈了就好了。第三天 CPU硬件的初级设计与验证一、设计目标 在运算器实验3的基础上对硬件进行扩充,建立初级CPU的数据通路,构造一个只支持运算指令的初级CPU . 二、硬件设计1、PC模块设计always (posedge clk or negedge n_reset)beginif(!n_reset) / 当n_reset有效时,PC清0 data=0; else if(ce) /在时钟信号clk的上升沿如果数据装入使能ce有效则dq, data=d; else if(PCinc) /自加信号PCinc有效则q+1q data=data+1;2、DR模块设计always(posedge clk or negedge n_reset) begin if(!n_reset) /复位时DR清0 q=0; else if(DRce_IB) /当DRce_IB有效时则data_IBq q=data_IB; else if(DRce_DB) /当DRce_DB有效时则data_DBq q=data_DB; /* / * / 添加第三天代码 * / * /*endendmodule3、顶层模块设计(自己增加的设计部分)/TR寄存器的实例化R #(DATAWIDTH) TR(.q(TR_out),.d(IB),.clk(clock),.ce(TRce),.n_reset(n_reset);AR寄存器的实例化R#(ADDRWIDTH)AR(.q(AR_out),.d(IB),.clk(clock),.ce(ARce),.n_reset(n_reset);IR寄存器的实例化R #(DATAWIDTH) IR(.q(IR_out),.d(IB),.clk(clock),.ce(IRce),.n_reset(n_reset);三、验证做完实验后,按照课设书上所说的完成了第二天的课设内容,依次如下:1. 测试内容:ADD #0123 00112. 测试内容:DEC 00103测试内容:CMP #0010, +0001H4测试内容:.AND R1,0010H测得的所有图像和结果和第二天差不多。四、设计中遇到的问题及解决办法今天做课设有点小郁闷,做的课设开始之前已经完成了,感觉自己自己下载就好了,但是当我下载的时候居然出了问题,纠结了半天,还好最后快下课的时候终于让我给解决了,呵呵有点小成就,不过这和开始时的想法有点不同,本来想做完两天的内容的,不过就做了一个。哎等下次做吧。第四天 为CPU扩充转移指令一、设计要求 在初级CPU的基础上进行功能扩充,使其支持转移类型指令。二、硬件uAG模块设计(自己修改的设计部分,加上适当注释)条件转移类指令:2b00:Flag_MUX=SZOC0 /选00时表示满足条件CF=12b01:Flag_MUX=SZOC 1 /选01时表示满足条件OF=1 2b10:Flag_MUX=SZOC2 /选10时表示满足条件ZF=12b11:Flag_MUX=SZOC3 /选11时表示满足条件SF=1default:Flag_MUXF000运行数据:0B7A 1000 0010 011A 0014在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300400B00F01600601B01F02402502600704806F07107200000100200300601B01F024025026007075077000,参照取指令,取操作数和ADD执行微流程,及JC操作指令执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,ADD为双操作数指令,在003的微指令执行后,下一步IR=0B7A,说明取指令是正确的,执行取源操作数,在016的微指令执行后下一步TR=1000,说明取源操作数是正确的;执行取目的操作数,在026的微指令执行后,下一步A=F000,即取地址0010的内容,说明取目的操作数是正确的。由结果可知SZOC=5,满足有进位条件,由第二条指令执行003的微指令执行后,下一步IR=011A,说明取指令是正确的,即将PC转移到0014,由运行结果证明是正确的运行结果及分析:ADD #8010,0010H JO 0014H /0010H-8023运行数据:0B7A 8010 0010 015A 0014 2 AND #5555,0010H JZ (0014H ) /0010H-AAAA运行数据:1F7A 5555 0010 0199 0014 3运行数据:AND #5555,0010H JZ 0014H /0010H-AAAA运行数据:1F7A 5555 0010 0199 0014 五、设计中遇到的问题及解决办法今天做的还比较快,因为在之前的都很相似啦,顺着以前的做下来,就好快的,然后在进一步的验证有一定的基础,更好的是我觉得是我之前的预习起了很大的作用。然后我就自己做了第五天的内容。第五天 为CPU扩充移位指令一、设计目标 在前面CPU的基础上扩充硬件,使其支持转移指令二、硬件设计1、SHIFTER模块设计(加上适当注释)/实例化两个四选一多路选择器添加如下:mux lsb_mux(.q(data_lsb),.d1(1b0),.d2(1b0),.d3(d15),.d4(CF),.addr(IR76);/低位多路选择器的实例化mux hsb_mux(.q(data_hsb),.d1(d15),.d2(1b0),.d3(d0),.d4(CF),.addr(IR76); /高位多路选择器的实例化2、CF模块设计module CF_MUX(d15, d0, Cout, q, SL, SR);input d15, d0, Cout;input SL, SR;output q;reg q;always (*)begincase (SL, SR)3b01: q = d0;3b10: q = d15;default:q = Cout;endcaseendendmodule; 3、IR_DECODE模块设计(自己增加修改的设计部分) 2b00: BM4_uA0012-2513运行数据:00D8 0010运行结果及分析:在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601B01F02402502600709C06F071072000,参照取指令,取操作数和SHL执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,RCL为单操作数指令,在003的微指令执行后,下一步IR=00D8,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=2513,即以PC+0010即0012的内容,为2513,说明取目的操作数是正确的。循环右移后变为4A26,由运行结果证明是正确的2测试内容:RCR+0010H) /0010-0012-2513运行数据:00F8 0010运行结果及分析:在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601B01F02402502600709E06F071072000,参照取指令,取操作数和SHL执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,RCL为单操作数指令,在003的微指令执行后,下一步IR=00F8,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=2513,即以PC+0010即0012的内容,为2513,说明取目的操作数是正确的。循环右移后变为1289,由运行结果证明是正确的 3测试内容:SHL 0010 /0010-2513运行数据:005A0010运行结果及分析:在调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图,首先看微指令的执行次序:00100200300601B01F02402502600709406F071072000,参照取指令,取操作数和SHL执行微流程,所执行的微指令顺序是正确的其次分析执行的过程,SHL为单操作数指令,在003的微指令执行后,下一步IR=005A,说明取指令是正确的,执行取目的操作数,在026的微指令执行后,下一步A=2513,即0010的内容为2513,说明取目的操作数是正确的。逻辑左移后变为4A26,由运行结果证明是正确的4测试内容:ROL(0010H) /0010-0014-2513运行数据:0099 0010运行结果及分析:四、设计中遇到的问题及解决办法在昨天做的基础上做了进一步验证,但是我开始时程序有点小问题吗,请教了老师,但是还是没有解决的,后来我自己一点一点的验证下,原来变量还是不能同时即作为输入和输出,但是我也发现了另外一个小问题,就是怎么我自己定义的16位的数字可以给一位赋值,有点小纳闷,不解,看来还是和我们学的C+有点区别。第六天 为CPU扩充堆栈类指令一、设计目标 添加堆栈类指令二、硬件设计1、SP模块设计(加上适当注释)begin /* if (!n_reset)q =6b111111; /当复位信号有效时堆栈SP的输出为03Felse if (ce)q = d; /*end2、顶层模块设计(自己增加修改的设计部分)SP #(DATAWIDTH) SP(.q(SP_out),.d(IB),.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)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F90C0F400001SPoe,Ace0C102B000C200A3000000C2DEC,SV0C27C0800C33700200000C3Soe,SPce,ARce0C300052000000011000000ARoe,DRoe,WRPOP微地址(H)微指令(H)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F90C8B00000C95400000000C9ARoe,TRce0C9F40800CA75A0200000CASPoe,Ace,ARce0CA027610CB0090120100CBARoe,RD,DRce,INC,SV0CB800800CC4000200000CCTRoe,ARce0CC7C052000370011020000Soe,SPce,ARoeDRoe,WRCALL微地址(H)微指令(H)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F90D0F400001SPoe,Ace0D1B2B000D254A3000000D2DEC,SV,ARoe,TRce0D27C0800D33700200000D3Soe,ARce,SPce0D3200300D41000030000D4PCoe,DRce0D484052000410011020000ARoe,DRoe,WR,TRoe,PCceRET微地址(H)微指令(H)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F903CF408003D75002000003DSPoe,Ace,ARce03D0276103E00931201003EINC,SV,ARoe,RD,DRce03EC400003F61000000003FDRoe,PCce03F7C000000370000000000Soe,SPce四、测试程序、数据及运行结果1、测试内容:、测试内容:PUSH 0014H POP 0016 /0014-2513运行数据: 031A 0014 033A 00162运行数据:测试内容:CALL 0014H (add#1234,0010h) 035A0014 (0B7A 1234 0010) RET 0002四、设计中遇到的问题及解决办法在这次设计中,用的时间比较少,也没遇到什么大的问题,主要是微程序的出了点问题,结果不只是我一个人出了这个问题,好多人都出了这个问题,以至于大家都有点小遗憾,但幸好我做的程序保存了号几处,并没有损失太大。第七天 为CPU扩充中断系统一、设计目标 在CPU基础上增加中断系统,使其支持键盘中断,并不要求打印机。二、硬件设计1、根据键盘中断请求信号KR和打印机中断请求信号PR产生向CPU发出的中断请求信号INTR,并形成相应的中断向量,本模型机设定键盘和打印机的中断向量分别为0020H和0021H。并根据0020H查找地址。begin if(KR) VA_out=h0020;else if(PR)VA_out=h0021;2、If模块的添加代码beginif(!n_reset)IF=1; /机器复位信号n_reset和CLI都使IF清0,S/TI有效时IF置1。else if(cli)IF=0;else if (sti)IF=1; end3、顶层模块设计(自己增加修改的设计部分)已经给出了不需要再添加了。三、微程序设计1 中断响应隐指令的微程序设计微地址(H)微指令(H)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F9081F4005082750000050082CLI,SPoe,Ace08222B3008310A303000083DEC,SV,PCoe,DRce08374080084350020000084Soe,ARce,Ace08400052085000011020085ARoe,DRoe,WR08502B3308600A303030086DEC,SV,PSWoe,DRce0867C080087370020000087Soe,ARce,SPce08700052088000011020088ARoe,DRoe,WR08800026089000002010089INTA,DRce089C008008A60002000008ADRoe,ARce08A0006108B00001201008BARoe,RD,DRce08BC4000001610000000001DRoe,PCce2。中断返回指令RETI的微程序设计微地址(H)微指令(H)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F903EF4080028750020000028SPoe,Ace,ARce02802761029009312010029INC,ARoe.RD,DRce,SV029D000002A64000000002ADRoe,TRce02A7408002B35002000002BSoe,Ace,ARce02B0276102C00931201002CARoe,RD,DRce,INC,SV02CC400002D61000000002DDRoe,PCce02D7C004000370000040000Soe,SPce,STI四、测试程序、数据及运行结果1、(1)测试内容:ADD #0001 0010H /0010-25130B7A 00010010AND #0001 0014H /0014-0003 1F7A 0001 0014 MOV 8000H R1 /8000-5 0741 8000AND #000F R1 1F61 000F调试软件UniDebugger中,根据表将机器码输入RAM,输入后如下图。扩展单步执行的结果如图,分析过程如下:对照图参照取指令,取操作数和ADD,MOV ,AND,AND,及中断执行微流程分析,所执行的微指令顺序是正确的其次分析执行的过程,首先执行ADD指令,在003的微指令执行后,下一步IR=0B7A,说明取指令是正确的;在016的微指令执行后,下一步TR=0001,说明取原操作数是正确的;在在026的微指令执行后,下一步A=2512(此时0010单元的内容为2513),说明取目的操作数是正确的。执行ADD过程中发出中断请求,从键盘输入5,接受请求后,先执行完当前指令,接着执行中断隐指令,然后执行MOV,AND指令,执行完后通过执行RETI返回中断的之前将要执行的指令最后分析指令执行的结果,通过看SP,CTRL及PC的变化,说明结果是正确的第一步执行ADD指令,由004 IR=0B7A可知取指令是正确的,在执行ADD指令过程中,有中断请求,根据CTRL可知CPU接受了中断请求在接受了中断请求后,执行中断隐指令过程,即关中断保护PC保护PSW读中断向量地址VA 根据VA,找到中断服务程序的入口地址执行MOV指令,根据004 TR=0741说明取指令是正确的执行AND指令,用来保存键盘输入数的低四位。由004 TR=1F61说明取指令是正确的执行RETI指令,恢复PSW,恢复PC,开中断中断执行完后,返回中断之前,即PC值返回到03,开始执行AND指令,由004 TR=1FTA可知取指令是正确的如下图:五、设计中遇到的问题及解决办法今天的任务是和第六天一起完成的,由于自己的微程序出了点问题,所以自己的任务有点小乱,不过最后还是做好了,让老师检查了一下,并尽快完成课程设计报告。总结由于之前我们只是应用CPU,对它不是很理解,所以我自己很期待这次的的课程设计,而通过一个星期的课程设计,让我们更深的了解计算机从部件到整机的组织结构和工作原理,让我们了解了各个阶段指令的执行过程,进而更近一步的了解了CPU的工作机制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【课件】科学计数法课件2025-2026学年+人教版七年级数学上册
- DB32-T 4459-2023 文化产业园区运营管理和服务规范
- 药学专业试题及答案大全
- 考研日语专业试题及答案
- 通信专业课试题及答案
- 湖北省武汉市部分学校2026届高三上学期九月调研考试物理(含答案)
- 河北省衡水市桃城区2025-2026学年高二暑假开学考试试卷英语
- 福建省泉州市2026届高三上学期质量监测 (一)数学试题(含答案)
- 墙体混凝土垫层施工方案
- 平交口改道施工方案
- 香港《儿童发展范畴表现指标》
- 幼儿园大班数学课件《认识货币》
- 黑布林阅读初一10《霍莉的新朋友》英文版
- 中国华罗庚学校数学课本八年级
- 政治校本课程
- 特劳特《定位》PPT通用课件
- GB/T 1732-1993漆膜耐冲击测定法
- 二十四节气演讲稿
- GA/T 2000.7-2014公安信息代码第7部分:实有人口管理类别代码
- 2023年安徽国贸集团控股有限公司招聘笔试模拟试题及答案解析
- 初中作文指导-景物描写(课件)
评论
0/150
提交评论