官术网_书友最值得收藏!

2.2 OR1200

2.2.1 OR1200的基本特點(diǎn)

OpenRISC1200處理器(簡稱OR1200或OR32)是OpenCores組織提供了基于GPL、屬于OpenRISC 1000序列中的一款RISC處理器。OR1200是32位標(biāo)量RISC,它具有哈佛結(jié)構(gòu)、5級整數(shù)流水線,支持虛擬內(nèi)存(MMU),帶有基本的DSP功能。外部數(shù)據(jù)和地址總線接口符合WISHBONE標(biāo)準(zhǔn)。

OR1200默認(rèn)的Cache配置是:一條通道直接映射的8KB數(shù)據(jù)高速緩存(Cache),一條通道直接映射的8KB指令高速緩存。每條通道是16字節(jié)的線尺寸。兩個Cache都是實(shí)體標(biāo)記的。

默認(rèn)配置時使用MMU,MMU由基于一條通道直接映射的數(shù)據(jù)TLB和指令TLB的64條目Hash表組成。

默認(rèn)配置的輔助功能有用于實(shí)時調(diào)試的調(diào)試單元、高分辨率的Ticker定時器、可編程中斷控制器和電源管理單元。

典型應(yīng)用的情況是,在使用0.18μm、6層金屬工藝時,OR1200的主頻運(yùn)行在300MHz,可以提供300Dhrystone和2.1MIPS和300次的32×32的DSP乘加操作。OR1200默認(rèn)配置時有一百萬個晶體管。

OR1200基于ORBIS32指令集。ORBIS32指令集包括32位整數(shù)指令、基本的DSP指令、32位的Load和Store指令、程序流程控制指令和特殊指令。

OR1200主要用于嵌入、便攜和網(wǎng)絡(luò)設(shè)備應(yīng)用中,并可以運(yùn)行任何一種現(xiàn)代操作系統(tǒng)。它的主要競爭者有ARM10、ARC等RISC處理器。

OR1200通用框架由CPU/DSP核心、直接映射的數(shù)據(jù)Cache、直接映射的指令Cache、基于DTLB的Hash表的數(shù)據(jù)MMU和指令MMU、電源管理單元及接口、Tick定時器,調(diào)試單元及開發(fā)接口、中斷控制器和中斷接口、指令及數(shù)據(jù)WISHBONE主機(jī)接口。OR1200通用框架如圖2-7所示。

圖2-7 OR1200通用框架

下面分別介紹OR1200的各個部分。

2.2.2 CPU/DSP核心

CPU/DSP是OR1200 RISC處理器的核心,OR1200僅應(yīng)用了OpenRISC 1000構(gòu)架的32bit部分,這個構(gòu)架的64bit部分和浮點(diǎn)及向量操作部分沒有被應(yīng)用到OR1200處理器上。CPU/DSP核心的結(jié)構(gòu)圖如圖2-8所示。

圖2-8 CPU/DSP結(jié)構(gòu)圖

1.指令單元(Instruction Unit)

指令單元應(yīng)用基本指令流水線,從內(nèi)存子系統(tǒng)取指令,把指令分發(fā)到可用的執(zhí)行單元,并保存一個狀態(tài)歷史記錄確保可實(shí)現(xiàn)精確的例外模型和確保指令按次序執(zhí)行。它還執(zhí)行條件分支和非條件跳轉(zhuǎn)指令。如果合適的執(zhí)行單元可用,序列發(fā)生器能在每個時鐘上分發(fā)一個有順序的指令。執(zhí)行單元必須辨別源數(shù)據(jù)是否可用,并確保沒有其他的指令使用同一個目的地寄存器。指令單元僅處理ORBIS32指令類,當(dāng)前OR1200不支持ORFPX32/64和ORVDX64指令類。

2.通用寄存器(GPRs,General-Purpose Registers)

OpenRISC 1200使用了32個通用32bit寄存器。OpenRISC 1000構(gòu)架還提供了寄存器文件的映像復(fù)制,用來在工作上下文之間快速切換,但目前OR1200沒有提供這個。OR1200把通用寄存器文件作為兩個帶有32個32bit字能力同步雙端口內(nèi)存使用。

3.Load/Store單元(LSU)

Load/Store單元在GPRs和CPU內(nèi)部總線之間傳輸所有的數(shù)據(jù)。它被用做一個獨(dú)立的執(zhí)行單元,安裝在內(nèi)存子系統(tǒng)里,如果有數(shù)據(jù)依賴性時僅影響主流水線。

LSU的主要特征如下:

● 所有的Load/Store指令通過硬件實(shí)現(xiàn)(包括原子指令);

● 具有地址條目緩沖;

● 執(zhí)行流水線操作;

● 快速內(nèi)存訪問的對齊。

當(dāng)Load和Store指令被發(fā)出時,LSU決定所有的操作數(shù)是否可用。操作數(shù)包括地址寄存器操作數(shù)、源數(shù)據(jù)寄存器操作數(shù)(對于Store指令來說)、目的地?cái)?shù)據(jù)寄存器操作數(shù)(對于Load指令來說)。

假定Load指令在數(shù)據(jù)高速緩存中有一個命中,LSU執(zhí)行一個Load操作需要2個時鐘周期。執(zhí)行Store指令花費(fèi)一個時鐘周期。有效地址EA被DMMU翻譯成物理地址。Load/Store的有效地址和數(shù)據(jù)也能被開發(fā)接口訪問。

4.整數(shù)執(zhí)行流水線(Integer Execution Pipeline)

OR1200通過流水線使大多數(shù)整數(shù)指令能在一個周期中執(zhí)行。它使用的32bit整數(shù)指令的類型如下:

● 算術(shù)指令

● 比較指令

● 邏輯指令

● 循環(huán)移位和移位指令

表2-27列出了通過流水線執(zhí)行整數(shù)指令的執(zhí)行時間,大多數(shù)時鐘在一個時鐘周期中執(zhí)行。

表2-27 整數(shù)指令的執(zhí)行時間

5.MAC單元

MAC單元執(zhí)行DSP MAC操作。MAC操作是32×32的48-bit累加器。MAC單元是全流水線的,并且在每個新的時鐘周期能接受新的MAC操作。

6.系統(tǒng)單元(System Unit)

系統(tǒng)單元連接CPU/DSP的所有其他沒有被指令和數(shù)據(jù)接口連接的信號,它還實(shí)現(xiàn)了系統(tǒng)特定寄存器(如supervisor寄存器),執(zhí)行所有的l.mtspr/l.mfspr指令。

7.例外(Exceptions)

當(dāng)一個例外條件出現(xiàn)時,將產(chǎn)生例外并進(jìn)入例外處理程序。例外的產(chǎn)生源有下面幾種。

● 外部中斷。

● 某一內(nèi)存訪問條件。

● 內(nèi)部錯誤,如嘗試執(zhí)行設(shè)有使用的操作碼。

● 系統(tǒng)調(diào)用。

● 內(nèi)部例外,如斷點(diǎn)例外。

例外處理被傳送到用戶軟件,當(dāng)一個例外發(fā)生時,控制被傳送到一個例外處理句柄,它由例外類型定義了例外處理例程偏移指針,例外在supervisor模式處理。

OR1200核心使用了精確的例外模式。這意味著當(dāng)一個例外發(fā)生時,下面的條件滿足。

● 程序流中隨后的指令被丟棄。

● 以前的指令完成并寫回了它們的結(jié)果。

● 錯誤指令的地址被存在EPCR寄存器中,并且機(jī)器狀態(tài)被存在ESR寄存器中。

OR1200例外不支持快速上下文切換。OR1200使用的例外說明如表2-28所示。

表2-28 OR1200使用的例外說明

2.2.3 數(shù)據(jù)和指令高速緩存

OR1200數(shù)據(jù)高速緩存與指令高速緩存的機(jī)制一樣,下面僅說明數(shù)據(jù)高速緩存。

OR1200數(shù)據(jù)高速緩存默認(rèn)配置是一條8-Kbyte通道直接映射的數(shù)據(jù)高速緩存,它允許核心快速訪問數(shù)據(jù)。數(shù)據(jù)高速緩存還可被配置成1KB、2KB、4KB和8KB形式。它的特征如下:

● 數(shù)據(jù)高速緩存與指令高速緩存分開(Harvard構(gòu)架)。

● 每個數(shù)據(jù)高速緩存應(yīng)用最少最近使用替換算法(LRU,Least-Recently Used)。

● 高速緩存目錄是物理地址,物理地址標(biāo)記存在高速緩存目錄中。

● 可全寫操作。

● 通過寫高速緩存特殊用途寄存器可取消高速緩存或使高速緩存失效。

當(dāng)發(fā)生一次失靶(Cache Miss),高速緩存被猝發(fā)(Burst)填充入一行。通常一行4個定,其16字節(jié)。猝發(fā)填充被作為一種臨界字優(yōu)先操作,臨界的字被同時寫入到高速緩存和請求的單元,這樣,減小了由于高速緩存填充時延造成的延遲。數(shù)據(jù)高速緩存與外部接口成對,允許對系統(tǒng)內(nèi)存控制器有效率地訪問。

數(shù)據(jù)高速緩存以32bit接口、通過Load/Store單元供應(yīng)數(shù)據(jù)到GPRs。LSU提供了計(jì)算有效地址及與數(shù)據(jù)高速緩存數(shù)據(jù)對齊的邏輯,還提供Load/Store操作序列。對數(shù)據(jù)高速緩存的寫操作以一個字節(jié)、半個字或字的形式進(jìn)行。

數(shù)據(jù)高速緩存用512行組織。每行由16字節(jié)、狀態(tài)位和地址標(biāo)記組成。每行從內(nèi)存裝入4個連續(xù)的字,從內(nèi)存4個字對齊的邊界裝載,這樣,高速緩存行與頁邊界對齊了。

1.?dāng)?shù)據(jù)高速緩存Load/Store訪問

Load/Store單元從數(shù)據(jù)高速緩存請求數(shù)據(jù),并把它們存儲在通用寄存器文件里轉(zhuǎn)發(fā)到執(zhí)行單元。因此,LSU與數(shù)據(jù)高速緩存是緊密耦合的。

如果沒有數(shù)據(jù)高速緩存行失靶也沒有DTLB失靶,Load操作花費(fèi)2個時鐘周期執(zhí)行,Store操作花費(fèi)1個時鐘周期執(zhí)行。LSU處理所有的數(shù)據(jù)對齊工作。

數(shù)據(jù)以字或半個字或字節(jié)的形式被寫入到數(shù)據(jù)高速緩存。因?yàn)閿?shù)據(jù)高速緩存僅以write-through(全寫)模式操作,所有的寫立即被寫回到主存中或下一級高速緩存中。

2.?dāng)?shù)據(jù)高速緩存行填充操作

當(dāng)執(zhí)行Load指令并且一個高速緩存失靶發(fā)生時,一個帶有前面是臨界字的4個有順序的讀猝發(fā)被執(zhí)行。由于高速緩存的失靶,臨界字轉(zhuǎn)發(fā)到Load/Store單元以減小執(zhí)行損失。

3.高速緩存/內(nèi)存一致

OR1200中數(shù)據(jù)高速緩存僅以全寫的方式執(zhí)行,而且OR1200不期望使用在多個處理器環(huán)境。因此不支持本地?cái)?shù)據(jù)高速緩存和其他處理器的高速緩存或主存之間的數(shù)據(jù)一致性。

4.?dāng)?shù)據(jù)高速緩存的激活/禁止

數(shù)據(jù)高速緩存在啟動時被禁止。整個數(shù)據(jù)高速緩存通過設(shè)置bit位SR[DCE]激活。在數(shù)據(jù)高速緩存被激活之前,它必須是無效的。

5.?dāng)?shù)據(jù)高速緩存無效

OR1200的數(shù)據(jù)高速緩存不支持整個數(shù)據(jù)高速緩存的無效。正常的使整個數(shù)據(jù)高速緩存失效的程序是循環(huán)所有的數(shù)據(jù)高速緩存行并單獨(dú)使每行失效。

6.鎖數(shù)據(jù)高速緩存

數(shù)據(jù)高速緩存使用在數(shù)據(jù)高速緩存控制寄存器DCCR的通道鎖bit位。LWx的位被設(shè)置為1時,鎖住單個通道。

7.?dāng)?shù)據(jù)高速緩存行預(yù)取

數(shù)據(jù)高速緩存行預(yù)取在OpenRISC 1000構(gòu)架中是可選的,在OR1200中不支持。

8.?dāng)?shù)據(jù)高速緩存行刷新

因?yàn)閿?shù)據(jù)高速緩存僅以全寫操作,數(shù)據(jù)高速緩存行刷新僅執(zhí)行行無效。操作通過寫有效的地址到DCBFR寄存器而被執(zhí)行。在數(shù)據(jù)高速緩存行上刷新操作和數(shù)據(jù)的行失效操作沒有區(qū)別。

9.?dāng)?shù)據(jù)高速緩存行失效

數(shù)據(jù)高速緩存行失效是使一個單獨(dú)的數(shù)據(jù)高速緩存行失效。操作通過寫有效的地址到DCBIR寄存器中被執(zhí)行。

10.?dāng)?shù)據(jù)高速緩存行回寫

數(shù)據(jù)高速緩存行回寫操作不做任何事情,因?yàn)閿?shù)據(jù)高速緩存僅以全寫模式進(jìn)行操作。

11.鎖數(shù)據(jù)高速緩存行

單個數(shù)據(jù)高速緩存行加鎖在OR1200中沒被實(shí)現(xiàn)。

2.2.4 數(shù)據(jù)與指令MMU

OR1200的數(shù)據(jù)MMU與指令MMU機(jī)制一樣,下面僅說明數(shù)據(jù)MMU。

OR1200使用MMU提供內(nèi)存訪問保護(hù)和有效的虛擬內(nèi)存到物理地址的轉(zhuǎn)換。保護(hù)顆粒由OpenRISC 1000構(gòu)架定義,一般為8KB或16MB頁。MMU硬件支持二級軟件表遍歷。OR1200的TLB配置如表2-29所示。

表2-29 OR1200可能的數(shù)據(jù)TLB(簡稱DTLB)配置

數(shù)據(jù)MMU特征如下:

● 數(shù)據(jù)MMU與指令MMU分開。

● 頁尺寸為8-KB。

● 便于理解的頁保護(hù)機(jī)制。

● 基于翻譯查找緩沖(TLB translation lookaside buffer)的直接映射哈希表,默認(rèn)1條通道并有下面的特征。

■ 失靶和錯誤例外。

■ 軟件可遍歷表。

■ 因基于哈希設(shè)計(jì)而有高效率。

■ 數(shù)量可變的DTLB條目,默認(rèn)時是每通道64條目。

下面說明數(shù)據(jù)MMU的機(jī)制。

1.禁止翻譯

可通過清除bit位SR[DME]禁止Load/Store地址翻譯,如果禁止翻譯,那么物理地址用來訪問數(shù)據(jù)高速緩存,物理地址可選信號提供在dwb_ADDR_O線上,這個物理地址將與Load/Store有效地址一致。

2.翻譯激活

Load/Store地址翻譯可通過設(shè)置bit位SR[DME]而被禁止,如果翻譯被激活,它提供了有效的地址到物理地址翻譯和內(nèi)存訪問的頁保護(hù)。在OR1200中,操作系統(tǒng)的虛擬內(nèi)存管理子系統(tǒng)管理頁表。

3.DMMUCR和整個DTLB的刷新

DMMUCR在OR1200中沒有被使用。因此頁表基指針(PTBP)必須被存在軟件變量中。整個DTLB的刷新必須通過將每個DTLB條目獨(dú)立進(jìn)行軟件刷新來完成。軟件刷新由軟件從TLB條目寫數(shù)據(jù)到PTE。

4.頁保護(hù)

內(nèi)存訪問時,虛擬地址如果是PTE覆蓋的有效頁,內(nèi)存保護(hù)機(jī)制將確定訪問為有效。如果保護(hù)機(jī)制禁止訪問,將產(chǎn)生一個數(shù)據(jù)頁錯誤例外。

內(nèi)存保護(hù)機(jī)制允許給超級管理者(supervisor)和用戶(user)模式選擇讀和寫訪問。頁保護(hù)機(jī)制提供了所有頁顆粒上的保護(hù)。

5.DTLB條目重裝載

OR1200沒有使用DTLB條目在硬件上進(jìn)行重載,而是使用軟件例程搜索頁表中正確的頁表?xiàng)l目(PTE),并且復(fù)制頁表?xiàng)l目到DTLB。軟件負(fù)責(zé)維護(hù)頁表里的訪問和dirty(臟)位。

當(dāng)LSU操作的Load/Store有效地址沒有被DTLB緩存時,一個DTLB失靶例外發(fā)生。DTLB重載例程必須裝載正確的PTE。

6.DTLB條目無效

必須用有效的地址寫特殊寄存器DTLBEIR,并且相應(yīng)的DTLB條目在本地的DTLB中置為無效。

7.鎖DTLB條目

因?yàn)樗械腄TLB條目重載在軟件里執(zhí)行,所以沒有DTLB條目的硬件鎖。

8.頁屬性—Dirty(D)

在OR1200 DTLB中沒有使用Dirty屬性,操作系統(tǒng)使用頁保護(hù)機(jī)制產(chǎn)生Dirty屬性位。

9.頁屬性—Accessed(A)

在OR1200 DTLB中沒有使用Accessed屬性,操作系統(tǒng)使用頁保護(hù)機(jī)制產(chǎn)生Accessed屬性位。

10.頁屬性—Weakly Ordered Memory(WOM弱次序內(nèi)存)

在OR1200中不需要使用WOM屬性,因?yàn)樗性L問已被串行化。

11.頁屬性—Write-Back Cache(WBC回寫高速緩存)

在OR1200中WBC屬性是不需要的,因?yàn)閿?shù)據(jù)高速緩存僅以全寫方式操作。

12.頁屬性—Caching-Inhibited(CI高速緩存禁止)

OR1200 DTLB沒有使用CI屬性,高速緩存和非高速緩存區(qū)域被數(shù)據(jù)有效地址的bit30位分開。高速緩存和非高速緩存區(qū)域的劃分如表2-30所示。

表2-30 高速緩存和非高速緩存區(qū)域的劃分

當(dāng)I/O寄存器是內(nèi)存映射的,并且所有的讀和寫直接對外接口而不是對數(shù)據(jù)高速緩存執(zhí)行時,非高速緩存的訪問必須執(zhí)行

13.頁屬性—Cache Coherency(CC高速緩存的一致性)

在OR1200中,CC屬性是不需要的,因?yàn)樗恢С侄鄠€處理器環(huán)境,還因?yàn)閿?shù)據(jù)高速緩存僅在全寫方式操作。

2.2.5 可編程的中斷控制器

可編程的中斷控制器(Programmable Interrupt Controller)從外部的源接收中斷并將這些中斷作為低或高優(yōu)先級中斷例外轉(zhuǎn)發(fā)給CPU核心。中斷控制器的組成如圖2-9所示。

圖2-9 中斷控制器的組成

可編程中斷控制器有三個特殊用途寄存器和32個中斷輸入。中斷輸入0和1總是被激活的,并連接到高和低的優(yōu)先級中斷輸入,相應(yīng)其他30個中斷輸入可以通過可編程的特殊用途寄存器屏蔽,并指定低或高優(yōu)先級。

2.2.6 Tick定時器

OR1200使用了Tick定時器(Tick Timer)設(shè)備。它是由RISC時鐘給出時間的定時器,被操作系統(tǒng)用來精確測量時間和調(diào)度系統(tǒng)任務(wù)。OR1200遵循框架Tick定時器設(shè)備的定義,具體如下:

● 232時鐘周期的最大定時計(jì)數(shù)。

● 在中斷之間最大228 時鐘周期的時間間隔。

● 可屏蔽的Tick定時器中斷。

● 單個運(yùn)行,可重新啟動或繼續(xù)定時。

Tick定時器使用獨(dú)立的時鐘源進(jìn)行操作,以便于在電源管理的睡眠時時鐘還是可用的。

2.2.7 電源管理支持

為了優(yōu)化電源管理,OR1200提供了低電源模式,它能動態(tài)激活或使某一內(nèi)部模塊失效。OR1200有三個主要特征來最小化電源消耗,具體如下:

● 慢速(Slow)和空閑(Idle)模式(慢速模式控制時鐘頻率降低)。

● 睡眠模式Doze(淺睡眠)和Sleep(深度睡眠),睡眠后通過中斷喚醒。

各種電源管理模式下的電源消耗如表2-31所示。

表2-31 電源消耗降低倍數(shù)

慢速模式將得益于外部時鐘產(chǎn)生電路的低電源除法器,將時鐘頻率整除后的低頻率送給CPU,頻率的降低導(dǎo)致功耗的降低。

當(dāng)軟件初始化為Doze模式,軟件在核心掛起下運(yùn)行。到RISC內(nèi)部模塊的時鐘除了Tick定時器外都被禁止。但任何在芯片上的其他功能塊可以運(yùn)行正常的功能。當(dāng)一個中斷發(fā)生時,OR1200將離開Doze模式并進(jìn)入正常模式。

在Sleep模式,所有的OR1200內(nèi)部單元被禁止,并且由時鐘門控。當(dāng)一個中斷發(fā)生時,OR1200將離開Doze模式并進(jìn)入正常模式。

2.2.8 調(diào)試單元

調(diào)試單元(Debug Unit)幫助軟件開發(fā)者調(diào)試系統(tǒng)。它提供了基本調(diào)試的支持,但不支持OpenRISC 1000構(gòu)架中諸如Watchpoints,Breakpoints和程序流控制寄存器這樣先進(jìn)的調(diào)試特征。OR1200調(diào)試單元的框圖如圖2-10所示。

圖2-10 調(diào)試單元的結(jié)構(gòu)

Watchpoints和Breakpoints是匹配在調(diào)試寄存器中條件的程序語句或數(shù)據(jù)流觸發(fā)的事件。Breakpoints不像Watchpoints,它還掛起當(dāng)前程序流的執(zhí)行,并開始斷點(diǎn)例外處理。

2.2.9 時鐘與復(fù)位

OR1200核心有幾個時鐘輸入。時鐘輸入clk_cpu是CPU/DSP模塊的時鐘,并且還是RISC其他沒有單獨(dú)時鐘的部分的時鐘。數(shù)據(jù)高速緩存的時鐘是clk_dc,指令高速緩存的時鐘是clk_ic,數(shù)據(jù)MMU的時鐘是clk_dmmu,指令MMU的時鐘是clk_immu,Tick定時器的時鐘是clk_tt。所有的時鐘必須有同一相位和盡可能低的時鐘脈沖相位差。

OR1200有異步復(fù)位信號。復(fù)位信號rst為高時,立即復(fù)位OR1200中的所有觸發(fā)器。

2.2.10 WISHBONE接口

兩個WISHBONE接口連接OR1200核心到外圍或外部的內(nèi)存子系統(tǒng)。它們遵循規(guī)范《WISHBONE SoC Interconnection specification Rev. B》,即WISHBONE片上系統(tǒng)內(nèi)部連接規(guī)范。OR1200使用32bit寬度總線,不支持其他的總線寬度。

主站蜘蛛池模板: 观塘区| 贡嘎县| 宣威市| 曲阜市| 商丘市| 邳州市| 沽源县| 常德市| 阆中市| 乌海市| 驻马店市| 天峻县| 都江堰市| 乐昌市| 唐山市| 浦东新区| 江华| 方山县| 竹溪县| 浏阳市| 孝义市| 安福县| 鄂尔多斯市| 高台县| 德令哈市| 永靖县| 柳林县| 怀宁县| 怀集县| 赣州市| 阿荣旗| 宜州市| 萨嘎县| 广安市| 盐津县| 景德镇市| 宝丰县| 曲周县| 双城市| 兴海县| 宾阳县|