《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 一種開(kāi)源微處理器OR1200的嵌入式SoC設(shè)計(jì)
一種開(kāi)源微處理器OR1200的嵌入式SoC設(shè)計(jì)
焦?jié)h明,陳新華,沈國(guó)新,方翰華
摘要: 介紹了一種基于32位開(kāi)放源代碼的OpenRISC1200處理器嵌入式SoC的設(shè)計(jì)方案。系統(tǒng)以O(shè)R1200為核心,開(kāi)發(fā)基于Wishone總線的IP核,并集成到OR1200系統(tǒng)中,構(gòu)成了系統(tǒng)的硬件平臺(tái)。軟件部分構(gòu)建了基于OR1200系統(tǒng)的交叉編譯環(huán)境,開(kāi)發(fā)了系統(tǒng)的啟動(dòng)程序Bootloader,移植了μC/OS-II操作系統(tǒng)。
Abstract:
Key words :

  摘 要: 介紹了一種基于32位開(kāi)放源代碼的OpenRISC1200處理器嵌入式SoC的設(shè)計(jì)方案。系統(tǒng)以O(shè)R1200為核心,開(kāi)發(fā)基于Wishone總線的IP核,并集成到OR1200系統(tǒng)中,構(gòu)成了系統(tǒng)的硬件平臺(tái)。軟件部分構(gòu)建了基于OR1200系統(tǒng)的交叉編譯環(huán)境,開(kāi)發(fā)了系統(tǒng)的啟動(dòng)程序Bootloader,移植了μC/OS-II操作系統(tǒng)。
    關(guān)鍵詞: OR1200微處理器;嵌入式系統(tǒng);Bootloader;μC/OS-II

  高性能的處理器核是SoC設(shè)計(jì)中最為關(guān)鍵和核心的部分。絕大多數(shù)SoC的處理器都采用了R ISC體系結(jié)構(gòu)。RISC 處理器具有指令效率高、電路面積小和功率消耗低等特點(diǎn), 滿足了SoC高性能、低成本和低功耗的設(shè)計(jì)要求。目前在SoC設(shè)計(jì)中廣泛使用的32位RISC處理器(如ARM公司的ARM處理器、IBM的Power PC處理器、MIPS公司的MIPS處理器等)均屬于商業(yè)內(nèi)核, 使用者必須支付相對(duì)昂貴的授權(quán)費(fèi)。

  近年來(lái)開(kāi)放源代碼運(yùn)動(dòng)迅速發(fā)展,開(kāi)放性源碼的概念已經(jīng)從軟件領(lǐng)域(如Linux,GCC等)擴(kuò)展到了硬件領(lǐng)域,出現(xiàn)了專門發(fā)布免費(fèi)的IP核源代碼的組織——OpenCores。OR1200以其完全開(kāi)放的源代碼和編譯器吸引了設(shè)計(jì)者。其結(jié)構(gòu)簡(jiǎn)單、通用性和可移植性強(qiáng),具備完整的開(kāi)發(fā)平臺(tái),非常適合嵌入式SoC設(shè)計(jì)[1]。關(guān)于OR1200的研究也受到學(xué)術(shù)界和工業(yè)界越來(lái)越多的關(guān)注。
1 32位開(kāi)放源代碼處理器核OpenRISC1200
  OpenRISC1000系列處理器是開(kāi)放IP核源代碼組織OpenCores公布的32/64位處理器軟核。OpenRISC1200采用了自主設(shè)計(jì)的OpenRISC1000體系結(jié)構(gòu)和自定義的ORBIS32 指令集。它是一種32位、標(biāo)量、哈佛結(jié)構(gòu)、5 級(jí)整數(shù)流水線的RISC,支持Cache、MMU和基本的DSP 功能。OR1200具有較好的可配置性, 使用者可以根據(jù)自己的需要定制自定義的指令,確定是否使用MMU,配置Cache 的大小(1 KB~64 KB之間)。OR1200同時(shí)還提供了1個(gè)用于降低功耗的電源管理單元和1個(gè)支持片內(nèi)調(diào)試的調(diào)試單元[2]。
  OR1200有完善的軟件開(kāi)發(fā)環(huán)境和操作系統(tǒng)的支持。使用者可以通過(guò)包括GCC、Binutils和GDB等在內(nèi)的GNU tool chains進(jìn)行基于OR1200內(nèi)核的編譯和調(diào)試。同時(shí),OR1200擁有專門的仿真器Or1ksim,可以進(jìn)行指令集一級(jí)的仿真,并支持Linux,μClinux,μC/OS-Ⅱ等任何一種現(xiàn)代操作系統(tǒng)。
    OR1200典型應(yīng)用情況[3]:使用0.18 ?滋m和6層金屬工藝時(shí),主頻運(yùn)行達(dá)到300 MHz,可以提供300Dhrystone、2.1MIPS和300 Hz的32 bit×32 bit的DSP乘加操作的能力。OR1200默認(rèn)配置有100萬(wàn)個(gè)晶體管。
2 系統(tǒng)的總體方案
  本文構(gòu)建以O(shè)R1200微處理器為核心,包含軟硬件平臺(tái)的嵌入式SoC系統(tǒng)。硬件系統(tǒng)以開(kāi)源32位RISC核+Wishbone總線為主干,進(jìn)行增量迭代開(kāi)發(fā),將仿真驗(yàn)證過(guò)的模塊逐個(gè)加入到OR1200嵌入式系統(tǒng)中,然后在FPGA上進(jìn)行驗(yàn)證。軟件部分進(jìn)行交叉編譯環(huán)境的建立、操作系統(tǒng)的移植、應(yīng)用程序開(kāi)發(fā)并利用驅(qū)動(dòng)程序、函數(shù)庫(kù),經(jīng)交叉編譯工具最后生成可執(zhí)行程序下載到內(nèi)存中。最后在Altera的DE2-70開(kāi)發(fā)板上驗(yàn)證系統(tǒng)能否穩(wěn)定運(yùn)行。系統(tǒng)開(kāi)發(fā)流程如圖1所示:

 


  主函數(shù)中3個(gè)任務(wù)函數(shù)非常簡(jiǎn)單,優(yōu)先級(jí)從高到底分別為1、2、3,系統(tǒng)提供的函數(shù)OSTimeDly()分別為10、20、30,OsTimeDly()是將1個(gè)任務(wù)掛起,延時(shí)若干個(gè)時(shí)鐘節(jié)拍,CPU可以去執(zhí)行其它任務(wù)。
  圖4給出的是通過(guò)串口工具輸出μC/OS-II多任務(wù)調(diào)度的信息,3個(gè)任務(wù)根據(jù)優(yōu)先級(jí)和延遲時(shí)間正確執(zhí)行并打印出執(zhí)行信息,測(cè)試證明OR1200嵌入式SoC系統(tǒng)能夠穩(wěn)定的運(yùn)行μC/OS-II。

3 硬件平臺(tái)的構(gòu)建
  OR1200Q嵌入式SoC系統(tǒng)組件包括:OR1200、Wishbone互聯(lián)模塊、Memory Controller、Flash、SDRAM、UART、GPIO、DM9000A接口模塊以及DM9000A控制器。圖2所示系統(tǒng)的硬件架構(gòu)。

  系統(tǒng)外接50 MHz的時(shí)鐘,經(jīng)過(guò)PLL分頻,系統(tǒng)工作在25 MHz頻率。由于OR1200的可配置性,配置了硬件乘法功能,選擇8 KB的IC(指令緩存)、8 KB的DC(數(shù)據(jù)緩存),選擇NO_DMMU,NO_IMMU,即未加內(nèi)存管理單元。起始地址設(shè)為0x100,對(duì)系統(tǒng)做了硬件映射,復(fù)位時(shí),0x04000000地址映射到0x0地址,所以系統(tǒng)可以從Flash啟動(dòng)。Memory Control為統(tǒng)一的存儲(chǔ)控制器模塊,控制著SDRAM和Flash 2種存儲(chǔ)器。本系統(tǒng)針對(duì)AlteraDE2-70開(kāi)發(fā)板硬件配置選擇64 MB的SDRAM和8 MB的Flash。Flash用于存儲(chǔ)壓縮的內(nèi)存映像文件及啟動(dòng)程序Bootloder。Bootloder把壓縮的內(nèi)存映像文件從Flash復(fù)制到SDRAM中,并跳到起始位置解壓執(zhí)行可執(zhí)行文件、啟動(dòng)操作系統(tǒng)。UART是嵌入式中重要的I/O設(shè)備,本系統(tǒng)選擇由OpenCores組織維護(hù)的UART16550 IP核,它與國(guó)家工業(yè)標(biāo)準(zhǔn)兼容并且可配置。UART通信協(xié)議的要求是:波特率9600 b/s、8個(gè)數(shù)據(jù)位、1個(gè)停止位、無(wú)奇偶校驗(yàn)位。GPIO在系統(tǒng)中主要用于控制LED顯示狀態(tài)。DM9000A支持8 bit和16 bit數(shù)據(jù)接口以適用于不同的微處理器,但是沒(méi)有合適的開(kāi)源IP模塊來(lái)連接DM9000A和Wishbone。因此需要開(kāi)發(fā)1個(gè)IP接口模塊能將Wishbone從設(shè)備信號(hào)轉(zhuǎn)換為DM9000A控制信號(hào)。這個(gè)接口模塊有2個(gè)接口:1個(gè)連接在Wishbone從設(shè)備上;1個(gè)連接DM9000A控制器。DM9000A本身是little-endian,OR1200是big-endian,所以數(shù)據(jù)線接法應(yīng)該做交叉接法。
  Wishbone互聯(lián)模塊有很多種,比如Wishbone Conbuse、Wishbone Traffic Cop、Wishbone Interconnect Matrix。鑒于本系統(tǒng)外設(shè)不多,選擇Wishbone Traffic Cop,它有8個(gè)主設(shè)備、9個(gè)從設(shè)備。系統(tǒng)2個(gè)主設(shè)備即指令總線主設(shè)備、數(shù)據(jù)總線主設(shè)備,主設(shè)備通過(guò)Wishbone 的總線譯碼器和仲裁器與從設(shè)備進(jìn)行數(shù)據(jù)通信,總線仲裁器選擇控制總線的主設(shè)備,保證每個(gè)周期最多只有1個(gè)主設(shè)備獲得總線控制權(quán)。系統(tǒng)有4個(gè)從設(shè)備,分別是UART、Flash、SDRAM和DM9000A。每個(gè)從設(shè)備都由32 bit地址線的最高8 bit來(lái)編址,總線譯碼器對(duì)主設(shè)備發(fā)出的地址的最高3 bit進(jìn)行譯碼來(lái)決定訪問(wèn)哪個(gè)從設(shè)備。
4 系統(tǒng)的軟件開(kāi)發(fā)
  軟件開(kāi)發(fā)過(guò)程包括交叉編譯環(huán)境的搭建,Bootloader的設(shè)計(jì)、μC/OS-II的移植和應(yīng)用程序開(kāi)發(fā)等。
4.1 GNU交叉編譯環(huán)境的構(gòu)建
  OR1200系統(tǒng)使用的是OR32工具鏈,它由GCC, GNU Binutils和GDB組成,另外還提供了OR32模擬仿真工具。gcc-3.4.4用于程序的編譯;Binutils-2.16.1提供了鏈接等各種工具;gdb-5.3用于程序的調(diào)試。OR32模擬仿真工具or1ksim工具可以模擬OR1200處理器的行為,讓程序脫離處理器在模擬工具上運(yùn)行,從而實(shí)現(xiàn)OR1200與程序并行開(kāi)發(fā)。OR32可從opencores網(wǎng)站上下載。
4.2 啟動(dòng)代碼Bootloder的設(shè)計(jì)
4.2.1 移植分析

  對(duì)于計(jì)算機(jī)系統(tǒng)來(lái)說(shuō),從開(kāi)機(jī)到操作系統(tǒng)啟動(dòng)需要一個(gè)引導(dǎo)過(guò)程,嵌入式系統(tǒng)同樣離不開(kāi)引導(dǎo)程序,這個(gè)引導(dǎo)程序就是Bootloader。通過(guò)這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射表,從而建立適當(dāng)?shù)南到y(tǒng)軟硬件環(huán)境,為最終調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。
  結(jié)合前面構(gòu)建的OR1200嵌入式SoC系統(tǒng),具體的移植過(guò)程中需要修改或編寫以下代碼:
  spr_defs.h OR1200相關(guān)寄存器的設(shè)置;
  board.h系統(tǒng)驗(yàn)證所用的DE2-70開(kāi)發(fā)板的定義,啟動(dòng)參數(shù)等;
  flash_boot.S,修改初始化代碼和入口;
  flash.ld,代碼在flash中的地址空間安排;
  mc.h存儲(chǔ)控制器的初始化;
  uart.h UART的初始化;
  copier.c下載的程序從Flash拷貝到SDRAM執(zhí)行的拷貝代碼;
  在Makefile中添加Bootloder的編譯支持。
4.2.2 啟動(dòng)分析
  0x100處是復(fù)位入口地址,但是Flash的初始地址為0x04000000,通過(guò)設(shè)置寄存器對(duì)系統(tǒng)做了硬件映射。復(fù)位時(shí),0x04000000地址映射到0x0地址,所以可從Flash啟動(dòng)。系統(tǒng)加電后,CPU從該地址開(kāi)始執(zhí)行。該地址也就是系統(tǒng)異常處理向量表第1項(xiàng)(復(fù)位)。跳到了init_mc 中,此時(shí)完成了系統(tǒng)的大部分初始化,例如設(shè)置寄存器、CPU、SDRAM、Flash。然后把Flash中的拷貝代碼(copier)拷貝到SDRAM,跳到SDRAM中的Copier處,copier負(fù)責(zé)把Flash中的用戶程序(userprog.bin)拷貝到SDRAM中去,并跳到0x100處,解壓執(zhí)行用戶程序,啟動(dòng)操作系統(tǒng)。此時(shí)的內(nèi)存映射為:SDRAM為0x00000000~0x04000000, Flash還是0x04000000~0x08000000。Bootloader的啟動(dòng)如圖3所示。


4.3 實(shí)時(shí)操作系統(tǒng)μC/OS-II的移植
  μC/OS-II是一個(gè)代碼公開(kāi)、內(nèi)核精簡(jiǎn)、實(shí)時(shí)性強(qiáng)、支持多任務(wù)的操作系統(tǒng),非常適合嵌入式系統(tǒng)開(kāi)發(fā)。μC/OS-II 是由與處理器相關(guān)的代碼,與處理器無(wú)關(guān)的代碼及與應(yīng)用程序相關(guān)的代碼組成。它在設(shè)計(jì)之初就已經(jīng)充分考慮了可移植性,所以μC/OS-II在不同處理器上的移植是比較容易的,主要是編寫與處理器相關(guān)的代碼,即OS_CPU_A_ASM、OS_CPU.H、OS_CPU_C.C。因此對(duì)于μC/OS-II的移植可以參考文獻(xiàn)[4]中第13章,明確OR1200微處理器的數(shù)據(jù)聲明類型、OR1200微處理器支持的堆棧增長(zhǎng)方向、臨界區(qū)處理方式。
5 系統(tǒng)運(yùn)行測(cè)試
  系統(tǒng)通過(guò)驗(yàn)證操作系統(tǒng)移植的正確性來(lái)測(cè)試所構(gòu)建的OR1200嵌入式SoC系統(tǒng)能否正常運(yùn)行,編寫main.c實(shí)現(xiàn)3個(gè)任務(wù)以及任務(wù)切換。函數(shù)的主要功能包括完成μC/OS-II操作系統(tǒng)的初始化、硬件資源的初始化、創(chuàng)建相關(guān)任務(wù)和啟動(dòng)μC/OS-II操作系統(tǒng)這幾部分。main.c的主函數(shù)部分如下:
 

 

    本文介紹了一種基于OR1200微處理器的嵌入式SoC系統(tǒng)的軟硬件設(shè)計(jì)。系統(tǒng)經(jīng)測(cè)試運(yùn)行穩(wěn)定。系統(tǒng)的硬件核心選用了開(kāi)源的32位微處理器核OR1200,并定位于嵌入式系統(tǒng),性能良好,也可適應(yīng)其他的開(kāi)放源碼IP,對(duì)于掌握具有自主知識(shí)產(chǎn)權(quán)和自主創(chuàng)新的處理器具有重大的意義,本系統(tǒng)已應(yīng)用于青島市重大科技攻關(guān)項(xiàng)目“基于OR1200嵌入式SoC網(wǎng)關(guān)集成電路的設(shè)計(jì)及AVS實(shí)現(xiàn)”。
參考文獻(xiàn)
[1] 劉軍,郭立,鄭東飛,等.開(kāi)放性32位RISC處理器IP核的比較與分析[J].電子器件,2005,28(4):50-52. [2] 孫愷,王田苗,魏洪興,等.嵌入式CPU軟核綜述[J].計(jì)算機(jī)工程,2006,32(7):8-9.
[3] 徐敏,孫愷,潘峰.開(kāi)源軟核處理器OpenRisc的SOPC設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2008.
[4] LABROSSEZ J J.嵌入式實(shí)時(shí)操作系統(tǒng)uCOS-II[M].邵貝貝,譯.第2版.北京:北京航空航天大學(xué)出版社,2003.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。