以两种不同的方式构建MIPS指令集的数据通路和控课件_第1页
以两种不同的方式构建MIPS指令集的数据通路和控课件_第2页
以两种不同的方式构建MIPS指令集的数据通路和控课件_第3页
以两种不同的方式构建MIPS指令集的数据通路和控课件_第4页
以两种不同的方式构建MIPS指令集的数据通路和控课件_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TheMIPSProcessorImplementation:

Datapath&Control“ComputerOrganization&Design”JohnHennessy,DavidPatterson2003-5-151llxx@TheMIPSProcessorImplementatContent以两种不同的方式构建MIPS指令集的数据通路和控制部件单周期实现多周期实现2003-5-152llxx@Content以两种不同的方式构建MIPS指令集的数据通路和MIPS指令格式100余条指令(Hennessy中33条),共32个通用寄存器指令格式:定长32位R-type:arithmeticinstructionI-type:datatransfer,arithmeticinstruction(如addi)J-type:branchinstruction(conditional&unconditional)op(6bits)rs(5bits)rt(5bits)rd(5bits)shamt(5bits)funct(6bits)op(6bits)rs(5bits)rt(5bits)addr/immediate(16bits)R-typeI-typeop(6bits)rs(5bits)rt(5bits)addr(16bits)J-typeop(6bits)addr(26bits)2003-5-153llxx@MIPS指令格式100余条指令(Hennessy中33条),MIPS寻址模式立即寻址寄存器寻址:R-type基址寻址:I-typePC相对寻址伪直接寻址(pseudodirectaddressing)注意:字长32位26位形式地址左移2位(字对准),与PC的高4位拼接ByteHalfwordWordRegistersMemoryMemoryWordMemoryWordRegisterRegister1.

Immediate

addressing2.

Register

addressing3.

Base

addressing4.

PC-relative

addressing5.

Pseudodirect

addressingoprsrtoprsrtoprsrtopoprsrtAddressAddressAddressrd.

.

.functImmediatePCPC++2003-5-154llxx@MIPS寻址模式立即寻址ByteHalfwordWordReOverview实现不同指令的多数工作都是相同的,与指令类型无关取指:将PC送往MEM取数:根据指令字中的地址域读寄存器对于Load,只需读一个寄存器;其他指令,需要两个寄存器其后的操作各个指令不同,但同类指令非常类似不同类型指令之间也有相同之处,如都要使用ALU访存指令使用ALU计算地址算逻指令使用ALU完成计算分支指令使用ALU进行条件比较其后,各个指令的工作就不同了访存指令对存储器进行读写算逻指令将ALU结果写回寄存器分支指令将基于比较结果修改下一条指令的地址2003-5-155llxx@Overview实现不同指令的多数工作都是相同的,与指令类型AsubsetofcoreMIPSinstructionsetMemory-referenceinstruction(I-type):lw,swlw$s1,100($s2);loadswords,based$s2(rs)sw$s1,100($s2)Arithmetic-logicalinstruction(R-type):add,sub,and,oradd$t1,$t2,$t3;$t2+$t3->$t1

slt$s1,$s2,$s3(if($s2<$s3)then$s1=1,else$s1=0)op(6bits)rs(5bits)rt(5bits)addr(16bits)I-typeop(6bits)rs(5bits)rt(5bits)rd(5bits)shamt(5bits)funct(6bits)R-type2003-5-156llxx@AsubsetofcoreMIPSinstructAsubsetofcoreMIPSinstructionset(con’t)Branchinstruction(J-type):beq,jumpbeq为相对寻址:以npc为基准,指令中的target为16位,进行32位有符号扩展后左移两位(补“00”,字对准)。jump为pseudodirect:指令中的target为26位,而PC为32位。将target左移2位拼装在PC的低28位上,PC高4位保持不变。op(6bits)rs(5bits)rt(5bits)addr(16bits)J-typeop(6bits)addr(26bits)2003-5-157llxx@AsubsetofcoreMIPSinstructMIPS指令数据通路总图RegistersRegister

#DataRegister

#DatamemoryAddressDataRegister

#PCInstructionALUInstructionmemoryAddressloadstorearithmeticaddr2003-5-158llxx@MIPS指令数据通路总图RegistersRegister逻辑电路与时钟组合逻辑(combinational)部件VS.时序逻辑(sequential)部件组合逻辑:输出只与当前的输入有关,如ALU顺序逻辑:输出与当前的输入和状态有关,如Reg和MEM。时钟控制顺序逻辑的状态变化时刻时钟边沿触发方式Clock

cycleStateelement1Combinational

logicStateelement22003-5-159llxx@逻辑电路与时钟组合逻辑(combinational)部件V单周期实现数据通路设计ALU控制主控制部件2003-5-1510llxx@单周期实现数据通路设计2003-5-1510llxx@ust单周期采用时钟边沿触发方式,所有指令在时钟的一个边开始执行,在下一个边执行结束这种方式没有实用价值。因为它比允许不同指令类使用不同时钟数的方式慢。2003-5-1511llxx@单周期采用时钟边沿触发方式,所有指令在时钟的一个边开始执行,取指PCInstructionmemoryReadaddressInstruction4Add指令字长32位2003-5-1512llxx@取指PCInstructionmemoryReadaddreR-type指令的执行InstructionRegistersWriteregisterReaddata

1Readdata

2Readregister

1Readregister

2WritedataALUresultALUZeroRegWriteALU

operation3寄存器号寄存器堆操作读:给出寄存器编号,则寄存器的值自动送到输出端口写:需要寄存器编号和控制信号RegWrite,时钟边沿触发在一个周期内,可以同时完成读写操作,但读出的是上一个周期写入的值op(6bits)rs(5bits)rt(5bits)rd(5bits)shamt(5bits)funct(6bits)R-type2003-5-1513llxx@R-type指令的执行InstructionRegisterI-type指令的执行lw$t1,offset($t2);M($t2+offset)->$t1sw$t1,offset($t2);$t1->M($t2+offset)需要对指令字中的16位偏移进行32位带符号扩展Instruction1632RegistersWriteregisterReaddata

1Readdata

2Readregister

1Readregister

2DatamemoryWritedataReaddataWritedataSignextendALUresultZeroALUAddressMemReadMemWriteRegWriteALU

operation3lwsw2003-5-1514llxx@I-type指令的执行lw$t1,offset($t2)访存指令和算逻指令的数据通路综合PCInstructionmemoryReadaddressInstruction1632RegistersWriteregisterWritedataReaddata

1Readdata

2Readregister

1Readregister

2SignextendALUresultZeroDatamemoryAddressWritedataReaddataMux4AddMuxALURegWriteALU

operation3MemReadMemWriteALUSrcMemtoRegR-typeI-type算逻?访存?I-type2003-5-1515llxx@访存指令和算逻指令的数据通路综合PCInstructionm条件转移beqbeq$t1,$t2,offset以分支指令的下一条指令地址为基址Offset左移2位形成“32位字地址”(见PC的形成)1632SignextendZeroALUSumShiftleft

2To

branchcontrol

logicBranch

targetPC

+

4

from

instruction

datapathInstructionAddRegistersWriteregisterReaddata

1Readdata

2Readregister

1Readregister

2WritedataRegWriteALU

operation32003-5-1516llxx@条件转移beqbeq$t1,$t2,offset163R-/I-/J-type操作数据通路总图PCInstructionmemoryReadaddressInstruction1632AddALUresultMuxRegistersWriteregisterWritedataReaddata

1Readdata

2Readregister

1Readregister

2Shiftleft

24MuxALU

operation3RegWriteMemReadMemWritePCSrcALUSrcMemtoRegALUresultZeroALUDatamemoryAddressWritedataReaddataMuxSignextendAdd顺序?分支?2003-5-1517llxx@R-/I-/J-type操作数据通路总图PCInstructALU控制信号InstructionopcodeALUopInstructionoperationFunctfielddesiredALUactionALUctrlinputLW00Loadwordxxxxxxadd010sw00storewordxxxxxxadd010beq01Brancheqxxxxxxsubtract110R-type10Add100000Add010R-type10Substract100010Substract110R-type10And100100And000R-type10Or100101Or001R-type10Setonlessthan101010Setonlessthan1112003-5-1518llxx@ALU控制信号InstructionopcodeALUop指令译码指令格式分析操作码:在31-26,需要参考5-0Load/store:rs+addr目的地址:对R-type指令,在rd;对load,在rt。因此需要对目的寄存器进行选择控制0(31-26)rs(25-21)rt(20-16)rd(15-11)shamt(10-6)funct(5-0)35/31rs(25-21)rt(20-16)addr(16bits)R-typeI-type4rs(5bits)rt(5bits)addr(16bits)J-type2003-5-1519llxx@指令译码指令格式分析0(31-26)rs(25-21)rt(目的地址选择两位的ALUop和func组合产生ALU控制选择MemtoRegMemReadMemWriteALUOpALUSrcRegDstPCInstructionmemoryReadaddressInstruction[31–0]Instruction

[20–16]Instruction

[25–21]AddInstruction

[5–0]RegWrite41632Instruction

[15–0]0RegistersWriteregisterWritedataWritedataReaddata

1Readdata

2Readregister

1Readregister

2SignextendALUresultZeroDatamemoryAddressReaddataMux10Mux10Mux10Mux1Instruction

[15–11]ALUcontrolShiftleft

2PCSrcALUAddALUresult2003-5-1520llxx@目的地址选择两位的ALUop和func组合产生ALU控制选择控制信号列表RegDst:选择rt或rd作为写操作的目的寄存器(R-type指令与load指令)RegWrite:寄存器写操作控制(R-type指令与store指令)ALUSrc:ALU的第二个操作数来源(R-type指令与branch指令)MemRead:存储器读控制MemWrite:存储器写控制MemtoReg:目的寄存器数据来源(R-type指令与load指令)PCSrc:NPC控制(顺序执行与分支)所有信号(除PCSrc)都可以根据op域译码产生PCSrc依据两个条件指令是否是beq——增加一个“branch”控制信号指示ALU的Zero状态2003-5-1521llxx@控制信号列表RegDst:选择rt或rd作为写操作的目的寄存主控制部件PCInstructionmemoryReadaddressInstruction[31–0]Instruction

[20

16]Instruction

[25

21]AddInstruction

[5

0]MemtoRegALUOpMemWriteRegWriteMemReadBranchRegDstALUSrcInstruction

[31

26]41632Instruction

[15

0]00Mux01ControlAddALUresultMux01RegistersWriteregisterWritedataReaddata

1Readdata

2Readregister

1Readregister

2SignextendMux1ALUresultZeroPCSrcDatamemoryWritedataReaddataMux1Instruction

[15

11]ALUcontrolShiftleft

2ALUAddress2003-5-1522llxx@主控制部件PCInstructionmemoryReadadR-type指令的执行过程在一个周期内完成如下动作第一步:取指和PC+1第二步:读两个源操作数寄存器$t1和$t2第三步:ALU操作第四步:结果写回目的寄存器$t32003-5-1523llxx@R-type指令的执行过程在一个周期内完成如下动作2003-R-type指令的执行路径PCInstructionmemoryReadaddressInstruction[31–0]Instruction

[20

16]Instruction

[25

21]AddInstruction

[5

0]MemtoRegALUOpMemWriteRegWriteMemReadBranchRegDstALUSrcInstruction

[31

26]41632Instruction

[15

0]00Mux01ALUcontrolControlShiftleft

2AddALUresultMux01RegistersWriteregisterWritedataReaddata

1Readdata

2Readregister

1Readregister

2SignextendMux1ALUresultZeroDatamemoryWritedataReaddataMux1Instruction

[15

11]ALUAddress2003-5-1524llxx@R-type指令的执行路径PCInstructionmemolw指令的执行过程第一步:取指和PC+1第二步:读寄存器$t2第三步:ALU操作完成$t2与符号扩展后的16位offset加第四步:ALU的结果作为访存地址,送往数据MEM内存中的数据送往$t12003-5-1525llxx@lw指令的执行过程第一步:取指和PC+12003-5-152lw指令的执行路径PCInstructionmemoryReadaddressInstruction[31–0]Instruction

[15–11]Instruction

[20–16]Instruction

[25–21]AddInstruction

[5–0]MemtoRegALUOpMemWriteRegWriteMemReadBranchRegDstALUSrcInstruction

[31–26]41632Instruction

[15–0]00Mux01ALUcontrolControlShiftleft

2AddALUresultMux01RegistersWriteregisterWritedataReaddata

1Readdata

2Readregister

1Readregister

2SignextendMux1ALUresultZeroDatamemoryWritedataReaddataMux1ALUAddress2003-5-1526llxx@lw指令的执行路径PCInstructionmemoryRebeq指令的执行过程第一步:取指和PC+1第二步:读寄存器$t1,$t2第三步:ALU将$t1和$t2相减;PC+4与被左移两位并进行符号扩展后的16位offset相加,作为分支目标地址第四步:ALU的Zero确定应送往PC的值2003-5-1527llxx@beq指令的执行过程第一步:取指和PC+12003-5-15beq的执行路径PCInstructionmemoryReadaddressInstruction[31–0]Instruction

[15–11]Instruction

[20–16]Instruction

[25–21]AddInstruction

[5–0]MemtoRegALUOpMemWriteRegWriteMemReadBranchRegDstALUSrcInstruction

[31–26]41632Instruction

[15–0]Shiftleft

20Mux01ALUcontrolControlRegistersWriteregisterWritedataReaddata

1Readregister

1Readregister

2Signextend1ALUresultZeroDatamemoryWritedataReaddataMuxReaddata

2AddALUresultMux01Mux10ALUAddress2003-5-1528llxx@beq的执行路径PCInstructionmemoryRea控制部件真值表SignalnameR-typelwswbeqinputsop50110op40000op30010op20001op10110op00110outputsRegDst10xxALUSrc0110MemtoReg01xxRegWrite1100MemRead0100MemWrite0010Branch0001ALUop11000ALUop000012003-5-1529llxx@控制部件真值表SignalnameR-typelwswbejump指令的实现无条件转移,关键在于目标地址的拼装PC+4的最高4位指令字中的26位地址最低两位补00“拼装”:只需合并地址总线增加一个jump指令识别控制J-type2(31-26)addr(25-0)2003-5-1530llxx@jump指令的实现无条件转移,关键在于目标地址的拼装J-tyjump指令的实现Shiftleft

2PCInstructionmemoryReadaddressInstruction[31–0]DatamemoryReaddataWritedataRegistersWriteregisterWritedataReaddata

1Readdata

2Readregister

1Readregister

2Instruction

[15–11]Instruction

[20–16]Instruction

[25–21]AddALUresultZeroInstruction

[5–0]MemtoRegALUOpMemWriteRegWriteMemReadBranchJumpRegDstALUSrcInstruction

[31–26]4MuxInstruction

[25–0]Jump

address

[31–0]PC+4

[31–28]Signextend1632Instruction

[15–0]1Mux10Mux01Mux01ALUcontrolControlAddALUresultMux010ALUShiftleft

22628Address2003-5-1531llxx@jump指令的实现Shiftleft2PCInstruct单周期实现性能讨论CPI=1时钟以执行路径最长的指令为准例:设MEM=2ns,ALU和加法器=2ns,Reg=1ns,其他部件没有延时。指令instMEMRegReadALUDataMEMRegWriteTotalR-Type21216nslw212218nssw21227nsbeq2125nsjump22ns用到的部件2003-5-1532llxx@单周期实现性能讨论CPI=1指令instMEMRegALU单周期实现性能讨论(con’t)设程序中load有24%,store有12%,R-type有44%,beq有18%,jump有2%。试比较时钟定长单周期实现和不定长单周期实现的性能。程序执行时间=指令数×CPI×时钟宽度定长单周期的时钟为8ns不定长单周期的时钟可以是2ns~8ns。其平均指令执行时间=8×24%+7×12%+6×44%+5×18%+2×2%=6.3ns因此,变长实现较定长实现快8/6.3=1.27倍2003-5-1533llxx@单周期实现性能讨论(con’t)设程序中load有24%,s多周期实现根据指令执行所使用的功能部件将执行过程划分成多个阶段,每个阶段一个周期功能部件可以在不同的阶段(周期)复用,有利于降低硬件实现复杂度假设一个周期内可以完成一次MEM访问,or一次寄存器访问(2readsoronewrite),or一次ALU操作2003-5-1534llxx@多周期实现根据指令执行所使用的功能部件将执行过程划分成多个阶Overview只有一个MEM。一个ALU(单周期中为1个ALU和2个加法器)。增加暂存寄存器IR、MDR、A、B、ALUOut等。PCMemoryAddressInstructionor

dataDataInstructionregisterRegistersRegister

#DataRegister

#Register

#ALUMemorydata

registerABALUOut2003-5-1535llxx@Overview只有一个MEM。一个ALU(单周期中为1个A多周期数据通路Shiftleft

2PCMemoryMemDataWritedataMux01RegistersWriteregisterWritedataReaddata

1Readdata

2Readregister

1Readregister

2Mux01Mux014Instruction[15–0]Signextend3216Instruction[25–21]Instruction[20–16]Instruction[15–0]Instructionregister1Mux032MuxALUresultALUZeroMemorydataregisterInstruction[15–11]ABALUOut01Address取指数据访问PC+4lw/swbeqsw2003-5-1536llxx@多周期数据通路Shiftleft2PCMemoryMemD多周期控制信号Shiftleft

2MemtoRegIorDMemReadMemWritePCMemoryMemDataWritedataMux01RegistersWriteregisterWritedataReaddata

1Readdata

2Readregister

1Readregister

2Instruction[15–11]Mux01Mux014ALUOpALUSrcBRegDstRegWriteInstruction[15–0]Instruction

[5–0]Signextend3216Instruction[25–21]Instruction[20–16]Instruction[15–0]Instructionregister1Mux032ALUcontrolMux01ALUresultALUALUSrcAZeroABALUOutIRWriteAddressMemorydataregisterop(6bits)rs(5bits)rt(5bits)rd(5bits)shamt(5bits)funct(6bits)op(6bits)rs(5bits)rt(5bits)addr/immediate(16bits)op(6bits)addr(26bits)2003-5-1537llxx@多周期控制信号Shiftleft2MemtoRegIorDPC的写控制在一个指令周期内,PC不能变,因此需要写控制信号3种情况ALU:PC+4的输出直接存入PCALUOut:beq指令的目标地址jump指令需要两个写控制无条件写PCWrite:PC+4,jump有条件写PCWriteCond:beq2003-5-1538llxx@PC的写控制在一个指令周期内,PC不能变,因此需要写控制信号主控制部件2003-5-1539llxx@主控制部件2003-5-1539llxx@.指令执行的阶段划分时钟周期确定每个周期的工作尽量平衡在一个周期内的各个部件并行工作共5个阶段取指译码阶段R-type指令执行、存储器地址计算、分支完成阶段访存和R-type指令完成阶段存储器读完成阶段2003-5-1540llxx@指令执行的阶段划分时钟周期确定2003-5-1540llxx取指阶段、译码阶段取指根据PC从MEM中取指,IR=MEM[PC]计算NPC,PC=PC+4NPC要到下一周期(指“机器周期”)才写入PC控制信号:MemRead,IRWrite,IorD,ALUSrcA,ALUSrcB,ALUOp,PCWrite指令译码和读寄存器将rs和rt送往A和B:A=Reg[IR[25-21]],B=Reg[IR[20-16]]计算beq目标地址,ALUOut=PC+(sign-extend(IR[15-0]<<2)控制信号:ALUSrcA,ALUSrcB,ALUOp由于此时尚不知是何指令,所以读寄存器和计算分支地址可能无效,但亦无害,可以节省后面的操作2003-5-1541llxx@取指阶段、译码阶段取指2003-5-1541llxx@ustR-type指令执行、存储器地址计算、

分支完成阶段依赖于指令类型访存指令ALUOut=A+(sign-extend(IR[15-0])R-type指令ALUOut=AopBbeq指令if(A==B)PC=ALUOutjump指令PC=PC[31-28]||(IR[25-0]<<2)需要的控制信号2003-5-1542llxx@R-type指令执行、存储器地址计算、

分支完成阶段依赖于指访存和R-type指令完成阶段、存储器读完成阶段访存和R-type指令完成阶段访存指令load:MDR=MEM[ALUOut]store:MEM[ALUOut]=B此时store指令完成R-type指令Reg[IR[15-11]]=ALUOut所需的控制信号存储器读完成阶段Reg[IR[15-11]]=ALUOut2003-5-1543llxx@访存和R-type指令完成阶段、存储器读完成阶段访存和R-t控制部件实现有限状态机模型(FSM)Moore型(EdwardMoore):输出仅仅依赖于当前状态,与输入无关Mealy型(GeorgeMealy):输出与当前状态和输入相关两种状态机可以相互转换。Moore型速度快。因为输出与输入无关,可以在周期一开始就提供控制信号。Mealy型电路较小。EDA工具可以根据FSM自动综合生成控制器存储部件组合逻辑2003-5-1544llxx@控制部件实现有限状态机模型(FSM)存储部件组合逻辑2003多周期控制的MooreFSM,每个状态需要一个周期。PCWritePCSource

=

10ALUSrcA

=

1ALUSrcB

=

00ALUOp

=

01PCWriteCondPCSource

=

01ALUSrcA

=1ALUSrcB

=

00ALUOp=

10RegDst

=

1RegWriteMemtoReg

=

0MemWriteIorD

=

1MemReadIorD

=

1ALUSrcA

=

1ALUSrcB

=

10ALUOp

=

00RegDst=0RegWriteMemtoReg=1ALUSrcA

=

0ALUSrcB

=

11ALUOp

=

00MemReadALUSrcA

=

0IorD

=

0IRWriteALUSrcB

=

01ALUOp

=

00PCWritePCSource

=

00Instruction

fetchInstruction

decode/register

fetchJumpcompletionBranchcompletionExecutionMemory

addresscomputationMemoryaccessMemoryaccessR-type

completionWrite-back

step

(Op

=

'LW')

or

(Op

=

'SW')(Op

=

R-type)(Op

=

'BEQ')(Op

=

'J')

(Op

=

'SW')(Op

=

'LW')4019862753Start2003-5-1545llxx@多周期控制的MooreFSM,每个状态需要一个周期。PCWr异常处理设计控制部件的难点在于异常处理,检查异常和采取相关的动作通常在关键路径上进行,影响时钟周期宽度的确定。讨论两种异常:非法指令和算术溢出基本的动作是将受干扰的指令的地址保存在EPC中,将控制转移给OS。OS决定采取的处理:为用户程序提供某些服务;对溢出进行响应;停止异常程序的执行并报告错误等。设异常处理程序地址在c00000000H,它根据状态寄存器cause中的异常原因分别处理异常。2003-5-1546llxx@异常处理设计控制部件的难点在于异常处理,检查异常和采取相关的中断处理Shiftleft

2MemoryMemDataWritedataMux01Instruction[15–11]Mux014Instruction[15–0]Signextend3216Instruction[25–21]Instruction[20–16]Instruction[15–0]InstructionregisterALUcontrolALUresultALUZeroMemorydataregisterABIorDMemReadMemWriteMemtoRegPCWriteCondPCWriteIRWriteControlOutputsOp[5–0]Instruction[31-26]Instruction

[5–0]Mux02Jumpaddress

[31-0]Instruction

[25–0]2628Shiftleft

2PC

[31-28]1AddressEPCCO

00

00

003CauseALUOpALUSrcBALUSrcARegDs

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论