孟 芳,于立佳,張文志
(中國電子科技集團公司第五十四研究所,河北石家莊 050081)
SOPC是一種靈活、高效的片上系統解決方案,它將處理器、存儲器和I/O口等系統設計所需要的功能模塊集成到一個現場可編程邏輯(FPGA)器件上,從而構成一個可編程的片上系統。SOPC技術的實現方式分為基于嵌入式硬核的SOPC系統和基于嵌入式軟核的SOPC系統。其中嵌入式軟核以其低成本、高靈活性和易于升級等優點獲得了諸多設計者的青睞。A1tera公司推出的Nios II就是最具代表性的嵌入式軟核處理器。基于Nios II軟核的片上可編程系統,配以豐富的集成外設功能特性,用戶可以構成各種不同的智能系統,廣泛應用于通信、家電和控制等眾多領域。
基于Nios II的SOPC系統設計首先要根據系統要求確定功能模塊,然后分別進行硬件設計和軟件設計,如圖1所示。

圖1 基于Nios II的SOPC系統開發流程
硬件設計由用戶通過SOPC Builder工具軟件定制系統硬件,通常采用HDL語言增加其他邏輯模塊,通過Quartus II工具軟件生成目標代碼。軟件設計首先根據定制的硬件信息生成與目標硬件相匹配的板級支持包(BSP),通常采用C語言增加應用程序,通過GNU工具鏈完成編譯、連接生成目標文件。然后將軟硬件設計結果分別下載到FPGA,進行調試驗證。
筆者基于A1tera公司的Cyclone II系列芯片EP2C35完成SOPC系統設計,實現模擬用戶單元功能。模擬用戶單元是交換機中最常用的接口單元,完成模擬電話、模擬傳真等設備的接入,實現3種編解碼處理,并具有回波抵消、業務適配及端到端信令處理功能。模擬用戶單元組成框圖如圖2所示,主要包括:FPGA、時鐘電路、同步數據隨機存儲器(SDRAM)、異步串口(UART)電路、模擬用戶接口電路、閃存(FLASH)、編解碼模塊、背板接口電路和電源模塊。其中核心部分為FPGA片上系統,下面詳細介紹其軟硬件設計過程。

圖2 模擬用戶單元組成框圖
1.2.1 硬件設計
硬件設計通過Quartus II 9.1工具軟件完成。首先根據系統功能確定片上系統組件:Nios II軟核處理器、片內定時器、鎖相環、片內存儲器RAM、異步串口UART、SDRAM接口、FLASH接口、Avalon三態橋以及CPU接口。
打開Quartus II 9.1軟件,建立新工程,啟動SOPC Builder工具軟件,添加 CPU組件 Nios II Processor,選擇 Nios II/f型,時鐘為 50 MHz,添加定時器組件,定時周期設為5 ms,為方便調試,添加片內存儲器RAM組件、異步串口組件,添加SDRAM接口組件,根據外部SDRAM芯片訪問要求設定地址、數據寬度以及訪問時序,由于SDRAM的時鐘需要固定相位偏移,添加鎖相環組件,設定固定偏移相位,添加FLASH接口組件,根據外接FLASH芯片訪問要求設定地址、數據寬度以及訪問時序,由于FLASH接口必須通過Avalon三態橋連接到總線,添加Avalon三態橋組件,并連接FLASH接口。另外,由于交換矩陣、業務適配及編解碼模塊需要16位CPU接口,背板接口電路需要8位CPU接口,因此添加自定義組件 CPU接口,選擇添加新組件New Component選項,在 Templates菜單欄選擇Add Typical Avalon-MM Tristate Slave選項,修改信號定義、類型、寬度及方向等,并設定訪問時序,生成自定義組件CPU_16bit和CPU_8bit,添加自定義組件,默認情況下,CPU接口與FLASH接口共享地址和數據總線,為了方便調試,將CPU接口與FLASH接口地址、數據總線分開,增加Avalon三態橋組件與CPU接口連接,至此完成各組件定義。
根據組件定義配置CPU啟動和異常處理地址。選擇System菜單下Auto-Assign Base Address選項以避免各組件的訪問地址沖突,然后生成處理器模塊SOC,在工程中添加SOC模塊,并將其他常規設計的FPGA內部邏輯模塊與之相連,進行編譯生成目標文件通過調試接口下載到FPGA進行調試。
1.2.2 軟件設計
軟件設計采用Nios II 9.1工具軟件基于MicroC/OS-II多任務實時操作系統實現。首先獲得目標硬件的BSP,SOPC Builder生成硬件CPU模塊SOC的同時也生成了 SOC.sopcinf文件,利用SOC.sopcinf可以生成與目標硬件相匹配的BSP文件。打開Nios II 9.1工具軟件,新建一個工程,根據Nios II Application and BSP Templates向導選擇相應的SOC.sopcinf文件,設定工程、BSP的名稱及位置,完成新工程的建立。而后設置BSP屬性中Editor選項的各個條目,生成一個用戶定制的BSP文件,該BSP與SOPC Builder生成的硬件處理器模塊SOC相匹配,其中system.h文件體現了各組件的特性及訪問地址。在新工程中添加用戶應用程序,MicroC/OS-II多任務實時操作系統提供了任務創建和消息隊列創建、處理函數,通過這些函數可以很方便地創建多個任務,并通過消息隊列完成任務間通信。軟件主程序首先定義任務棧大小,確定任務優先級,完成任務創建、任務編寫,然后調用OSStart()系統函數啟動任務。用戶應用程序添加完畢后編譯整個工程即可生成.elf文件,通過選擇Debug as Nios II Hardware選項將編譯生成的文件下載到FPGA進行軟件程序調試。
基于Nios II的SOPC系統關鍵技術包括以下幾個方面:Nios II CPU的內核體系結構、系統總線結構、外圍設備設計、操作系統和系統性能優化方法。
2.1.1 Nios II CPU的內核體系結構
Nios II CPU是采用流水線技術和哈佛結構的通用精簡指令集計算機(RISC)處理器。其功能單元包括寄存器文件、算術邏輯單元、用戶邏輯接口、異常控制器、中斷控制器、指令Cache、數據Cache、指令和數據的緊耦合存儲器及調試模塊。其中算術邏輯單元用來完成數據處理任務,用戶邏輯接口可連接用戶定制邏輯電路和Nios II內核,由于該處理器采用哈佛結構,因此其數據總線和指令總線分開,緊耦合存儲器不僅能改善系統性能,而且可以保證裝載和存儲指令或數據時間的準確,中斷控制器和異常控制器分別用于處理外部硬件中斷事件和內核異常事件,Nios II的寄存器文件包括32個通用寄存器和6個控制寄存器,并允許將來添加浮點寄存器,為調試方便,Nios II還集成了一個調試模塊。
Nios II CPU支持3種可配置的類型:Nios II/e(經濟型)、Nios II/s(標準型)和 Nios II/f(快速型)。其中,Nios II/e消耗的FPGA資源最少,但性能最低;Nios II/f性能最高,但消耗資源最多;Nios II/s介于2者之間。
2.1.2 系統總線結構
在系統總線方面,Nios II采用Avalon交換式總線結構。Avalon總線是Altera公司為SOPC系統開發的一種專用內部連線技術,是一種用于處理器和外設之間的理想的內聯總線。它需要極小的FPGA資源,提供完全的同步操作。Avalon總線規范為外設的端口與總線模塊之間的數據傳輸提供了互連模式,它定義了一種可配置的互連策略,允許設計者只保留支持特定的數據傳輸模式所需要的信號。這種互連策略使設計者在不了解主端口或從端口細節的情況下,可以將任意主設備和從外設互連。Avalon總線同時提供多主機體系結構,可提高系統帶寬,消除帶寬瓶頸,從而實現無與倫比的系統吞吐量。
2.1.3 外圍設備設計
Nios II系統提供一些常用的標準外圍設備庫。主要包括并行輸入輸出接口、通用異步收發器、定時器、SDRAM控制器、FLASH控制器以及以太網接口等。設計者能夠利用SOPC Builder開發工具來添加所需外設,并配置映像地址、主/從關系和中斷優先順序等。另外,用戶還可以添加自定義外設,完成用戶需要的特殊功能。
2.1.4 操作系統
Nios II集成開發環境可支持多種嵌入式實時操作系統,包括 MicroC/OS-II、Nucle-us Plus、MicroCLinux、eCOS和KROS等。其中基于搶占式的實時多任務操作系統MicroC/OS-II具有可固化、可剪裁、高穩定性和可靠性的特點,可以提供任務調度以及接口驅動,非常容易使用。Altera提供對MicroC/OS-II的完整支持,使得軟件工程師可以快速地為Nios II處理器系統創建一個可裁減的實時操作系統(RTOS)配置。
2.1.5 系統性能優化方法
基于Nios II的軟核處理器可以通過定制用戶指令、定義基于Avalon總線的用戶外設、硬件加速編譯器C2H和優化系統編譯選項的方法來提高系統性能。定制用戶指令可以把一個復雜的標準指令序列簡化為一條用硬件實現的單個指令,以減少系統中關鍵算法的耗時,增強實時處理能力。定義基于Avalon總線的用戶外設可以將占用CPU資源較多的處理轉化為硬件實現提高系統性能。C2H加速編譯器是指可以將C代碼中的某些函數通過C2H指令由硬件電路實現,它幫助設計者以最少的資源消耗達到提高性能的目的。另外,通過更改系統參數、優化編譯選項,同樣能夠提高Nios II系統性能。
基于Nios II的SOPC系統與傳統的處理器相比,具有以下優勢:
(1)易于實現
基于Nios II的SOPC系統提供自動化系統開發工具。它采用一種基于表格的錄入系統,具有直觀的圖形用戶界面,系統列出定義的單元模塊,并為每個元件提供了一個向導,利用該向導能很容易地定義單元模塊功能。
(2)易于升級
傳統的處理器的配置是固定不變的,無法適應最新技術的發展,而Nios II嵌入式處理器是基于硬件描述語言構建的,可配置的程度很高,如果用戶系統需要進行升級,傳統處理器可能需要更換芯片,重新構建硬件系統,而基于Nios II的SOPC系統只需修改FPGA片內的CPU結構配置,簡單方便。
(3)節約成本
在系統設計中,除了 CPU模塊,一般還需要FPGA完成一些用戶邏輯,如果采用SOPC系統即可充分利用FPGA資源,省掉CPU芯片,節約了成本也減小了體積。
(4)縮短開發周期
傳統的系統設計需要先建立硬件平臺,在硬件平臺之上進行軟件開發,而Nios II開發環境支持指令集仿真器,允許用戶在建好目標硬件平臺之前就開始開發程序,可以像真實的目標硬件平臺一樣開發程序,這樣軟硬件設計同時進行,縮短開發周期。而且在Nios II硬件系統生成的同時,也生成相應的BSP,即對應于目標硬件系統的底層驅動,這樣免去開發底層驅動的麻煩,節省大量的開發時間和精力。
(5)方便調試
傳統的CPU模塊除了需要專門的開發軟件,還需要仿真器并安裝相應的軟件才能進行調試,而基于Nios II的SOPC系統只需一臺裝有Nios II集成開發環境的計算機,即可完成軟硬件系統的開發調試,非常方便。
采用基于SOPC系統設計的模擬用戶單元進行系統測試,以驗證基于Nios II的SOPC系統功能與性能。將2塊模擬用戶單元板插入交換機,加電,模擬用戶單元正常啟動,查詢插板信息可以看到2塊模擬用戶板,將每塊模擬板各接出1部模擬話機,在對應的話路注冊電話號碼,互相撥打,通話正常,設置不同的編解碼方式,重新撥打,通話正常,表明基于Nios II的SOPC系統功能正常。
采用斯博倫公司的呼叫模擬測試儀Abacus 100對2塊模擬用戶板進行16路到16路的呼叫測試,測試時間4 h,呼叫次數為55304次,呼叫完成率100%。通過測試儀的測試以及在工程中的應用表明基于Nios II的SOPC系統工作穩定、可靠。
SOPC技術使開發者能夠在軟硬件系統的綜合與構建2個方面發揮自己的創造力和想象力,從而多角度、多因素和多結構層面對自己的設計進行優化。它更廣泛和深入地利用計算機這一科研開發的主流技術,使設計者最大限度地優化系統的性能。基于NiosII的SOPC系統設計簡單靈活,開發周期短,成本低,系統維護升級方便,是許多中、低速系統設計不錯的選擇,今后必將在各個領域得到更廣泛的應用。
[1]楊宗德,張兵.uC/OS-II標準教程[M].北京:人民郵電出版社,2009.
[2]侯建軍,郭勇.SOPC技術基礎教程[M].北京:清華大學出版社,2008.
[3]羅力凡,常春藤.基于VHDL的FPGA開發快速入門·技巧·實例[M].北京:人民郵電出版社,2009.
[4]李蘭英.NiosII嵌入式軟核 SOPC設計原理及應用[M].北京:北京航空航天大學出版社,2006.
[5]楊國林.基于NiosII處理器的SOPC應用平臺的研究與應用[D].山東大學碩士學位論文,2008.
[6]楊春玲,張輝.現代可編程邏輯器件及SOPC應用設計[M].哈爾濱:哈爾濱工業大學出版社,2005.