实验报告课程名称:计算机系统结构实验学院:计算机科学与工程学院专业:计算机科学与技术指导教师:好老师学生姓名:爱学习的小学生6666666666666实验成绩:日期:2017年5月5日电子科技大学计算机学院实验中心1/7电子科技大学实验报告一、实验项目名称:流水线代码分析二、实验室名称:主楼A2-412实验时间:2017年5月5日三、实验目的1.熟悉代码中的模块名和接口信号,并理解其作用;2.通过补全流水线的模块图,进一步熟悉代码中各模块的连接细节,加强对流水线CPU工作原理的掌握。四、实验原理(一)VerilogHDL知识回顾(1)5种抽象的级别:系统级、算法级、RTL级、门级、开关级(2)功能:1.可描述顺序执行或并行执行的程序结构;2.用延迟表达式或事件表达式来明确地控制过程的启动时间;3.通过命名的事件来触发其他过程里的激活行为或停止行为。4.提供了条件(如if_else,case等)循环程序结构;5.提供了可带参数并且非零延续时间的任务(task)程序结构;6.提供了可定义新的操作符的函数(function)结构;7.提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。8.提供了一套完整的组合型原语(Primitive);(二)VerilogHDL的基本语法(三)流水线CPU原理图2/7(四)ISE的使用(五)流水线CPU工作原理五、实验内容1.列出代码中的模块名和接口信号,并写出他们的作用;2.补全流水线的模块图:a)在现有图的基础上,在对应模块的输入输出接口处补全端口的名字;b)在现有图的基础上,补全未画出的模块和信号连线。3.对补全的流水线模块图作必要的文字说明,解释其工作原理。六、实验器材(设备、元器件)ISEDesignSuite14.7集成开发环境,编程语言:VerilogHDL硬件描述语言七、实验步骤1.看懂老师给的CPU源代码;2.仔细对比各模块的形参,与最顶层模块中的实参,列出代码中的模块名和接口信号,并写出他们的作用;3.根据代码补充完善“流水线结构补充图”:a)在现有图的基础上,在对应模块的输入输出接口处补全端口的名字;b)在现有图的基础上,补全未画出的模块和信号连线。4.对补全的流水线模块图作必要的文字说明,解释其工作原理。八、实验数据及结果分析(一)列出代码中的模块名和接口信号,并写出他们的作用:3/71.modulepipelinedcpu(clock,resetn,pc,inst,ealu,malu,walu);模块名:pipelinedcpu接口信号:clock,resetn,pc,inst,ealu,malu,walu作用:规定统一的接口信号,连接各个模块,实现CPU总体结构2.modulepipepc(npc,clk,clrn,pc);模块名:pipepc接口信号:npc,clk,clrn,pc作用:prog_cnt,实现程序计数器PC3.modulepipeif(pcsource,pc,bpc,rpc,jpc,npc,pc4,ins);模块名:pipeif接口信号:pcsource,pc,bpc,rpc,jpc,npc,pc4,ins作用:if_stage,实现取指IF级4.modulepipeir(pc4,ins,clk,clrn,dpc4,inst);模块名:pipeir接口信号:pc4,ins,clk,clrn,dpc4,inst作用:inst_reg,实现IF级与ID级之间的寄存器,即指令寄存器IR5.modulepipeid(dpc4,inst,wrn,wdi,wwreg,clk,clrn,bpc,jpc,pcsource,wreg,m2reg,wmem,aluc,aluimm,a,b,imm,rn,shift,jal,rsrtequ);模块名:pipeid接口信号:dpc4,inst,wrn,wdi,wwreg,clk,clrn,bpc,jpc,pcsource,wreg,m2reg,wmem,aluc,aluimm,a,b,imm,rn,shift,jal,rsrtequ作用:id_stage,实现译码ID级6.modulepipedereg(dwreg,dm2reg,dwmem,daluc,daluimm,da,db,dimm,drn,dshift,djal,dpc4,clk,clrn,ewreg,em2reg,ewmem,ealuc,ealuimm,ea,eb,eimm,ern,eshift,ejal,epc4);模块名:pipedereg接口信号:4/7dwreg,dm2reg,dwmem,daluc,daluimm,da,db,dimm,drn,dshift,djal,dpc4,clk,clrn,ewreg,em2reg,ewmem,ealuc,ealuimm,ea,eb,eimm,ern,eshift,ejal,epc4作用:de_reg,实现ID级与EXE级之间的寄存器7.modulepipeexe(ealuc,ealuimm,ea,eb,eimm,eshift,ern0,epc4,ejal,ern,ealu,z);模块名:pipeexe接口信号:ealuc,ealuimm,ea,eb,eimm,eshift,ern0,epc4,ejal,ern,ealu,z作用:exe_stage,实现指令执行EXE级8.modulepipeemreg(ewreg,em2reg,ewmem,ealu,eb,ern,clk,clrn,mwreg,mm2reg,mwmem,malu,mb,mrn);模块名:pipeemreg接口信号:ewreg,em2reg,ewmem,ealu,eb,ern,clk,clrn,mwreg,mm2reg,mwmem,malu,mb,mrn作用:em_reg,实现EXE级与MEM级之间的寄存器9.moduleIP_RAM(we,addr,datain,clk,dataout);模块名:IP_RAM接口信号:we,addr,datain,clk,dataout作用:mem_stage,实现存储器访问MEM级10.modulepipemwreg(mwreg,mm2reg,mmo,malu,mrn,clk,clrn,wwreg,wm2reg,wmo,walu,wrn);模块名:pipemwreg接口信号:mwreg,mm2reg,mmo,malu,mrn,clk,clrn,wwreg,wm2reg,wmo,walu,wrn作用:mw_reg,实现MEM级与WB级之间的寄存器11.modulemux2x32(a0,a1,s,y);模块名:mux2x32接口信号:a0,a1,s,y作用:wb_stage,实现结果写回WB级,选择结果写回的来源是ALU还是数据存储器5/7(二)补全流水线的模块图:a)在现有图的基础上,在对应模块的输入输出接口处补全端口的名字;b)在现有图的基础上,补全未画出的模块和信号连线。具体见下图:(三)对补全的流水线模块图作必要的文字说明,解释其工作原理:流水线处理机组成结构如后上图,把执行指令的过程分为5部分,使其能够按流水线方式执行指令:(1)IF(instructionfetch)取指令;(2)ID(instructiondecode)指令译码并读寄存器操作数;(3)EXE(execution)执行;(4)MEM(memoryaccess)存储器访问;(5)WB(writeback)写回。指令执行从左移向右通过电路,但有两处从右向左的例外:(1)WB级:把运算结果写回寄存器堆中;(2)IF级:把经过计算的下一条指令的地址写入程序计数器PC中。流水线处理机的最大特点:每一个时钟周期取出一条指令来执行。所有的指令按取出的先后次序通过数据路径。依照指令类型的不同,每种指令在执行过程中可能会用到数据路径的不同的部分。九、总结、改进建议及心得体会6/7(一)总结:经过努力,完成了对源代码各个模块和接口信号的分析,补全了流水线CPU的结构图,较好的完成了本次实验。(二)改进建议:根据代码画流水线结构图难度不大,但是操作费时较久,可以考虑改为根据完整的流水线结构示意图补全代码,难度会更大。(三)心得体会:1、通过列出代码中的模块名和接口信号、并分析他们的作用,我对流水线CPU的工作原理有了更好的理解,也进一步熟悉了使用VerilogHDL模拟流水线CPU的方法。2、通过补全流水线模块图,对Visio的操作水平有一定的提升。