王麗霞,孫長(zhǎng)秋
(1.青島港灣職業(yè)技術(shù)學(xué)院,山東青島,266404;2.青島職業(yè)技術(shù)學(xué)院,山東青島,266555)
32位RlSC嵌入式微處理器流水線設(shè)計(jì)
王麗霞1,孫長(zhǎng)秋2
(1.青島港灣職業(yè)技術(shù)學(xué)院,山東青島,266404;2.青島職業(yè)技術(shù)學(xué)院,山東青島,266555)
介紹了一32位RISC嵌入式微處理器(取名為 MoonCore)的5級(jí)流水線的結(jié)構(gòu),即取指&譯碼(IF&ID)、讀寄存器堆(RF)、執(zhí)行(EXEC)、訪存(DMEM)和寫回(WB),詳細(xì)介紹了各個(gè)流水級(jí)的主要部件的設(shè)計(jì)并分析了流水線相關(guān)問(wèn)題及解決辦法。
微處理器;精簡(jiǎn)指令集計(jì)算機(jī);流水線
由于嵌入式微處理器大多應(yīng)用于便攜式設(shè)備和通訊設(shè)備等用電池供電的設(shè)備中,因此要提高微處理器的速度和降低功耗設(shè)計(jì)對(duì)于嵌入式微處理器的設(shè)計(jì)尤為重要,而采用流水線技術(shù)是解決上面兩個(gè)問(wèn)題的很重要的方法。MoonCore是一32位RISC的嵌入式微處理器,本著節(jié)省資源,控制簡(jiǎn)單的原則,采用5級(jí)流水線結(jié)構(gòu),即取指&譯碼(IF&ID)、讀寄存器堆(RF)、執(zhí)行(EXEC),訪存(DMEM),寫回(WB)。數(shù)據(jù)通路就嵌入到這5級(jí)流水線之中。
MoonCore指令集共有49條指令,全部來(lái)自于MIPS I指令集,所有指令均為32位的定長(zhǎng)指令,指令地址按字對(duì)齊。存貯器訪問(wèn)指令Load和Store指令都為立即數(shù)類型指令,用于在存儲(chǔ)器和通用寄存器之間傳遞數(shù)據(jù);計(jì)算類指令用于完成算術(shù)、邏輯、移位運(yùn)算;跳轉(zhuǎn)/轉(zhuǎn)移控制指令用于改變程序的順序執(zhí)行次序;專用指令:用于執(zhí)行一些特殊任務(wù)。
圖1 基本的地址形成邏輯圖
MoonCore的5級(jí)流水線結(jié)構(gòu)分別為取指&譯碼(IF&ID)、讀寄存器堆(RF)、執(zhí)行(EXEC),訪存(DMEM),寫回(WB)。
2.1IF&ID級(jí)設(shè)計(jì)
在這一級(jí),程序計(jì)數(shù)器PC獲得指令地址,從指令存儲(chǔ)器取出指令,解碼并產(chǎn)生各種控制信號(hào)。這一級(jí)主要部件有指令存儲(chǔ)器,PC寄存器和解碼器等。
PC寄存器的位寬為32位,因?yàn)槊織l指令的長(zhǎng)度是4個(gè)字節(jié)。需要注意的是,PC寄存器和普通的寄存器不同,不能直接對(duì)其進(jìn)行讀寫操作,在本設(shè)計(jì)中,各種控制信號(hào)均由有限狀態(tài)機(jī)產(chǎn)生。
2.2RF級(jí)設(shè)計(jì)
RF級(jí)是MoonCore設(shè)計(jì)中結(jié)構(gòu)最為復(fù)雜的一級(jí)。在這部分主要完成下面的幾個(gè)操作:
(1)計(jì)算產(chǎn)生下一條指令的地址。
(2)取寄存器堆的操作數(shù)。
(3)對(duì)指令中的立即數(shù)進(jìn)行擴(kuò)展。
(4)產(chǎn)生目標(biāo)寄存器地址。
RF級(jí)的主要部件有指令地址形成器PC_GEN,數(shù)據(jù)擴(kuò)展器EXT,數(shù)據(jù)比較器CMP和目標(biāo)寄存器地址形成器等。
2.2.1指令地址形成器PC_GEN的設(shè)計(jì)
在MoonCore結(jié)構(gòu)中默認(rèn)的下一條地址是PC+4,而轉(zhuǎn)移指令將改變程序的順序執(zhí)行,因此必須在離IF近的流水級(jí)實(shí)現(xiàn),因此將其放在RF級(jí)。因?yàn)榫幾g器支持延遲轉(zhuǎn)移,這要求必須是地址形成邏輯模塊的輸出接PC的輸入,而PC寄存器的輸出又直接接在地址生成器模塊上?;具壿嬋鐖D1所示。
2.2.2數(shù)據(jù)擴(kuò)展器EXT的設(shè)計(jì)
MoonCore指令集的基本指令格式有三種:R-type、I-type和J-type。其中I、J類型都是在字的后16位帶有立即數(shù),其中J類型中的指令J(AL)后26位是立即數(shù),以及R指令類型的移位指令SRLV、SLLV后5位是立即數(shù)。這些立即數(shù)要根據(jù)實(shí)際的指令擴(kuò)展為32位的字。
2.2.3數(shù)據(jù)比較器CMP的設(shè)計(jì)
條件轉(zhuǎn)移指令如BEQ,BLEZ等指令要根據(jù)寄存器的數(shù)據(jù)進(jìn)行相關(guān)的比較,比較的結(jié)果給地址產(chǎn)生器PC_GEN以用來(lái)產(chǎn)生新的指令地址。因此需要有一個(gè)數(shù)據(jù)比較器CMP。CMP有兩個(gè)32位數(shù)據(jù)輸入,分別是RS_IN 和RT_IN和一條由解碼器產(chǎn)生的經(jīng)過(guò)指令流水線傳輸?shù)目刂菩盘?hào)CMP_CTL,輸出端輸出1位信號(hào),指示轉(zhuǎn)跳條件是否成立。
通常,比較器是放在和ALU同一級(jí)的流水段中,在本設(shè)計(jì)中如果也采用這種方式就會(huì)造成轉(zhuǎn)移指令延遲多個(gè)時(shí)鐘周期的浪費(fèi)。結(jié)合存儲(chǔ)部件的特征,加在RF段。
2.2.4目標(biāo)寄存器地址形成器的設(shè)計(jì)
在R-type指令中,運(yùn)算結(jié)果最終寫回到RD(指令中的20-16位為目標(biāo)寄存器索引)寄存器,而在I-type指令中運(yùn)算結(jié)果寫回到RT中(指令中的25-21位為目標(biāo)寄存器索引),比較特別的是在JAL指令中把PC的數(shù)值通過(guò)ALU傳遞給R31號(hào)寄存器。因此這個(gè)選擇器的輸入需要RNS和RNT,以及一個(gè)控制信號(hào)。目的寄存器地址選擇器的結(jié)構(gòu)如如圖2所示。
圖2 目的寄存器地址選擇器
由于0號(hào)寄存器件總是輸出為常數(shù)0,因此可以將0號(hào)寄存器改為默認(rèn)的寄存器地址。目的寄存器地址選擇器件的模塊實(shí)現(xiàn)代碼如下:
2.3EXEC級(jí)設(shè)計(jì)
EXEC執(zhí)行級(jí)主要完成以下的任務(wù):
(1)使用ALU完成各種算術(shù)邏輯運(yùn)算。
(2)把運(yùn)算結(jié)果保存到寄存器中,供DMEM執(zhí)行階段使用。
主要部件有ALU和兩個(gè)多路選擇器。算術(shù)邏輯運(yùn)算器ALU是微處理器的核心部件,所有的算術(shù)運(yùn)算,如有符號(hào)數(shù),無(wú)符號(hào)數(shù)的加減乘除,邏輯運(yùn)算的與或以及移位運(yùn)算都在這里完成。本設(shè)計(jì)中ALU分為三個(gè)并行的部分:
(1)基本算術(shù)邏輯運(yùn)算部分;
(2)算術(shù)邏輯移位部分;
(3)乘除法部分。
這三部分的連接如圖3所示。
圖3 ALU的三部分
圖4 存儲(chǔ)控制器與存儲(chǔ)器件連接
2.4DMEM級(jí)設(shè)計(jì)
DMEM數(shù)據(jù)存儲(chǔ)器訪問(wèn)級(jí)專為L(zhǎng)oad/Store指令而設(shè),要存儲(chǔ)的數(shù)據(jù)來(lái)自寄存器堆,訪問(wèn)存儲(chǔ)器的地址由ALU計(jì)算得出。Load指令讀存儲(chǔ)器,并把讀出的數(shù)據(jù)寫入流水線寄存器。Store指令把來(lái)自寄存器堆的數(shù)據(jù)寫入存儲(chǔ)器。DMEM級(jí)主要完成的任務(wù)有:
(1)給出各種存取存儲(chǔ)器的控制信號(hào),并完成存儲(chǔ)器的存取任務(wù)。
(2)把從存儲(chǔ)器中讀入的數(shù)據(jù)保存到寄存器中,供WB寫回階段使用。
數(shù)據(jù)存儲(chǔ)控制器包含三部分:數(shù)據(jù)輸入控制和地址輸入控制以及數(shù)據(jù)輸出控制。
存儲(chǔ)控制器與存儲(chǔ)器件連接如圖4所示。
由圖可以清晰地看出數(shù)據(jù)和控制的前后邏輯,藍(lán)色部分表示有寄存器的延遲,指令控制信號(hào)和地址信號(hào)要延遲一個(gè)周期后加在輸出控制上,設(shè)計(jì)中通過(guò)加入一級(jí)D鎖存器實(shí)現(xiàn)。
2.5WB級(jí)設(shè)計(jì)
在WB寫回級(jí)主要完成的任務(wù):
(1)指令執(zhí)行結(jié)果寫回到寄存器堆中。
(2)將乘法運(yùn)算和除法運(yùn)算的執(zhí)行結(jié)果寫入到寄存器HI和寄存器LO中。
這一級(jí)的主要部件就是一個(gè)寫回的多路選擇器,WB級(jí)把指令執(zhí)行的結(jié)果寫回到寄存器堆。
相關(guān)是指指令流中的一條指令在指定的時(shí)鐘周期內(nèi)停止執(zhí)行。相關(guān)的發(fā)生將會(huì)引起流水線的斷流或延遲,降低微處理器的性能。存在下面三種相關(guān):結(jié)構(gòu)相關(guān)(Structural Hazards)、控制相關(guān)(Control Hazards)和數(shù)據(jù)相關(guān)(Data Hazards)。
采用指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分離的結(jié)構(gòu),避免了結(jié)構(gòu)相關(guān)的產(chǎn)生;采用數(shù)據(jù)旁路的技術(shù)解決了數(shù)據(jù)相關(guān);采用延遲槽技術(shù),由編譯器負(fù)責(zé)向延遲槽填入指令,解決了控制相關(guān)。
嵌入式微處理器多采用流水線技術(shù)。 MoonCore微處理器采用5級(jí)流水線的結(jié)構(gòu),取指&譯碼(IF&ID)、讀寄存器堆(RF)、執(zhí)行(EXEC)、訪存(DMEM)和寫回(WB),提高微處理器的速度和降低功耗。
[1] Dominic Sweetman.See MIPS Run(Second Edition). San Francisco,ca,USA:Morgan Kaufmann Publishers Inc.,2006
[2]M I P S 3 2 A r c h i t e c t u r e f o r P r o g r a m m e r s VolumeⅠ:Introduction to the MIPS32 Architecture
[3]易建勛.微處理器(CPU)的結(jié)構(gòu)與性能.北京:清華大學(xué)出版社,2003
[4] 張奕.32位5級(jí)流水線嵌入式處理器設(shè)計(jì):[碩士學(xué)位論文].成都:電子科技大學(xué), 2007
[5]呂睿.HOPE-MIPS流水線功能段的設(shè)計(jì):[碩士學(xué)位論文].西安:西安電子科技大學(xué),2007
[6]朱子玉,利亞民.CPU芯片邏輯設(shè)計(jì)技術(shù).北京:清華大學(xué)出版社,2005
Pipeline Design of 32-bit RISC Embedded Microprocessor
Wang Lixia1,Sun Changqiu2
(1.Qingdao Harbour Vocational&Technical College,Shandong Qingdao,266404;2.Qingdao Technical College,Shandong Qingdao,266555)
The Project introduced five-stage pipeline design of a 32 bit RISC mMicroProcessor (named MoonCore) which includes IF&ID(Instruction Fetch &Instructions Decode)、RF(Register Fetch)、EXEC(Execute),DMEM(Data MEMory access)and WB(Write Back) and introduced the design of main modules of microprocessor in detail, analyzed three kinds of hazards of pipeline and solutions.
Microprocessor;RISC;Pipeline