版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第9章基于NiosII嵌入式SOPC設(shè)計9.1SOPC及其技術(shù)9.2NiosII軟核處理器9.3SOPC的FPGA簡介9.4SOPC開發(fā)流程及開發(fā)平臺簡介9.5NiosII應(yīng)用程序及其外設(shè)HAL驅(qū)動開發(fā)9.6本章小結(jié)本章主要介紹以Altera公司的NiosII軟核處理器為核心的SOPC設(shè)計。為了使讀者迅速熟悉這一設(shè)計流程,本章首先介紹NiosII軟核處理器以及支持NiosII軟核處理器的FPGA系列,然后詳細介紹SOPC的開發(fā)流程。
隨著微電子技術(shù)的迅速發(fā)展,使得原來由許多IC組成的電子系統(tǒng)集成在一個單一的硅片上成為可能,構(gòu)成所謂的片上系統(tǒng)(SOC,SystemOnChip)。SOC把系統(tǒng)的處理機制、模型算法、芯片結(jié)構(gòu)、各層次電路及器件的設(shè)計緊密結(jié)合,在一片或數(shù)片單片上完成復(fù)雜的功能。SOC的出現(xiàn)對電子信息產(chǎn)業(yè)的影響不亞于集成電路的出現(xiàn)所產(chǎn)生的影響。當(dāng)今電子系統(tǒng)設(shè)計已不再是利用各種通用IC進行PCB板級的設(shè)計和調(diào)試,而是轉(zhuǎn)向以大規(guī)模fpga或asic為物理載體的系統(tǒng)芯片的設(shè)計。9.1SOPC及其技術(shù)前者稱為SOPC(SystenmOnProgrammableChip,可編程片上系統(tǒng)),后者稱為SOC。SOC和SOPC的設(shè)計是以IP(IntellectualPropertycore)為基礎(chǔ),以硬件描述語言為主要設(shè)計手段,借助于以計算機為平臺的EDA工具進行的。SOPC技術(shù)主要指面向單片系統(tǒng)級專用集成電路的計算機技術(shù),與傳統(tǒng)的專用集成電路設(shè)計技術(shù)相比,它的設(shè)計過程包括電路系統(tǒng)描述、硬件設(shè)計、仿真測試、綜合調(diào)試和系統(tǒng)軟件設(shè)計,直至整個系統(tǒng)設(shè)計完畢,都由計算機來完成,其設(shè)計技術(shù)直接面向用戶,這樣專用集成電路的被動使用者同時也可能是專用集成電路的設(shè)計者。SOPC技術(shù)使系統(tǒng)級專用集成電路的實現(xiàn)有了更多的途徑,除了傳統(tǒng)的ASIC器件外,還能通過大規(guī)模FPGA等可編程器件來實現(xiàn)。SOPC技術(shù)是美國Altera公司于2000年最早提出來的,是基于FPGA解決方案的SOC,與ASIC的SOC解決方案相比,SOPC系統(tǒng)及其開發(fā)具有更多的特色,構(gòu)成SOPC的方案也有如下多種途徑。
1.基于FPGA嵌入IP硬核的SOPC系統(tǒng)
基于FPGA嵌入硬核的SOPC系統(tǒng)把ARM的32位知識產(chǎn)權(quán)處理器核或其他的知識產(chǎn)權(quán)核以硬核的方式植入FPGA中,利用FPGA中的邏輯宏單元和IP軟核來構(gòu)成該嵌入式系統(tǒng)處理器的接口功能模塊,這樣既減少了整個系統(tǒng)的體積、功耗,而且增加了系統(tǒng)的可靠性??删幊唐骷S商Altera和Xilinx公司都推出了這方面的器件,如Altera的Excalibur系列FPGA中植入了ARM922T嵌入式系統(tǒng)處理器,Xilinx的Virtex_IIPro系列植入了IBMPowerPC405處理器。這樣就使FPGA靈活的硬件設(shè)計和硬件實現(xiàn)與處理器的強大軟件功能有機地結(jié)合起來,高效地實現(xiàn)了SOPC系統(tǒng)。
2.基于FPGA嵌入IP軟核的SOPC系統(tǒng)
目前最具有代表性的軟核處理器是Altera的Nios、NiosII以及Xilinx的MicroBlaze。它克服了將IP硬核植入FPGA的解決方案存在的如下不夠完美之處:IP硬核多來自第三方公司,F(xiàn)PGA廠商無法控制其知識產(chǎn)權(quán)費用,從而導(dǎo)致FPGA器件的價格偏高;硬核是預(yù)先植入的,設(shè)計者無法根據(jù)實際需要改變處理器的結(jié)構(gòu),以適應(yīng)更多的電路功能要求,無法根據(jù)實際需求在同一FPGA中使用多個處理器核,無法裁減處理器硬件資源以降低FPGA的成本,而且只能在特定的FPGA系列使用硬核嵌入式系統(tǒng)。
3.基于HardCopy技術(shù)的SOPC系統(tǒng)
基于HardCopy技術(shù)的SOPC系統(tǒng)利用原來的FPGA開發(fā)工具,將成功實現(xiàn)于FPGA器件上的SOPC系統(tǒng)通過特定的技術(shù)直接向ASIC轉(zhuǎn)化,從而克服了傳統(tǒng)ASIC設(shè)計開發(fā)周期長、產(chǎn)品上市慢、有最少投片量的要求、設(shè)計軟件繁多且昂貴、開發(fā)流程復(fù)雜等缺點。HardCopy技術(shù)是一種全新的SOC級ASIC設(shè)計解決方案,即將專用的硅片設(shè)計和FPGA至HardCopy自動遷移過程結(jié)合在一起的技術(shù)。
HardCopy器件把大容量FPGA的靈活性和ASIC的市場優(yōu)勢結(jié)合起來,主要應(yīng)用于較大批量要求并對成本敏感的電子設(shè)備。
NiosII嵌入式處理器是FPGA生產(chǎn)廠商Altera推出的軟核處理器,是面向用戶、可以靈活定制的通用精簡指令集架構(gòu)的嵌入式處理器。NiosII以軟核的形式提供給用戶,并在Altera的FPGA上進行了優(yōu)化,用于SOPC集成,最后在FPGA上實現(xiàn)。
9.2NiosII軟核處理器9.2.1NiosII軟核處理器簡介
繼第一代可配置嵌入式軟核處理器Nios之后,Altera公司又推出了性能更好的NiosII嵌入式軟核處理器。它與Nios相比,最大處理性能提高了3倍,而CPU內(nèi)核部分的面積最大可縮小1/2。
NiosII系列32位RISC嵌入式處理器具有超過200DMIP的性能,由于處理器是軟核形式的,因此具有很大的靈活性,可以在多種系統(tǒng)設(shè)置組合中進行選擇,滿足成本和功能的要求。采用NiosII處理器進行設(shè)計,可以幫助用戶將產(chǎn)品迅速推向市場,延長產(chǎn)品生命周期,防止處理器逐漸過時的情況。利用SOPCBuilder軟件中的用戶邏輯接口向?qū)В脩暨€可以生成自己的定制外設(shè),并將其集成在NiosII處理器系統(tǒng)中。使用SOPCBuilder,用戶可以在AlteraFPGA中組合實現(xiàn)現(xiàn)有處理器無法達到的嵌入式處理器配置,得到用戶所需的結(jié)果。
NiosII系列嵌入式處理器使用32位的指令集,定位于廣泛的嵌入式應(yīng)用。NiosII處理器系列包括3種內(nèi)核:快速的(NiosII/f)、經(jīng)濟的(NiosII/e)和標(biāo)準(zhǔn)的(NiosII/s)內(nèi)核。每一型號都針對價格和性能進行了優(yōu)化。使用Altera的QuartusII軟件、SOPCBuilder工具以及NiosII集成開發(fā)環(huán)境(IDE),用戶可以輕松地完成基于NiosII處理器的嵌入式系統(tǒng)開發(fā)。其中NiosII嵌入式處理器支持的FPGA系列如表9.1所示。
表9.1NiosII嵌入式處理器支持的FPGA系列9.2.2可配置嵌入式軟核處理器的優(yōu)勢
嵌入式開發(fā)面對的一個最大挑戰(zhàn)就是如何選擇一個滿足其應(yīng)用要求的處理器。采用NiosII處理器,用戶將不會局限于預(yù)先制造的處理器技術(shù),而是根據(jù)自己的要求定制處理器,按照需要選擇合適的外設(shè)、存儲器和接口。此外,用戶還可以輕松地集成自己專有的功能,使用戶的設(shè)計具有獨特的競爭優(yōu)勢。
采用NiosII處理器,用戶可根據(jù)需要設(shè)置功能,在低成本Altera器件中實現(xiàn)。在單個FPGA中實現(xiàn)處理器、外設(shè)存儲器和I/O接口功能,可以降低用戶系統(tǒng)的總體成本。
采用AlteraNiosII處理器和FPGA,用戶可以創(chuàng)建一個在處理器、外設(shè)、存儲器和I/O接口方面的完美方案。可配置的硬件以及調(diào)試特性使得軟件開發(fā)人員具有多個調(diào)試選擇,包括基本的JTAG的運行控制、硬件斷點、數(shù)據(jù)觸發(fā)、片內(nèi)和片外跟蹤、嵌入式邏輯分析儀。這些強大的調(diào)試工具在開發(fā)階段使用,一旦調(diào)試通過就可以去掉。FPGA可編程的特性使其具有最快的產(chǎn)品上市速度。許多的設(shè)計通過簡單的修改都可以被快速地實現(xiàn)到FPGA設(shè)計上。NiosII系統(tǒng)的靈活性和快速上市的特性源于Altera提供的完整的開發(fā)套件、眾多的參考設(shè)計、強大的硬件開發(fā)工具(SOPCBuilder)和軟件開發(fā)工具(NiosIIIDE)。用戶可以借助NiosII開發(fā)套件所附的設(shè)計方案,在幾個小時內(nèi)就可完成自己的設(shè)計原型。由于NiosII處理器放置于FPGA內(nèi)部就可以驗證外部的存儲器和I/O組件,因此電路板設(shè)計速度明顯加快。
本節(jié)將介紹表9.1中支持SOPC開發(fā)的部分FPGA的特性,可作為用戶設(shè)計時選型參考。用戶可以在這些FPGA中使用NiosII嵌入式處理器,在系統(tǒng)中構(gòu)建完整的低成本、合乎要求的嵌入式處理方案,完善或者替代嵌入式處理器。9.3SOPC的FPGA簡介9.3.1Cyclone系列
Cyclone系列FPGA是基于成本優(yōu)化的,采用130nm全銅工藝的1.5VSRAM工藝。Cyclone系列的FPGA容量為2910~20060個邏輯單元,擁有最大288kb的RAM。Cyclone系列的FPGA提供了全功能的鎖相環(huán)(PLL),用于板級的時鐘網(wǎng)絡(luò)管理和專用I/O接口,這些接口用于連接業(yè)界標(biāo)準(zhǔn)的外部存儲器件。Cyclone系列FPGA具有以下特性:
新的可編程架構(gòu)通過設(shè)計實現(xiàn)低成本;
嵌入式存儲資源支持各種存儲器應(yīng)用和數(shù)字信號處理(DSP);
支持串行總線和網(wǎng)絡(luò)接口以及各種通信協(xié)議;
使用PLL管理片內(nèi)和片外系統(tǒng)時序;
支持單端I/O標(biāo)準(zhǔn)和差分I/O技術(shù),支持高達311Mb/s的LVDS信號;
支持NiosII系列嵌入式處理器;
采用新的串行配置器件的低成本配置方案。
Cyclone系列FPGA支持各種單端I/O標(biāo)準(zhǔn),如LVTTL、LVCMOS、PCI和SSTL-2/3。通過LVDS和RSDS標(biāo)準(zhǔn)提供多達129個通道的差分I/O支持,每個LVDS通道高達640Mb/s。Cyclone器件具有雙數(shù)據(jù)數(shù)率(DDR)SDRAM和FCRAM接口的專用電路。Cyclone系列FPGA中有兩個鎖相環(huán)(PLL),提供6個輸出和層次時鐘結(jié)構(gòu)以及復(fù)雜設(shè)計的時鐘管理電路。9.3.2CycloneII系列
Altera在第一代Cyclone系列的基礎(chǔ)上,開發(fā)了全銅層90nm低k絕緣工藝,采用1.2VSRAM工藝設(shè)計,在300nm圓晶片上生產(chǎn)CycloneIIFPGA。CycloneIIFPGA具有很高的性能和極低的功耗,為價格敏感的應(yīng)用提供大批量產(chǎn)品解決方案。CycloneII器件是汽車、通信、視頻處理、測試和測量以及其他終端市場解決方案的理想選擇。用戶可以單獨使用CycloneIIFPGA或者作為數(shù)字信號處理協(xié)處理器使用,提高DSP應(yīng)用的性價比。CycloneII器件含有經(jīng)過優(yōu)化的多種DSP特性,有Altera全面的DSP流程提供支持。CycloneIIDSP支持包括:
18×18乘法器多達150個;
片內(nèi)嵌入式存儲器高達1.1MB;
片外存儲器高速接口;
DSPIP內(nèi)核;
MathWork的Simulink和MATLAB軟件DSPBuilder接口;
CycloneII版DSP開發(fā)套件。
CycloneII器件提供4608~68416個邏輯單元(LE),并具有一整套最佳的功能,包括嵌入式18×18位乘法器、專用外部存儲器接口電路、4kb嵌入式存儲器塊、鎖相環(huán)(PLL)和高速差分I/O。9.3.3Stratix系列
Stratix系列FPGA為滿足高帶寬系統(tǒng)的需求進行了優(yōu)化,具有非常高的內(nèi)核性能、存儲能力、架構(gòu)效率,主要用于高端的FPGA市場。
Stratix器件提供了專用的功能,用于時鐘管理、數(shù)字信號處理應(yīng)用以及差分和單端I/O標(biāo)準(zhǔn)。Stratix器件具有片內(nèi)匹配和遠程系統(tǒng)升級功能,需要實現(xiàn)更高性能、更大容量和更低成本的設(shè)計者可以采用Stratix器件。
Stratix器件采用1.5V、0.13μm全銅SRAM工藝,容量為10570~79040個邏輯單元和多達7MbRAM。Stratix器件具有多達22個DSP塊和多達176個嵌入乘法器,為需要高數(shù)據(jù)吞吐量的復(fù)雜應(yīng)用而優(yōu)化。Stratix器件支持LVDS、LVPECL、PCML和HyperTransport差分I/O電器標(biāo)準(zhǔn)以及高速通信接口,包括10G以太網(wǎng)XSBISFI-4POS-PHYLever4(SPI-4Phase2)、HyperTransport、RapidIO和UTOPIAⅥ標(biāo)準(zhǔn)。StratixFPGA系列提供了具有層次時鐘結(jié)構(gòu)和多達12個鎖相環(huán)(PLL)的完整時鐘管理方案。需要低風(fēng)險、小成本的大批量成品的設(shè)計者能夠很容易地將其StratixFPGA設(shè)計移植至掩碼編程HardCopyStratix器件上。因為HardCopyStratix器件直接從StratixFPGA生成,保留了Stratix架構(gòu)的大容量、高性能、業(yè)界領(lǐng)先的功能和增強的時序特性,所以能將移植風(fēng)險降至最低。這種無縫的移植過程確保了大批量成品的一次成功。
HardCopyII結(jié)構(gòu)化ASIC通過類似的無縫移植方法支持StratixIIFPGA,滿足大批量、低成本、高密度的邏輯要求。9.3.4StratixII系列
StratixII器件是在Stratix架構(gòu)的基礎(chǔ)上,做了一些適合于90nm工藝的改進,采用了1.2V、90nm、9層金屬走線,全銅SRAM工藝制造。在Stratix基礎(chǔ)上增加了新的特性:采用了全新的邏輯結(jié)構(gòu)——自適應(yīng)邏輯模塊;增加了源同步通道的動態(tài)相位對準(zhǔn)(PDA)電路和對新的外設(shè)存儲器接口的支持(如DDR2SDRAM和RLDRAMII);采用128位AES密鑰對配置文件進行加密,保證用戶設(shè)計的安全性。
StratixIIFPGA采用的等價邏輯單元高達180kb,嵌入式存儲器達到9Mb,用戶I/O引腳達到1170個,高度優(yōu)化的數(shù)字信號處理模塊中嵌入式乘法器達到384個。StratixII不但具有極高的性能和密度,還針對器件總功率進行了優(yōu)化。在移植為HardCopyII結(jié)構(gòu)化ASIC的支持下,StratixIIFPGA提供了業(yè)界唯一的從FPGA原型向大批量、低成本結(jié)構(gòu)化、ASIC產(chǎn)品的無縫移植。9.3.5Xilinx公司的Virtex-IIProFPGA
賽靈思(Xilinx)公司是FPGA的發(fā)明者,它們推出的Virtex-IIProFPGA系列產(chǎn)品采用013μm工藝、9層金屬結(jié)構(gòu)、BGA封裝,是基于Virtex-II系列基礎(chǔ)的高端FPGA。其主要特點是在Virtex-II上增加了高速I/O接口能力并嵌入了IBM公司的PowerPC處理器,以解決高性能系統(tǒng)結(jié)構(gòu)所面臨的挑戰(zhàn)。Xilinx和IBM合作,利用IP植入技術(shù),在Virtex-II結(jié)構(gòu)中植入領(lǐng)先的嵌入式處理器結(jié)構(gòu)——IBMPowerPC。Virtex-IIPro系列支持最多4個運行頻率而達300MHz的PowerPC405處理器。這種植入方法允許硬IP核心分布在Virtex結(jié)構(gòu)中的任何位置,同時可保持與周圍邏輯陣列的平滑集成。IP植入技術(shù)將核心中的所有高速總線與可編程結(jié)構(gòu)直接緊密耦合,從而獲得了比同樣的分立處理器高得多的系統(tǒng)級性能。
Virtex-IIProFPGA還集成了RocketIo技術(shù),這是支持多端口的3.125Gb/s串行接口的可編程解決方案,這一集成為高性能接口標(biāo)準(zhǔn)(如千兆位以太網(wǎng)、10G以太網(wǎng)、3GIO、SerialATA、Infiniband和FibreChannel)提供了一個完全的解決方案,還包括了先進的主動互連、塊RAM(BlockRAM)和時鐘管理功能。關(guān)于Virtex-IIProFPGA的更多信息,可瀏覽http://www.X。
SOPC設(shè)計包括以NiosII軟核處理器為核心的嵌入式系統(tǒng)的硬件配置、硬件設(shè)計、硬件仿真、IDE環(huán)境的軟件設(shè)計、軟件調(diào)試等。SOPC系統(tǒng)設(shè)計的基本軟件包括:QuartusII,用于完成NiosII系統(tǒng)的分析綜合、硬件優(yōu)化、適配、配置文件編程下載以及硬件系統(tǒng)測試等;SOPCBuilder,是NiosII軟核處理器的開發(fā)包,用于實現(xiàn)NiosII系統(tǒng)配置、生成以及與NiosII系統(tǒng)相關(guān)的監(jiān)控和軟件測試平臺的生成;9.4SOPC開發(fā)流程及開發(fā)平臺簡介Modesim,用于對SOPCBuilder生成的NiosII的HDL描述語言程序進行系統(tǒng)的功能仿真;Matlab/DSPBuilder,用于生成NiosII系統(tǒng)的硬件加速器,進而為NiosII系統(tǒng)定制新的指令;NiosIIIDE,用于完成基于NiosII系統(tǒng)的軟件開發(fā)和調(diào)試,并可借助其自帶的Flash編程器完成對Flash以及EPCS的編程操作。此外,NiosIIIDE還包括一個指令集成模擬器、MicroC/OS-II實時操作系統(tǒng)、文件系統(tǒng)以及小型TCP/IP協(xié)議棧。
SOPC的開發(fā)流程通常包括兩個方面:基于QuartusII、SOPCBuilder的硬件設(shè)計和基于NiosIIIDE的軟件設(shè)計。對于比較簡單的NiosII系統(tǒng),一個人便可執(zhí)行所有的設(shè)計;對于比較復(fù)雜的系統(tǒng),硬件和軟件設(shè)計可以分開進行。
圖9.1SOPC開發(fā)框圖9.4.1硬件開發(fā)
硬件開發(fā)使用QuartusII和SOPCBuilder。硬件設(shè)計工作如下:
(1)用SOPCBuilder軟件從NiosII處理器內(nèi)核和NiosII開發(fā)套件提供的外設(shè)列表中選取合適的CPU、存儲器以及各外圍器件(如片內(nèi)存儲器、PIO、定時器、UART、片外存儲器接口等),并定制和配置它們的功能;分配外設(shè)地址和中斷號,設(shè)定復(fù)位地址,最后生成系統(tǒng)。用戶也可以開發(fā)定制指令邏輯到NiosII內(nèi)核以加速CPU的功能,或添加用戶外設(shè)以減輕CPU的任務(wù)。
(2)使用SOPCBuilder生成NiosII系統(tǒng)后,將其集成到整個QuartusII中,可以在QuartusII工程中加入NiosII系統(tǒng)以外的邏輯,大多數(shù)SOPC設(shè)計都包括NiosII系統(tǒng)以外的邏輯,這也是SOPC系統(tǒng)的優(yōu)勢所在。用戶可以集成自身定制的硬件模塊到SOPC設(shè)計,或集成從Altera或第三方IP供應(yīng)商中得到的其他現(xiàn)成知識產(chǎn)權(quán)模塊。
(3)使用QuartusII軟件類選取具體的AlteraFPGA器件型號,然后為NiosII系統(tǒng)上的各I/O口分配引腳,另外還要根據(jù)要求進行硬件編譯選項或時序約束的設(shè)置;最后編譯QuartusII工程。在編譯過程中,QuartusII將對SOPCBuilder生成系統(tǒng)的HDL設(shè)計文件進行布局布線,從HDL源文件綜合生成一個適合目標(biāo)器件的網(wǎng)表,生成FPGA的配置文件(.sof)。
(4)使用QuartusII編程器和Altera下載電纜(如ByteBlasterII)將配置文件下載到目標(biāo)板上。當(dāng)校驗完當(dāng)前硬件設(shè)計后,可將新的配置文件下載到目標(biāo)板上的非易失存儲器(如EPCS)里。下載完硬件配置文件后,軟件開發(fā)者就可以將此目標(biāo)板作為軟件開發(fā)的初期硬件平臺進行軟件功能的開發(fā)驗證了。9.4.2軟件開發(fā)
軟件開發(fā)使用NiosIIIDE。它是一個基于EclipseIDE架構(gòu)的集成開發(fā)環(huán)境,包括:
GNU開發(fā)工具(標(biāo)準(zhǔn)GCC編譯器、連接器、匯編器和makefile工具等);
基于GDB的調(diào)試器,包括軟件仿真和硬件調(diào)試;
提供用戶一個硬件抽象層HAL(HardWareAbstractionLayer);
提供嵌入式操作系統(tǒng)MicroC/OS-II和LwTCP/IP協(xié)議棧的支持;
提供幫助用戶快速入門的軟件模板;
提供Flash下載支持(FlashProgrammer和QuartusIIProgrammer)。
使用NiosIIIDE,可完成NiosII處理器系統(tǒng)的所有軟件開發(fā)任務(wù)。使用SOPCBuilder生成系統(tǒng)后,可以直接使用NiosIIIDE開始設(shè)計C/C++應(yīng)用程序代碼。Altera提供外設(shè)驅(qū)動程序和硬件抽象層(HAL),使用戶能夠快速編寫與低級硬件細節(jié)無關(guān)的NiosII程序。除了應(yīng)用代碼,用戶還可以在NiosIIIDE工程中設(shè)計和重新使用定制庫。如果沒有軟件開發(fā)的目標(biāo)板,可以使用NiosII指令集仿真器(ISS)運行和調(diào)試程序。ISS可仿真處理器、存儲器和stdin/stdout/stderr流,使用戶可以檢驗程序流和算法的正確性。一旦有一個目標(biāo)板,用戶就可以使用下載電纜下載軟件到目標(biāo)板進行調(diào)試、運行。9.4.3SOPC基本開發(fā)流程簡介
下面以STM-1數(shù)據(jù)采集卡基于NiosII軟核處理器的SOPC設(shè)計為例,簡單介紹SOPC開發(fā)過程和SOPC開發(fā)工具的使用方法。
STM-1數(shù)據(jù)采集卡基于NiosII軟核處理器的SOPC設(shè)計其核心功能是完成ATM信元的處理,判斷信元的類型(AAL2、AAL5),提取ATM信元的VPI、VCI,如果是AAL2類型還需要提取CID。然后把相關(guān)的參數(shù)報給網(wǎng)絡(luò)處理器,網(wǎng)絡(luò)處理器用這些參數(shù)來實現(xiàn)激活相應(yīng)的信道,從而實現(xiàn)數(shù)據(jù)采集的功能。每個開發(fā)過程開始時都應(yīng)建立一個QuartusII工程。QuartusII以工程的方式對設(shè)計過程進行管理。QuartusII工程中包括創(chuàng)建FPGA配置文件所需要的所有設(shè)置和設(shè)計文件。開發(fā)流程如下:
(1)選擇開始→程序→Altera→QuartusII6.0,打開QuartusII6.0軟件。
(2)選擇File→NewProjectWizard來新建一項工程。點擊NEXT,由于是新建工程,暫時無輸入文件,因此直接單擊NEXT,根據(jù)實際所用的FPGA來選擇目標(biāo)器件,這里指定為Cyclone系列的EP2C20Q240C8。指定器件完成后,單擊NEXT選擇EDA工具,該實例利用QuartusII的集成開發(fā)環(huán)境進行開發(fā),不使用任何EDA工具,因此這里不作任何改動。單擊NEXT,可以看到工程文件配置信息報告。單擊Finish,完成新建工程的建立。
頂層模塊將用于整個工程的各個模塊包含在里面,QuartusII編譯時將這些模塊整合在一起。頂層文件相當(dāng)于傳統(tǒng)電路設(shè)計的電路板(PCB),用于將各個功能的芯片焊接在上面。
(3)選擇File→New,打開新建文件對話框,選擇BlockDiagram/SchematicFile,單擊OK建立一個空的頂層模塊,缺省名為Block1.bdf。選擇File→SaveAs,打開.bdf文件存盤對話框。至此,完成了頂層模塊的建立,如圖9.2所示。
圖9.2頂層模塊的建立下面介紹如何使用SOPCBuilder創(chuàng)建NiosII系統(tǒng)。
SOPCBuilder包含在QuartusII軟件中,它為建立SOPC設(shè)計提供了圖形化環(huán)境。SOPC由CPU、存儲器接口、標(biāo)準(zhǔn)外設(shè)和用戶自定義的外設(shè)等組件組成。SOPCBuilder允許選擇和自定義系統(tǒng)模塊的各個組件和接口。利用SOPCBuilder,用戶可以很方便地將處理器、存儲器和其他外設(shè)模塊連接起來,形成一個完整的系統(tǒng)。SOPCBuilder中已經(jīng)包含了NiosII處理器以及一些常用的外設(shè)IP模塊,用戶也可以設(shè)計自己的外設(shè)IP。用戶在SOPCBuilder中定義NiosII系統(tǒng)的硬件特性,例如使用哪個NiosII內(nèi)核,系統(tǒng)包括什么外設(shè)。SOPCBuilder不定義軟件操作,例如存儲器中哪里存儲指令或哪里發(fā)送stderr字符流,這些工作在NiosIIIDE中完成。
Avalon總線和外設(shè)的配置是在SOPCBuilder的圖形用戶界面(GUI)中指定的。用戶在GUI界面中指定各種參數(shù)和選項,這些參數(shù)和選項會存入一個系統(tǒng)的PTF文件。PTF文件是一個文本文件,它完整地定義了Avalon總線模塊結(jié)構(gòu)和功能參數(shù)、每個外設(shè)結(jié)構(gòu)和功能參數(shù)、每個外設(shè)的主/從角色、每個外設(shè)提供的端口信號和每個可被多個主端口訪問的從端口的仲裁機制。
SOPCBuilder包含兩個主要部分:圖形用戶界面(GUI)和系統(tǒng)生成程序。圖形用戶界面提供管理IP模塊、配置系統(tǒng)和報告錯誤等功能。用戶通過圖形用戶界面設(shè)計系統(tǒng)時,所有的設(shè)置都保存在一個以系統(tǒng)命名的PTF文件中,所以圖形用戶界面實際上就是PTF文件的專用編輯器。用戶通過圖形界面完成設(shè)計之后,單擊Generate將啟動系統(tǒng)生成程序。系統(tǒng)生成程序完成大量的功能,創(chuàng)建了幾乎所有的SOPCBuilder輸出文件(HDL邏輯文件、C程序的頭文件和庫文件、模擬仿真文件等)。
PTF文件是圖形用戶界面和系統(tǒng)生成程序之間的唯一交互渠道。對大部分用戶來說,僅了解PTF文件是由圖形用戶界面產(chǎn)生,并且系統(tǒng)生成程序要讀取PTF文件的內(nèi)容就足夠了。高級用戶可以使用文本編輯器來修改PTF文件編輯自己的設(shè)計,而不是使用圖形用戶界面。PTF文件傳遞給HDL生成器用來創(chuàng)建系統(tǒng)模擬實際的寄存器傳輸級描述。
用戶使用SOPCBuilder創(chuàng)建一個新的系統(tǒng)時,SOPCBuilder自動生成一個以系統(tǒng)命名的PTF文件。當(dāng)使用SOPCBuilder重新打開一個已有的系統(tǒng)時,PTF文件是SOPCBuilder讀取該系統(tǒng)具體設(shè)計信息的唯一來源。系統(tǒng)PTF文件的內(nèi)容隨著圖形用戶界面對系統(tǒng)的編輯而自動改變。
SOPCBuilder的主要輸出有:
(1)
SOPCBuilder系統(tǒng)文件(.ptf)。該文件用于描述系統(tǒng)的硬件結(jié)構(gòu)。NiosIIIDE使用.ptf文件信息來為目標(biāo)硬件編譯軟件程序。
(2)硬件描述語言(HDL)文件。該文件是描述系統(tǒng)的硬件設(shè)計文件。QuartusII軟件使用HDL文件來編譯整個FPGA設(shè)計。
(3)
QuartusII符號模塊文件(.bsf)。該文件中的符號(Symbol)用于添加到QuartusII工程頂層文件。
圖9.3CreateNewSystem對話框
SOPCBuilder的使用主要包括以下步驟:啟動SOPCBuilder;指定目標(biāo)FPGA和時鐘設(shè)置;增加NiosII內(nèi)核、片內(nèi)存儲器和其他外設(shè);指定基地址和中斷請求(IRQ)優(yōu)先級;指定更多的NiosII設(shè)置;生成SOPCBuilder系統(tǒng)。
新建一個工程systemtest后,在QuartusII中選擇Tools→SOPCBuilder選項來啟動SOPCBuilder。SOPCBuilder啟動后顯示CreateNewSystem對話框,用戶可以選擇目標(biāo)硬件語言,定義系統(tǒng)名,如圖9.3所示。圖9.4SOPCBuilder界面可以通過添加圖9.4左側(cè)的組件來完成系統(tǒng)的構(gòu)建。在該系統(tǒng)中需要以下組件:
(1)
NiosII軟核處理器。
(2)用于存儲程序代碼以及程序運行空間的片內(nèi)ROM。
(3)用于變量存儲(R/W數(shù)據(jù))、Heap、stack等的片內(nèi)RAM。存儲空間的大小用戶根據(jù)系統(tǒng)需要和FPGA型號來確定。
(4)
PIO。PIO為NiosII處理器系統(tǒng)接收輸入信號以及輸出信號提供了一種簡易的方法。
(5)系統(tǒng)ID外設(shè)。在IDE中,如果用戶程序不是基于對應(yīng)的NiosII系統(tǒng),那么調(diào)試時,NiosIIIDE將阻止用戶下載程序到NiosII系統(tǒng)。
(6)
SDRAMController。SDRAM控制器內(nèi)核提供一個連接片外SDRAM芯片的Avalon接口。SDRAM控制器可讓設(shè)計者在NiosII系統(tǒng)中簡易連接并使用SDRAM芯片。SDRAM通常用于需要大量易失性存儲器且成本要求高的應(yīng)用系統(tǒng)。
(7)
EPCSController。帶Avalone接口的EPCS設(shè)備控制器內(nèi)核允許NiosII系統(tǒng)訪問AlteraEPCS串行配置器件。
(8)
UART內(nèi)核。
UART是一個常用的字符型外圍設(shè)備。
NiosII系統(tǒng)可以集成兩種UART內(nèi)核:一種是JTAG_UART,其數(shù)據(jù)通過JTAG通信端口與PC機進行交互,一般用于程序的調(diào)試;另一種是常說的UART,其數(shù)據(jù)以RS-232協(xié)議的形式與外界進行交互。
此外還需要自定義一個DPRAM來存儲和網(wǎng)絡(luò)處理器的交互信息。定制用戶外設(shè)有兩種可行的方法:一種是SOPCBuilder提供的元件編輯器在圖形用戶界面下將用硬件描述語言描述的用戶邏輯封裝成一個SOPCBuilder元件;另一種是在Altera提供的元件基礎(chǔ)上來修改。此處用第一種方法。SOPCBuilder提供了一個元件編輯器,通過元件編輯器用戶可以在GUI下將用戶邏輯封裝成一個SOPCBuilder元件,當(dāng)用戶修改了元件的描述時,可以使用元件編輯器對定制好的元件進行修改。完成將用戶邏輯封裝為SOPCBuilder可用的元件后,就可以像使用Altera提供的外設(shè)元件一樣使用,而且可以提供給其他設(shè)計者使用。
在頂層圖空白處雙擊,彈出symbol對話框。單擊MegaWizardPlug-InManger,彈出MegaWizardPlug-InManger[paga1]對話框。選擇Createanewcustommegafunctionvariation,單擊next,如圖9.5所示。
圖9.5定制雙口RAM此模塊是Altera公司開發(fā)軟件QuartusII提供的參數(shù)化的模塊,可以根據(jù)需要選擇相應(yīng)的參數(shù)。最后生成如圖9.6所示的模塊和相應(yīng)的硬件描述語言文件。這里利用此硬件描述語言文件把DPRAM封裝成SOPCBuilder的組件。
在QuartusII中,選擇Tools→SOPCBuilder,打開SOPCBuilder。在SOPCBuilder中,單擊CreateNewComponent,打開創(chuàng)建新元件向?qū)Вx擇HDLFiles選項卡,單擊AddHDLFile,打開添加文件對話框,把dpram.v.添加完硬件文件后,HDLFiles欄中可看到剛添加的文件。綠色閃爍的條紋表示系統(tǒng)正在分析該文件,請等待系統(tǒng)分析完成文件再進行其他操作。此步驟完成后,在消息窗口中會出現(xiàn)錯誤,這將在后面的步驟中解決,如圖9.7所示。
圖9.6DPRAM模塊
圖9.7添加完硬件后的窗口選擇Signals選項卡,按圖9.8所示進行信號設(shè)置。設(shè)置完成后,消息框內(nèi)的錯誤提示將消失。點擊ComponentWizard,使用默認的設(shè)置,點擊Finish按鈕,此時將彈出一個消息框,告訴設(shè)計者元件存放的路徑,創(chuàng)建了哪些文件等,如圖9.9所示。在SOPCBuilder左邊的可用元件列表中,將產(chǎn)生一個UnknownGroup。至此,dpram元件的創(chuàng)建就完成了,如圖9.10所示。
圖9.8設(shè)置信號
圖9.9創(chuàng)建的消息框
圖9.10新創(chuàng)建的dpram圖9.11downdpram設(shè)置信號
圖9.12添加完所用元件的窗口接下來,要為每個外設(shè)分配基地址和中斷優(yōu)先級。SOPCBuilder提供Auto-AssignBaseAddress和Auto-AssignIRQs命令,這兩個命令可分別簡單分配外設(shè)基地址和中斷優(yōu)先級。NiosII處理器內(nèi)核可尋址31位地址范圍(2G)。用戶必須分配0x0000000~0x7FFFFFFF之間的基地址。NiosII程序使用宏定義符號常量來訪問外設(shè),基地址的改變不會造成程序的修改,如圖9.13所示。
圖9.13自動分配基地址和中斷優(yōu)先級選中NiosIIMore“cpu_0”Settings選項卡,進行系統(tǒng)的復(fù)位地址和異常地址的設(shè)置。本實例在系統(tǒng)上電后,從內(nèi)部ROM開始運行,所以ResetAddress的MemoryModele設(shè)置為onchip_ROM,offset地址為0x00000000。異常向量表放在內(nèi)部RAM里面,所以ExceptionAddress的MemoryModule設(shè)置為onchip_RAM,offset地址為0x00000020,如圖9.14所示。
圖9.14設(shè)置系統(tǒng)的復(fù)位地址和異常向量地址使用SOPCBuilder生成NiosII系統(tǒng),執(zhí)行下列步驟:選中SystemGeneration選項卡,如果不進行硬件仿真,取消Createsimulationprojectfiles選項卡,以節(jié)省時間。單擊Generate,系統(tǒng)生成開始。當(dāng)系統(tǒng)生成結(jié)束時,SystemGeneration選項卡將顯示一條消息“SUCCESS:SYSTEMGENERATIONCOMPLETED”,如圖9-15所示。
UTOPIA是采用異步傳輸模式(ATM)的通用測試及操作物理層接口(UniversalTestandOperationsPHYInterfaceforATM),UTOPIA是其英文縮寫。ATM論壇技術(shù)委員會(ATM-ForumTechnicalCommittee)在1995年指定選用UTOPIALevel2總線為ATM層(數(shù)據(jù)鏈路)與ATM物理層芯片之間的標(biāo)準(zhǔn)接口。標(biāo)準(zhǔn)的Level2總線可支持622Mb/s的數(shù)據(jù)傳輸速度,而UTOPIALevel2標(biāo)準(zhǔn)則可支持多達31顆物理層芯片(從屬)及一顆ATM層芯片(主控)。
圖9-15系統(tǒng)成功生成此外,該設(shè)計用Altera提供的UTOPIALevel2IP核來從物理層芯片接收ATM信元進入FPGA。在頂層圖空白處雙擊,彈出symbol對話框,單擊MegaWizardPlug-InManger,彈出MegaWizardPlug-InManger[1]對話框,選擇Createanewcustommegafunctionvariation,單擊next,可以看到此IP核的定制一共分三步。單擊step1,選擇Receiver;單擊next,進入step2,選擇GenerateSimulationModel;單擊next,進入step3,生成IP核。UTOPIA接收接口IP核定制,如圖9.16所示。
圖9.16UTOPIA接收接口IP核定制使用NiosIIIDE建立用戶程序。啟動一個新的C/C++應(yīng)用工程時,NiosIIIDE需要使用SOPCBuilder系統(tǒng)文件(.ptf)。在目標(biāo)硬件上運行和調(diào)試應(yīng)用程序之前,軟件設(shè)計者需要使用FPGA配置文件(.sof)配置FPGA。IDE可產(chǎn)生下面列出的幾個輸出:
(1)
system.h文件為系統(tǒng)中的硬件信息進行宏定義,幫助軟件設(shè)計者處理硬件潛在的變化性,軟件設(shè)計者可以使用這些宏定義而不是具體的硬件信息。該文件可以用于查閱系統(tǒng)中的硬件。創(chuàng)建一個新工程時,IDE自動生成該文件。
(2)可執(zhí)行的連接文件(.elf)是編譯C/C++應(yīng)用工程的結(jié)果,可直接將它下載到NiosII處理器。
(3)存儲器初始化文件(.hex)用于添加片內(nèi)存儲器,片內(nèi)存儲器可在上電時預(yù)定義存儲器的內(nèi)容。
(4)片內(nèi)存儲器的初始化文件。該存儲器支持初始化的內(nèi)容。
(5)
Flash編程數(shù)據(jù)。IDE包括Flash編程器,利用IDE的Flash編程器可以寫程序到Flash存儲器。用戶也可以使用Flash編程器來寫任意二進制數(shù)據(jù)到Flash存儲器。執(zhí)行下面的步驟可以創(chuàng)建一個新的C/C++應(yīng)用工程:
(1)選擇“開始”→“程序”→Altera→NiosIIIDE,打開NiosIIIDE軟件。
(2)在彈出的WorkspaceLauncher對話框中,單擊Browse…按鈕,設(shè)置工作空間為QuartusII工程的文件夾。如果第一次進入工作區(qū),NiosIIIDE會彈出一個歡迎界面,此時單擊右上角的Workbench圖標(biāo),就可以進入NiosIIIDE編輯界面。
(3)選擇File→New→C/C++Application,打開新建C/C++工程向?qū)А?/p>
(4)單擊SelectTargetHardware選項區(qū)中的Browse…按鈕,打開SelectTargetHardware對話框。選擇trytest.ptf,即指向當(dāng)前硬件設(shè)計系統(tǒng),彈出NewProject對話框;選擇SelectProjectTemplate列表框中的軟件模板,如圖9.17所示。
圖9.17新建C/C++工程向?qū)?chuàng)建工程后,在NiosIIIDE主界面左側(cè)的C/C++Project選項卡中將顯示兩個新的工程:hell0_world_0和hell0_world_0_syslib。hell0_world_0是C/C++應(yīng)用工程,而hell0_world_0_syslib是描述trytest系統(tǒng)硬件細節(jié)的系統(tǒng)庫。打開hello_world.c就可以開發(fā)自己的應(yīng)用程序了。該例中的應(yīng)用程序要實現(xiàn)以下功能:以53字節(jié)為單位,順序在FIFO中讀出數(shù)據(jù),然后根據(jù)ATM信元格式,提取出ATM信元頭,對信元頭進行分析,看是否能判斷出其類型(AAL2或者AAL5)。如果是AAL5就可以不用分析隨后的ATM信元凈荷;如果是AAL2就需要接著分析此ATM信元的48字節(jié)的凈荷。根據(jù)“STF”標(biāo)志位中的“OSF”域值找到第一個CPS-Packet的起始位置,從而提取出3個字節(jié)的CPS-PH來,然后就可以提取CPS-PH頭的CID號了,對這些參數(shù)的詳細解釋請參閱文檔“I.363.2-CPS拆分與重組機制”和“I.363.5拆分與重組機制”。
最后根據(jù)提取出的參數(shù)按照規(guī)定的格式寫入DPRAM的相應(yīng)區(qū)域,通過上行中斷INT_UP通知,由8280根據(jù)從DPRAM中讀取的配置信息對CPM進行初始化配置,然后激活信道,實現(xiàn)數(shù)據(jù)的采集。
在監(jiān)測過程中,如果發(fā)現(xiàn)新的傳輸鏈路,則把配置信息寫入DPRAM相應(yīng)區(qū)域(命令上行區(qū)域),實時通過上行中斷INT_UP通知8280進行新增鏈路的配置,從而實現(xiàn)動態(tài)監(jiān)測的功能。
上層軟件根據(jù)協(xié)議的分析以及用戶的需求對底層驅(qū)動(8280的驅(qū)動)可以發(fā)出Open、Close、Del鏈路的請求。注意:上層軟件所發(fā)的命令都只是針對8280的,所以8280要根據(jù)命令的含義來決定是否把命令按照規(guī)定的格式改寫入DPRAM的相應(yīng)區(qū)域(命令下行區(qū)域DPRAM),同時通過下行中斷INT_DOWN通知NiosII,讓NiosII也對此命令做出相應(yīng)的動作。其中Open表示上層主動創(chuàng)建或者打開一條鏈路,此命令也要通知NiosII,完成Table1的維護。Close表示上層主動關(guān)閉一條鏈路,但不拆除,即底層不把此條鏈路攜帶的信息上傳,此命令不用通知NiosII。Del表示上層主動拆除一條鏈路,此命令要通知NiosII,完成Table1的維護。
在NiosII中,需要動態(tài)維護兩張表格:表9.2記錄下曾經(jīng)掃描到的所有VPI、VCI組合,以及它們的類型(AAL2/AAL5),如果是AAL2還應(yīng)該記錄下所有掃描到的CID號;表9.3用于記錄下曾經(jīng)掃描到,但是沒有判斷出其AAL類型的所有VPI/VCI組合,以方便后續(xù)的監(jiān)測。
表9.2掃描到的所有VPI、VCI組合及類型(AAL2/AAL5)表9.3掃描到的所有VPI、VCI組合(類型待定)
FPGA必須對UTOPIA接口的所有數(shù)據(jù)進行監(jiān)測,也就是要監(jiān)測所有的ATM信元,以實現(xiàn)自動掃描、動態(tài)監(jiān)測的功能。
本節(jié)主要介紹NiosIIIDE開發(fā)環(huán)境的使用,重點介紹硬件抽象層(HAL)系統(tǒng)庫,包括HAL下的應(yīng)用程序開發(fā)以及開發(fā)HAL下的設(shè)備驅(qū)動。9.5NiosII應(yīng)用程序及其外設(shè)HAL驅(qū)動開發(fā)9.5.1NiosIIIDE集成開發(fā)環(huán)境
NiosII集成開發(fā)環(huán)境(IDE)是NiosII系列嵌入式處理器的基本軟件開發(fā)工具。所有軟件開發(fā)任務(wù)都可以在NiosIIIDE下完成,包括編輯、編譯和調(diào)試程序。NiosIIIDE提供了一個統(tǒng)一的開發(fā)平臺,用于所有NiosII處理器系統(tǒng)。僅僅通過一臺PC機、一片Altera的FPGA以及一根JTAG下載電纜,軟件開發(fā)人員就能夠往NiosII處理器系統(tǒng)寫入程序以及和
NiosII處理器系統(tǒng)進行通訊。NiosIIIDE基于開放式的、可擴展EclipseIDEproject工程以及EclipseC/C++開發(fā)工具(CDT)工程。NiosIIIDE為軟件開發(fā)提供了四個主要的工具:工程管理器、編輯器及編譯器、調(diào)試器和閃存編程器。
1.工程管理器
NiosIIIDE提供了多個工程管理任務(wù),以加快嵌入式應(yīng)用程序的開發(fā)進度。
(1)新工程向?qū)АiosIIIDE推出了一個新工程向?qū)?如圖9.18所示),用于自動建立C/C++
應(yīng)用程序工程和系統(tǒng)庫工程。采用新工程向?qū)?,能夠輕松地在NiosIIIDE中創(chuàng)建新工程。
圖9.18NiosIIIDE新工程向?qū)?/p>
(2)軟件工程模板。除了新工程創(chuàng)建向?qū)В琋iosIIIDE還以工程模板的形式提供了軟件代碼實例,幫助軟件工程師盡可能快速地推出可運行的系統(tǒng)。每個模板包括一系列軟件文件和工程設(shè)置。通過覆蓋工程目錄下的代碼或者導(dǎo)入工程文件的方式,開發(fā)人員能夠?qū)⑺麄冏约旱脑创a添加到工程中。
圖9.19軟件工程模板
(3)軟件組件。NiosIIIDE使開發(fā)人員通過使用軟件組件能夠快速地定制系統(tǒng)。軟件組件(或者稱為“系統(tǒng)軟件”)為開發(fā)人員提供了一個簡單的方式來輕松地為特定目標(biāo)硬件配置系統(tǒng)。組件包括:NiosII運行庫(或者稱為硬件抽象層(HAL))、輕量級IPTCP/IP庫、MicroC/OS-II實時操作系統(tǒng)(RTOS)、Altera壓縮文件系統(tǒng)。
2.編輯器和編譯器
NiosIIIDE提供了一個全功能的源代碼編輯器和C/C++編譯器。
(1)文本編輯器。NiosIIIDE文本編輯器是一個成熟的全功能源文件編輯器。這些功能包括:高亮顯示C/C++
代碼、代碼輔助/代碼協(xié)助完成、全面的搜索工具、文件管理、廣泛的在線幫助主題和教程、引入輔助快速定位、自動糾錯內(nèi)置調(diào)試功能。
(2)
C/C++
編譯器。NiosIIIDE為GCC編譯器提供了一個圖形化用戶界面,NiosIIIDE編譯環(huán)境使設(shè)計Altera的NiosII處理器軟件更容易,它提供了一個易用的按鈕式流程,同時允許開發(fā)人員手工設(shè)置高級編譯選項。
NiosIIIDE編譯環(huán)境自動地生成一個基于用戶特定系統(tǒng)配置(SOPCBuilder生成的PTF文件)的makefile。NiosIIIDE中編譯/鏈接設(shè)置的任何改變都會自動映射到這個自動生成的makefile中。這些設(shè)置可包括生成存儲器初始化文件(MIF)的選項、閃存內(nèi)容、仿真器初始化文件(DAT/HEX)以及profile總結(jié)文件的相關(guān)選項。
3.調(diào)試器
NiosIIIDE包含一個強大的、在GNU調(diào)試器基礎(chǔ)之上的軟件調(diào)試器——GDB。該調(diào)試器提供了許多基本調(diào)試功能,以及一些在低成本處理器開發(fā)套件器中不會經(jīng)常用到的高級調(diào)試功能。
(1)基本調(diào)試功能。NiosIIIDE調(diào)試器包含如下的基本調(diào)試功能:運行控制、調(diào)用堆棧查看、軟件斷點、反匯編代碼查看、調(diào)試信息查看、指令集仿真器。在調(diào)試中用戶通過調(diào)試信息查看可以訪問本地變量、寄存器、存儲器、斷點以及表達式賦值函數(shù)。圖9.20所示是NiosIIIDE調(diào)試器軟件斷點。
(2)高級調(diào)試。除了上述基本調(diào)試功能之外,NiosIIIDE調(diào)試器還支持以下高級調(diào)試功能:硬件斷點調(diào)試、ROM或閃存中的代碼、數(shù)據(jù)觸發(fā)指令跟蹤。NiosIIIDE調(diào)試器通過JTAG調(diào)試模塊和目標(biāo)硬件相連。另外,支持片外跟蹤功能便于和第三方跟蹤探測工具結(jié)合使用,如FS2公司提供的用于NiosII處理器的in-target系統(tǒng)分析儀(ISA-NIOS)。
圖9.20NiosIIIDE調(diào)試器軟件斷點
(3)調(diào)試信息查看。調(diào)試信息查看使用戶可以訪問本地變量、寄存器、存儲器、斷點以及表達式賦值函數(shù)。圖9.21所示是調(diào)試信息查看的一個實例,顯示的是一個應(yīng)用實例的寄存器。
(4)目標(biāo)。NiosIIIDE調(diào)試器能夠連接多種目標(biāo)。表9.4列出了NiosIIIDE中可用的目標(biāo)連接。
圖9.21調(diào)試信息查看——寄存器顯示
表9.4NiosIIIDE調(diào)試器目標(biāo)4.閃存編程器
許多使用NiosII處理器的設(shè)計都在單板上采用了閃存,可以用來存儲FPGA配置數(shù)據(jù)和(或)NiosII編程數(shù)據(jù)。NiosIIIDE提供了一個方便的閃存編程方法。任何連接到FPGA的兼容通用閃存接口(CFI)的閃存器件都可以通過NiosIIIDE閃存編程器來燒結(jié)。除CFI閃存之外,NiosIIIDE閃存編程器能夠?qū)B接到FPGA的任何Altera串行配置器件進行編程。
閃存編程器管理多種數(shù)據(jù)。表9.5所示為編程到閃存中的通用內(nèi)容類型。
表9.5編程到閃存中的通用內(nèi)容類型圖9.22閃存編程器接口
NiosIIIDE閃存編程器已做了預(yù)先配置,能夠用于NiosII開發(fā)套件中的所有單板,而且能夠輕易地引入到用戶硬件中。9.5.2HAL系統(tǒng)庫
HAL系統(tǒng)庫是NiosII處理器的硬件抽象層系統(tǒng)庫,為系統(tǒng)提供底層硬件的驅(qū)動。HAL系統(tǒng)庫應(yīng)用程序接口(API)由標(biāo)準(zhǔn)的ANSIC庫組成。HAL的API允許用戶使用熟悉的C語言函數(shù)對器件進行訪問,如printf()、fopen()、fwrite()等。
HAL作為NiosII處理器的開發(fā)板套件,為嵌入式系統(tǒng)的外圍器件提供接口,將Altera的SOPCBuilder和NiosIIIDE緊密聯(lián)系在一起,自動生成HAL系統(tǒng)庫。在SOPCBuilder生成系統(tǒng)硬件后,NiosIIIDE創(chuàng)建生成HAL系統(tǒng)庫以匹配生成的硬件系統(tǒng)。當(dāng)系統(tǒng)硬件配置發(fā)生改變時,系統(tǒng)自動將信息傳給HAL系統(tǒng)庫,以減少由于底層硬件發(fā)生微小變化而產(chǎn)生的系統(tǒng)錯誤。HAL系統(tǒng)庫對具體應(yīng)用和器件驅(qū)動軟件設(shè)計的支持有明顯的分別。在硬件不改變的情況下可以重復(fù)使用系統(tǒng)提供的應(yīng)用代碼。
在NiosIIIDE中建立新工程的過程中,系統(tǒng)自動生成HAL系統(tǒng)庫。用戶不需要創(chuàng)建或者復(fù)制HAL文件,同樣也不需要對任何HAL源代碼進行修改。NiosIIIDE自動創(chuàng)建HAL系統(tǒng)庫,同時對其進行管理。HAL系統(tǒng)庫建立在特定的SOPCBuilder系統(tǒng)上。綜合外圍器件和存儲器,SOPCBuilder生成完整的NiosII系統(tǒng)。
HAL系統(tǒng)庫提供了下列系統(tǒng)服務(wù):
(1)集成newlib——一個ANSI
C標(biāo)準(zhǔn)庫。
(2)設(shè)備驅(qū)動。這些設(shè)備驅(qū)動程序提供了常用設(shè)備的驅(qū)動,同時也是我們學(xué)習(xí)設(shè)備驅(qū)動程序開發(fā)的范例。
(3)
HALAPI。提供了一個一致的設(shè)備存取、中斷處理以及ALARM等的工具。
(4)系統(tǒng)初始化。在main執(zhí)行前完成相關(guān)的初始化任務(wù)。
(5)設(shè)備初始化。在main執(zhí)行前分配設(shè)備空間并初始化設(shè)備。
圖9.23NiosIIHAL結(jié)構(gòu)在NiosII軟件系統(tǒng)開發(fā)中,程序員劃分為應(yīng)用程序開發(fā)和設(shè)備驅(qū)動開發(fā),大多數(shù)為應(yīng)用開發(fā)設(shè)計者,一般負責(zé)系統(tǒng)的main()程序。應(yīng)用設(shè)計一般使用標(biāo)準(zhǔn)的C函數(shù)庫或者HAL系統(tǒng)庫API進行系統(tǒng)資源調(diào)用。設(shè)備驅(qū)動開發(fā)人員一般設(shè)計設(shè)備驅(qū)動供應(yīng)用開發(fā)使用。設(shè)備驅(qū)動開發(fā)人員直接對系統(tǒng)底層硬件進行操作處理。
HAL為嵌入式系統(tǒng)外圍器件提供通用的模板,如定時器、以太網(wǎng)MAC/PHY芯片以及按字節(jié)傳輸?shù)腎/O外圍設(shè)備。外圍器件通用模板可以使用通用的API,而不用考慮底層硬件。
HAL為下列器件提供模板:
(1)字符模式設(shè)備。串行收發(fā)字節(jié)的外圍器件,如UART。
(2)時間模式設(shè)備。可以對時鐘信號進行計數(shù)并產(chǎn)生周期中斷的外圍器件。
(3)文件系統(tǒng)設(shè)備。支持訪問文件存儲,由于是內(nèi)部執(zhí)行操作,文件子系統(tǒng)驅(qū)動器可以直接訪問底層硬件。例如,用戶可以編寫Flash文件子系統(tǒng)驅(qū)動,通過HAL的API訪問Flash。
(4)以太網(wǎng)設(shè)備。使Altera的低標(biāo)準(zhǔn)IP協(xié)議接入以太網(wǎng)接口。
(5)
DMA設(shè)備。支持大量數(shù)據(jù)高速傳輸。
(6)
Flash設(shè)備。用于存儲數(shù)據(jù)或程序的非易失性存儲器。
在Nios
II安裝完畢以后,NIOS
II
IDE
中提供了上述類型的外設(shè)和相應(yīng)的驅(qū)動程序。設(shè)備驅(qū)動程序開發(fā)人員可以分析這些設(shè)備驅(qū)動程序,從而為開發(fā)自己的設(shè)備驅(qū)動提供有力的支持和堅實的基礎(chǔ)。9.5.3使用HAL開發(fā)應(yīng)用程序
基于HAL系統(tǒng)庫的軟件工程的創(chuàng)建和管理與NiosIIIDE緊密相關(guān)。圖9.24所示為NiosIIIDE程序框架。
基于HAL的NiosII程序由兩個NiosIIIDE工程組成:用戶應(yīng)用程序工程和HAL系統(tǒng)庫工程,如圖9.24所示。用戶程序在一個工程(UserApplicationProject)之中并建立在一個分離的系統(tǒng)庫(HALSystemLibrary)之上。用戶的代碼都包括在應(yīng)用工程(ApplicationProject)中,對這個工程編譯便得到最終的運行程序。
圖9.24NiosIIIDE程序框架當(dāng)用戶建立應(yīng)用工程時,系統(tǒng)建立HAL系統(tǒng)庫。HAL包含了所有底層硬件與用戶程序接口的有關(guān)信息。編譯時,與用戶SOPC系統(tǒng)相關(guān)的HAL驅(qū)動自動被添加到系統(tǒng)庫工程中。建立在SOPCBuilder之上的系統(tǒng)庫工程,由SOPCBuilder生成的.ptf文件定義。NiosIIIDE管理HAL系統(tǒng)庫和驅(qū)動配置的更新來正確反映硬件系統(tǒng)。如果SOPC系統(tǒng)發(fā)生改變,IDE將在用戶編譯和運行應(yīng)用程序時重新對HAL進行編譯。這種工程從屬結(jié)構(gòu)顯示將用戶程序與底層硬件相分離,使用戶不用擔(dān)心程序是否與目標(biāo)硬件相匹配。HAL系統(tǒng)庫的程序始終與硬件保持同步。當(dāng)?shù)谝淮尉幾gNiosIIIDE工程時,編譯工具會根據(jù)硬件系統(tǒng)文件(.ptf文件)生成一個描述硬件信息的system.h文件。system.h文件是由編譯工具根據(jù)SOPCBuilder系統(tǒng)的內(nèi)容(.ptf文件)和系統(tǒng)庫的配置設(shè)置生成的一個頭文件。system.h文件的內(nèi)容主要由兩部分組成:一部分描述系統(tǒng)庫的設(shè)置信息;一部分給出了每個外圍設(shè)備的詳細信息,其內(nèi)容包括外圍設(shè)備的硬件配置、外設(shè)的基地址、中斷優(yōu)先級(如果外設(shè)有中斷)和外圍器件的符號名稱。system.h文件為NiosII硬件系統(tǒng)提供完整的軟件說明,是硬件與軟件的連接點。對應(yīng)用程序開發(fā)人員來講,system.h提供的信息基本用不到,所需要關(guān)心的僅僅是外圍設(shè)備信息的宏定義及相關(guān)用法。
在編程過程中,用戶需要知道數(shù)據(jù)類型的寬度和精度。ANSICC數(shù)據(jù)類型沒有非常確切地定義數(shù)據(jù)寬度。HAL使用alt_types.h頭文件定義一套支持ANSIC類型的數(shù)據(jù)類型,如表9.6所示。Altera提供的GNU編譯器下的ANSIC數(shù)據(jù)類型寬度如表9.7所示。
表9.6HAL數(shù)據(jù)類型定義表9.7ANSIC數(shù)據(jù)類型寬度
HAL提供了對系統(tǒng)啟動的支持。如果系統(tǒng)不能啟動,應(yīng)用程序也只能作擺設(shè)。這里的啟動是指系統(tǒng)上電復(fù)位后到運行main()函數(shù)前,初始化硬件,構(gòu)建應(yīng)用程序運行時環(huán)境的過程。如果開發(fā)工具不提供這段代碼,則由用戶自己編寫。NiosII的HAL系統(tǒng)庫為用戶提供了這段代碼,如果用戶采用鏈接器(Linker)的默認設(shè)置,那么鏈接器會自動鏈入HAL提供的初始化函數(shù),這些初始化函數(shù)將實現(xiàn)NiosII系統(tǒng)的啟動和初始化過程。這樣HAL系統(tǒng)庫就將用戶程序和底層硬件分離,但HAL與用戶程序由NiosII工程統(tǒng)一管理,用戶在開發(fā)和調(diào)試程序時,就不必考慮硬件的細節(jié)。
HAL提供對異常處理的支持。NiosII采用典型的、簡單的異常處理方式,使用一個簡單的處理器來處理所有類型的中斷。當(dāng)異常發(fā)生后,異常處理除ISR外所有的工作都由HAL系統(tǒng)庫代碼替用戶完成。在NiosII系統(tǒng)中,NiosII異常和中斷是非向量的,所有異常和中斷都由駐留在一個單一存儲空間的代碼來處理,這個存儲空間稱為exceptionaddress。在該存儲空間,HAL系統(tǒng)庫會自動插入中斷源和中斷優(yōu)先級代碼。對于用戶來說,所要做的工作就是編寫中斷服務(wù)程序。為了方便創(chuàng)建和維護中斷服務(wù)程序,HAL系統(tǒng)庫提供了中斷API函數(shù)。在對處理性能要求嚴格的嵌入式實時系統(tǒng)中,可以從軟件和硬件兩個方面來提高處理性能。一般來說,首先從軟件上來考慮,在不能滿足要求的情況下再從硬件上來考慮。從軟件上改善性能應(yīng)主要考慮如下幾個方面:
(1)把無關(guān)緊要的以及影響中斷執(zhí)行性能的請求放在中斷服務(wù)程序之外處理。
(2)把傳輸大量數(shù)據(jù)之類的事情交給DMA來完成。如果DMA傳輸大量數(shù)據(jù),可以加大緩沖區(qū)以減少中斷次數(shù)。
(3)使用快速的存儲空間來存儲關(guān)鍵代碼??蓪⒅袛喾?wù)程序和堆棧放置在快速的存儲器中,如on_chip_memory。
(4)將應(yīng)用工程和系統(tǒng)工程都設(shè)置為高的編譯優(yōu)化等級,使用-O3等級的編譯優(yōu)化能獲得最好的中斷和應(yīng)用程序執(zhí)行性能。從硬件上改善處理性能,要修改重新生成SOPCBuilder系統(tǒng),且重新編譯QuartusII系統(tǒng)。硬件改善性能可以考慮以下幾個方面:
(1)添加或加大快速存儲器來存儲關(guān)鍵代碼或作為數(shù)據(jù)緩存。
(2)添加DMA控制器。
(3)使用性能更好的NiosII處理器。
(4)根據(jù)系統(tǒng)實際的中斷優(yōu)先級來合理分配SOPCBuilder系統(tǒng)的中斷號。9.5.4開發(fā)HAL下的設(shè)備驅(qū)動
在Nios
II系統(tǒng)中,如果用戶定制了自己的外設(shè),則必須為其提供驅(qū)動程序才能使用Nios
II
處理器對其進行操作。如果定制的外設(shè)屬于HAL的通用設(shè)備模型之一,定制外設(shè)者應(yīng)該將其編寫的驅(qū)動程序集成到HAL系統(tǒng)庫中,這樣就可以通過標(biāo)準(zhǔn)的HALAPI函數(shù)對定制的外設(shè)進行操作。如果不屬于HAL所提供的通用設(shè)備模型,應(yīng)該提供該外設(shè)的訪問函數(shù)接口,編程者使用定制者提供的函數(shù)接口而不是HALAPI函數(shù)對外設(shè)進行操作。驅(qū)動程序一般的開發(fā)步驟如下:
(1)創(chuàng)建一個設(shè)備頭文件,用于描述設(shè)備的寄存器及其訪問方法。
(2)定義并實現(xiàn)設(shè)備驅(qū)動的功能。
(3)在main()中單獨測試設(shè)備驅(qū)動的功能。
(4)把設(shè)備驅(qū)動集成到HAL中。下面我們依次介紹各個步驟。
1.創(chuàng)建一個描述設(shè)備寄存器的頭文件
對驅(qū)動開發(fā)人員來說,設(shè)備可以看做一組寄存器的抽象。研究設(shè)備寄存器的集合是驅(qū)動開發(fā)的第一步。驅(qū)動開發(fā)的第一步就是創(chuàng)建一個用于描述設(shè)備寄存器的頭文件。在這個頭文件中,應(yīng)用清晰易懂的宏符號描述出設(shè)備的寄存器集合,并給出其訪問的方法。具體的頭文件實現(xiàn)可以參考<NiosIIkit安裝路徑>\component\altera_avalon_jatg_uart\inc文件夾下的altera_avalon_jtag_uart_regs.h文件。用戶可以以此為模板進行修改,從而得到增加的設(shè)備的頭文件。下面以字符型設(shè)備為例來說明設(shè)備驅(qū)動的實現(xiàn)方法及如何將其注冊到HAL系統(tǒng)中去。
虛擬設(shè)備對具體的設(shè)備來說是一個抽象的概念,對虛擬設(shè)備的操作,最終會通過驅(qū)動程序落實在某個具體的設(shè)備上。要開發(fā)針對某個真實設(shè)備的操作,應(yīng)先把描述這類設(shè)備的普遍概念具體化。Altera把字符型設(shè)備的共性抽象出一個結(jié)構(gòu)體。下面的程序為字符型設(shè)備結(jié)構(gòu)體的定義:
structalt_dev_s{
alt_llistllist;/*forinternaluse*/
constchar*name;
int(*open)(alt_fd*fd,constchar*name,intflags,intmode);
int(*close)(alt_fd*fd);
int(*read)(alt_fd*fd,char*ptr,intlen);
int(*write)(alt_fd*fd,constchar*ptr,intlen);
int(*lseek)(alt_fd*fd,intptr,intdir);
int(*fstat)(alt_fd*fd,structstat*buf);
int(*ioctl)(alt_fd*fd,intreq,void*arg);
};
typedefstructalt_dev_salt_dev;
這個結(jié)構(gòu)體表達的意思是,字符型設(shè)備有這樣的共性:它們有一個以字符串形式表達的名字,都支持open()、close()、read()、write()、lseek()、fstat()、ioctl()操作中的一種或者幾種。
這里需要注意的是,open()等函數(shù)的輸入?yún)?shù)fd(filedescriptor)的類型是alt_fd類型而不是int類型。alt_fd類型定義以下程序:
typedefstructalt_fd_s
{
alt_dev*dev;
alt_u8*priv;
intfd_flags;
}alt_fd;
這里dev是指向設(shè)備類型結(jié)構(gòu)體的指針,fd_flags傳遞文件處理標(biāo)志。priv指針是由驅(qū)動程序完全自主管理和使用的指針變量,驅(qū)動程序可以將這個指針指向一個已經(jīng)分配的數(shù)據(jù)空間,也可以用來記錄函數(shù)運行的狀態(tài)信息,還可以忽略(初始化為NULL)。這里,priv是private(私有的)的縮寫。了解了字符型設(shè)備的共性描述后,以UART設(shè)備為例來說明如何具體化。下面是描述UART設(shè)備的程序的一部分:
/*描述UART設(shè)備的結(jié)構(gòu)體*/
typedefstruct
{
alt_devdev;
void*base;
alt_u32ctrl;
alt_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度辦公室裝修工程后期維護服務(wù)合同2篇
- 2024版SAP項目實施服務(wù)合同協(xié)議書范本
- 2024年物聯(lián)網(wǎng)設(shè)備維修與保養(yǎng)合同
- 2024版品牌連鎖加盟合同
- 二零二五年合伙投資買房合同糾紛調(diào)解協(xié)議3篇
- 2025年度大型游樂設(shè)施安裝工程一切險合同3篇
- 課程設(shè)計智能窗簾系統(tǒng)
- 2024年自然人與企業(yè)借款協(xié)議標(biāo)準(zhǔn)
- 二零二五年度廣告安裝與城市交通疏導(dǎo)合同范本3篇
- 2024牛飼料供應(yīng)與采購合同
- DL∕T 1100.1-2018 電力系統(tǒng)的時間同步系統(tǒng) 第1部分:技術(shù)規(guī)范
- CJ/T 158-2002 城市污水處理廠管道和設(shè)備色標(biāo)
- NB-T35009-2013抽水蓄能電站選點規(guī)劃編制規(guī)范
- 曳引驅(qū)動電梯調(diào)試作業(yè)指導(dǎo)書
- 上海市中考英語試卷及答案
- 基礎(chǔ)會計課程思政教案設(shè)計
- 蘇教版科學(xué)小學(xué)五年級上冊期末測試卷及完整答案(奪冠系列)
- 監(jiān)控工程竣工驗收報告
- 經(jīng)皮肝穿刺膽道引流(PTCD)導(dǎo)管的護理要點
- 國家開放大學(xué)《心理學(xué)》形考任務(wù)1-4參考答案
- 2024年社會工作者《社會工作實務(wù)(中級)》考試真題必考題
評論
0/150
提交評論