《電子技術應用》
您所在的位置:首頁 > 其他 > 業(yè)界動態(tài) > 一種開源微處理器OR1200的嵌入式SoC設計

一種開源微處理器OR1200的嵌入式SoC設計

2009-11-06
作者:焦?jié)h明,,陳新華,沈國新,,方翰華

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

?

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

?

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

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

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


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

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

?

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

本站內容除特別聲明的原創(chuàng)文章之外,,轉載內容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點,。轉載的所有的文章,、圖片、音/視頻文件等資料的版權歸版權所有權人所有,。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者,。如涉及作品內容、版權和其它問題,,請及時通過電子郵件或電話通知我們,,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected],。