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