1 / 33
文档名称:

32位MIPS CPU 设计 实验报告详解.pdf

格式:pdf   大小:2,769KB   页数:33页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

32位MIPS CPU 设计 实验报告详解.pdf

上传人:1781111**** 2024/5/11 文件大小:2.70 MB

下载得到文件列表

32位MIPS CPU 设计 实验报告详解.pdf

相关文档

文档介绍

文档介绍:该【32位MIPS CPU 设计 实验报告详解 】是由【1781111****】上传分享,文档一共【33】页,该文档可以免费在线阅读,需要了解更多关于【32位MIPS CPU 设计 实验报告详解 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..数字逻辑与处理器基础实验32位MIPSCPU设计:..综述:。本实验报告主要分为实验设计说明与实验收获总结两个部分。附件中有CPU工程文档与模块代码。第一部分实验设计一、ALU设计1、设计思路实现基本的算术、逻辑、关系、位与移位运算,尽量优化以达到最小的面积延时积。结构图如下:主要设计思想:、超前进位等结构,减法可以通过加法实现(参见见面理论课讲义或者前面实验);同时输出Z(结果为零)、V(结果溢出)、N(结果为:..负)等标志位,注意有符号数和无符号数标志产生的不同。(Z/V/N)产生,自行分析比较操作与算术运算之间的关系。、8位移位、4位移位、2位移位、1位移位等几个子运算的组合,然后级联形成最后的运算结果。。功能表接口说明名称类型描述:..A[31:0]输入操作数1B[31:0]输入操作数2ALUFun[5:0]输入功能码Sign输入符号:有符号1,无符号0S[31:0]输出结果输出2、主要模块a)32bit加法器采用8个4bit超前进位加法器极连的方式,构成32bit加法器。对于逸出位v的处理如下:由有符号数的性质可知,对最高位32和次高位31位取抑或,输出信号则为是否逸出。对32位运算结果取反后,再对相邻两位反复取与,,则符号位=n。由于这一方法部分程度上减弱了高位计算对低位计算的依赖程度,因此可以实现延时的降低。同时,由于其超前进位网络的大量逻辑运算,较大程度上提升了电路的面积,造成最终的面积延时积特性恶化。关键代码见附录1b)32bit减法器对加法器按位取反,再加一。关键代码见附录1c)32bit右移32bit左移32bit算术右移将移位操作拆分为16位移位、8位移位、4位移位、2位移位、1位移位等几个子运算的组合,然后级联得到最后的运算结果。关键代码见附录1:..d)32bit逻辑比较单元采用行为级语句直实现逻辑比较功能。关键代码见附录1e)ALU顶层控制模块用多路选择器实现对输出结果的控制,采用行为级语句实现设计。附加说明:对于无符号运算的结果,由于z,v,n已经将符号的作用考虑进去,因此,对于需要实现的六个指令,仅有A<B需要特殊处理,而其他指令对于无符号数和有符号数的结果一致。因此,针对A<B指令,添加针对无符号数的专用比较电路,并使用与超前进位加法器类似的方式进行并行加速操作。关键代码见附录1二、单周期MIPS处理器设计流程框图::..1、中间参数说明1)ILLOP=0x80000004,为发生中断时,中断处理程序的PC地址,处于内核态。2)XADR=0x80000008,为发生异常时,异常处理程序的PC地址,处于内核态。3)Xp=26,为ILLOP与XADR中中断/异常处理程序调用,用来存储返回地址,即发生异常/中断的PC值。4)Ra=31,为返回值存储器,应用于jr,jalr指令,跳转到寄存器中所存的PC地址。5)Instruction截取部分:a)寄存器:Rs=Ins[25:21];Rt=Ins[20:16];Rd=Ins[15:11];b)Shamt=Ins[10:6]应用于sll,srl,sra三条指令c)Imm/Offset=Ins[15:0]应用于lw,sw,lui,addi,addiu,andi,slti,sltiu,:..beq,bne,blez,bgtz,bgez这些I型指令d)JT,应用于j型指令j与jal,JT=Ins[25:0]<<2(框图中未左移有误),保存跳转地址,由于地址为32位,JT仅28位,由本题地址特殊性高位接4’b0000,表示在外部。6)ConBA为条件分支跳转地址,ConBA=PC+4+Offset<<2。2、控制信号说明1)PCSrc,3位,6种有效取值。PCSrc000(缺省)0010**********PC更新值PC+4分支见2JTDatabusAILLOPXADR详细说明:000时为默认PC更新为PC+4,应用于不需要跳转的各条指令。001时进入条件分支,满足条件PC=ConBA,不满足时PC=PC+4,应用于各种branch指令。010时PC更新为无条件跳转地址,PC=JT,应用于j,jal指令。011时PC更新为寄存器跳转,PC=$Ra,应用于jr,jalr指令。100,101分别为中断与异常时的跳转地址。2)ALUout[0],1位信号(是否跳转判断)Zero0(缺省)1条件分支PC更新PC+4ConBA0时不满足分支条件(branch下ALU输出为0),1时满足分支条件。3)RegDst信号,控制寄存器堆写入地址RegDst00011011AddrCRdRtRaXp详细说明:00时写入Rd,应用于所有R型指令,唯一例外jr指令,R型指令不需要写入,令:..写入$0即可。其中jalr与10中一种情况冲突,处理见10中说明。01时写入Rt,应用于部分需要写入的I型指令(配合RegWr=1)有lw,lui,addi,addiu,andi,slti,sltiu,以及部分不需要写入的I型指令(配合RegWr=0)有sw,beq,bne,blez,bgtz,bgez。10时写入ra,应用于跳转链接指令jal11时写入Xp,应用于异常/中断时,写入异常/中断处的最终执行完的下条指令4)RegWr,1位信号,寄存器堆写入使能信号,1时可写,缺省0不写入R型指令(jr时配合rd写入到$0不影响),需写入的I型指令lw,lui,addi,addiu,andi,slti,sltiu,需写入的j型指令jal(jalr使用R型指令方法写入)。5)ALUSrc1,1位信号,ALU第一操作数选择控制信号。ALUSrc101ALU第一操作数DataBusAshamt详细说明:0时第一操作数来自寄存器应用于所有非偏移操作1时第一操作数来自R型中shamt部分,应用于偏移操作sll,srl,sra6)ALUSrc2,1位信号,ALU第二操作数选择控制信号。ALUSrc201ALU第二操作数DataBusBImm/Offset操作结果详细说明:0时第二操作数来自寄存器,应用于所有R型指令与J型指令(无效操作)1时第一操作数来自I型中Imm部分的某种计算结果,应用于I型指令,另有EXTop与LUop两个某种计算的控制信号配合操作。7)EXTop,扩展方式选择信号EXTop0(缺省)1扩展方式无符号扩展有符号扩展:..详细说明:0时对Imm/Offset无符号扩展,应用于unsigned的I型指令,addiu,sltiu1时对Imm/Offset有符号扩展,应用于非unsigned的I型指令8)LUop,Imm计算方式选择控制信号EXTop0(缺省)1输出结果用之前扩展结果取立即数高位详细说明:0时将Imm扩展结果作为ALUSrc2选择输入中的一路。1时取立即数高16位与16位0拼接作为ALUSrc2选择输入中的一路,应用于lui指令。9)ALUFun,6位控制信号,控制ALU计算功能类型功能ALUFun描述算式ADD000000S=A+BSUB000001S=A-B位运算AND011000S=A&BOR011110S=A|BXOR010110S=A^BNOR010001S=~(A^B)“A”011010S=A移位运算SLL100000S=B<<A[4:0]SRL100001S=B>>A[4:0]SRA100011S=B<<a[4:0]算术移关系运算EQ110011If(A==B)S=1elseS=0NEQ110001If(A!=B)S=1elseS=0LT1101101If(A<B)S=1elseS=0LEZ111101If(A<=0)S=1elseS=0GEZ111001If(A>=0)S=1elseS=0GTZ111111If(A>0)S=1elseS=010)Sign,ALU运算是否有符号运算控制说明Sign0(缺省)1计算方式无符号计算有符号计算详细说明::..时ALU进行无符号计算,应用于unsigned计算addu,subu,addiu,sltiu1时ALU进行有符号计算,应用于正常有符号运算除了上述4种指令之外的计算指令。11)MemRd,读取内存控制信号MemRd0(缺省)1结果不读取,ReadData输出全0读取内存,ReadData输出为该地址内容1时应用于需要读取内存的指令lw12)MemWr,写入内存控制信号MemWr0(缺省)1结果不写入,ReadData输出全0写入内存,将输入内容写入输入地址1时应用于需要写入内存的指令sw13)MemToReg,2位控制信号,3个有效输入MemToReg000110输出ALUOutReadDataPC+4详细说明:00时为应用于R型指令以及不需要读取内存且需要写入内存的I型指令01时应用于将内存中读取内容写入寄存器的指令lw10时应用于需要将PC值写入到寄存器的指令jal,jalr,以及中断或异常时将PC写入Xp的操作。、编译程序的设计为了方便地将汇编语言转换成机器语言,进而写入rom模块中变成一条条指令,送至处理器处理,我们利用C++语言编写了一个小程序,用于实现上述的功能。程序设计的思路就是实现一种解释的功能,能够逐句地按照MIPS指令的格式规则将汇编语言解释成机器语言。所以,读入指令后,提取出指令里的关键字,按照(见附件,)指令集中的规则,对应翻译即可。:..translation函数,输入是指令字符串,输出是机器码结构体(结构体中是指令的op,rs,rt,rd,shamt,funct,imm,target值)。该函数首先逐字符地检测指令,将指令名称读出,进而以$为标志,读出对应寄存器名称,对数字进行拼数处理,也存储下来。接下来根据读出的指令,确定对应的机器码值,分别赋给上述结构体中即可。另外,程序利用文件处理的方法,,,方便存储和之后的利用。为了将转换好的机器语言复制到rom模块中,需要对每一串二进制数进行格式处理,这里有一个小程序用于格式处理。处理成如下的格式0:data<=32'b00111100000000011000000000000000;//lui$at,0x8000程序代码见附件(,)。、计算最大公约数汇编程序的设计计算最大公约数,这里采用辗转相减法。即给定两个数s1和s2,用较大的数减去较小的数得到的结果赋值给之前较大的那个数,重复做这件事,直到s1和s2中至少出现了一个0为止,这样,此时s1和s2的和就是要求的最大公约数。例如,s1=8,s2=12,第一次相减得到s2=4,s1=8,第二次相减得到s1=4,s2=4,第三次相减得到s1=0,s2=4,发现s1=0,停止做,最大公约数就是s1+s2=4。利用这种方法也可以计算两个数中有一个数为0的情况。这里不举例,经过验证是正确的。为了使处理器工作正常,在执行计算最大公约数程序之前,应该完成必要的前期处理。具体包括,设置定时器的初始值和相关参数(TH,TL,TCON),设置中断程序的入口和计算最大公约数的入口等。这样,完成了前期准备就可以计算最大公约数,并且在计算完最大公约数之后继续跳转会计算最大公约数的第一条语句,重复执行,而前期准备的:..中断程序里完成对最大公约数的数码管显示。这里,显示用软件实现,即将显示的代码提前设计好,写入rom模块中。将计算的结果和0~15之间的数字依次对比,如果相等,则给数码管赋予相应的值,使其显示。对于两位数,依次显示数码管的十位和个位,并利用系统时钟的高频性实现数码管的显示。执行完中断程序之后,继续跳转到之前进入中断时语句的下一条语句,继续计算最大公约数,等待下一次中断的来临。这样,只要reset信号一直是高电平,就可以根据switch的变化实时地显示出对应的结果,实现自刷新的功能。具体代码见附件()MIPS处理器设计IFPCtemp_IFIn_ID[25:0]JT_IFJT_IDPCtemp_IF[15:0]Imm16_IFImm16_ID+[10:6]Shamt_IFShamt_ID[15:11]Rd_IFRd_IDPCWrite[20:16]Rt_IFRt_IDALUOut_EX[0][25:21]Rs_IFRs_ID4PCSrc_IFIF/PCSrc_IDRegDst_IFIDRegDst_ID0BranchRegWr_IFRegWr_ID1ConBA_EX1ALUSrc1_IFALUSrc1_ID2ALUSrc2_IFALUSrc2_ID{PC[31:28,JT_EX,00]}PCwaitingPCInstructionIn_IFInstructionEXTop_IFEXTop_IDPCDFFLUop_IFLUop_IDRegjumpSign_IFSign_ID4MemRd_IFMemRd_IDILLOPMemWr_IFMemWr_IDXADR5ALUFun_IFALUFun_IDMemToReg_IFMemToReg_IDDataBusA_EX0IDstallDataBusC1RegjumpDataBusC_MEM2ForwardC:..IDPctemp_IDPctemp_EXXpRaRt_IDRd_IDImm32_IDImm32_EXRd_IDRd_EXRt_IDRs_IDALUSrc1_IDRt_ID3210Rs_IDRs_EXRegDst_IDPCSrc_IDPCSrc_EXShamt_ID1AddC_IDAddC_EXAddrC_IDAddrBAddrAnum1_IDDataBusA_IDJT_IDJT_EXRegWr_WBWrCReadDataA0RegWr_IDRegWr_EXSign_IDID/Sign_EXMemRd_IDEXMemRd_EXDataBusB_IDMemWr_IDMemWr_EXDataBusCWriteDataCReadDataB0ALUFun_IDALUFun_EXnum2_IDWrCMemToReg_IDMemToReg_EX1num1_IDnum1_EXnum2_IDnum2_EXDataBusA_IDDataBusA_EX{Imm16_ID,16'b0}1ALUSrc2_IDDataBusB_IDDataBusB_EXImm_IDALUSrc1_IDALUSrc1_EXImm32_ID0Imm16_IDEXT32ALUSrc2_IDALUSrc2_EXLUop_IDEXTop_IDEXDataBusB_EX0DataBusC1storeDataBusC_MEM2ForwardAPCtemp_EXPCtemp_MEMALUFun_EXForwardDPCSrc_EXPCSrc_MEMnum1_EX0Sign_EXAddrC_EXAddrC_MEM1ALUnum1DataBusCRegWr_EXRegWr_MEMDataBusC_MEM2MemRd_EXEX/MemRd_MEMALUALUOut_EXMEMemWr_EXMMemWr_MEMnum2_EX0ALUnum2MemToReg_EXMemToReg_MEMDataBusC1ALUOut_EXALUOut_MEMDataBusC_MEM2DataBusA_EXDataBusA_MEMForwardBstoreDataBusB_MEMPCtemp_EX+Offset_EXConBA_EXImm32_EXShiftLeft2bitsMEMstall:..MEMWBALUOut_MEMAddrPCtemp_MEMPCtemp_WBALUOut_WB0ReadReadData_MEMDataBusCAddrC_MEMAddrC_WBReadData_WB1DataDataBusB_MEMWriteRegWr_MEMMERegWr_WBPctemp_WB2DataM/MemToReg_MEMWBMemToReg_WBMemToReg_WBALUOut_MEMALUOut_WBMemRd_MEMMemWr_MEMReadData_MEMReadData_WBPCSrcALUOut_MEM0PCWriteReadData_MEM1Pctemp_MEM2EXstallRiskMemToReg_MEMRedColourMEMstallForwardAForwardBForwardCForwardD1、系统综述5个阶段完成IF,ID,EX,MEM,WB。Branch与跳转在EX阶段判断并且执行,并且有必要时清空ID与IF中断与异常在IF阶段判断流程说明:->0x80000000(控制信号使维持该地址,该地址中存储跳转到0的jalr指令)=1之后在clk上升沿(1)定时器操作,写入TH,TL,TCON(2)读取操作数并且计算最大公约数写入结果寄存器(3)遇到中断操作:&=|=0x00000002重新开始计数:..jalrXp、中间参数说明1)ILLOP=0x80000004,为发生中断时,中断处理程序的PC地址,处于内核态。2)XADR=0x80000008,为发生异常时,异常处理程序的PC地址,处于内核态。3)Xp=26,为ILLOP与XADR中中断/异常处理程序调用,用来存储返回地址,即发生异常/中断的PC值。4)Ra=31,为返回值存储器,应用于jr,jalr指令,跳转到寄存器中所存的PC地址。5)Instruction截取部分:a)寄存器:Rs=Ins[25:21];Rt=Ins[20:16];Rd=Ins[15:11];b)Shamt=Ins[10:6]应用于sll,srl,sra三条指令c)Imm16=Ins[15:0]应用于lw,sw,lui,addi,addiu,andi,slti,sltiu,beq,bne,blez,bgtz,bgez这些I型指令d)JT,应用于j型指令j与jal,JT=Ins[25:0]<<2,保存跳转地址,由于地址为32位,JT仅28位,由本题地址特殊性高位接4’b0000,表示在外部。6)ConBA为条件分支跳转地址,ConBA=PC+4+Offset<<2。3、控制信号说明(后缀表示该信号所处的阶段)1)PCSrc,3位,6种有效取值。PCSrc000(缺省)0010**********PC更新值PCtemp_IF分支见2JT_EXRegjumpILLOPXADR详细说明:PCSrc生成于冒险控制单元000时为默认PC更新为PCtemp_IF,即处于IF阶段的PC+4,应用于不需要跳转的各条指令。:..001时进入条件分支,满足条件PC=ConBA_EX(在EX阶段计算为PCtemp_EX<<2+Offset,如果跳转则清除IF,ID),不满足时PC=PCtemp_IF(考虑EX判断branch,ID,IF已经进入下两条指令,所以不跳转是应该进入IF的下一条指令),应用于各种branch指令。010时PC更新为无条件跳转地址,PC=JT_EX(于EX阶段判断,清除IF,ID阶段指令),应用于j,jal指令。011时PC更新为寄存器跳转,PC=Regjump(寄存器跳转值,详见冒险控制单元介绍),应用于jr,jalr指令。(于EX阶段判断)100,101分别为中断与异常时的跳转地址。2)ALUout_EX[0],1位信号(是否跳转判断)Zero0(缺省)1条件分支PC更新PCtemp_IFConBAALUout生成于EX阶段(不传递)0时不满足分支条件(branch下ALU输出为0),1时满足分支条件。3)RegDst信号,控制寄存器堆写入地址RegDst00011011AddrCRdRtRaXp详细说明:RegDst生成于控制信号产生模块,不传递RegDst用来生成写入寄存器的地址AddrC,于ID阶段生成传递到WB阶段写入。00时写入Rd,应用于所有R型指令,唯一例外jr指令,R型指令不需要写入,但是jr指令Rd段为5’b00000,即令写入为$0。01时写入Rt,应用于部分需要写入的I型指令(配合RegWr=1)有lw,lui,addi,addiu,andi,slti,sltiu,以及部分不需要写入的I型指令(配合RegWr=0)有sw,:..beq,bne,blez,bgtz,bgez。10时写入ra,应用于跳转链接指令jal11时写入Xp,应用于异常/中断时,写入异常/中断处的最终执行完的下条指令4)RegWr,1位信号,寄存器堆写入使能信号,1时可写,缺省0不写入RegWr生成于IF的控制信号生成模块,传递到WB阶段R型指令(jr时配合rd写入到$0不影响),需写入的I型指令lw,lui,addi,addiu,andi,slti,sltiu,需写入的j型指令jal(jalr使用R型指令方法写入)。5)ALUSrc1,1位信号,ALU第一操作数选择控制信号。(需在经过冒险控制多路选择器)ALUSrc101ALU第一操作数DataBusAshamt详细说明:ALUSrc1生成与IF的控制信号生成模块传递至EX阶段0时第一操作数来自寄存器应用于所有非偏移操作1时第一操作数来自R型中shamt部分,应用于偏移操作sll,srl,sra6)ALUSrc2,1位信号,ALU第二操作数选择控制信号。(需在经过冒险控制多路选择器)ALUSrc201ALU第二操作数DataBusBImm/Offset操作结果详细说明:ALUSrc2生成与IF的控制信号生成模块传递至EX阶段0时第二操作数来自寄存器,应用于所有R型指令与J型指令(无效操作)1时第二操作数来自I型中Imm部分的某种计算结果,应用于I型指令,另有EXTop与LUop两个某种计算的控制信号配合操作。7)EXTop,扩展方式选择信号EXTop0(缺省)1扩展方式无符号扩展有符号扩展:..详细说明:EXTop生成于IF的控制信号生成模块传递至ID阶段0时对Imm/Offset无符号扩展,应用于unsigned的I型指令,addiu,sltiu1时对Imm/Offset有符号扩展,应用于非unsigned的I型指令8)LUop,Imm计算方式选择控制信号EXTop0(缺省)1输出结果用之前扩展结果取立即数高位详细说明:LUop生成于IF的控制信号生成模块传递至ID阶段0时将Imm扩展结果作为ALUSrc2选择输入中的一路。1时取立即数高16位与16位0拼接作为ALUSrc2选择输入中的一路,应用于lui指令。9)ALUFun,6位控制信号,控制ALU计算功能类型功能ALUFun描述算式ADD000000S=A+BSUB000001S=A-B位运算AND011000S=A&BOR011110S=A|BXOR010110S=A^BNOR010001S=~(A^B)“A”011010S=A移位运算SLL100000S=B<<A[4:0]SRL100001S=B>>A[4:0]SRA100011S=B<<a[4:0]算术移关系运算EQ110011If(A==B)S=1elseS=0NEQ110001If(A!=B)S=1elseS=0LT1101101If(A<B)S=1elseS=0LEZ111101If(A<=0)S=1elseS=0GEZ111001If(A>=0)S=1elseS=0GTZ111111If(A>0)S=1elseS=0ALUFun生成于IF的控制信号生成模块传递至EX阶段:..10)Sign,ALU运算是否有符号运算控制说明Sign0(缺省)1计算方式无符号计算有符号计算详细说明:Sign生成于IF的控制信号生成模块传递至EX阶段0时ALU进行无符号计算,应用于unsigned计算addu,subu,addiu,sltiu1时ALU进行有符号计算,应用于正常有符号运算除了上述4种指令之外的计算指令。11)MemRd,读取内存控制信号MemRd0(缺省)1结果不读取,ReadData输出全0读取内存,ReadData输出为该地址内容MemRd生成于IF的控制信号生成模块传递至MEM阶段1时应用于需要读取内存的指令lw12)MemWr,写入内存控制信号MemWr0(缺省)1结果不写入写入内存,将输入内容写入输入地址MemWr生成于IF的控制信号生成模块传递至MEM阶段1时应用于需要写入内存的指令sw13)MemToReg,2位控制信号,3个有效输入MemToReg000110输出ALUOutReadDataPCtemp_所处阶段详细说明:MemToReg生成于IF的控制信号生成模块传递至WB阶段00时为应用于R型指令以及不需要读取内存且需要写入内存的I型指令01时应用于将内存中读取内容写入寄存器的指令lw10时应用于需要将PC值写入到寄存器的指令jal,jalr,以及中断或异常时将PC:..写入Xp的操作。4、冒险控制单元说明?转发主要判断MEM与WB阶段写入地址AddrC_MEM与AddrC_WB与EX阶段使用寄存器地址是否相同(且是否使用),决定是否转发。(1)ALU第一操作数的转发,控制信号ForwardA控制代码如下:if(RegWr_MEM&&(AddrC_MEM!=0)&&(AddrC_MEM==Rs_EX)&&(~ALUSrc1_EX))ForwardA<=2'b10;elseif(RegWr_WB&&AddrC_WB!=0&&AddrC_WB==Rs_EX&&(~ALUSrc1_EX))ForwardA<=2'b01;elseForwardA<=2'b00;其中先要判断MEM与WB阶段写入的是否是$0寄存器(由于$0寄存器恒零不允许转发),然后判断先后判断MEM与WB阶段写入地址是否与Rs_EX相同并且ALUSrc1_EX是否为0(表示num1选择就是Rs中读取的内容),由于MEM的指令后运行,所以可能产生对于WB写入的覆盖,所以优先判断MEM阶段,均不符合情况ForwardA为00。ForwardA000110ALUnum1num1DataBusC_WBDataBusC_MEM(2)ALU第二操作数的转发,控制信号ForwardB控制代码如下:if(RegWr_MEM&&(AddrC_MEM!=0)&&(AddrC_MEM==Rt_EX)&&(~ALUSrc2_EX))ForwardB<=2'b10;elseif(RegWr_WB&&AddrC_WB!=0&&AddrC_WB==Rt_EX&&(~ALUSrc2_EX))ForwardB<=2'b01;elseForwardB<=2'b00;判断方式与ForwardA完全相同:..ForwardB000110ALUnum2num2DataBusC_WBDataBusC_MEM(3)寄存器跳转地址的转发,控制信号ForwardC控制代码如下:if(RegWr_MEM&&(AddrC_MEM!=0)&&(AddrC_MEM==Rs_EX)&&(~ALUSrc1_EX)&&PCSrc_EX==3'b011)ForwardC<=2'b10;elseif(RegWr_WB&&Ad