版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1
附錄A流水線技術(shù)A.1 流水線的基本概念A(yù).2 流水線的主要障礙---流水線冒險(xiǎn)(相關(guān))A.3 流水線處理機(jī)及其設(shè)計(jì)(李亞民教材相關(guān)內(nèi)容)A.4 異常事件處理A.5擴(kuò)展流水線到多周期操作A.3流水線處理機(jī)及其設(shè)計(jì)A.3.1流水線處理機(jī)的指令系統(tǒng)A.3.2流水線處理機(jī)的數(shù)據(jù)路徑A.3.3流水線處理機(jī)的控制A.3.4結(jié)構(gòu)相關(guān)及解決方法A.3.5數(shù)據(jù)相關(guān)及解決辦法A.3.6轉(zhuǎn)移相關(guān)及解決方法A.3.7異常事件處理這部分內(nèi)容來源于:李亞民.計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu).清華大學(xué)出版社
A.3.1流水線處理機(jī)的指令系統(tǒng)流水線(pipeline)是一種能夠使多條指令重疊執(zhí)行的處理機(jī)的實(shí)現(xiàn)技術(shù),它已成為現(xiàn)代處理機(jī)設(shè)計(jì)中最為關(guān)鍵的技術(shù)。流水線處理機(jī)把一條指令的執(zhí)行分成幾個(gè)步驟,或稱級(jí)(stages),每一級(jí)在一個(gè)時(shí)鐘周期內(nèi)完成。在每個(gè)時(shí)鐘周期,處理機(jī)啟動(dòng)執(zhí)行一條指令。如果處理機(jī)的流水線有m級(jí),則同時(shí)可重疊執(zhí)行的指令總條數(shù)將為m,每條指令處在不同的執(zhí)行階段。如果分級(jí)分得好的話,那么每一級(jí)都沒有時(shí)間上的浪費(fèi),這是最理想的情況。一、流水線的性能指標(biāo)(1)流水線吞吐率TP(也稱流水線排空時(shí)間)TP=Tkn其中:n為任務(wù)數(shù)量,Tk是處理完n個(gè)任務(wù)所用的時(shí)間。假設(shè)一個(gè)時(shí)間段均等(
t)的流水線,級(jí)數(shù)為k,第一條指令輸入后,經(jīng)過k
t的時(shí)間完成,此后的每一個(gè)
t完成一條指令,這樣,流水線完成n條指令所需時(shí)間為:Tk
=k
t+(n
1)
t代入基本公式:TP=Tkn=k
t+(n
1)
tn最大吞吐率:TPmax=limn
k
t+(n
1)
tn=
t1(2)流水線加速比流水線加速比定義:按順序方式執(zhí)行一批指令所用的時(shí)間與按流水線方式執(zhí)行同一批指令所用時(shí)間之比。加速比:S=TkTs順序方式執(zhí)行所用時(shí)間流水線方式執(zhí)行所用時(shí)間假設(shè)流水線各段時(shí)間均等為
t,則一條k段流水線完成n條指令所需時(shí)間為:Tk=(k+n
1)
t。假設(shè)按順序執(zhí)行n條指令,則完成n條指令所需時(shí)間為:Ts=nk
t。因此有加速比:S=nkk+n
1最大加速比:Smax
=nkk+n
1limn
=k即當(dāng)n>>k時(shí),流水線加速比等于流水線段數(shù),因此理論上流水線段數(shù)越多越好,但在設(shè)計(jì)上會(huì)帶來許多問題。(3)流水線效率流水線效率是指:流水線中的功能部件的利用率,
其值為流水線功能部件的實(shí)際使用時(shí)間與整個(gè)運(yùn)行時(shí)間之比。假設(shè)流水線級(jí)數(shù)為k,各級(jí)時(shí)間相等(
t),完成n條指令總時(shí)間為Tk,則每一級(jí)的效率為(理想情況):E=由于各級(jí)相同,則整條流水線利用率:ei=n
tTk=(k+n
1)
tn
t=(k+n
1)n(k+n
1)n當(dāng)n>>k時(shí),E趨于1。二、流水線處理機(jī)的指令系統(tǒng)和指令格式ALU操作類型的指令:and,or,add,sub;存儲(chǔ)器訪問指令:load,store;條件轉(zhuǎn)移指令:bne,beq;無條件轉(zhuǎn)移指令:branch共9種。*ALU指令除了把運(yùn)算結(jié)果寫入寄存器堆之外,也把ZERO標(biāo)志寫入Z寄存器。條件轉(zhuǎn)移指令使用Z標(biāo)志決定是否轉(zhuǎn)移。10指令長度:32位;地址32位
設(shè)定指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器的存儲(chǔ)單元32位,按字尋址每次按PC取指令后,(PC)+1→PC表1.1流水線處理機(jī)的指令系統(tǒng)和指令格式31262521201615540指令意義000000rdrs1rs2andrd,rs1,rs2寄存器與寄存器000001rdrs1immeandird,rs1,imme寄存器與立即數(shù)000010rdrs1rs2orrd,rs1,rs2寄存器或寄存器000011rdrs1immeorird,rs1,imme寄存器或立即數(shù)000100rdrs1rs2addrd,rs1,rs2寄存器加寄存器000101rdrs1immeaddird,rs1,imme寄存器加立即數(shù)000110rdrs1rs2subrd,rs1,rs2寄存器減寄存器000111001000001001rdrs1immeimmeimmesubird,rs1,immeloadrd,imme(rs1)storerd,imme(rs1)寄存器減立即數(shù)從存儲(chǔ)器讀數(shù)據(jù)向存儲(chǔ)器寫數(shù)據(jù)rdrs1rdrs1001010001011001100dispdispdispbnedispbeqdispbranchdisp結(jié)果非0時(shí)轉(zhuǎn)移結(jié)果為0時(shí)轉(zhuǎn)移無條件轉(zhuǎn)移三、非流水線方式下指令系統(tǒng)的實(shí)現(xiàn)
單周期實(shí)現(xiàn):每條指令執(zhí)行用一個(gè)時(shí)鐘周期∕CPI=1,
時(shí)鐘周期長(取最長指令執(zhí)行時(shí)間)ClkLoadStoreWasteCycle1Cycle2IFIDEXMEMWBIFIDEXMEMWB單周期處理機(jī)實(shí)現(xiàn)讀寄存器地址寫地址(PC用字地址,相當(dāng)于字節(jié)偏移量的4)多路選擇器000000rdrs1rs2andrd,rs1,rs2表1.1流水線處理機(jī)的指令系統(tǒng)和指令格式31262521201615540指令意義000000rdrs1rs2andrd,rs1,rs2寄存器與寄存器000001rdrs1immeandird,rs1,imme寄存器與立即數(shù)000010rdrs1rs2orrd,rs1,rs2寄存器或寄存器000011rdrs1immeorird,rs1,imme寄存器或立即數(shù)000100rdrs1rs2addrd,rs1,rs2寄存器加寄存器000101rdrs1immeaddird,rs1,imme寄存器加立即數(shù)000110rdrs1rs2subrd,rs1,rs2寄存器減寄存器000111001000001001rdrs1immeimmeimmesubird,rs1,immeloadrd,imme(rs1)storerd,imme(rs1)寄存器減立即數(shù)從存儲(chǔ)器讀數(shù)據(jù)向存儲(chǔ)器寫數(shù)據(jù)rdrs1rdrs1001010001011001100dispdispdispbnedispbeqdispbranchdisp結(jié)果非0時(shí)轉(zhuǎn)移結(jié)果為0時(shí)轉(zhuǎn)移無條件轉(zhuǎn)移15
一條指令的執(zhí)行過程分為5個(gè)階段:IF:取指令按照PC內(nèi)容訪問指令存儲(chǔ)器,取出指令順序執(zhí)行,則PC+1,以獲取下一條指令地址ID:指令譯碼/讀寄存器指令譯碼讀寄存器如果需要,符號(hào)擴(kuò)展指令中的偏移量轉(zhuǎn)移指令,
PC+偏移量ClkLoadStoreWasteCycle1Cycle2IFIDEXMEMWBIFIDEXMEMWB16EX:執(zhí)行/有效地址計(jì)算Load/Store:
計(jì)算數(shù)據(jù)存儲(chǔ)器有效地址R-R/R-IALU:
執(zhí)行運(yùn)算操作MEM:數(shù)據(jù)存儲(chǔ)器訪問Load:
送有效地址到數(shù)據(jù)存儲(chǔ)器,取數(shù)據(jù)Store:
寫ID讀出數(shù)據(jù)到有效地址單元中
WB:寫回寄存器LoadorALU:寫結(jié)果到寄存器堆
ClkLoadStoreWasteCycle1Cycle2IFIDEXMEMWBIFIDEXMEMWB單周期處理機(jī)的指令執(zhí)行例1:addrd,rs1,rs2讀寄存器地址寫地址(PC用字地址,相當(dāng)于字節(jié)偏移量的4)多路選擇器18例2:addird,rs1,imme單周期處理機(jī)的指令執(zhí)行讀寄存器地址寫地址(PC用字地址,相當(dāng)于字節(jié)偏移量的4)多路選擇器19例3:loadrd,imme(rs1)單周期處理機(jī)的指令執(zhí)行讀寄存器地址寫地址(PC用字地址,相當(dāng)于字節(jié)偏移量的4)多路選擇器20例4:storerd,imme(rs1)單周期處理機(jī)的指令執(zhí)行讀寄存器地址(PC用字地址,相當(dāng)于字節(jié)偏移量的4)多路選擇器21例5:branchdisp單周期處理機(jī)的指令執(zhí)行(PC用字地址,相當(dāng)于字節(jié)偏移量的4)
指令執(zhí)行時(shí)用到的主要功能部件和它們所需的時(shí)間如下:指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器:10ns;ALU和地址加法器:10ns;寄存器堆:5ns;假定其它部件,如PC寄存器、多路器、控制部件等花費(fèi)的時(shí)間為0。10(ns)510105ALU指令指令存儲(chǔ)器寄存器堆ALU寄存器堆30load指令指令存儲(chǔ)器寄存器堆ALU數(shù)據(jù)存儲(chǔ)器寄存器堆40store指令指令存儲(chǔ)器寄存器堆ALU數(shù)據(jù)存儲(chǔ)器35轉(zhuǎn)移指令指令存儲(chǔ)器加法器(10)20表1.2各類指令執(zhí)行所需要的時(shí)間23單周期處理機(jī)的時(shí)鐘周期:40ns二種處理機(jī)執(zhí)行時(shí)序比較:(a)單周期;(b)多周期;四、單周期與多周期處理機(jī)時(shí)序五、流水線處理機(jī)時(shí)序流水線處理機(jī):流水線是5級(jí)。示意圖如下:IM(instructionmemory):指令存儲(chǔ)器REG(registerfile):寄存器堆DM
(data
memory):數(shù)據(jù)存儲(chǔ)器IFIDEXMEMWB流水線處理機(jī):一個(gè)時(shí)鐘周期取各級(jí)操作中所需時(shí)間最長的操作執(zhí)行時(shí)間。時(shí)鐘周期定義為10ns(盡管讀寫寄存器堆只需5ns,也仍然要分配給它整個(gè)時(shí)鐘周期)。表1.3使用流水線技術(shù)后指令執(zhí)行所需要的時(shí)間(ns)1010101010ALU指令指令存儲(chǔ)器寄存器堆ALU寄存器堆50load指令指令存儲(chǔ)器寄存器堆ALU數(shù)據(jù)存儲(chǔ)器寄存器堆50store指令指令存儲(chǔ)器寄存器堆ALU數(shù)據(jù)存儲(chǔ)器40轉(zhuǎn)移指令指令存儲(chǔ)器加法器20圖1.1三種處理機(jī)執(zhí)行時(shí)序比較:(a)單周期;(b)多周期;(c)流水線28A.3流水線處理機(jī)及其設(shè)計(jì)A.3.1流水線處理機(jī)的指令系統(tǒng)A.3.2流水線處理機(jī)的數(shù)據(jù)路徑A.3.3流水線處理機(jī)的控制A.3.4結(jié)構(gòu)相關(guān)及解決方法A.3.5數(shù)據(jù)相關(guān)及解決辦法A.3.6轉(zhuǎn)移相關(guān)及解決方法A.3.7異常事件處理
A.3.2流水線處理機(jī)的數(shù)據(jù)路徑流水線處理機(jī)的數(shù)據(jù)通路結(jié)構(gòu)與工作原理。一、流水線級(jí)非流水線單周期處理機(jī)組成結(jié)構(gòu)如后圖把執(zhí)行指令的過程分為5部分,使其能夠按流水線方式執(zhí)行指令: (1)IF(instructionfetch)取指令;(2)ID(instructiondecode)指令譯碼并讀寄存器操作數(shù);(3)EXE(execution)執(zhí)行;(4)MEM(memoryaccess)存儲(chǔ)器訪問;(5)WB(writeback)寫回。單周期處理機(jī)讀寄存器地址寫地址(PC用的是字地址,相當(dāng)于字節(jié)偏移量的4)指令執(zhí)行從左移向右通過電路如圖箭頭所示,指令執(zhí)行從左移向右通過電路。但有兩處從右向左的例外:WB級(jí):把運(yùn)算結(jié)果寫回寄存器堆中;IF級(jí):把經(jīng)過計(jì)算的下一條指令的地址寫入程序計(jì)數(shù)器PC中。下一條指令地址的計(jì)算方法有兩種:*一種是當(dāng)前PC加1;*另一種是當(dāng)前PC加字地址偏移量,偏移量在轉(zhuǎn)移指令中定義出。
流水線處理機(jī)的最大特點(diǎn):每一個(gè)時(shí)鐘周期取出一條指令來執(zhí)行。所有的指令按取出的先后次序通過圖1.2中的從左至右的數(shù)據(jù)路徑。
依照指令類型的不同,每種指令在執(zhí)行過程中可能會(huì)用到數(shù)據(jù)路徑的不同的部分。
例如:圖1.3中畫出的是處理機(jī)連續(xù)執(zhí)行l(wèi)oad指令時(shí)所要使用的數(shù)據(jù)路徑中的功能部件。load指令實(shí)際上是使用功能部件最多的指令。圖1.3流水線處理機(jī)連續(xù)執(zhí)行l(wèi)oad指令時(shí)的情形圖1.3中,IM(instructionmemory):指令存儲(chǔ)器。*第一級(jí),IF級(jí),PC的內(nèi)容作為訪問IM的地址,送到IM的地址輸入端。*第二級(jí)中,REG(registerfile)代表寄存器堆或者指令中立即數(shù)的擴(kuò)展。Load指令訪問存儲(chǔ)器時(shí)所使用的地址由兩個(gè)數(shù)據(jù)相加得到,一個(gè)數(shù)據(jù)是寄存器操作數(shù),另一個(gè)數(shù)據(jù)是經(jīng)符號(hào)擴(kuò)展的立即數(shù)。*第三級(jí)的ALU做算術(shù)邏輯運(yùn)算。針對(duì)load指令來講,ALU完成地址加法運(yùn)算。*第四級(jí)中,DM(datamemory)代表數(shù)據(jù)存儲(chǔ)器。存儲(chǔ)器數(shù)據(jù)將在這一級(jí)中被讀出。存儲(chǔ)器的地址輸入就是ALU計(jì)算出的結(jié)果。*第五級(jí),從存儲(chǔ)器中取出的數(shù)據(jù)被寫回到寄存器堆中。這一級(jí)中的REG就是第二級(jí)中的REG。第二級(jí)讀REG,第五級(jí)寫REG。圖1.3流水線處理機(jī)連續(xù)執(zhí)行l(wèi)oad指令時(shí)的情形
在單周期處理機(jī)中,如果一條指令還沒有執(zhí)行完畢,PC的內(nèi)容不會(huì)改變。這就使得在一條指令的整個(gè)執(zhí)行過程中,IM始終輸出當(dāng)前指令。流水線處理機(jī)每個(gè)時(shí)鐘周期都要取出一條指令。因此,當(dāng)流水線處理機(jī)已從存儲(chǔ)器取出一條指令并把它送到ID級(jí)去譯碼時(shí),下一條指令也正在從指令存儲(chǔ)器中取出。如果先取出的指令沒被保存,則它后面正在被取出的指令會(huì)對(duì)它造成影響。也就是說,必須要使用寄存器來保存從存儲(chǔ)器取出的指令。流水線寄存器的引入推而廣之,我們必須要在流水線的各級(jí)之間安排一組寄存器,用以保存當(dāng)前時(shí)鐘周期各流水級(jí)操作的結(jié)果,以便為下個(gè)周期使用(我們只能使用觸發(fā)器寄存器,它把時(shí)鐘上升沿時(shí)數(shù)據(jù)輸入端的信息打人寄存器中;而不能使用鎖存器,因?yàn)殒i存器的輸出在時(shí)鐘高電平時(shí)跟隨輸入的變化而變化。)我們稱這些寄存器為流水線寄存器。由此,我們能夠初步設(shè)想出流水線處理機(jī)應(yīng)有圖1.4所示的結(jié)構(gòu)。圖1.4流水線處理機(jī)每級(jí)之間的流水線寄存器PC(32位):作為一個(gè)特殊的流水線寄存器,因?yàn)樵诜橇魉€處理機(jī)中PC也是需要的。由于流水線處理機(jī)每個(gè)時(shí)鐘周期都從指令存儲(chǔ)器取出一條指令,它的值在每次周期結(jié)束時(shí)都將被改變。程序不發(fā)生轉(zhuǎn)移時(shí),PC加1;(字地址加1,字節(jié)地址是加4)轉(zhuǎn)移時(shí),PC加符號(hào)擴(kuò)展的偏移量。指令寄存器IR(32位):第一級(jí)與第二級(jí)之間的流水線寄存器。
第二和第三級(jí)之間需要較多的寄存器:*從寄存器堆中讀出的兩個(gè)32位數(shù)據(jù)A和B必須要保存。*經(jīng)符號(hào)擴(kuò)展后的32位立即數(shù)I也要保存。圖中的ISE(immediatesign-extend)代表指令中立即數(shù)的符號(hào)擴(kuò)展。*一個(gè)d寄存器(5位),它被用來保存目的寄存器號(hào);因?yàn)橹噶畹牟僮鹘Y(jié)果要在WB級(jí)寫入寄存器堆,目的寄存器號(hào)也要在那時(shí)使用,因此必須要同步跟隨過去。40圖1.4流水線處理機(jī)每級(jí)之間的流水線寄存器一般的ALU操作指令,要么是A與B操作,要么是A與I操作。我們能不能在ID級(jí)增加一個(gè)多路器而省去B或I寄存器,只使用一個(gè)32位寄存器呢?答案是否定的。原因出在store指令上。store指令同時(shí)使用A,B和I。A和I用來計(jì)算存儲(chǔ)器地址,B用來保存寫入存儲(chǔ)器的數(shù)據(jù)。在流水線處理機(jī)中,這些數(shù)據(jù)必須要。在一個(gè)時(shí)鐘周期中同時(shí)產(chǎn)生,以保證不引起資源沖突。第三級(jí)和第四級(jí)之間除了d之外,還有Z,R和S:
Z(1位):用于存放ALU的一位ZERO標(biāo)志。當(dāng)ALU指令的運(yùn)算結(jié)果為全0時(shí),ZERO輸出1,否則輸出0。在執(zhí)行條件轉(zhuǎn)移指令時(shí),Z用來決定是否真正轉(zhuǎn)移。
R(32位):存ALU運(yùn)算結(jié)果(R型/load/store)。
S(32位):專為store指令而設(shè),用來存放要被寫入存儲(chǔ)器中的32位數(shù)據(jù)。43圖1.4流水線處理機(jī)每級(jí)之間的流水線寄存器
第四級(jí)和第五級(jí)之間的寄存器如下:
D(32位):存放load指令從存儲(chǔ)器中讀出的數(shù)據(jù);
C(32位):只是保存前一級(jí)的R,即R型指令的運(yùn)算結(jié)果。
這一級(jí)d寄存器的輸出用于指定目的寄存器,D或C的數(shù)據(jù)要被寫入由d所指定的目的寄存器中。我們不妨把寄存器堆看作是最后一級(jí)流水線寄存器。
下面我們描述每級(jí)流水線的操作。45圖1.4流水線處理機(jī)每級(jí)之間的流水線寄存器二、流水線各級(jí)的操作1.IF級(jí):在第一級(jí)取指令級(jí)(圖1.5)使用PC的內(nèi)容訪問指令存儲(chǔ)器,取出指令,并在該級(jí)結(jié)束時(shí),把指令打人IR寄存器。圖1.5流水線第一級(jí)——取指令級(jí)47下一條指令的地址也在這一級(jí)計(jì)算出,并把它打人PC寄存器。新的PC的計(jì)算有兩種情況:
a、程序不發(fā)生轉(zhuǎn)移時(shí),新的PC地址由當(dāng)前PC值加1得到(1是指令字偏移量,相當(dāng)于字節(jié)地址偏移量的4),即指向下一條順序的指令;
b、發(fā)生轉(zhuǎn)移時(shí)的情況較復(fù)雜,將在后面描述。2.ID級(jí)指令譯碼級(jí)(圖1.6)主要有兩件事情要做:
從寄存器堆中讀寄存器操作數(shù)和對(duì)指令中的立即數(shù)部分進(jìn)行符號(hào)擴(kuò)展。此外:目的寄存器號(hào)要保存在流水線寄存器d中,以便在WB級(jí)指定把結(jié)果寫入哪一個(gè)寄存器中。
A2輸入端前多路器為store指令而設(shè)。不是store時(shí),多路器選擇IR中的rs2;是store指令時(shí),多路器選擇IR中的rd。圖1.6流水線第二級(jí)——指令譯碼級(jí)49
●
第二件工作由控制部件完成??刂撇考鶕?jù)指令操作碼OPCODE,產(chǎn)生所有的控制信號(hào),將在下一節(jié)描述。
轉(zhuǎn)移指令將在本級(jí)結(jié)束,稍后再詳細(xì)討論它。圖1.6流水線第二級(jí)——指令譯碼級(jí)3.EXE級(jí)
執(zhí)行級(jí)(圖1.7)的工作均由ALU來做:*ALU運(yùn)算類指令將在本級(jí)計(jì)算結(jié)果,并把它打人R寄存器。
ALU的ZERO輸出也被打入Z寄存器。ALU的兩個(gè)操作數(shù),一個(gè)來自于寄存器rs1,它在前一級(jí)已被打人流水線寄存器A中了;另一個(gè)或是rs2操作數(shù)(B中內(nèi)容),或是立即數(shù)(I中內(nèi)容)。d直接傳遞。
圖1.7流水線第三級(jí)——執(zhí)行級(jí)51*load和store指令在本級(jí)計(jì)算存儲(chǔ)器地址(ALU做加法)。兩個(gè)源操作數(shù)一個(gè)來自于A,一個(gè)來自于I。若是store指令,B的內(nèi)容(寫入DM)將被打人流水線寄存器S。
圖1.7流水線第三級(jí)——執(zhí)行級(jí)4.MEM級(jí)
存儲(chǔ)器訪問級(jí)(圖1.8)專為load/store指令而設(shè)。
load/store均使用流水線寄存器R的輸出作為訪問存儲(chǔ)器的地址。store指令把S的內(nèi)容寫入存儲(chǔ)器。load指令讀存儲(chǔ)器,并把讀出的數(shù)據(jù)打入流水線寄存器D。
ALU指令在本級(jí)只把R內(nèi)容打入C。圖1.8流水線第四級(jí)——存儲(chǔ)器訪問級(jí)5.WB級(jí)
寫回級(jí)(圖1.9)把指令執(zhí)行結(jié)果寫回到寄存器堆。
目的寄存器號(hào)由從ID級(jí)一直傳遞過來d指定。寫入的來源有兩個(gè):
*一個(gè)是流水線寄存器D中的內(nèi)容(load指令讀出內(nèi)容),即存儲(chǔ)器數(shù)據(jù);
*另一個(gè)是流水線寄存器C的內(nèi)容,即ALU指令的計(jì)算結(jié)果。
圖1.9流水線第五級(jí)——寫回級(jí)
下面分別是ALU運(yùn)算類型的指令,load和store指令執(zhí)行時(shí)用到的流水線數(shù)據(jù)路徑。圖1.10ALU指令執(zhí)行時(shí)用到的流水線數(shù)據(jù)路徑例:addr2,r3,r4;圖1.11load指令執(zhí)行時(shí)用到的流水線數(shù)據(jù)路徑例:loadr1,10(r5)圖1.12store指令執(zhí)行時(shí)用到的流水線數(shù)據(jù)路徑例:storer3,20(r1)57A.3流水線處理機(jī)及其設(shè)計(jì)A.3.1流水線處理機(jī)的指令系統(tǒng)A.3.2流水線處理機(jī)的數(shù)據(jù)路徑A.3.3流水線處理機(jī)的控制A.3.4結(jié)構(gòu)相關(guān)及解決方法A.3.5數(shù)據(jù)相關(guān)及解決辦法A.3.6轉(zhuǎn)移相關(guān)及解決方法A.3.7異常事件處理A.3.3流水線處理機(jī)的控制
為非流水線多周期處理機(jī)設(shè)計(jì)控制部件時(shí),有兩種方法可供我們選擇:一種是有限狀態(tài)機(jī)的硬布線方法;另一種是微程序控制方法。雖然流水線處理機(jī)也是多周期處理機(jī),但由于多條指令的重疊執(zhí)行,則很難描述某個(gè)時(shí)鐘周期處理機(jī)到底處在何種狀態(tài),因?yàn)橛刑嗟牟煌噶铋g的組合情況。微程序控制方法也會(huì)遇到類似的問題。一、算術(shù)操作和存儲(chǔ)器訪問控制通過下面程序的例子,研究流水線處理機(jī)多條指令重疊操作的過程,分析流水線各級(jí)所需要的操作控制信號(hào),然后依此設(shè)計(jì)出產(chǎn)生控制信號(hào)的控制部件。
0
addir1,r1,4;r1←r1+4
1
loadr2,100(r3);r2
←
memory
[
r3+100
]
2 sub
r4,r5,r6;r4
←
r5–r6,
3 add
r7,r5,r6;r7
←
r5
+
r6
4
storer8,200(r9);memory
[
r9+200
]←
r8
5 subir10,r10,1;r10
←
r10
-1
以上的例子比較簡單,指令之間沒有任何數(shù)據(jù)相關(guān)(冒險(xiǎn))。以下按順序描述每個(gè)周期流水線數(shù)據(jù)路徑的操作以及所需的控制信號(hào)。
注意,前4個(gè)周期,指令還沒有充滿流水線。從第五個(gè)周期開始,指令充滿流水線。但由于例子中總共只有6條指令,從第七個(gè)周期開始,不再有新的指令被取來。隨著指令不斷地完成執(zhí)行,流水線將在第11個(gè)周期完全變空。
在實(shí)際的計(jì)算機(jī)系統(tǒng)中,處理機(jī)總是能取到指令來執(zhí)行。當(dāng)沒有用戶程序時(shí),處理機(jī)轉(zhuǎn)去執(zhí)行操作系統(tǒng)程序。61程序例子的執(zhí)行時(shí)序圖subir10,r10,11.第一個(gè)時(shí)鐘周期程序例子執(zhí)行時(shí)的第一個(gè)時(shí)鐘周期
例中的6條指令地址(這里用的是字地址,相當(dāng)于字節(jié)偏移量的4)分別為0,1,2,3,4,5。0
第一個(gè)時(shí)鐘周期是第一條指令的IF級(jí):*PC輸出0,從存儲(chǔ)器取出第一條指令addir1,r1,4。*地址加法器前多路器選擇1,與當(dāng)前PC值相加,得到字地址1,即下一條指令的地址。在該周期結(jié)束時(shí),時(shí)鐘的上升沿把取出的指令無條件地寫人指令寄存器IR。同時(shí)也把1寫入PC。程序例子執(zhí)行時(shí)的第一個(gè)時(shí)鐘周期01多路器的選擇信號(hào)為轉(zhuǎn)移發(fā)生BTAKEN(branchtaken):
轉(zhuǎn)移發(fā)生,它為1時(shí),多路器選擇經(jīng)符號(hào)擴(kuò)展的偏移量,與當(dāng)前PC值相加,加法器輸出轉(zhuǎn)移地址。
本例中沒有轉(zhuǎn)移指令,因此轉(zhuǎn)移總也不發(fā)生,即BTAKEN=0。
第一個(gè)時(shí)鐘周期結(jié)束,即剛進(jìn)入第二個(gè)周期時(shí):
PC輸出1;
IR輸出第一條指令
addir1,r1,4。2.第二個(gè)時(shí)鐘周期
這時(shí)第一條指令進(jìn)入ID級(jí),第二條指令進(jìn)入IF級(jí)。兩條指令的操作在各自的級(jí)同時(shí)進(jìn)行:程序例子執(zhí)行時(shí)的第二個(gè)時(shí)鐘周期SST(1)處在ID級(jí)的第一條指令addir1,r1,4完成譯碼操作,并根據(jù)指令格式中各字段的值:對(duì)立即數(shù)部分做符號(hào)擴(kuò)展,從寄存器堆中讀出兩個(gè)寄存器r1和r4的內(nèi)容。
在本周期結(jié)束時(shí),把4、r1和r4內(nèi)容分別寫入流水線寄存器I,A和B中。SST67
實(shí)際上,寄存器r4的內(nèi)容不被使用。這個(gè)4來自于立即數(shù)中的4,它們?cè)谥噶罡袷街刑幵谙嗤奈恢谩R簿褪钦f,把寄存器r4的內(nèi)容打入B中做的是無用功。但這沒關(guān)系,因?yàn)橄乱粋€(gè)周期不使用它。這樣做的原因是為了簡化控制電路,即流水線寄存器不要求配置寫使能端了(以后,如果數(shù)據(jù)不被使用,不再描述它)。
寄存器地址A2輸入端前面的多路器選擇指令格式中的rs2字段或者rd字段。選擇端的名字定義為SST(selectstore)。當(dāng)是store指令,SST=1,選擇rd;
否則SST=0,選擇rs2。
本例中SST=0,選擇rs2
;實(shí)際不使用第二個(gè)寄存器操作數(shù),因此SST是什么都沒關(guān)系。31262521201615540指令意義000100rdrs1rs2addrd,rs1,rs2寄存器加寄存器000101rdrs1immeaddird,rs1,imme寄存器加立即數(shù)
r1目的寄存器編號(hào)1也被打人流水線寄存器d,以備在WR級(jí)用它來指定目的寄存器,向其中寫入操作結(jié)果。SST(2)同時(shí),*從存儲(chǔ)器取出第二條指令loadr2,100(r3);在周期結(jié)束時(shí)打入IR。*BTAKEN=0,選擇PC+1,2送到PC。SST12
第二個(gè)時(shí)鐘周期結(jié)束,即剛進(jìn)入第三個(gè)周期時(shí):
PC輸出2;
IR輸出第二條指令loadr2,100(r3);
I輸出32位的4,A輸出r1的內(nèi)容,d輸出1(目的寄存器是r1)。3.第三個(gè)時(shí)鐘周期
這時(shí)第一條指令進(jìn)入EXE級(jí),第二條指令進(jìn)入ID級(jí),第三條指令進(jìn)入IF級(jí)。3條指令的操作在各自的級(jí)同時(shí)進(jìn)行:程序例子執(zhí)行時(shí)的第三個(gè)時(shí)鐘周期SST(1)處在EXE級(jí)的第一條指令addr1,r1,4由ALU完成加法操作:多路器選擇信號(hào)SIMM(selectimmediate)為1,意為選擇立即數(shù)
ALU的兩個(gè)源操作數(shù)分別來自A和I,ALUOP是加運(yùn)算控制信號(hào)。SST程序例子執(zhí)行時(shí)的第三個(gè)時(shí)鐘周期73
ALU右端的流水線寄存器d,R被無條件地打入數(shù)據(jù)。而只有當(dāng)指令為ALU運(yùn)算類型時(shí),寫使能信號(hào)WZ=1,才把ALU的ZERO輸出打入一位流水線寄存器Z。這是因?yàn)椴⒉皇撬械闹噶疃夹薷腪標(biāo)志寄存器。SST(2)處在ID級(jí)的第二條指令loadr2,100(r3)完成譯碼、立即數(shù)符號(hào)擴(kuò)展以及讀寄存器操作。
在本周期結(jié)束時(shí),把32位的100和r3的內(nèi)容分別寫入流水線寄存器I和A。
目的寄存器號(hào)2也被打入流水線寄存器d。
SST=0,選擇rs2。
SST程序例子執(zhí)行時(shí)的第三個(gè)時(shí)鐘周期74(3)PC輸出2,從存儲(chǔ)器取出第三條指令subr4,r5,r6;在周期結(jié)束時(shí)打人IR。BTAKEN=0,周期結(jié)束時(shí)把3打人PC。
第三個(gè)時(shí)鐘周期結(jié)束,剛進(jìn)入第四個(gè)周期時(shí):PC輸出3,指向第四條指令;IR輸出第三條指令subr4,r5,r6;I輸出32位的100,A輸出寄存器r3的內(nèi)容;R輸出第一條指令的加法結(jié)果。SSTSST程序例子執(zhí)行時(shí)的第三個(gè)時(shí)鐘周期75234.第四個(gè)時(shí)鐘周期:第一條指令進(jìn)入MEM級(jí),第二條指令進(jìn)入EXE級(jí),第三條指令進(jìn)入ID級(jí),第四條指令進(jìn)入IF級(jí)。程序例子執(zhí)行時(shí)的第四個(gè)時(shí)鐘周期4條指令的操作在各自的級(jí)同時(shí)進(jìn)行:(1)R的內(nèi)容直接傳遞到C。(2)處在EXE級(jí)的第二條指令loadr3,100(r2)由ALU計(jì)算存儲(chǔ)器地址。多路器的選擇信號(hào)SIMM=1,選擇立即數(shù)。ALU的兩個(gè)源操作數(shù)分別來自A和I,結(jié)果打入R。WZ=0,不打人流水線寄存器Z。程序例子執(zhí)行時(shí)的第四個(gè)時(shí)鐘周期(3)處在ID級(jí)的第三條指令subr4,r5,r6完成譯碼、讀寄存器操作。SST=0,選擇rs2。在本周期結(jié)束時(shí),寄存器r5和r6的內(nèi)容分別寫入A和B。目的寄存器號(hào)4打入d,以備在WR級(jí)用它來指定目的寄存器r4,向其中寫入減法操作的結(jié)果。程序例子執(zhí)行時(shí)的第四個(gè)時(shí)鐘周期(4)PC輸出3,從存儲(chǔ)器取出第四條指令addr7,r5,r6,在周期結(jié)束時(shí)打人IR。BTAKEN=0,周期結(jié)束時(shí)把4打入PC。
第四個(gè)時(shí)鐘周期結(jié)束,即剛進(jìn)入第五個(gè)周期時(shí),PC輸出4,指向第五條指令;IR輸出第四條指令addr7,r5,r6;A和B分別輸出寄存器r5和r6的內(nèi)容(第三條指令);R輸出存儲(chǔ)器地址(第二條指令);C輸出第一條指令的加法結(jié)果。程序例子執(zhí)行時(shí)的第四個(gè)時(shí)鐘周期79345.第五個(gè)時(shí)鐘周期:這時(shí)指令充滿流水線。第一條指令進(jìn)入WB級(jí),第二條指令進(jìn)入MEM級(jí),第三條指令進(jìn)入EXE級(jí),第四條指令進(jìn)入ID級(jí),第五條指令進(jìn)入IF級(jí)。
5條指令的操作在各自的級(jí)同時(shí)進(jìn)行。程序例子執(zhí)行時(shí)的第五個(gè)周期(1)第一條指令處在WB級(jí)。這時(shí),d輸出1(接到寄存器堆的AD端)。寄存器寫使能信號(hào)WREG(writeregisterfile)為1。多路器選擇信號(hào)SLD(selectload)為0,選擇C輸出,即把加法結(jié)果寫入寄存器堆的r1寄存器。至此,第一條指令完成了執(zhí)行,周期結(jié)束就退出流水線。程序例子執(zhí)行時(shí)的第五個(gè)周期82(2)處在MEM級(jí)的第二條指令load
r2,100(r3)
訪問存儲(chǔ)器。周期結(jié)束時(shí)把取來的存儲(chǔ)器數(shù)據(jù)寫入D。程序例子執(zhí)行時(shí)的第五個(gè)周期(3)處在EXE級(jí)的第三條指令subr4,r5,r6由ALU做減法。多路器的選擇信號(hào)SIMM=0,選擇寄存器操作數(shù)。ALU的兩個(gè)源操作數(shù)分別來自A和B,差打入R。WZ=1,把ALU的ZERO輸出打人流水線寄存器Z。程序例子執(zhí)行時(shí)的第五個(gè)周期84(4)處在ID級(jí)的第四條指令addr7,r5,r6完成譯碼及讀寄存器操作。SST=0,選擇r6。在本周期結(jié)束時(shí),寄存器r5和r6的內(nèi)容分別寫入A和B。目的寄存器號(hào)7打入d。程序例子執(zhí)行時(shí)的第五個(gè)周期85程序例子執(zhí)行時(shí)的第五個(gè)周期(5)PC輸出4,取出第五條指令storer8,200(r9),在周期結(jié)束時(shí)打人IR。BTAKEN=0,周期結(jié)束時(shí)把5打入PC。
第五個(gè)時(shí)鐘周期結(jié)束,即剛進(jìn)入第六個(gè)周期時(shí):PC輸出5指向第六條指令;IR輸出第五條指令storer8,200(r9);A和B分別輸出r5和r6的內(nèi)容(第四條指令);R輸出減法結(jié)果(第三條指令);D輸出第二條指令從存儲(chǔ)器取來的數(shù)據(jù)。456.第六個(gè)時(shí)鐘周期
這時(shí)指令仍充滿流水線。但第一條指令已經(jīng)流出。第二到第六條共5條指令的操作在各自的流水線級(jí)同時(shí)進(jìn)行:(1)第二條指令load
r2,100(r3)處在WB級(jí)。d輸出2。寄存器寫使能信號(hào)WREG=1。SLD=1,選擇D的輸出,即把存儲(chǔ)器數(shù)據(jù)寫入寄存器堆的r2寄存器。至此,第二條指令也完成了它的執(zhí)行,將退出流水線。(2)處在MEM級(jí)的指令subr7,r5,r6把R的輸出直接傳遞到C。(3)EXE級(jí)的第四條指令addr7,r5,r6由ALU做加法。多路選擇信號(hào)SIMM=0,選擇寄存器操作數(shù)。ALU的兩個(gè)源操作數(shù)分別來自A和B。WZ=1,把ALU的ZERO輸出打入流水線寄存器Z。(4)ID級(jí)的第五條指令storer8,200(r9)完成譯碼、立即數(shù)符號(hào)擴(kuò)展以及讀寄存器操作。注意,這時(shí)SST=1,選擇r8。在本周期結(jié)束時(shí),擴(kuò)展的立即數(shù)200、寄存器r9和r8的內(nèi)容分別寫入流水線寄存器I,A和B。(5)PC輸出5,從存儲(chǔ)器取出第六條指令subir10,r10,1;在周期結(jié)束時(shí)打人IR。BTAKEN=0,周期結(jié)束時(shí)把6打人PC。
第六個(gè)時(shí)鐘周期結(jié)束,即剛進(jìn)入第七個(gè)周期時(shí):PC輸出6,指向第七條指令;IR輸出第六條指令subir10,r10,1;A和B分別輸出寄存器r9和r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度房地產(chǎn)股權(quán)置換與項(xiàng)目合作開發(fā)協(xié)議3篇
- 2025年度網(wǎng)絡(luò)營銷推廣與效果監(jiān)測合同3篇
- 專業(yè)高炮廣告牌制作施工協(xié)議樣本版B版
- 2024黃豆購銷詳細(xì)條款合同版B版
- 個(gè)人貸款協(xié)議規(guī)范樣本(2024年)版B版
- 老人與海讀后感以及收獲
- 專業(yè)鋼筋施工承攬合同書2024版樣本一
- 心理健康教育與學(xué)習(xí)環(huán)境優(yōu)化策略
- 2024離婚贍養(yǎng)費(fèi)用的確定合同
- 二零二五年度防火涂料施工、技術(shù)支持及培訓(xùn)合同3篇
- 四川省南充市2022-2023學(xué)年九年級(jí)上學(xué)期期末義務(wù)教育教學(xué)質(zhì)量檢測英語試題(含聽力)
- 全國教育科學(xué)規(guī)劃課題申報(bào)書:34.《高質(zhì)量數(shù)字教材建設(shè)研究》
- 高處作業(yè)風(fēng)險(xiǎn)及隱患排查(安全檢查)清單
- 五年級(jí)口算1000題(打印版)
- 團(tuán)意險(xiǎn)項(xiàng)目招標(biāo)書
- 城市軌道-城軌交通車輛制動(dòng)系統(tǒng)故障與檢修
- (郭伯良)兒童青少年同伴關(guān)系評(píng)級(jí)量表
- 煙道加強(qiáng)肋計(jì)算書(樣本)
- 登高平臺(tái)梯安全操作保養(yǎng)規(guī)程
- 土力學(xué)與地基基礎(chǔ)(課件)
- ERP沙盤模擬經(jīng)營實(shí)訓(xùn)報(bào)告
評(píng)論
0/150
提交評(píng)論