第一讲流水线数据通路和控制逻辑第二讲流水线冒险处理第..._第1页
第一讲流水线数据通路和控制逻辑第二讲流水线冒险处理第..._第2页
第一讲流水线数据通路和控制逻辑第二讲流水线冒险处理第..._第3页
第一讲流水线数据通路和控制逻辑第二讲流水线冒险处理第..._第4页
第一讲流水线数据通路和控制逻辑第二讲流水线冒险处理第..._第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

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

文档简介

1、第一讲第一讲 流水线数据通路和控制逻辑流水线数据通路和控制逻辑第二讲第二讲 流水线冒险处理流水线冒险处理第三讲第三讲 高级流水线技术高级流水线技术Ch7: Instruction Pipeline指令流水线指令流水线Pipeline.22022年6月26日星期日第一讲第一讲 流水线数据通路和控制流水线数据通路和控制 日常生活中的流水线处理例子:洗衣服日常生活中的流水线处理例子:洗衣服 单周期处理器模型和流水线性能比较单周期处理器模型和流水线性能比较 什么样的指令集适合于流水线方式执行什么样的指令集适合于流水线方式执行 如何设计流水线数据通路如何设计流水线数据通路 以以MIPSMIPS指令子集来

2、说明指令子集来说明 详细设计取指令部件详细设计取指令部件 详细设计执行部件详细设计执行部件 分析每条指令在流水线中的执行过程,遇到各种问题:分析每条指令在流水线中的执行过程,遇到各种问题:-资源冲突资源冲突-寄存器和存储器的信号竞争寄存器和存储器的信号竞争-分支指令的延迟分支指令的延迟-指令间数据相关指令间数据相关 如何设计流水线控制逻辑如何设计流水线控制逻辑 分析每条指令执行过程中的控制信号分析每条指令执行过程中的控制信号 给出控制器设计过程给出控制器设计过程 流水线冒险的概念流水线冒险的概念主主 要要 内内 容容Pipeline.32022年6月26日星期日复习:复习:A Single C

3、ycle Processor32ALUctrClkbusWRegWr3232busA32busB555Rw Ra Rb32 32-bitRegistersRsRtRtRdRegDstExtenderMuxMux3216imm16ALUSrcExtOpMuxMemtoRegClkData InWrEn32AdrDataMemory32MemWrALUZero010101InstructionFetch UnitClkInstructionJumpBranchImm16RdMainControlopALUControlfuncALUop3RegDstALUSrc:InstrZero3Pipelin

4、e.42022年6月26日星期日复习:复习:Multiple Cycle Processor MCP: 一个功能部件在一个指令周期中可以被使用多次。一个功能部件在一个指令周期中可以被使用多次。IdealMemoryWrAdrDinRAdr323232DoutMemWr32ALU3232ALUOpALUControlInstruction Reg32IRWr32Reg FileRaRwbusWRb5532busA32busBRegWrRsRtMux01RtRdPCWrALUSelAMux01RegDstMux0132PCMemtoRegExtendExtOpMux01320123416Imm32

5、 2ALUSelBMux10Target32ZeroZeroPCWrCondPCSrcBrWr32IorDPipeline.52022年6月26日星期日复习:单周期中复习:单周期中lw指令的定时指令的定时ClkPCRs, Rt, Rd,Op, FuncClk-to-QALUctrInstruction Memory Access TimeOld ValueNew ValueRegWrOld ValueNew ValueDelay through Control LogicbusARegister File Access TimeOld ValueNew ValuebusBALU DelayOl

6、d ValueNew ValueOld ValueNew ValueNew ValueOld ValueExtOpOld ValueNew ValueALUSrcOld ValueNew ValueAddressOld ValueNew ValuebusWOld ValueNewDelay through Extender & MuxData Memory Access TimeInstruction FetchInstr Decode /Reg. FetchAddressReg WrData MemoryRegister File Write Time132Pipeline.6202

7、2年6月26日星期日 Laundry Example A, B, C, D四个人,每人都有一四个人,每人都有一批衣服需要批衣服需要 wash, dry, fold Wash阶段:阶段:30 minutes Dry阶段:阶段:40 minutes Fold阶段:阶段: 20 minutesABCDPipelining: Its Natural !一个日常生活中的例子一个日常生活中的例子洗衣服洗衣服如果让你来管理洗衣店,你会如何安排?如果让你来管理洗衣店,你会如何安排?Pipeline.72022年6月26日星期日Sequential Laundry(串行方式)串行方式)串行方式下,串行方式下,

8、4 批衣服需要花费批衣服需要花费 6 小时(小时(4x(30+40+20)=360分钟分钟)N批衣服,需花费的时间为批衣服,需花费的时间为Nx(30+40+20) = 90N如果用流水线方式洗衣服,则花多少时间呢如果用流水线方式洗衣服,则花多少时间呢? ABCD3040 20 3040 20 3040 20 3040 206 PM7891011MidnightTaskOrderTimePipeline.82022年6月26日星期日Pipelined Laundry: (Start work ASAP)串行为串行为6小时,小时,N批则为批则为90N分钟分钟ABCD6 PM7891011Midni

9、ghtTaskOrderTime3040404040 20流水线方式下,需流水线方式下,需30+4x40+20=210分分 (3.5小时小时)如果有如果有N批衣服呢?批衣服呢?30+Nx40+20分钟分钟假定每一步时间均衡,则假定每一步时间均衡,则比串行方式提高约比串行方式提高约3倍!倍!流水方式下,所用时间主要流水方式下,所用时间主要与最长阶段的时间有关!与最长阶段的时间有关!Pipeline.92022年6月26日星期日复习:复习:Load指令的指令的5个阶段个阶段 Ifetch (取指取指) : 取指令并计算取指令并计算PC+4 (用到哪些部件?用到哪些部件?) Reg/Dec (取数和

10、译码取数和译码) : 取数同时译码取数同时译码 (用到哪些部件?用到哪些部件?) Exec (执行执行) : 计算内存单元地址计算内存单元地址 (用到哪些部件?用到哪些部件?) Mem (读存储器读存储器) : 从数据存储器中读从数据存储器中读 (用到哪些部件?用到哪些部件?) Wr(写寄存器写寄存器): 将数据写到寄存器中将数据写到寄存器中 (用到哪些部件?用到哪些部件?)阶段阶段1阶段阶段2阶段阶段 3阶段阶段 4阶段阶段5IfetchReg/DecExecMemWr指令存储器、指令存储器、Adder寄存器堆读口、指令译码器寄存器堆读口、指令译码器扩展器、扩展器、ALU数据存储器数据存储器

11、寄存器堆写口寄存器堆写口这里寄存器这里寄存器堆的读口和堆的读口和写口可看成写口可看成两个不同的两个不同的部件。部件。指令的执行过程中,每个阶段使用不同的部件。指令的执行过程中,每个阶段使用不同的部件。是否和是否和“洗衣洗衣”过程类似?是否可以采用类似方式来执行指令呢?过程类似?是否可以采用类似方式来执行指令呢?Pipeline.102022年6月26日星期日单周期指令模型与流水线性能单周期指令模型与流水线性能 假定以下每步操作所花时间为:假定以下每步操作所花时间为:-取指:取指:2ns-寄存器读:寄存器读:1ns-ALU操作:操作:2ns-存储器读:存储器读:2ns-寄存器写:寄存器写:1ns

12、 单周期模型单周期模型 每条指令在一个时钟周期内完成每条指令在一个时钟周期内完成 时钟周期等于最长的时钟周期等于最长的lw指令的执行时间,即:指令的执行时间,即:8ns 串行执行时,串行执行时,N条指令的执行时间为:条指令的执行时间为:8Nns 流水线性能流水线性能 时钟周期等于最长阶段所花时间为:时钟周期等于最长阶段所花时间为:2ns 每条每条lw指令的执行时间为:指令的执行时间为: 2nsx5=10ns N条指令的执行时间为:条指令的执行时间为:(5+(N-1)x2ns 在在N很大时约为很大时约为2Nns,比串行方式提高约,比串行方式提高约 4 倍倍 若各阶段操作均衡若各阶段操作均衡(例如

13、,各阶段都是例如,各阶段都是2ns,则串行需,则串行需10Nns,流水,流水线仍为线仍为2Nns),提高倍数为,提高倍数为5倍。倍。Load指令执行时间总计为:指令执行时间总计为:8ns (假定控制单元、假定控制单元、PC访问、信号传访问、信号传递等没有延迟递等没有延迟)流水线方式下,单条指令执行时间不能缩短,但能大大提高指令吞吐率!流水线方式下,单条指令执行时间不能缩短,但能大大提高指令吞吐率!222222222222222Pipeline.112022年6月26日星期日流水线指令集的设计流水线指令集的设计 具有什么特征的指令集有利于流水线执行呢?具有什么特征的指令集有利于流水线执行呢? 长

14、度尽量一致,有利于简化取指令和指令译码操作长度尽量一致,有利于简化取指令和指令译码操作-MIPS指令指令32位,下址计算方便位,下址计算方便: PC+4-X86指令从指令从1字节到字节到17字节不等,使取指部件极其复杂字节不等,使取指部件极其复杂 格式少,且源寄存器位置相同,有利于在指令未知时就可取操作数格式少,且源寄存器位置相同,有利于在指令未知时就可取操作数-MIPS指令的指令的Rs和和Rt位置一定,在指令译码时就可读位置一定,在指令译码时就可读Rs和和Rt的值的值(若位置随指令不同而不同,则需先确定指令后才能取寄存器编号)(若位置随指令不同而不同,则需先确定指令后才能取寄存器编号) lo

15、ad / Store指令才能访问存储器,有利于减少操作步骤,规整流水线指令才能访问存储器,有利于减少操作步骤,规整流水线-lw/sw指令的地址计算和运算指令的执行步骤规整在同一个周期指令的地址计算和运算指令的执行步骤规整在同一个周期-X86运算类指令操作数可为内存数据,需计算地址、访存、执行运算类指令操作数可为内存数据,需计算地址、访存、执行 内存中内存中”对齐对齐”存放,有利于减少访存次数和流水线的规整存放,有利于减少访存次数和流水线的规整总之,规整、简单和一致等特性有利于指令的流水线执行总之,规整、简单和一致等特性有利于指令的流水线执行流水线执行方式能大大提高指令吞吐率,现代计算机都采用流

16、水线执行方式能大大提高指令吞吐率,现代计算机都采用流水线方式!流水线方式!Pipeline.122022年6月26日星期日Load指令的流水线指令的流水线ClockCycle 1 Cycle 2Cycle 3 Cycle 4Cycle 5Cycle 6Cycle 7IfetchReg/DecExecMemWr1st lwIfetchReg/DecExecMemWr2nd lwIfetchReg/DecExecMemWr3rd lw每个周期最多有五个功能部件同时在工作每个周期最多有五个功能部件同时在工作后面指令在前面完成取指后马上开始后面指令在前面完成取指后马上开始每个每个load指令仍然需要五

17、个周期完成指令仍然需要五个周期完成但是吞吐率但是吞吐率(throughput)提高许多,理想情况下,有:提高许多,理想情况下,有: 每个周期有一条指令进入流水线每个周期有一条指令进入流水线 每个周期都有一条指令完成每个周期都有一条指令完成 每条指令的有效周期每条指令的有效周期(CPI)为为1IfetchReg/DecExecMemWr4th lwIfetchReg/DecExecMemWr5th lwIfetchReg/DecExecPipeline.132022年6月26日星期日R-type指令的指令的4个阶段个阶段 Ifetch: 取指令并计算取指令并计算PC+4 Reg/Dec: 从寄存

18、器取数,同时指令在译码器进行译码从寄存器取数,同时指令在译码器进行译码 Exec: 在在ALU中对操作数进行计算中对操作数进行计算 Wr: ALU计算的结果写到寄存器计算的结果写到寄存器Cycle 1Cycle 2Cycle 3Cycle 4IfetchReg/DecExecWrR-typePipeline.142022年6月26日星期日含含R-type和和 Load 指令的流水线指令的流水线 上述流水线有个问题上述流水线有个问题: 两条指令试图同时写寄存器,因为两条指令试图同时写寄存器,因为 Load在第在第5阶段用寄存器写口阶段用寄存器写口 R-type在第在第4 阶段用寄存器写口阶段用寄

19、存器写口 把一个功能部件同时被多条指令使用的现象称为把一个功能部件同时被多条指令使用的现象称为结构冒险结构冒险(Struture Hazard) 为了流水线能顺利工作,规定:为了流水线能顺利工作,规定: 每个功能部件每条指令只能用一次(如:写口不能用两次或以上)每个功能部件每条指令只能用一次(如:写口不能用两次或以上) 每个功能部件必须在相同的阶段被使用(如:写口总是在第五阶段被使用)每个功能部件必须在相同的阶段被使用(如:写口总是在第五阶段被使用)IfetchReg/DecExecWrR-typeIfetchReg/DecExecWrR-typeClockCycle 1 Cycle 2Cyc

20、le 3 Cycle 4Cycle 5Cycle 6Cycle 7Cycle 8Cycle 9IfetchReg/DecExecWrR-typeIfetchReg/DecExecWrR-typeIfetchReg/DecExecMemWrLoadWe have a problem!或称为资源冲突!Pipeline.152022年6月26日星期日解决方案解决方案: R-type的的Wr操作延后一个周期执行操作延后一个周期执行 加一个加一个NOP阶段以延迟阶段以延迟“写写”操作操作: 把把“写写”操作安排在第操作安排在第5阶段阶段, 这样使这样使R-Type的的Mem阶段为空阶段为空NOP这样使流

21、水线中的每条指令都有相同多个阶段这样使流水线中的每条指令都有相同多个阶段!IfetchReg/DecExecWrR-type12345MemClockCycle 1 Cycle 2Cycle 3 Cycle 4Cycle 5Cycle 6Cycle 7Cycle 8Cycle 9IfetchReg/DecWrR-typeIfetchReg/DecWrR-typeIfetchReg/DecExecMemWrLoadIfetchReg/DecWrR-typeIfetchReg/DecWrR-typeMemExecExecExecExecMemMemMemNOOP!Pipeline.162022年6

22、月26日星期日Store指令的四个阶段指令的四个阶段 Ifetch:取指令并计算取指令并计算PC+4 Reg/Dec: 从寄存器取数,同时指令在译码器进行译码从寄存器取数,同时指令在译码器进行译码 Exec:16位立即数符号扩展后与寄存器值相加,计算主存地址位立即数符号扩展后与寄存器值相加,计算主存地址 Mem:将寄存器读出的数据写到主存将寄存器读出的数据写到主存Cycle 1 Cycle 2Cycle 3 Cycle 4IfetchReg/DecExecMemStoreWrWr: 加一个空的写阶段,使流水线更规整!加一个空的写阶段,使流水线更规整!NOOP!Pipeline.172022年6

23、月26日星期日Beq的四个阶段的四个阶段 Ifetch: 取指令并计算取指令并计算PC+4 Reg/Dec:从寄存器取数,同时指令在译码器进行译码从寄存器取数,同时指令在译码器进行译码 Exec: 执行阶段执行阶段 ALU中比较两个寄存器的大小(做减法)中比较两个寄存器的大小(做减法) Adder中计算转移地址中计算转移地址 Mem: 如果比较相等如果比较相等, 则:则: 转移目标地址写到转移目标地址写到PCCycle 1 Cycle 2Cycle 3 Cycle 4IfetchReg/DecExecMemBeqWrNOOP!Wr: 加一个空写阶段,使流水线更规整!加一个空写阶段,使流水线更规

24、整!与多周期通路有什么不同?与多周期通路有什么不同?多周期通路中,在多周期通路中,在Reg/Dec阶段阶段投机投机进行了转移地址的进行了转移地址的计算!可以减少计算!可以减少Branch指指令的时钟数令的时钟数为什么流水线中不进行为什么流水线中不进行“投机投机”计算?计算?因为,流水线中所有指令的因为,流水线中所有指令的执行阶段一样多,执行阶段一样多,Branch指令无需节省时钟,因为有指令无需节省时钟,因为有比它更复杂的指令。比它更复杂的指令。按照上述方式,把所有指令都按照最复按照上述方式,把所有指令都按照最复杂的杂的“load”指令所需的五个阶段来划分指令所需的五个阶段来划分,不需要的阶段

25、加一个,不需要的阶段加一个“NOP”操作操作Pipeline.182022年6月26日星期日A Pipelined Datapath(五阶段流水线数据通路)(五阶段流水线数据通路)IF/ID RegisterID/Ex RegisterEx/Mem RegisterMem/Wr RegisterPCDataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExtOpExecUnitbusAbusBImmALUOpALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetch (IF)

26、Reg/Dec (ID)Exec (Ex)MemWrClock-to-Q delay下面看每条指令在流水线通路中的执行过程下面看每条指令在流水线通路中的执行过程Wr阶阶段没有段没有Data-Path吗吗?有!寄存器写口有!寄存器写口流水段寄存器的作用?流水段寄存器的作用?保存每个周期执行的结果保存每个周期执行的结果! !属于内部寄存器,对程序员透属于内部寄存器,对程序员透明,不需作为现场保存明,不需作为现场保存Pipeline.192022年6月26日星期日取指令(取指令(Ifetch) 阶段阶段开始时开始时IF/ID: ?ID/Ex RegisterEx/Mem RegisterMem/Wr

27、 RegisterPC = 10DataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExtOpExecUnitbusAbusBImmALUOpALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemYou are here! 第第10单元指令单元指令: lw $1, 0 x100($2) 功能:功能:$1 - Mem ($2) + 0 x100有谁发现这里有一个假设有问题?有谁发现这里有一个假设有问题?MIPS指令的地址可能是指令的地址可能是1

28、0吗?吗?Pipeline.202022年6月26日星期日取指令(取指令(Ifetch) 阶段阶段结束后结束后IF/ID: lw $1, 100 ($2)ID/Ex RegisterEx/Mem RegisterMem/Wr RegisterPC = 14DataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExtOpExecUnitbusAbusBImmALUOpALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemYou are here!

29、 第第10单元指令单元指令: lw $1, 0 x100($2) 功能:功能:$1 Mem ($2) + 0 x100下一目标:设计下一目标:设计IUnit(功能是啥?)(功能是啥?)Pipeline.212022年6月26日星期日指令部件指令部件 IUnit的设计的设计 第第10单元指令单元指令: : lw $1, 0 x100($2) 随后的指令在随后的指令在14号单元中!号单元中!IF/ID: lw $1, 100 ($2)PC = 1410AdderInstructionMemory“4”InstructionAddressClkIfetchYou are here!Reg/Dec开始

30、从开始从14号号单元取指!单元取指!PC 新值(新值(14) 旧输出(旧输出(10)流水段寄存器用来存流水段寄存器用来存放各阶段的执行结果放各阶段的执行结果总是在下个时钟到来总是在下个时钟到来后的后的Clock-to-Q写入写入取指阶段有哪些控制信号?取指阶段有哪些控制信号?不需控制信号,因为每条指令执行功能一样,是确定不需控制信号,因为每条指令执行功能一样,是确定的,无需根据指令的不同来控制执行不同的操作!的,无需根据指令的不同来控制执行不同的操作!指令部件功能指令部件功能Instr MemPCPC PC+4这里这里MUX的控制信的控制信号由其他号由其他阶段产生阶段产生!应把哪些信息存到流应

31、把哪些信息存到流水段寄存器水段寄存器IF/ID中?中?应保存后面阶段用到的应保存后面阶段用到的指令和指令和PC+4的值!的值!指令在随后阶段被送出译码!指令在随后阶段被送出译码!PC+4用来计算转移目标地址用来计算转移目标地址Pipeline.222022年6月26日星期日译码译码/取数(取数(Reg/Dec)阶段)阶段IF/ID:ID/Ex: Reg. 2 & 0 x100Ex/Mem RegisterMem/Wr RegisterPC DataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExtOpExecUnitbusAbusBImmALUOp

32、ALUSrcMux10MemtoReg10RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemYou are here! 第第10单元指令单元指令: lw $1, 0 x100($2) ) 功能:功能:$1 Mem($2) + 0 x100RegRs,RegRt,Rt,Rd,Imm16,PC+4等被保存在等被保存在ID/EXE中中该阶段有哪些控制信号?该阶段有哪些控制信号?没有!因是所有指令的公共操作,故无控制信号没有!因是所有指令的公共操作,故无控制信号!RegWr是是Wr段段的信号的信号!指令还要存指令还要存ID/

33、EX中吗?中吗?不要,只要不要,只要存相关信息存相关信息Pipeline.232022年6月26日星期日Load指令的地址计算阶段指令的地址计算阶段IF/ID:ID/Ex RegisterEx/Mem: Loads AddressMem/Wr RegisterPCDataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWrExecUnitbusAbusBImmMux10MemtoReg10RtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMemYou are here! 第第10单元指令单元指令: lw

34、$1, 0 x100($2) 功能:功能:$1 Mem($2) + 0 x100ExtOp=?ALUOp=?ALUSrc=?RegDst=0指令已被译码,可确定执行部件的控制信号!指令已被译码,可确定执行部件的控制信号!下一目标:设计执行部件下一目标:设计执行部件(Exec Unit)连接到错误的目的地址,连接到错误的目的地址,指令执行错误指令执行错误!目的寄存器目的寄存器Rt不传不传递下去会怎样?递下去会怎样?Pipeline.242022年6月26日星期日执行部件(执行部件(Exec Unit)的设计)的设计ID/Ex RegisterEx/Mem: Loads Memory Addres

35、sALUControlALUctr32busA32busBExtenderMux16immALUSrc=?ExtOp=?3ALUZero0132ALUout32Adder3ALUOp=? Tread比较洗衣流水线,指比较洗衣流水线,指令流水有什么不同?令流水有什么不同?洗衣流程不能反向进行,但洗衣流程不能反向进行,但该阶段有反向数据流,可能该阶段有反向数据流,可能会引起冒险!以后介绍。会引起冒险!以后介绍。Pipeline.262022年6月26日星期日Load指令的回写(指令的回写(Write Back)阶段)阶段IF/ID:ID/Ex RegisterEx/Mem RegisterMem/

36、Wr RegisterPCDataMemWADiRADoIUnitAIRFileDiRaRbRwMemWrRegWr=1ExtOpExecUnitbusAbusBImmALUOpALUSrcMux1010RegDstRtRdImmPC+4PC+4RsRtPC+4ZeroBranch10ClkIfetchReg/DecExecMem Location 10: lw $1, 0 x100($2) 功能:功能:$1 Mem($2) + 0 x100Wr各阶段所经各阶段所经DataPath已有,控制信号如何得到?已有,控制信号如何得到?该阶段有反向数据流,可能该阶段有反向数据流,可能会引起冒险!以后介

37、绍。会引起冒险!以后介绍。MemtoReg=1Pipeline.272022年6月26日星期日流水线中的流水线中的Control Signals如何获得如何获得? 主要考察主要考察: 第第N阶段的控制信号,它取决于是阶段的控制信号,它取决于是某条指令的某个阶段某条指令的某个阶段。 N = Exec, Mem, or Wr (只有这三个阶段有控制信号)只有这三个阶段有控制信号) 例例: Load的的Exec段的控制信号如图中所示段的控制信号如图中所示MemWrMemtoRegRegDst=0IF/ID:ID/Ex RegisterEx/Mem: Loads AddressMem/Wr Regis

38、terPCDataMemWADiRADoIUnitAIRFileDiRaRbRwRegWrExtOp=1ExecUnitbusAbusBImmALUOp=AddALUSrc=1Mux1010RtRdI16PC+4PC+4RsRtPC+4ZeroBranch10IfetchReg/DecExecMemWrPipeline.282022年6月26日星期日流水线中的流水线中的Control Signals如何获得如何获得? 在在取数取数/译码(译码(Reg/Dec)阶段)阶段产生本指令每个阶段的所有控制信号产生本指令每个阶段的所有控制信号 Exec信号信号 (ExtOp, ALUSrc, .) 在在

39、1个周期后使用个周期后使用 Mem信号信号 (MemWr, Branch) 在在2个周期后使用个周期后使用 Wr信号信号 (MemtoReg, RegWr) 在在3个周期后使用个周期后使用IF/ID RegisterID/Ex RegisterEx/Mem RegisterMem/Wr Register2Reg/Dec3 Exec4 MemExtOpALUOpRegDstALUSrcBranchMemWrMemtoRegRegWrMainControlExtOpALUOpRegDstALUSrcMemtoRegRegWrMemtoRegRegWrMemtoRegRegWrBranchMemWr

40、BranchMemWr5 Wr 各流水段部件在一个时钟内完成各流水段部件在一个时钟内完成某条指令的某个阶段某条指令的某个阶段的工作!的工作!所以,控制信号所以,控制信号也要保存在流水也要保存在流水段寄存器中!段寄存器中!在下个时钟到达时,把执行结果以及前面传递来的后面各阶段要用到的所有数在下个时钟到达时,把执行结果以及前面传递来的后面各阶段要用到的所有数据(如:指令、立即数、目的寄存器等)和控制信号保存到流水线寄存器中!据(如:指令、立即数、目的寄存器等)和控制信号保存到流水线寄存器中!Pipeline.292022年6月26日星期日流水线中的流水线中的Control Signals 通过对前

41、面流水线数据通路的分析,得知:通过对前面流水线数据通路的分析,得知: 因为每个时钟都会改变因为每个时钟都会改变PC的值,所以的值,所以PC不需要写控制信号不需要写控制信号 流水段寄存器每个时钟都会写入一次,也不需要写控制信号流水段寄存器每个时钟都会写入一次,也不需要写控制信号 Ifecth阶段和阶段和Dec/Reg阶段都没有控制信号,因为功能都一样阶段都没有控制信号,因为功能都一样 Exec阶段的控制信号有四个阶段的控制信号有四个-ExtOp (扩展器操作扩展器操作):1- 符号扩展;符号扩展;0- 零扩展零扩展-ALUSrc (ALU的的B口来源口来源):1- 来源于扩展器;来源于扩展器;0

42、- 来源于来源于BusB-ALUOp (主控制器输出,用于辅助局部主控制器输出,用于辅助局部ALU控制逻辑来决定控制逻辑来决定ALUCtrl)-RegDst (指定目的寄存器指定目的寄存器):1- Rd;0- Rt Mem阶段的控制信号有两个阶段的控制信号有两个-MemWr (DM的写信号的写信号):Store指令时为指令时为1,其他指令为,其他指令为0-Branch (是否为分支指令是否为分支指令):分支指令时为分支指令时为1,其他指令为,其他指令为0 Wr阶段的控制信号有两个阶段的控制信号有两个-MemtoReg (寄存器的写入源寄存器的写入源):1- DM输出;输出;0- ALU输出输出

43、-RegWr (寄存器堆写信号寄存器堆写信号):结果写寄存器的指令都为结果写寄存器的指令都为1,其他指令为,其他指令为0Pipeline.302022年6月26日星期日控制逻辑控制逻辑(Control)的设计的设计 流水线控制逻辑的设计流水线控制逻辑的设计 每条指令的控制信号在指令执行期间都不变每条指令的控制信号在指令执行期间都不变 与单周期控制逻辑设计类似与单周期控制逻辑设计类似 设计过程设计过程-控制逻辑分成两部分控制逻辑分成两部分 主控制逻辑:生成主控制逻辑:生成ALUop和其他控制信号和其他控制信号 局部局部ALU控制逻辑:根据控制逻辑:根据ALUop和和func字段生成字段生成ALU

44、Ctrl-用真值表建立指令和控制信号之间的关系用真值表建立指令和控制信号之间的关系-写出每个控制信号的逻辑表达式写出每个控制信号的逻辑表达式 控制逻辑的输出(控制信号)在控制逻辑的输出(控制信号)在ID阶段生成,并存放在阶段生成,并存放在ID/EX流水段流水段寄存器中,然后每来一个时钟跟着其它数据和信息传送到下一级流寄存器中,然后每来一个时钟跟着其它数据和信息传送到下一级流水段寄存器水段寄存器 在同一时刻,不同阶段同时执行不同指令,不同的指令得到不同控在同一时刻,不同阶段同时执行不同指令,不同的指令得到不同控制信号制信号请复习单周期和多周期控制器设计。请复习单周期和多周期控制器设计。蓝色部分是

45、控制信号蓝色部分是控制信号Pipeline.322022年6月26日星期日控制信号在流水线中的传递以及带来的问题控制信号在流水线中的传递以及带来的问题 在在取数取数/译码(译码(Reg/Dec)阶段)阶段产生本指令每个阶段的所有控制信号产生本指令每个阶段的所有控制信号 Exec信号信号 (ExtOp, ALUSrc, .) 在在1个周期后使用个周期后使用 Mem信号信号 (MemWr, Branch) 在在2个周期后使用个周期后使用 Wr信号信号 (MemtoReg, RegWr) 在在3个周期后使用个周期后使用IF/ID RegisterID/Ex RegisterEx/Mem Regist

46、erMem/Wr RegisterReg/DecExecMemExtOpALUOpRegDstALUSrcBranchMemWrMemtoRegRegWrMainControlExtOpALUOpRegDstALUSrcMemtoRegRegWrMemtoRegRegWrMemtoRegRegWrBranchMemWrBranchMemWrWr 保存在流水段寄存器中的信息(包括前面阶段传递来或执行的结果保存在流水段寄存器中的信息(包括前面阶段传递来或执行的结果及控制信号)一起被传递到下一个流水段!及控制信号)一起被传递到下一个流水段!所以,控制信号也要保存在流水段寄存器中!所以,控制信号也要保

47、存在流水段寄存器中!RtData(这里是否会有问题?这里是否会有问题?)Rt和和Data在在RegWr后到达怎么办?后到达怎么办?同样,这里同样,这里也有问题!也有问题!Pipeline.332022年6月26日星期日流水线中的流水线中的“竞争竞争”问题问题 多周期中解决多周期中解决 Addr 和和 WrEn之间竞争问题的方法之间竞争问题的方法: 在第在第 N周期结束时,让周期结束时,让Addr信号有效信号有效 在第在第 N + 1周期让周期让WrEn有效有效 上述方法在流水线设计中不能用,因为:上述方法在流水线设计中不能用,因为: 每个周期必须能够写每个周期必须能够写Register 每个周

48、期必须能够写每个周期必须能够写MemoryClockIfetchReg/DecExecMemWrStoreIfetchReg/DecExecMemWrStoreIfetchReg/DecExecMemWrR-typeIfetchReg/DecExecMemWrR-type如何解决如何解决? 保证保证Addr信号信号在在WriteEnable信号之前到达信号之前到达Pipeline.342022年6月26日星期日寄存器组的同步和存储器的同步寄存器组的同步和存储器的同步 解决方案解决方案: 将将Write Enable和时钟信号和时钟信号“与与”1. Addr, Data, 和 WrEn 必须在C

49、lk边沿到来后至少稳定一个 set-up时间2. Clk高电平时间 大于 写入时间ClkAddressDataWrEnReg FileorMemoryWrEnI_AddrI_DataReg FileorMemoryClkI_AddrI_WrEnAddressDataI_WrEnC_WrEnC_WrEnActual write等价于等价于须由电路专家确保不会发生须由电路专家确保不会发生“定时错误定时错误”(即:能合理设计(即:能合理设计“Clock”!)相当于单周期通路中的理想寄存器和存储器相当于单周期通路中的理想寄存器和存储器Pipeline.352022年6月26日星期日流水线举例:考察流水

50、线流水线举例:考察流水线DataPath的数据流动情况的数据流动情况End ofCycle 4End ofCycle 5End ofCycle 6End ofCycle 7ClockCycle 1Cycle 2Cycle 3Cycle 4Cycle 5Cycle 6Cycle 7Cycle 8IfetchReg/DecExecMemWr0: LoadIfetchReg/DecExecMemWr4: R-typeIfetchReg/DecExecMemWr8: StoreIfetchReg/DecExecMemWr12: Beq (target is 1000) End of Cycle 4:

51、Loads Mem, R-types Exec, Stores Reg, Beqs Ifetch End of Cycle 5: Loads Wr, R-types Mem, Stores Exec, Beqs Reg End of Cycle 6: R-types Wr, Stores Mem, Beqs Exec End of Cycle 7: Stores Wr, Beqs Mem考察以下几个点的情况:考察以下几个点的情况:说明:后面仅考察数据流动情况,控制信号随数据同步流动因而不再说明。说明:后面仅考察数据流动情况,控制信号随数据同步流动因而不再说明。Pipeline.362022年6

52、月26日星期日第四周期结束时的状态:第四周期结束时的状态: 0: Loads Mem 4: R-types Exec 8: Stores Reg 12: Beqs IfetchIF/ID: Beq InstructionID/Ex: Stores busA & BEx/Mem: R-types ResultMem/Wr: Loads DoutPC = 16DataMemWADiRADoIUnitAIRFileDiRaRbRwRegWr=?ExtOp=xExecUnitbusAbusBImmALUOp=R-typeALUSrc=0Mux10MemtoReg=?10RegDst=1RtRd

53、ImmPC+4PC+4RsRtPC+4ZeroBranch=01012: Beqs Ifet8: Stores Reg4: R-types Exec0: Loads MemClkMemWr=0Clk如果如果Mem阶段是阶段是Branch且且Zero为为1,会怎样?,会怎样? ?s WrLoad指令前指令前某指令某指令(1)(2)(3)(5)(4)Pipeline.372022年6月26日星期日第五周期结束时的状态:第五周期结束时的状态: 0: Lws Wr 4: Rs Mem 8: Stores Exec 12: Beqs Reg 16: Rs IfetchIF/ID: Instruction

54、 16ID/Ex: Beqs busA & BEx/Mem: Stores AddressMem/Wr: R-types ResultPC = 20DataMemWADiRADoIUnitAIRFileDiRaRbRwRegWr=1ExtOp=1ExecUnitbusAbusBImmALUOp=AddALUSrc=1Mux10MemtoReg=110RegDst=xRtRdImmPC+4PC+4RsRtPC+4ZeroBranch=01016: Rs Ifet12: Beqs Reg8: Stores Exec4: R-types MemClkMemWr=0Clk同一周期寄存器有读和写

55、,可能吗?同一周期寄存器有读和写,可能吗?利用时钟上升和下降沿两次触发,能利用时钟上升和下降沿两次触发,能做到前半周期写,后半周期读做到前半周期写,后半周期读寄存器的写口和读口可看寄存器的写口和读口可看成是独立的两个部件!成是独立的两个部件!0: Loads Wr20Pipeline.382022年6月26日星期日第六周期结束时的状态:第六周期结束时的状态: 4: Rs Wr 8: Stores Mem 12: Beqs Exec 16: Rs Reg 20: Rs IfetIF/ID: Instruction 20ID/Ex:R-types busA & BEx/Mem: Beqs

56、ResultsMem/Wr: Nothing for StPC = 24DataMemWADiRA DoIUnitAIRFileDiRaRbRwRegWr=1ExtOp=1ExecUnitbusAbusBImmALUOp=SubALUSrc=0Mux10MemtoReg=010RegDst=xRtRdImmPC+4PC+4RsRtPC+4ZeroBranch=01020:R-types Ifet 16: R-types Reg12: Beqs Exec8: Stores Mem4: R-types WrClkMemWr=1ClkIfetch和和Reg两个周两个周期每条指令执行的期每条指令执行的

57、都一样!都一样!Pipeline.392022年6月26日星期日第七周期结束时的状态:第七周期结束时的状态: 8: Stores Wr 12: Beqs Mem 16: Rs Exec 20: Rs Reg 24: Rs IfetIF/ID: Instruction 24ID/Ex:R-types busA & BEx/Mem: Rtypes ResultsMem/Wr:Nothing for BeqPC = 1000DataMemWADiRA DoIUnitAIRFileDiRaRbRwRegWr=0ExtOp=xExecUnitbusAbusBImmALUOp=R-typeALUS

58、rc=0Mux10MemtoReg=x10RegDst=1RtRdImmPC+4PC+4RsRtPC+4ZeroBranch=11024:R-types Ifet20: R-types Reg16: R-types Exec12: Beqs Mem8: Stores WrClkMemWr=0Clk假定相等,假定相等,则则Zero=1转移目标地转移目标地址送址送PC!这里出现反向数据流这里出现反向数据流!转移目标地址反向送给转移目标地址反向送给PC可可能会导致控制冒险!能会导致控制冒险!Pipeline.402022年6月26日星期日总结前面的流水线执行过程(有关总结前面的流水线执行过程(有关b

59、eq)Branch指令何时确定是否转移?转移目标地址在第几周期计算出来?指令何时确定是否转移?转移目标地址在第几周期计算出来?- 第六周期得到第六周期得到Zero和转移地址、第七周期控制转移地址送到和转移地址、第七周期控制转移地址送到PC输入端、第八输入端、第八周期开始才能根据转移地址取指令周期开始才能根据转移地址取指令- 如果如果Branch指令执行结果是需要转移(称为指令执行结果是需要转移(称为taken),则流水线会怎样?),则流水线会怎样?ClockCycle 1 Cycle 2Cycle 3 Cycle 4Cycle 5Cycle 6Cycle 7Cycle 8IfetchReg/D

60、ecExecMemWr0: LoadIfetchReg/DecExecMemWr4: R-typeIfetchReg/DecExecMemWr8: StoreIfetchReg/DecExecMemWr12: Beq (target is 1000)IfetchReg/DecExecMemWr16: R-typeIfetchReg/DecExecMemWrIfetchReg/DecExecMem24: R-type20: R-typeIfetchReg/DecExec1000: Target of BrPipeline.412022年6月26日星期日转移分支指令转移分支指令(Branch)引起的引起的“延迟延迟”现象现象 虽然虽然Beq

温馨提示

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

评论

0/150

提交评论