电子科技大学计算机学院实验中心计算机专业类课程实验报告课程名称:计算机系统结构学院:计算机科学与工程专业:计算机科学与技术学生姓名:ZYZ(二木头)学号:2014060103026实验实在太烦了,发上来供学弟学妹们使用了日期:2017年06月04日电子科技大学实验报告实验一一、实验名称:流水线代码分析二、实验地点:主楼A2-412三、实验学时:4四、实验内容和目的:1.列出代码中的模块名和接口信号,并写出他们的作用;2.补全流水线的模块图:a)在现有图的基础上,在对应模块的输入输出接口处补全端口的名字;b)在现有图的基础上,补全未画出的模块和信号连线。3.对补全的流水线模块图作必要的文字说明,解释其工作原理。五、实验原理:代码中的模块名和接口信号如下表所示:模块和接口信号表moduleinput(description)output(description)prog_cnt-pipepcnpcpcclk(时钟信号)clrn(清零信号)if_stage-pipeifpcsource(选择下条指令)npcpcpc4bpc(转移指令)ins电子科技大学计算机学院实验中心rpcjpcinst_reg-pipeirpc4dpc4insinstclkclrnid_stage-pipeiddpc4bpcinst(二进制的指令序列)jpcwdiawrnbwwregimmclkrnclrnalucrsrtequpcsourcewregm2regwemealuimmshiftjalde_reg-pipederegdaeadbebdimmeimmdpc4epc4drnerndalucealucdwregewregdm2regem2regdwmemewmemdaluimmealuimmdshifteshiftdjalejalclkclrnexe_stage-pipeexeeaealueberneimmzepc4ern0ealucealuimmeshiftejalem_reg-pipeemregealumalu(malu=ealu)ebmb(mb=eb)ernmrn(mrn=ern)ewregmwreg(mwreg=ewreg)em2regmm2reg(mm2reg=em2reg)ewmemmwmen(mwmem=ewmem)clkclrnmem_stage–IP_RAMdataindataoutaddrclkwemw_reg-pipemwregmaluwalu(walu=malu)mmowmo(wmo=mmo)mrnwrn(wrn=mrn)电子科技大学计算机学院实验中心mwregwwreg(wwreg=mwreg)mm2regwm2reg(wm2reg=mm2reg)clkclrnwb_stage–mux2x32a0y(y=s?a1:a0)a1s流水线模块图六、实验器材(设备、元器件)ISEProjectNavigator七、实验步骤:1)根据课堂所学的五级流水线的结构,分析并理解代码含义;2)根据代码中定义的各个模块的接口,补全流水线模块图相应接口的名称;3)根据各个信号的输入输出,补全流水线模块图的连线。八、实验数据及结果分析:模块和接口信号表指令依次执行。九、实验结论、心得体会和改进建议:今日之日多烦忧实验二一、实验名称:汇编器的实现二、实验地点:主楼A2-412三、实验学时:4四、实验内容和目的:用Java,C或C++任一编程语言实现汇编器,输入流水线的指令序列,输出2进制编码。该指令编码可复制到指令存储器中执行。1.写出主要函数模块;2.提供源代码和可执行文件;电子科技大学计算机学院实验中心五、实验原理:(按实验内容分析实验原理并填写)六、实验器材(设备、元器件)DEVCPP七、实验步骤:欲穷千里目八、实验数据及结果分析:(按实验步骤顺序填写代码、数据或截图)九、实验结论、心得体会和改进建议:今日之日多烦忧实验三一、实验名称:解决数据冒险二、实验地点:主楼A2-412三、实验学时:4四、实验内容和目的:在给出的流水线代码基础上,增加内部前推数据通路、暂停流水线数据通路和关闭写使能信号的数据通路以解决普通的数据冒险和load数据冒险。1.画出修改后的流水线图;2.写出增加的多路选择器的选择信号逻辑函数;3.流水线仿真结果,对仿真结果作必要说明;五、实验原理:可以在ID级完成检测数据相关并把检测结果(多路器的选择信号ADEPEN两位和BDEPEN两位)作为控制信号打入流水线寄存器,在进入EXE级后立即开始ALU的操作。六、实验器材(设备、元器件)ISEProjectNavigator七、实验步骤:1)检测数据相关在流水线ID级观察指令的寄存器字段,检测是否有“先读后写”冲突。可以写出一条指令进入流水线ID级,检测与前面指令很可能有数据相关的基本条件。由于指令格式中源寄存器号rd与立即数部分重叠,而立即数不会出现相关的,因此,指令操作电子科技大学计算机学院实验中心码需要参与检测以区分是寄存器操作数还是立即数。WREG信号也应参与检测以区分是写寄存器rd还是store指令中的rd,如果是store指令,也不会产生相关。DEPEN=A_DEPEN+B_DEPENA_DEPEN=EXE_A_DEPEN+MEM_A_DEPENB_DEPEN=EXE_B_DEPEN+MEM_B_DEPENEXE_A_DEPEN=(ID_rs==EXE_rd)(EWREG==1)(ID_rsIsReg)MEM_A_DEPEN=(ID_rs==MEM_rd)(MWREG==1)(ID_rsIsReg)EXE_B_DEPEN=(ID_rt==EXE_rd)(EWREG==1)(ID_rtIsReg)+(ID_rd==EXE_rd)(EWREG==1)MEM_B_DEPEN=(ID_rt==MEM_rd)(MWREG==1)(ID_rtIsReg)+(1D_rd==MEM_rd)(MWREG==1)ID_rsIsReg=and+andi+or+ori+add+addi+sub+subi+load+storeID_rtIsReg=and+or+add+sub2)数据前推在EXE级中,利用在ID级产生的信号A_DEPEN和B_DEPEN选择ALU输入端的操作数。将流水线寄存器中计算完成的数据送到ALU输入端。多路选择器0123操作数来源指令(无相关)立即数de_regem_reg3)load相关的暂停实现load流水线暂停的控制信号LOADDEPEN,这个信号是在ID级产生。本实验指令集中,store取的是rs中的数据,不会与load相关。LOADDEPEN=(ID_rs==EXE_rd)(em2reg==1)(ID_rsIsReg)+(ID_rt==EXE_rd)(em2reg==1)(ID_rtIsReg)增加了检测数据相关和load相关的流水线八、实验数据及结果分析:在EXE级,根据ADEPEND和BDEPEND的信号,选择相应操作数:modulepipeexe(ealuc,ADEPEND,BDEPEND,ea,eb,eimm,walu,malu,ern0,epc4,ejal,ern,ealu,z);input[31:0]ea,eb,epc4,eimm,malu,walu;input[1:0]BDEPEND,ADEPEND;input[4:0]ern0;input[4:0]ealuc;inputejal;output[31:0]ealu;output[4:0]ern;wire[31:0]alua,alub,ealu0,epc8,sa;outputz;assignsa={eimm[4:0],eimm[31:5]};//移位位数的生成cla32ret_addr(epc4,32'h4,1'b0,epc8);//将PC+4再加4变成PC+8,供jal用mux4x32alu_ina(ea,sa,malu,walu,ADEPEND,alua);//选择ALUa端的数据来源mux4x32alu_inb(eb,eimm,malu,walu,BDEPEND,alub);//选择ALUa端的数据来源mux2x32save_pc8(ealu0,epc8,ejal,ealu);//选择最后ALU结果的来源,ejal为0时是ALU内部算出的结果,为1时是PC+8assignern=ern0|{5{ejal}};//当jal指令执行时,把返回地址写入31号寄存器alual_unit(alua,alub,ealuc,ealu0,z);//ALU电子科技大学计算机学院实验中心endmoduleLOADDEPEN有效时,封锁相关信号:modulepipepc(npc,LOADDEPEN,clk,clrn,pc);input[31:0]npc;inputclk,clrn,LOADDEPEN;output[31:0]pc;dff32program_counter(npc,LOADDEPEN,clk,clrn,pc);//利用32位的D触发器实现PCendmodulemodulepipeir(pc4,ins,LOADDEPEN,clk,clrn,dpc4,inst);input[31:0]pc4,ins;inputclk,clrn,LOADDEPEN;output[31:0]dpc4,inst;dff32pc_plus4(pc4,LOADDEPEN,clk,clrn,dpc4);dff32instruction(ins,LOADDEPEN,clk,clrn,inst);endmodulemodulecla32(a,b,ci,s,co);input[31:0]a,b;inputci;output[31:0]s;outputco;wireg_out,p_out;cla_32cla(a,b,ci,g_out,p_out,s);assignco=g_out|p_out&ci;endmodule九、实验结论、心得体会和改进建议:今日之日多烦忧实验四一、实验名称:解决控制冒险二、实验地点:主楼A2-412三、实验学时:4四、实验内容和目的:在给出的流水线代码基础上,增加ID级关闭写使能信号,以解决不正确分支指令的影响。1.画出修改后的流水线图;2.写出增加的多路选择器的选择信号逻辑函数;3.流水线仿真结果,对仿真结果作必要说明;五、实验原理:只要将branch的译码信号保留在流水线寄存器中,当紧接branch后的指令进入ID时,用这个译码信号封锁当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,这样这条指令的执行就对程序的逻辑没有影响。电子科技大学计算机学院实验中心六、实验器材(设备、元器件)ISEProjectNavigator七、实验步骤:将branch的译码信号保留在流水线寄存器中,当紧接branch后的指令进入ID时,用这个译码信号封锁当前在ID阶段的那条指令的WZ、WMEM和WREG的信号,这样这条指令的执行就对程序的逻辑没有影响。八、实验数据及结果分析:不改变处理器指令执行的效果,即不改变处理机的状态、寄存器堆和存储器的内容。modulepipeemreg(ewreg,em2reg,ewmem,ealu,eb,ern,ez,B_WZ,clk,clrn,mwreg,mm2reg,mwmem,malu,mb,mrn,mz);input[31:0]ealu,eb;input[4:0]ern;inputewreg,em2reg,ewmem,B_WZ,ez;inputclk,clrn;output[31:0]malu,mb;output[4:0]mrn;outputmwreg,mm2reg,mwmem,mz;reg[31:0]malu,mb;reg[4:0]mrn;regmwreg,mm2reg,mwmem,mz;always@(negedgeclrnorposedgeclk)if(clrn==0)beginmwreg=0;mm2reg=0;mwmem=0;malu=0;