您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 77计算机系统结构实验报告
电子科技大学实验报告学生姓名:学号:一、实验室名称:计算机学院实验中心二、实验项目名称:计算机系统结构课程实验三、实验原理:1.由教师给出一个具有基本功能的VerilogHDL流水线源代码;2.学生完成下面3个方面的内容:(1)自行设计汇编伪指令格式,完成一个能把自己的汇编指令转换成流水线CPU能够识别的二进制指令的汇编器,实现语言不限;(2)自行设计能够解决数据相关的机制并基于源代码进行扩展;(3)自行设计能够解决控制相关的机制并基于源代码进行扩展。四、实验目的:帮助学生理解流水线的运行机制和基于VerilogHDL硬件描述语言的实现技术。五、实验内容:(一)基本流水线分析1.1认真阅读和理解源代码,请详细按要求回答每个问题。1.源代码中文件是按什么样的规律来组织的?答:按照子模块组织源代码文件。模块pipelinedcpu_tb用来控制CPU的时钟等信号,调用pipelinedcpu模块(假定为1级模块,最高级),1级模块中按顺序调用各个周期以及周期与周期之间的中间寄存器模块(假定为2级模块),2级模块中调用各自部件模块(假定为3级模块)。模块pipelinedcpu用来控制每级流水线及流水线级之间的控制信号,寄存器信息,其余子模块用来具体实现每一级流水线的功能。2.存储器的实现方式?答:用一个二维数组reg[31:0]ram[0:31]实现,其中第一维代表32位地址,第二维代表32位数据接口有:32位输入数据和输出,32位地址,一个同步时钟脉冲clk,一个控制写入的信号we先对二维数组进行初始化读数据时不需要时钟脉冲的激励,写数据时需要时钟脉冲的上升沿激励信号并且we信号为13.源代码文件中的流水线与我们课堂上讲的原理电路图有何相同之处,有何不同之处答:相同:WB级,写回级使用2路32位的多路选择器来选择是获取ALU的计算结果还是LOAD指令从数据存储器中读取出来的数据。这里与课堂上所讲的内容基本相同。流水线都分为五个执行级,都是在译码级产生各种控制信号,一级一级往后传,分离的指令存储器和数据存储器。各个部件以及逻辑都没有太大差异不同:源代码文件中的流水线中的ALU部件的输出接在一个两路选择器上,并且没有zero输出端,而课堂上的直接输出到中间寄存器源代码文件中没有关于消除数据相关的代码,而课堂上讲的原理电路图有消除数据相关的线路没有数据前推和load前推的相关实现,指令格式的区别,流水线alu运算部件两个端口都可以接受立即数。4.通过分析,写出本流水线的控制信号有哪些?对比我们课堂上讲的控制信号的差别有哪些?答:本实验的控制信号主要有:wreg、m2reg、wmem、jal、aluc、aluimm分别表示指令是否要写寄存器、信号是否有数据存储器中的数据需要写回寄存器、是否有指令需要往数据存储器中写数据、流水线寄存器R是要写入ALU的运算结果还是EPC的内容、指令的操作类型,例如加、减、与、或。、ALU的B输入端是否要选择立即数输入差别主要有:regrt信号控制目的寄存器是rd或rt,sext信号控制是否需要传递立即数,wmem信号控制是否需要访存,jal信号控制exe级和mem级之间是传递运算结果还是立即数,这些信号是课堂上的流水线没有的。1.2针对流水线的指令集,编写必要的测试指令,分析运算结果,回答哪些指令的组合能由此流水线源代码正确实现,哪些指令的组合不能由此流水线源代码正确实现。(要求在实验报告中写出所完成的测试指令的组合、每个组合的仿真过程及结果、每个过程和结果的必要分析。)(1)第一组指令序列指令序列:addr2r11addr2r110addr1r31addr1r210addr2r21addr2r310subr2r1r3截图:结果分析:观察三到九周期的ealu信号分别为(10,1,1,10,1,10,10),第九个周期的ealu为10,该周期执行的指令是subr2r1r3;可见第一条指令赋值r1=10;第二条指令赋值r2=1;所以最后一条指令subr1r1r2执行后结果为9,符合条件。当有数据相关时,就会出问题,再观察第五、六、七两个周期,指令的执行结果均为1。故该程序不能解决数据相关问题。(二)汇编器实现2.1自行设计与所给出的流水线指令的汇编格式,在下表中写出。指令指令意义Op[31:26]Op2[25:20][19:15][14:10][9:5][4:0]add寄存器加法00000000000100000rdrsrtaddrdrsrtsub寄存器减法00000000001000000rdrsrtsubrdrsrtmul寄存器乘法00000000001100000rdrsrtmulrdrsrtand寄存器与00000100000100000rdrsrtandrdrsrtor寄存器或00000100001000000rdrsrtorrdrsrtxor寄存器异或00000100010000000rdrsrtxorrdrsrtsra算术右移000010000001shiftrd00000rtsrardrtshiftsrl逻辑右移000010000010shiftrd00000rtsrlrdrtshiftsll逻辑左移000010000011shiftrd00000rtsllrdrtshiftjreg寄存器跳转0000100001000000000000rs00000jregrsaddi立即数加法00010116位immediatersrtaddirtrsimmemuli立即数乘法00011116位immediatersrtmulirttsimmeandi立即数与00100116位immediatersrtaddirtrsimmeori立即数或00101016位immediatersrtorirtrsimmexori立即数异或00110016位immediatersrtxorirtrsimmeload取整数数据字00110116位offsetrsrtloadrtrsoffsetstore存整数数据字00111016位offsetrsrtstorertrsoffsetbeq相等则跳转00111116位offsetrsrtbeqrtrsoffsetbne不相等则跳转01000016位offsetrsrtbnertrsoffsetlui设置高位01000116位immediate00000rtluirtimmejump无条件跳转01001026位addressjumpaddressjal子程序调用01001126位addressjaladdress2.2写出实现语言、主要数据结构、主要功能模块名字和功能、以必要的流程图。代码截图:2.3给出汇编器的运行界面(若有),写出所实现的汇编器的操作步骤及使用说明,并自己设计并给出测试用例及运行结果,使得所有指令均能自动生成二进制格式的指令。汇编器的使用步骤:(1)在程序目录下的instruction.txt中输入指令(2)运行程序。(3)打开instruction.txt,发现在指令的下方依次出现了各条指令对应的二进制码。测试截图:(三)数据相关分析及解决数据相关的分析(1)一般指令的数据相关分析rs2即第二源操作数可以是寄存器或者立即数,但根据字符串解析可以区分出来,因此这些指令都归为一类解决数据相关问题。产生相关的条件:如上图所示,相邻的两条指令中,如果第二条指令的两个源操作数寄存器与上一条指令的目的操作数寄存器相同,那么第二条指令在译码周期从寄存器堆中取源操作数值的时候,上一条指令还只在执行周期,还没有将最后结果写回到相应的寄存器中,因此第二条指令取到的源操作数的值并不是最新的值,因此而产生了数据相关。解决方案:如上图所示,在直接相邻的两条产生数据相关的指令之间插入三条空指令,这样在第二条指令译码之前,第一条指令已经将结果写回,第二条指令取到的源操作数的值是最新的值,数据相关就消除了。以上情况针对相邻的两条产生数据相关指令的分析,而对于中间隔了一条或两条无数据相关指令的两条指令产生了数据相关,解决方案是分别插入两条、一条空指令。(2)store和条件跳转指令的数据相关分析及解决store和条件跳转指令设计的格式:op+rs+rt+offset对于这两条指令来说,rs和rs相当于源操作数,而它们没有目的操作数,因此在判断一般指令的数据相关需要作另外特殊判断。(3)jreg指令指令格式:op+rs没有目的寄存器,且只有一个源操作数,可以与条件跳转指令归为一类判断。2.数据相关的解决(1)程序流程图上图左边部分就是汇编器实现部分的流程图,在此基础上进行扩展,即如箭头所指方向,中间两步替代为右边部分。(2)测试程序指令:xorr2,r2,r2addr3,r2,r1xorr2,r2,r2addir1,r1,20addir2,r2,10luir1,1翻译结果:如上图所示,在产生数据相关的指令前插入了空指令“addir0r00”。在xilinx中的仿真结果:结果是正确的。(四)控制相关分析及解决1.控制相关分析在有跳转指令时,倘若跳转指令的操作数有寄存器,因此而产生的相关为数据相关,在(三)中已经解决,而控制相关指:跳转指令只能在译码级被检测出来并形成跳转地址,而此时PC值已经更新为跳转指令的下一条指令的PC值,所以无论跳转是否成功,该指令都会被执行,跳转不成功是没问题的,但是跳转成功就产生了控制相关。所以在跳转指令后加一条空指令就可以解决所有问题。2.控制相关解决程序中,只要在判断完数据相关的时候,再判断当前指令是否是跳转指令,如果是,则再翻译一条空指令到文件,如果不是,则取下一条指令进行同样的数据相关及控制相关的操作。(1)在功能模块clear_relation_and_translate的最后加一下代码段:(2)测试程序:(3)结果分析:六、实验器材(设备、元器件):PCWindows8XilinxISEEclipseIDE十、总结及心得体会:实验我学习流水线的相关的知识,包括:数据、控制、结构相关,汇编器指令的调整,功能部件数对流水线的影响,分支指令预测技术。使我对计算机系统结构有了更深层次的认识,对基本流水线分析,汇编器,数据相关分析及解决和控制有了进一步的认识与理解,强化了我的实践能力十一、对本实验过程及方法、手段的改进建议:开始的时候思路不是很多,老师可以提供适当的帮助,点到为止即可。报告评分:指导教师签字:
本文标题:77计算机系统结构实验报告
链接地址:https://www.777doc.com/doc-4855662 .html