<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 32位嵌入式CPU中系統(tǒng)控制協(xié)處理器的設(shè)計與實現(xiàn)

          32位嵌入式CPU中系統(tǒng)控制協(xié)處理器的設(shè)計與實現(xiàn)

          作者: 時間:2012-05-17 來源:網(wǎng)絡(luò) 收藏
            IPS體系結(jié)構(gòu)中的簡稱CP0,它提供指令正常執(zhí)行所需的環(huán)境,進(jìn)行異常/中斷處理、高速緩存填充、虛實地址轉(zhuǎn)換、操作模式轉(zhuǎn)換等操作。單從硬件的角度而言,對指令集的作用就相當(dāng)于操作系統(tǒng)對應(yīng)用程序的作用一樣。

            異常處理

            CPU運(yùn)行過程中常常需要中斷正常執(zhí)行的指令流程,跳轉(zhuǎn)去執(zhí)行某段特殊的指令段,接著再恢復(fù)原來的指令序列。MIPS體系結(jié)構(gòu)中稱這樣的過程為異常(Exception)。所有的異常都采用統(tǒng)一的機(jī)制處理。

            對于異常情況,需要采取以下3方面的措施:

            1) 異常檢測:CPU需要及時檢測出哪個部件發(fā)生了什么異常;一般而言,異常檢測由各個模塊進(jìn)行,如加法溢出由加法器在運(yùn)算過程中產(chǎn)生,并在相應(yīng)的流水段被CP0讀入。因此這部分功能不屬于CP0的設(shè)計范圍。

            2) 異常處理:CPU按照優(yōu)先級選擇哪個異常被處理,并進(jìn)行必要的上下文切換(Context Switch),為進(jìn)入異常服務(wù)子程序做準(zhǔn)備,保證與該種異常對應(yīng)的服務(wù)程序被執(zhí)行,并且能夠從中斷處完全恢復(fù)原來的指令執(zhí)行現(xiàn)場。

            3) 異常服務(wù):執(zhí)行異常服務(wù)子程序,這部

          分主要由軟件(操作系統(tǒng))來完成。

            對異常處理機(jī)制的要求

            與傳統(tǒng)的異常/中斷處理機(jī)制相比,在MIPS 4Kc體系結(jié)構(gòu)下的異常處理需要特別考慮3個因素。

            流水線的劃分

            本設(shè)計采用五段流水線設(shè)計,即每條指令的執(zhí)行一般都經(jīng)過IF(取指)、DE(指令譯碼)、EX(指令執(zhí)行)、MEM(訪問存儲器)和WB(數(shù)據(jù)寫回R.F.)五個步驟。因為指令動作被分割,所以異常源也被分割到各個流水線段。例如:加法溢出異常只能在EX被檢測到。

            精確異常處理機(jī)制

            精確異常處理是指在發(fā)生異常時,僅僅對發(fā)生異常的指令或其后面的指令進(jìn)行異常處理;而其前面的指令要保證能夠正常結(jié)束。所謂“精確”,是指受到異常處理影響的只有產(chǎn)生異常條件的那條指令,所有在此之前的指令在異常被處理前都將被執(zhí)行完成。異常處理結(jié)束后仍將從發(fā)生異常的指令開始繼續(xù)執(zhí)行。

            操作模式切換

            對于多進(jìn)程操作系統(tǒng),至少要區(qū)分兩種進(jìn)程:有特權(quán)的操作系統(tǒng)“核心”進(jìn)程和一般程序的“用戶”進(jìn)程。當(dāng)CPU檢測到異常發(fā)生時,指令執(zhí)行的正常順序會被暫停,處理器進(jìn)入核心模式。當(dāng)異常服務(wù)子程序執(zhí)行完后,CPU從斷點(diǎn)中恢復(fù)現(xiàn)場,繼續(xù)執(zhí)行原指令序列。

            異常處理流水線

            根據(jù)上述分析可以確定,硬件異常處理流水線的主要任務(wù)有3個:更新相應(yīng)的CP0寄存器,即寫CP0寄存器;保存發(fā)生異常的指令地址,或當(dāng)異常指令在延遲槽時,保存引起延遲槽的跳轉(zhuǎn)指令地址;選擇異常服務(wù)子程序的入口地址。

            CP0寄存器記錄了CPU當(dāng)前的狀態(tài),因此,對CP0寄存器的寫就是對CPU狀態(tài)的改變,需要進(jìn)行嚴(yán)格的控制。而且對寄存器的寫是影響關(guān)鍵路徑的主要因素。因此本文主要論述對CP0寄存器寫操作的設(shè)計。

            每個寄存器或寄存器某些位的寫操作都是由一個或一組異常事件是否發(fā)生而決定的。為此每一個流水段產(chǎn)生并被接收的異常都將被編碼,稱為異常編碼,并在段與段之間進(jìn)行傳遞,直到MEM段。在MEM段,異常編碼被用于產(chǎn)生對CP0寄存器的寫使能信號,需要進(jìn)行復(fù)雜的解碼使MEM段變長,這成為提高整個 CPU速度的瓶頸。為了減少這個瓶頸,可增加專門用于產(chǎn)生寫使能信號的邏輯。每一級流水線產(chǎn)生的異常直接產(chǎn)生寫使能,并經(jīng)過簡單的優(yōu)先級比較,不管它是由哪個異常類型產(chǎn)生的,均產(chǎn)生1位的寫使能信號。那么,在MEM段就可以避免復(fù)雜的解碼,直接產(chǎn)生對相關(guān)CP0寄存器的寫使能信號。這一方案采用了以空間換時間的方法:縱向的執(zhí)行時間減少了,而橫向則需要增加寫使能判別邏輯。增加邏輯功能意味著需要占用更多的芯片面積,考慮到CP0模塊處于整個CPU的邊緣,而且全定制物理設(shè)計可以大大縮減芯片面積,因此該方案具有可行性。

            系統(tǒng)控制協(xié)處理器的全定制物理設(shè)計

            在深亞微米級的集成電路芯片里,器件(晶體管)本身對時延的貢獻(xiàn)已越來越小,主要延遲在于連線延遲。由于CP0功能的特殊性,它和存儲管理單元 MMU、指令計數(shù)單元PC都有很多連線,這些連線很可能處于全芯片的關(guān)鍵路徑上;而且由于CP0邏輯比較復(fù)雜,按照標(biāo)準(zhǔn)單元法自動布局布線生成的模塊自身面積就很大,某些連線在CP0內(nèi)部就要走很多彎路,可能造成很大的延時。所以決定采用全定制方法設(shè)計CP0的數(shù)據(jù)通路,以方便控制連線的走向和布局。

            控制通路與數(shù)據(jù)通路的劃分

            數(shù)字電路系統(tǒng)的正常運(yùn)作過程中存在數(shù)據(jù)流(包括一般意義上的數(shù)據(jù)、指令和地址)和控制流。而數(shù)據(jù)流和控制流是相對獨(dú)立的:數(shù)據(jù)流實現(xiàn)的邏輯相對簡單,但有很多位數(shù)據(jù)并行;而控制流的邏輯較復(fù)雜,絕大多數(shù)是1位或幾位的控制信號。因此,控制通路一般不采用全定制設(shè)計;而數(shù)據(jù)通路的全定制設(shè)計就具有高性能、低功耗、低成本的優(yōu)勢。

          協(xié)助TLB進(jìn)行虛實地址轉(zhuǎn)換是CP0的主要功能之一。TLB屬于系統(tǒng)的特權(quán)資源,只有CP0有權(quán)對其進(jìn)行訪問,因此CP0與TLB之間的連線較多,數(shù)據(jù)交換的時延也比較關(guān)鍵。同時,PC模塊與CP0的數(shù)據(jù)交換也非常重要。因此,CP0單元在版圖上最好同時靠近TLB和PC模塊。本設(shè)計將CP0中與TLB相關(guān)的邏輯與寄存器獨(dú)立為CP0T,放在MMU與PC模塊之間;CP0的其余部分歸為CP0E,放在PC下部,也就是整塊芯片的最下端。如圖1所示。

          圖1. CP0單元與臨近單元的連接示意圖

            電路設(shè)計

            本設(shè)計中使用的電路輸入工具為Cadence公司的Composer。設(shè)計時,將HDL描述轉(zhuǎn)化為電路描述后輸入到Composer中。然后,通過形式驗證來確保所設(shè)計的電路與RTL代碼一致。電路設(shè)計的好壞很大程度上要取決于設(shè)計者的經(jīng)驗和技巧。


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();