64位MIPS指令處理器的流水線(xiàn)設(shè)計(jì)
1 引言 隨著集成電路設(shè)計(jì)和工藝技術(shù)的發(fā)展,嵌入式系統(tǒng)(soc)已經(jīng)在pda、機(jī)頂盒、手機(jī)等信息終端中被廣泛應(yīng)用。他不僅減小了電路尺寸,而且具有成本低廉,可靠性高,功耗低等優(yōu)點(diǎn)??梢哉f(shuō)嵌入式系統(tǒng)是未來(lái)集成電路發(fā)展的方向。而作為嵌入式系統(tǒng)核心的微處理器,是soc不可或缺的“心臟”,微處理器的性能直接影響整個(gè)soc的性能。 為了提高cpu的效率和指令執(zhí)行的并行性,現(xiàn)代微處理器已經(jīng)廣泛采用流水線(xiàn)設(shè)計(jì),對(duì)于一些較高性能的cpu更是采用了多發(fā)射的超流水技術(shù)等,所以,cpu流水線(xiàn)的設(shè)計(jì),將成為決定其性能的關(guān)鍵。? 2 處理器體系結(jié)構(gòu) 我們所設(shè)計(jì)的處理器是基于mips指令集的64位risc結(jié)構(gòu),執(zhí)行32位定長(zhǎng)的mips指令,具有五級(jí)流水線(xiàn)。中央處理單元有32個(gè)通用寄存器和3個(gè)特殊功能寄存器:pc,hi,lo。其中pc是程序計(jì)數(shù)器,hi和lo用于64位乘除法運(yùn)算。系統(tǒng)協(xié)處理器cp0的32個(gè)cp0寄存器和tlb提供內(nèi)存管理和流水線(xiàn)中的異常處理功能。此外,處理器還提供了16k的指令cache和8k數(shù)據(jù)cach e。 圖1所示為處理器的系統(tǒng)結(jié)構(gòu)框圖,圖中清楚地表明了各個(gè)模塊間的控制關(guān)系(實(shí)線(xiàn)表示)和在流水線(xiàn)控制下的數(shù)據(jù)流向(空心線(xiàn)表示),流水線(xiàn)每一級(jí)之間由級(jí)間寄存器暫存對(duì)應(yīng)指令的控制信號(hào)和數(shù)據(jù)。 3 流水線(xiàn)結(jié)構(gòu) 根據(jù)圖1可以看出,將指令執(zhí)行通道分成了5個(gè)單元,通道中流水線(xiàn)的每個(gè)單元之間使用級(jí)間寄存器來(lái)存放相應(yīng)的控制信號(hào)和數(shù)據(jù)。對(duì)應(yīng)的流水線(xiàn)結(jié)構(gòu)分別為:取指(ifet ch)、譯碼(dec)、執(zhí)行(exec)、存儲(chǔ)器操作(mem)和寫(xiě)回寄存器(wb)。如圖2所示,指令在流水線(xiàn)上順序執(zhí)行,但是同周期有五條指令相交迭。所以采用流水線(xiàn)結(jié)構(gòu)大大提高了指令的并行性,cpi近似等于1。 4 流水線(xiàn)控制的設(shè)計(jì) 由于采用了五級(jí)流水線(xiàn)設(shè)計(jì),需要一個(gè)核心的流水線(xiàn)控制模塊對(duì)這個(gè)流水線(xiàn)上的各個(gè)單元進(jìn)行控制,以確保流水線(xiàn)正確高效地運(yùn)行。值得注意的是,指令在流水線(xiàn)上的處理并不是簡(jiǎn)單地如圖2所示的一個(gè)流暢序列,而是會(huì)出現(xiàn)很多因素破壞指令流水的平衡性,這些因素有: (1)由于流水線(xiàn)上的2個(gè)執(zhí)行單元同時(shí)使用同一硬件資源而產(chǎn)生冒險(xiǎn)。 (2)部分指令在1個(gè)周期不能完成相應(yīng)流水階段的操作,如乘法指令在exec級(jí)在alu運(yùn)算需要多個(gè)周期。 (3)指令運(yùn)算的結(jié)果在exec級(jí)得到,wb級(jí)才寫(xiě)回寄存器堆,而后續(xù)指令在結(jié)果寫(xiě)回前需要使用結(jié)果。 (4)branch指令、跳轉(zhuǎn)指令和eret等指令導(dǎo)致流水線(xiàn)上程序流的改變。 (5)在流水線(xiàn)的執(zhí)行過(guò)程中隨時(shí)都可能有異常發(fā)生。 流水線(xiàn)控制就是解決以上問(wèn)題,控制流水通道中的指令執(zhí)行過(guò)程,在各種情況下能夠保證程序的指令流有序、無(wú)誤地執(zhí)行。他主要包括以下各個(gè)單元,圖3給出了流水線(xiàn)控制部分的總體結(jié)構(gòu)。 4.1 異常處理單元 異常是指令運(yùn)行過(guò)程中發(fā)生的不可預(yù)測(cè)的中斷,需要預(yù)先定義的異常處理程序來(lái)解決。他可能發(fā)生在流水線(xiàn)的mem,exec和dec級(jí),mem級(jí)的異常優(yōu)先級(jí)最高,后面依次為exec級(jí)和d ec級(jí)。異常發(fā)生后,流水線(xiàn)中導(dǎo)致異常的指令以及后續(xù)指令都要被中止,異常處理程序調(diào)入流水線(xiàn)中執(zhí)行。 異常處理單元收集各個(gè)異常信號(hào)并對(duì)其進(jìn)行單周期監(jiān)測(cè),確保異常的及時(shí)響應(yīng),若多個(gè)異常同時(shí)發(fā)生需要判斷異常的優(yōu)先級(jí),并處理處于最高優(yōu)先級(jí)的異常。此時(shí)異常處理單元通過(guò)互鎖單元使流水線(xiàn)暫停2個(gè)周期,將異常信息存入cp0寄存器,保存epc,并由流水線(xiàn)沖刷單元終止流水線(xiàn)上的無(wú)效指令。流水線(xiàn)調(diào)入異常處理向量,重新開(kāi)始執(zhí)行指令。如圖4所示為異常處理的流程,硬件處理部分由異常處理單元控制完成,軟件部分為異常服務(wù)程序的執(zhí)行過(guò)程。 4.2 互鎖處理模塊 互鎖的發(fā)生主要有以下幾種情況,一是由于流水線(xiàn)中的2個(gè)處理模塊同時(shí)使用同一資源產(chǎn)生冒險(xiǎn),此時(shí)等待資源的流水級(jí)以及前面的流水級(jí)都要等待;二是由于在某一流水級(jí)的操作需要多個(gè)時(shí)鐘周期,整個(gè)流水線(xiàn)上的各個(gè)流水級(jí)等待多周期操作的完成。當(dāng)互鎖發(fā)生后,互鎖處理模塊暫停流水線(xiàn)直到互鎖解決。如果從不同流水級(jí)同時(shí)發(fā)出暫停流水線(xiàn)的請(qǐng)求,也要判斷暫停流水線(xiàn)請(qǐng)求的優(yōu)先級(jí)。 互鎖單元收集互鎖信號(hào),并響應(yīng)最高優(yōu)先級(jí)的互鎖信號(hào)。在判斷互鎖類(lèi)型后,向相應(yīng)的執(zhí)行單元發(fā)出stall(流水線(xiàn)停止)信號(hào),該信號(hào)必須為整數(shù)個(gè)時(shí)鐘周期。 4.3 優(yōu)先級(jí)判別模塊 對(duì)于特定的異常或互鎖,都對(duì)應(yīng)于流水線(xiàn)的某一級(jí)。在流水線(xiàn)指令交迭執(zhí)行的過(guò)程中異常和互鎖也會(huì)同時(shí)發(fā)生。優(yōu)先級(jí)判別模塊根據(jù)異常處理單元和互鎖處理單元送來(lái)的異常與互鎖的請(qǐng)求信號(hào)來(lái)判斷是由異常處理模塊來(lái)終止流水線(xiàn)上執(zhí)行的指令還是由互鎖單元將流水線(xiàn)暫停。<