《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第6章_第1頁
《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第6章_第2頁
《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第6章_第3頁
《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第6章_第4頁
《電子技術(shù)綜合設(shè)計(jì)與實(shí)踐教程》課件第6章_第5頁
已閱讀5頁,還剩190頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第6章基于NiosⅡ的SOPC系統(tǒng)開發(fā)6.1NiosⅡ軟核處理器 6.2SOPC系統(tǒng)設(shè)計(jì)概述 6.3Avalon總線規(guī)范 6.4NoisⅡ應(yīng)用軟件開發(fā) 6.5SOPC系統(tǒng)設(shè)計(jì)實(shí)例 6.6設(shè)計(jì)IP核——PS/2IP核及CharacterLCDIP核 近年來,微電子技術(shù)、EDA技術(shù)飛速發(fā)展,不僅使電子系統(tǒng)的小型化、微型化進(jìn)程加快,而且給電子系統(tǒng)的設(shè)計(jì)帶來了前所未有的變革。大規(guī)模FPGA芯片的問世,為電子系統(tǒng)設(shè)計(jì)提供了硬件基礎(chǔ),大多數(shù)電子系統(tǒng)都可以在一塊芯片上實(shí)現(xiàn),形成所謂的片上系統(tǒng)(SOC)。使用FPGA后,其好處不僅表現(xiàn)在設(shè)計(jì)的初級階段,即使在電子系統(tǒng)設(shè)計(jì)完成之后,甚至在投入實(shí)際使用的過程中,還可以根據(jù)實(shí)際需要添加功能。早期的FPGA在絕大多數(shù)場合中僅僅作為嵌入式處理器的組合邏輯或用于實(shí)現(xiàn)某些邏輯功能。IP核技術(shù)的出現(xiàn)對FPGA的發(fā)展起著變革性的作用,很多廠商將自己的數(shù)字器件、專用算法以IP核的形式嵌入到FPGA中,這時(shí),采用單片F(xiàn)PGA已經(jīng)可以完成整個嵌入式系統(tǒng)數(shù)字部分的設(shè)計(jì)。但是因?yàn)闆]有微處理器的支持,F(xiàn)PGA還是無法實(shí)現(xiàn)嵌入式系統(tǒng)的特性,無法享用嵌入式系統(tǒng)提供的操作系統(tǒng)、網(wǎng)絡(luò)協(xié)議棧等軟件模塊,應(yīng)用范圍受到很大限制。在這種背景下,基于技術(shù)發(fā)展,可編程的片上系統(tǒng)SOPC(SystemOnProgrammableChip)技術(shù)誕生了。

SOPC技術(shù)一般采用大容量FPGA作為載體,在一片F(xiàn)PGA中實(shí)現(xiàn)軟核微處理器,也可以嵌入ARM等硬核處理器,使FPGA具有嵌入式系統(tǒng)的可編程能力。通過這種技術(shù),SOPC平臺既可以擁有微處理器系統(tǒng)豐富的軟件資源和出色的人機(jī)交互能力,同時(shí)又具備FPGA系統(tǒng)的快速硬件邏輯特性,實(shí)現(xiàn)了軟件系統(tǒng)和硬件系統(tǒng)的互補(bǔ),不僅提高了設(shè)計(jì)的性能,而且加快了開發(fā)周期。所以說,SOPC將傳統(tǒng)的EDA技術(shù)、計(jì)算機(jī)系統(tǒng)、嵌入式系統(tǒng)、數(shù)字信號處理技術(shù)等融為一體,在結(jié)構(gòu)上融合為單芯片,是現(xiàn)代電子技術(shù)和電子系統(tǒng)設(shè)計(jì)的匯聚點(diǎn)和發(fā)展方向。

繼第一代可配置嵌入式軟核處理器Nios后,Altera公司于2004年推出了性能更好的NiosⅡ軟核處理器,與第一代相比,最大處理性能提高了3倍,而CPU內(nèi)核部分的面積最多可縮小1/2。6.1NiosⅡ軟核處理器

Altera推出的NiosⅡ系列嵌入式處理器擴(kuò)展了目前世界上流行的軟核嵌入式處理器的性能,把NiosⅡ嵌入到Altera的所有FPGA中,例如StratixⅡ、Stratix、CycloneⅡ、Cyclone、APEX、ACEX和HardCopy系列器件中,用戶可以獲得超過200DMIPS的性能,并可從

圖6-1NiosⅡ系統(tǒng)在DE2板的實(shí)現(xiàn)流程

NiosⅡ軟核處理器在提高系統(tǒng)性能、產(chǎn)品的生命周期、開發(fā)工具和降低系統(tǒng)成本等方面具有明顯優(yōu)勢。使用NiosⅡ處理器的用戶可以根據(jù)他們的需要來調(diào)整嵌入式系統(tǒng)的特性、性能以及成本,快速將產(chǎn)品推向市場,從而擴(kuò)展產(chǎn)品的生命周期,并且避免處理器的更新?lián)Q代。

NiosⅡ軟核處理器具有以下優(yōu)點(diǎn):

1.更高的系統(tǒng)性能

(1)一系列的處理器核可供選擇,其中包括了超過200DMIPS性能的核。

(2)實(shí)現(xiàn)任何數(shù)量的處理器或?qū)⒉煌奶幚砥骱私M合在一起。

(3)增加已有的處理器,可在FPGA中添加一個或更多的NiosⅡ軟核處理器。

2.更低的系統(tǒng)成本

(1)通過將處理器、外設(shè)、存儲器和I/O接口集成到一個單一的FPGA中,從而降低了系統(tǒng)成本、復(fù)雜性和功耗,如圖6-2所示。

圖6-2定制NiosⅡ系統(tǒng)

(2)將NiosⅡ軟核處理器嵌入到低成本的FPGA中只需花費(fèi)35美分或者更低(對大多數(shù)用戶而言,NiosⅡ所占邏輯資源的成本大約是10~20元人民幣,具體取決于所選FPGA的類型和NiosⅡ的配置)。

3.延長產(chǎn)品的生命周期

(1)提供易用的設(shè)計(jì)工具,從而快速將產(chǎn)品推向市場。FPGA可編程的特性使其具有最快的產(chǎn)品上市時(shí)間,許多功能只需通過簡單的設(shè)計(jì)修改就可以被快速地實(shí)現(xiàn);對于包含一個或多個NiosⅡ軟核處理器,具備硬件加速、定制指令、定制的可裁剪外設(shè)的SOPC系統(tǒng),可延長產(chǎn)品的生存周期。

(2)提供永久的、免費(fèi)的許可,從而使基于NiosⅡ軟核處理器的產(chǎn)品避免了處理器的更新?lián)Q代而帶來的損失,在產(chǎn)量增加的情況下,還可以減少成本。

4.功能強(qiáng)大、易用的開發(fā)工具

(1)通過使用NiosⅡ集成開發(fā)環(huán)境(IDE),從而加速了軟件的開發(fā)。

(2)利用Altera強(qiáng)大的SOPCBuilder系統(tǒng)開發(fā)工具和QuartusⅡ設(shè)計(jì)軟件,可以在幾分鐘內(nèi)設(shè)計(jì)一個系統(tǒng)。

5.使用完全功能的開發(fā)包

使用易用的NiosⅡ開發(fā)包進(jìn)行設(shè)計(jì),可以選擇具有低成本特性的CycloneFPGA開發(fā)套件,或高性能的StratixFPGA開發(fā)套件。

NiosⅡ系列嵌入式處理器使用32位的指令集結(jié)構(gòu)(ISA),是建立在第一代16位Nios處理器的基礎(chǔ)上的,定位于廣泛的嵌入式應(yīng)用。NiosⅡ處理器系列包括三種內(nèi)核:經(jīng)濟(jì)的(NiosⅡ/e)、標(biāo)準(zhǔn)的(NiosⅡ/s)和快速的(NiosⅡ/f)內(nèi)核。每一型號都針對價(jià)格和性能進(jìn)行了優(yōu)化,表6-1列出了三種內(nèi)核在性能、邏輯資源及緩存方面的比較。

表6-1NiosⅡ系列CPU

目前,SOPC可看做是基于FPGA解決方案的SOC,與ASIC的SOC解決方案相比,SOPC系統(tǒng)及其開發(fā)技術(shù)具有更多的特色。構(gòu)成SOPC的第一種方案是基于FPGA嵌入式硬核SOPC系統(tǒng),即預(yù)先將硬核植入FPGA中,目前最常用的嵌入式硬核是ARM內(nèi)核。6.2SOPC系統(tǒng)設(shè)計(jì)概述同時(shí)會為嵌入式處理器集成諸多通用和專用的接口,但設(shè)計(jì)者無法根據(jù)實(shí)際需要改變處理器結(jié)構(gòu),如總線規(guī)模、接口方式、指令集等,這無疑增加了芯片的成本和功耗。第二種方案是基于FPGA嵌入式軟核SOPC系統(tǒng)。利用軟核處理器可以較好地克服硬核處理器的不足。目前最有代表性的軟核處理器分別是Altera公司的NiosⅡ核、Xilinx公司的MicroBlaze核。第三種方案是基于Hardcopy技術(shù)的SOPC系統(tǒng)。Hardcopy技術(shù)是將專用的硅片設(shè)計(jì)核和自FPGA至ASIC自動移植過程結(jié)合在一起的技術(shù)。該技術(shù)是利用原有的FPGA開發(fā)工具,將成功實(shí)現(xiàn)于FPGA器件上的SOPC系統(tǒng),通過特定技術(shù)(即Hardcopy技術(shù))直接向ASIC轉(zhuǎn)化,從而克服傳統(tǒng)ASIC設(shè)計(jì)中普遍存在的問題。本章以嵌入式軟核SOPC系統(tǒng)方案為重點(diǎn),討論SOPC系統(tǒng)的設(shè)計(jì)方法(以下除特別說明外,均指基于FPGA嵌入式軟核SOPC系統(tǒng)的方案)。

SOPC系統(tǒng)設(shè)計(jì)包括以NiosⅡ軟核處理器為核心的嵌入式系統(tǒng)硬件配置、硬件仿真、基于IDE環(huán)境的軟件設(shè)計(jì)、軟件調(diào)試等。SOPC系統(tǒng)設(shè)計(jì)的基本軟件工具包括QuartusⅡ、SOPCBuilder、MATLAB/DSPBuilder及NoisⅡIDE。具體的開發(fā)流程框架如圖6-3所示。

圖6-3SOPCNiosⅡ開發(fā)流程框圖下面介紹各個流程。

(1)

QuartusⅡ完成NiosⅡ系統(tǒng)的分析綜合、硬件優(yōu)化、適配、配置文件編程下載及硬件系統(tǒng)測試等工作。

(2)

SOPCBuilder定制并生成處理器系統(tǒng)。SOPCBuilder包含于QuartusⅡ中。根據(jù)系統(tǒng)需求,用SOPCBuilder可以定制NiosⅡ處理器內(nèi)核、內(nèi)存以及其它系統(tǒng)所需的標(biāo)準(zhǔn)外設(shè);提供自定義外設(shè)和自定義指令的方法,并將它們加入系統(tǒng)組件(component)。SOPCBuilder為這些組件分配內(nèi)存地址,并將它們相互連接,形成一個完整的硬件系統(tǒng)。

SOPCBuilder的輸出包括兩個文件:

SOPCBuilder系統(tǒng)文件(

.pt)。這個文件存儲了所有SOPCBuilder構(gòu)建的系統(tǒng)硬件內(nèi)容。這個文件被NiosⅡIDE導(dǎo)入,生成與硬件相關(guān)的系統(tǒng)庫。

HDL文件。這些文件是硬件設(shè)計(jì)文件,對SOPCBuilder生成的NiosⅡ系統(tǒng)進(jìn)行描述。這些文件被QuartusⅡ?qū)胗脕韯?chuàng)建FPGA系統(tǒng)。

(3)用QuartusⅡ創(chuàng)建最終的FPGA硬件系統(tǒng)。在SOPCBuilder中生成NiosⅡ系統(tǒng)之后,就可將HDL文件集成在QuartusⅡ之中。很多設(shè)計(jì)并不只包含NiosⅡ系統(tǒng),還有許多外圍邏輯。這就需要在QuartusⅡ中設(shè)計(jì)并添加。同樣,可以將其它IP核加入工程來擴(kuò)展系統(tǒng)功能。一個完整的SOPC系統(tǒng)就是由NiosⅡ處理器系統(tǒng)和外圍邏輯組成的。

硬件系統(tǒng)設(shè)計(jì)完畢后,需要在Quartus中為各個接口分配I/O引腳,定義時(shí)序以及其它配置。最后編譯Quartus工程,并生成一個FPGA的

.sof配置文件。這個文件通過JTAG接口下載到目標(biāo)板中,就完成了一個SOPC系統(tǒng)的硬件平臺設(shè)計(jì)。

(4)

SOPCBuilder生成NiosⅡ系統(tǒng)之后,在NiosⅡIDE中將

.ptf文件導(dǎo)入,可用于設(shè)計(jì)嵌入式應(yīng)用程序。為了更快地開發(fā)應(yīng)用程序,并創(chuàng)建和底層無關(guān)的編程環(huán)境,NiosⅡIDE提供標(biāo)準(zhǔn)外設(shè)驅(qū)動和HAL系統(tǒng)庫。

NiosⅡIDE產(chǎn)生了如下輸出文件:

system.h文件。該文件定義了系統(tǒng)中硬件的標(biāo)識,可以在程序編譯過程中自動創(chuàng)建。

②可執(zhí)行文件(

.e1f)。此文件是NiosⅡIDE的編譯結(jié)果,可以下載到Flash中執(zhí)行。

③內(nèi)存初始化文件(

.hex)。某些片上存儲器需要預(yù)定義存儲內(nèi)容。IDE為片上存儲器產(chǎn)生初始化文件。

Flash程序數(shù)據(jù)。IDE包含一個Flash編程工具,它允許將程序?qū)懭隖lash存儲器。Flash編程工具加入適當(dāng)?shù)膯哟a,使用戶定義的系統(tǒng)可以從Flash存儲器啟動,也可以用Flash編程工具將任意的數(shù)據(jù)寫入Flash存儲器。6.2.1SOPCBuilder簡介

在建立一個系統(tǒng)時(shí),最耗時(shí)的任務(wù)是根據(jù)系統(tǒng)要求集成大量的組件。Altera公司的SOPCBuilder為建立SOPC設(shè)計(jì)提供了標(biāo)準(zhǔn)化的圖形環(huán)境,SOPCBuilder包含在QuartusⅡ軟件中。與傳統(tǒng)SOC設(shè)計(jì)方法相比,SOPCBuilder可以幫助設(shè)計(jì)者以非常短的時(shí)間來完成由處理器、存儲器和外設(shè)等組件組成的SOPC系統(tǒng)。在傳統(tǒng)的SOC設(shè)計(jì)方法中,設(shè)計(jì)者需要手工編寫將系統(tǒng)中各個組件連接起來的頂層HDL設(shè)計(jì)文件,而SOPCBuilder則幫助設(shè)計(jì)者自動完成系統(tǒng)集成的工作。SOPC提供了直觀的圖形用戶界面(GUI),幫助設(shè)計(jì)者添加和配置系統(tǒng)所需的外設(shè)(包括存儲器、定制外設(shè)和IP模塊),再根據(jù)設(shè)計(jì)者的要求將這些外設(shè)與處理器連接在一起,并自動完成外設(shè)和存儲器的地址映射、中斷控制和總線控制等工作。完成系統(tǒng)配置之后,SOPCBuilder根據(jù)要求生成VHDL或VerilogHDL的系統(tǒng)級設(shè)計(jì)代碼,并自動生成部分外設(shè)的硬件抽象層(HAL)代碼和底層硬件驅(qū)動代碼,為軟件開發(fā)做好準(zhǔn)備。SOPCBuilder避免了手動系統(tǒng)集成任務(wù),使用戶能夠?qū)⒕性诙ㄖ朴脩糇陨磉壿嬙O(shè)計(jì)上,從而突出系統(tǒng)優(yōu)勢。

Altera的QuartusⅡ設(shè)計(jì)軟件的所有版本均包括SOPCBuilder系統(tǒng)生成的工具。SOPCBuilder具有如下特性:

(1)使用方便的GUI接口,幫助用戶高效地建立并修改系統(tǒng)。

(2)自動集成常用的SOPCBuilder組件、Altera知識產(chǎn)權(quán)(IP)、Altera宏功能合作伙伴計(jì)劃(AMPPSM)IP,以及定制組件內(nèi)核等。

(3)可以高效地連接外部處理器和SOPCBuilder可用IP庫,包括SerialRapidIO?、千兆以太網(wǎng)、PCI和PCIExpress。

(4)在系統(tǒng)中可建立自己的可重用定制組件,支持選用的DSPBuilder系統(tǒng)級設(shè)計(jì)工具。

(5)生成系統(tǒng)HDL,包括針對系統(tǒng)組件集成需求而經(jīng)過優(yōu)化的系統(tǒng)互聯(lián)架構(gòu)。

Altera的QuartusⅡ設(shè)計(jì)軟件含有SOPCBuilder系統(tǒng)級設(shè)計(jì)工具,支持選用的DSPBuilder系統(tǒng)級設(shè)計(jì)工具。系統(tǒng)級設(shè)計(jì)工具使工程師能夠迅速設(shè)計(jì)、評估可編程芯片系統(tǒng)(SOPC)體系結(jié)構(gòu),在更高級抽象層上進(jìn)行設(shè)計(jì)。在全部或者部分FPGA以及MAXⅡCPLD系統(tǒng)設(shè)計(jì)中使用SOPCBuilder。采用SOPCBuilder接口來選擇元件以及元件間的連接,用戶會發(fā)現(xiàn)系統(tǒng)集成任務(wù)能夠在幾分鐘內(nèi)完成。一般,SOPCBuilder應(yīng)用包括:

(1)構(gòu)建定制NiosⅡ嵌入式處理器解決方案。

(2)采用外設(shè)擴(kuò)展定制單機(jī)處理器。

(3)通過PCI接口連接至ASSP以及CPU。

(4)構(gòu)建數(shù)字信號處理(DSP)協(xié)處理器。

SOPCBuilder組成元件包括FPGA內(nèi)部或外部的嵌入式處理器、知識產(chǎn)權(quán)(IP)內(nèi)核和用戶生成的外設(shè)內(nèi)核等外設(shè)以及ASSP和ASIC等片外器件。SOPCBuilder采用頭文件和外設(shè)驅(qū)動器輸出,加速實(shí)現(xiàn)應(yīng)用軟件的開發(fā)。SOPCBuilder使用戶能夠?qū)⒕性谙到y(tǒng)關(guān)鍵部分,不用花費(fèi)系統(tǒng)集成任務(wù)所需的工程時(shí)間,盡快進(jìn)入應(yīng)用開發(fā)。

SOPCBuilder中提供了一系列的組件庫,可供用戶直接使用,這些組件包括:

(1)

NiosⅡ等處理器。

(2)微控制器外設(shè)。

(3)定時(shí)器。

(4)

UART、SPI等串行通信接口。

(5)通用輸入輸出口(GPIO)。

(6)存儲器接口。

(7)總線和總線橋。

(8)數(shù)字信號處理(DSP)內(nèi)核。可以使用SOPCBuilder構(gòu)建由CPU、存儲器接口和I/O等組成的嵌入式微處理器系統(tǒng),也可以生成不包括CPU的數(shù)據(jù)流系統(tǒng)。SOPCBuilder可以建立具有多個主機(jī)和從機(jī)的系統(tǒng)拓?fù)浣Y(jié)構(gòu)。

在SOPCBuilder中構(gòu)建系統(tǒng)時(shí),可以選擇用戶自定義組件或組件庫中提供的組件。SOPCBuilder可以導(dǎo)入或提供用戶定義邏輯塊的接口。SOPCBuilder系統(tǒng)與用戶定義邏輯配合使用時(shí)具有以下四種機(jī)制:簡單PIO連接、系統(tǒng)模塊內(nèi)例化、外部邏輯總線接口以及發(fā)布本地SOPCBuilder組件。

SOPCBuilder除提供可用于下載的組件庫(包括NiosⅡ處理器、UART、定時(shí)器、PIO、Avalon三態(tài)橋接器、多個簡單存儲器接口和OS/RTOS內(nèi)核)外,還可以從MegaCore功能列表中選擇組件,包括支持OpenCorePlus硬件評估的功能等。使用SOPCBuilder構(gòu)建系統(tǒng)時(shí),首先應(yīng)使用其中的SystemContents頁面定義系統(tǒng);然后,在組件庫中選擇組件,將組件添加到系統(tǒng)中成為系統(tǒng)的組件,所添加的組件將在組件列表中列出。其中,SystemContents頁面提供的工具可定義以下組件選項(xiàng):

(1)系統(tǒng)組件和接口。

(2)主端口與從端口連接。

(3)系統(tǒng)地址映射。

(4)系統(tǒng)IRQ分配。

(5)共享從端口的仲裁優(yōu)先級。

(6)多時(shí)鐘域工作。

SOPCBuilder生成的系統(tǒng)包含一個系統(tǒng)說明文件(

.ptf文件),該文件中保存了所有在SOPCBuilder中輸入的設(shè)置、選項(xiàng)和參數(shù)。此外,每個組件具有相應(yīng)的

.ptf文件。在系統(tǒng)生成期間,SOPCBuilder使用這些文件為系統(tǒng)生成源代碼、軟件組件和仿真文件。完成系統(tǒng)定義之后,可以使用SOPCBuilder的SystemGeneration頁面生成系統(tǒng)。SOPCBuilder軟件自動生成所有必要的總線邏輯,用以將處理器、外設(shè)、存儲器、仲裁器、IP功能以及系統(tǒng)外邏輯和存儲器接口用Avalon交換架構(gòu)連接在一起,并建立將組件捆綁在一起的HDL源代碼。

SOPCBuilder還可以建立軟件開發(fā)工具包(SDK)所需的軟件模塊,例如頭文件、通用外圍設(shè)備驅(qū)動程序、定制軟件庫和OS/real-time操作系統(tǒng)(RTOS內(nèi)核)等。

SOPCBuilder建立用于仿真的MentorGraphicsModelSim仿真目錄,包括ModelSim工程文件、所有存儲器模塊的仿真數(shù)據(jù)文件、提供設(shè)置信息的宏文件、別名和總線接口波形初始設(shè)置。SOPCBuilder還建立仿真測試激勵,用于例化系統(tǒng)模塊、驅(qū)動時(shí)鐘和復(fù)位輸入,并可以例化和連接仿真模型;還可以生成Tcl腳本,用于在QuartusⅡ軟件中設(shè)置系統(tǒng)編譯所需的所有文件。6.2.2SOPCBuilder設(shè)計(jì)流程

SOPCBuilder的圖形界面如圖6-4所示。SOPCBuilder設(shè)計(jì)流程主要分為三個步驟(見圖6-5),即從組件庫中選擇組件;定制組件并集成系統(tǒng);驗(yàn)證并構(gòu)建系統(tǒng)。

圖6-4SOPCBuilder的圖形界面

圖6-5SOPCBuilder設(shè)計(jì)流程在QuartusⅡ中,每一個SOPCBuilder系統(tǒng)對應(yīng)一個QuartusⅡ工程,可以用Tools->SOPCBuilder菜單啟動SOPCBuilder,也可以用 工具按鈕啟動SOPCBuilder。如果工程中沒有SOPCBuilder系統(tǒng),QuartusⅡ則會提示使用者輸入SOPCBuilder系統(tǒng)的名稱,并選擇生成VHDL代碼還是Verilog代碼。SOPCBuilder同時(shí)只能對一個系統(tǒng)進(jìn)行操作,但一個QuartusⅡ工程可以包含多個系統(tǒng),在SOPCBuilder中可以打開一個已有的系統(tǒng),也可以新建系統(tǒng)。系統(tǒng)的文件與相關(guān)的QuatursⅡ工程存儲在同一個目錄中,每個系統(tǒng)的信息都保存在一個名稱為“系統(tǒng)模塊名稱

.ptf”的文件中。

SOPCBuilder的用戶界面按功能分為不同的標(biāo)簽頁,SOPCBuilder啟動后,默認(rèn)的標(biāo)簽頁為SystemContents標(biāo)簽頁。SystemContents標(biāo)簽頁的主要作用包括:

(1)將組件庫中的組件添加為系統(tǒng)組件。

(2)配置組件。

(3)指定組件之間的連接。在SOPCBuilder中,一個系統(tǒng)是由多個組件組成的,這些組件按照一定的規(guī)則設(shè)計(jì),能夠被SOPCBuilder識別并可以自動連接到系統(tǒng)中去。SOPCBuilder將多個組件連接在一起組成一個頂層設(shè)計(jì)模塊,稱做系統(tǒng)模塊(SystemModule)。圖6-5中的活動組件列表區(qū)域列出了當(dāng)前系統(tǒng)中例化的組件,在這個區(qū)域中,可以修改組件的名稱,設(shè)定從組件的基地址及時(shí)鐘源,如果需要,還可以設(shè)定每個組件的中斷優(yōu)先級。所有外設(shè)在系統(tǒng)中的管理都是按統(tǒng)一分配的地址進(jìn)行的,活動組件列表中可以設(shè)置每一個外設(shè)的基地址,根據(jù)基地址和外設(shè)的特性,自動生成結(jié)束地址。如果設(shè)計(jì)者不干預(yù),SOPCBuilder則自動分配各個外設(shè)的地址。有效組件列表區(qū)域中,分類列出了當(dāng)前有效的組件,包括Altera提供的以及自定義的組件庫,用戶可以從這個列表中選擇自己需要的組件添加到右側(cè)的活動組件列表中,建立用戶自己的系統(tǒng),每個添加到系統(tǒng)中的組件都可能會啟動一個配置向?qū)В笇?dǎo)用戶配置這個組件。連接面板區(qū)域顯示了組件之間的連接,可以在這個區(qū)域中指定主組件與從組件之間的連接關(guān)系以及與多個主組件共享的從組件的總線仲裁器。時(shí)鐘設(shè)置表用于設(shè)置系統(tǒng)的時(shí)鐘。

NiosⅡ系統(tǒng)的所有外設(shè)都是通過Avalon總線與NiosⅡCPU相接的。Avalon總線是一種協(xié)議較為簡單的片內(nèi)總線,NiosⅡ通過Avalon總線與外界進(jìn)行數(shù)據(jù)交換。6.3Avalon總線規(guī)范

Avalon總線接口可以分為兩類:slave和master。slave是一個從控接口,而master是一個主控接口。slave和master的主要區(qū)別是對于Avalon總線控制權(quán)的把握。master接口擁有所連的Avalon總線控制權(quán),而slave接口是被動的。常見的Avalon傳輸結(jié)構(gòu)有:Avalon總線從讀(slaveread),Avalon總線帶一個延遲狀態(tài)從讀,Avalon總線從寫(slavewrite),Avalon總線帶一個延遲狀態(tài)從寫。所有外設(shè)的接口都與Avalon總線時(shí)鐘同步,不需要復(fù)雜的握手/應(yīng)答機(jī)制。這樣就簡化了Avalon總線的時(shí)序行為,而且便于集成高速外設(shè)。Avalon總線以及整個系統(tǒng)的性能可以采用標(biāo)準(zhǔn)的同步時(shí)序分析技術(shù)來評估。Avalon總線所有的信號都是高電平或低電平有效,這便于信號在總線中高速傳輸。在Avalon總線中,由數(shù)據(jù)選擇器(而不是三態(tài)緩沖器)決定哪個信號驅(qū)動哪個外設(shè),因此外設(shè)即使在未被選中時(shí)也不需要將輸出置為高阻態(tài)。為了方便外設(shè)的設(shè)計(jì),地址、數(shù)據(jù)和控制信號使用分離的、專用的端口。外設(shè)不需要識別地址總線周期和數(shù)據(jù)總線周期,也不需要在未被選中時(shí)使輸出無效。分離的地址、數(shù)據(jù)和控制通道還簡化了與片上用戶自定義邏輯的連接。Avalon總線還包括許多其它特性和約定,用以支持SOPCBuilder軟件自動生成系統(tǒng)、總線和外設(shè),其中包括:最大4

GB的地址空間——存儲器和外設(shè)可以映像到32位地址空間中的任意位置;內(nèi)置地址譯碼——Avalon總線自動產(chǎn)生所有外設(shè)的片選信號,極大地簡化了基于Avalon總線的外設(shè)的設(shè)計(jì)工作;多主設(shè)備總線結(jié)構(gòu)——Avalon總線上可以包含多個主外設(shè),并自動生成仲裁邏輯;采用向?qū)椭脩襞渲孟到y(tǒng),SOPCBuilder提供圖形化的向?qū)椭脩暨M(jìn)行總線配置(添加外設(shè)、指定主/從關(guān)系、定義地址映像等)。Avalon總線結(jié)構(gòu)將根據(jù)用戶在向?qū)е休斎氲膮?shù)自動生成;流式讀和寫(StreamingReadandWrite)能力——在主、從設(shè)備之間進(jìn)行流傳輸使能的邏輯包含于Avalon總線模塊的內(nèi)部。6.3.1Avalon交換式總線基本概念

Avalon交換式總線是由Altera開發(fā)的一種專用的連接SOPC系統(tǒng)主組件與從組件的內(nèi)部連線技術(shù)。Avalon交換式總線由SOPCBuilder自動生成,是一種理想的用于系統(tǒng)處理器和外設(shè)之間的內(nèi)聯(lián)總線。每當(dāng)一個新的組件被添加到系統(tǒng)中或是某個外設(shè)的優(yōu)先級被改變時(shí),SOPCBuilder就會自動生成一個新的、最佳的交換式總線。用戶可以很容易地修改自己設(shè)計(jì)的系統(tǒng)以提高性能或增加系統(tǒng)功能。Avalon交換式總線的特性包括:

(1)基于向?qū)У呐渲梅绞健?/p>

(2)可以并發(fā)操作的多主設(shè)備。

(3)內(nèi)建地址譯碼。

(4)原始的或動態(tài)的位寬可變的外設(shè)接口。

(5)支持各種模式的Avalon傳輸。

(6)支持等待時(shí)間的讀/寫傳輸。

(7)跨時(shí)鐘域電路。

Avalon交換式總線使用很少的邏輯資源來支持?jǐn)?shù)據(jù)總線復(fù)用、地址譯碼、產(chǎn)生等待周期、對齊外設(shè)地址(支持原始的和動態(tài)的總線尺寸對齊)、指定中斷優(yōu)先級以及高級的交換式總線傳輸。圖6-6所示的例子正是用Avalon交換架構(gòu)將多個主組件和多個從組件連接到一起,部分組件使用了多個Avalon端口。

圖6-6Avalon總線的例子由于一個組件可以擁有多個Avalon端口,所以用Avalon交換式架構(gòu)可以構(gòu)建非常復(fù)雜的總線應(yīng)用,比如每一個從端口只能有一個中斷請求信號。如果一個組件需要多個中斷請求,只需要為該組件配置多個從端口即可。SOPCBuilder的主要任務(wù)就是生成Avalon交換式架構(gòu)的總線,這個過程是自動完成的,設(shè)計(jì)者一般不需要與生成的HDL代碼打交道,但了解Avalon交換式架構(gòu)實(shí)現(xiàn)原理,有助于設(shè)計(jì)者更好地使用它。Avalon總線的一些基本概念如下。

1.總線周期

總線周期是總線傳輸中的基本時(shí)間單元,定義為從Avalon總線主時(shí)鐘的前一個上升沿到下一個上升沿之間的時(shí)間??偩€信號的時(shí)序以總線周期為基準(zhǔn)來確定。

2.總線傳輸

Avalon總線傳輸是指對數(shù)據(jù)的一次讀或?qū)懖僮?,一次傳輸可能需要一個或多個總線周期來完成。Avalon總線支持的傳輸寬度包括字節(jié)(8位)、半字(16位)和字(32位)。

3.流傳輸模式

通過流控信號實(shí)現(xiàn)流傳輸模式,流傳輸模式在流模式主外設(shè)和流模式從外設(shè)之間建立一個開放的通道,以提供連續(xù)的數(shù)據(jù)傳輸。只要存在有效數(shù)據(jù),便能通過該通道在主從端口對之間流動,主外設(shè)不必為了確定從外設(shè)是否能夠發(fā)送或接收數(shù)據(jù)而不斷地訪問從外設(shè)的狀態(tài)寄存器。流傳輸模式使得主從端口對之間的數(shù)據(jù)吞吐量達(dá)到最大,同時(shí)避免了從外設(shè)的數(shù)據(jù)上溢或下溢。它對于DMA傳輸特別重要。

4.延遲讀傳輸模式

有些同步外設(shè)在第一次訪問時(shí)需要幾個時(shí)鐘周期的延遲,此后每個總線周期都能返回?cái)?shù)據(jù)。對于這樣的外設(shè),延遲讀傳輸模式可以提高帶寬利用率。延遲傳輸使得主外設(shè)發(fā)起一次讀傳輸后,盡管上一次讀傳輸?shù)臄?shù)據(jù)還沒有返回,主設(shè)備仍可以發(fā)起下一次讀傳輸,也可以轉(zhuǎn)而執(zhí)行一個不相關(guān)的任務(wù)或等外設(shè)準(zhǔn)備好數(shù)據(jù)后再接收數(shù)據(jù)。在取指令操作(需要經(jīng)常訪問連續(xù)地址)和DMA傳輸中,延遲傳輸是非常有用的。在這兩種情況下,CPU或DMA主外設(shè)會預(yù)先讀取期望的數(shù)據(jù),從而使同步存儲器處于激活狀態(tài),并減少平均訪問時(shí)間。

5.Avalon總線模塊

Avalon總線模塊是系統(tǒng)模塊的主干,是SOPC設(shè)計(jì)中外設(shè)之間通信的主要通道。Avalon總線模塊由各類控制、數(shù)據(jù)和地址信號以及仲裁邏輯組成,它將構(gòu)成系統(tǒng)模塊的外設(shè)連接起來。Avalon總線模塊是一種可配置的總線結(jié)構(gòu),可以隨著用戶的不同互聯(lián)需求而改變、Avalon總線模塊是由SOPCBuilder自動生成的,系統(tǒng)用戶不需要關(guān)心總線與外設(shè)的具體連接。大多數(shù)應(yīng)用中Avalon總線都是在SOPCBuilder中自動將處理器和其它Avalon總線外設(shè)集成到系統(tǒng)模塊中,因此Avalon總線模塊很少作為分離的單元使用。對于用戶來說,Avalon總線模塊通??梢员豢醋鍪沁B接外設(shè)的途徑。Avalon交換式架構(gòu)為連接到總線上的外設(shè)提供以下服務(wù):

(1)數(shù)據(jù)通道復(fù)用。Avalon總線模塊中的數(shù)據(jù)選擇器將數(shù)據(jù)從選中的從外設(shè)傳送到相應(yīng)的主外設(shè)。

(2)地址譯碼。地址譯碼邏輯為每個外設(shè)產(chǎn)生片選信號,外設(shè)不必各自對地址線進(jìn)行譯碼來產(chǎn)生片選信號,從而簡化了外設(shè)的設(shè)計(jì)。

(3)生成等待周期。為適應(yīng)具有特殊同步要求的外設(shè),加入等待周期可以將總線傳輸延長一個或多個總線周期。當(dāng)目標(biāo)從外設(shè)不能在一個時(shí)鐘周期內(nèi)響應(yīng)時(shí),總線模塊會加入等待周期使主外設(shè)暫停。當(dāng)讀使能和寫使能信號具有建立時(shí)間或保持時(shí)間要求時(shí)也會加入相應(yīng)的等待周期。

(4)動態(tài)地址對齊。動態(tài)地址對齊隱藏了寬度不同的外設(shè)之間連接的細(xì)節(jié)。例如,通過32位的主端口讀傳輸來訪問16位存儲器時(shí),動態(tài)地址對齊會自動執(zhí)行兩次從端口讀傳輸,以便從16位存儲器設(shè)備中取出32位數(shù)據(jù)。主外設(shè)不必考慮從外設(shè)的物理特性,因此這一特性簡化了主外設(shè)硬件和軟件的設(shè)計(jì)。

(5)中斷優(yōu)先級分配。當(dāng)一個或多個從外設(shè)產(chǎn)生中斷時(shí),Avalon總線模塊會將中斷傳遞給相應(yīng)的主外設(shè),同時(shí)傳遞優(yōu)先級最高的中斷請求(IRQ)信號。

(6)延遲傳輸功能。Avalon總線模塊內(nèi)部包含了在主從端口對之間進(jìn)行延遲傳輸所需要的邏輯。

(7)流傳輸模式。Avalon總線模塊內(nèi)部包含了在主從端口對之間進(jìn)行流傳輸所需要的邏輯。

6.Avalon總線外設(shè)

Avalon總線外設(shè)可以在片內(nèi),也可以在片外。Avalon總線外設(shè)完成一定的功能,并通過Avalon總線與其它的系統(tǒng)組件通信。外設(shè)是模塊化的系統(tǒng)組件,可以根據(jù)系統(tǒng)的要求在設(shè)計(jì)時(shí)增加或刪除。Avalon外設(shè)不僅包括存儲器和處理器,還包括傳統(tǒng)的外設(shè)模塊,例如UART、PIO、定時(shí)器和總線橋等。任何用戶自定義邏輯只要提供了連接Avalon總線的地址、數(shù)據(jù)和控制信號,就能成為Avalon總線外設(shè)。Avalon總線外設(shè)連接到Avalon總線模塊為其分配的特定端口上。除了Avalon總線信號外,外設(shè)還可以擁有自定義的端口,用來連接系統(tǒng)模塊外的用戶自定義邏輯。Avalon外設(shè)分為主外設(shè)和從外設(shè)兩類。能夠在Avalon總線上發(fā)起總線傳輸?shù)耐庠O(shè)是主外設(shè)。一個主外設(shè)至少擁有一個連接到Avalon總線模塊上的主端口,主外設(shè)也可以擁有從端口,使得該外設(shè)可以響應(yīng)Avalon總線上由其它主外設(shè)發(fā)起的總線傳輸。從外設(shè)只能響應(yīng)Avalon總線傳輸,而不能發(fā)起總線傳輸。從外設(shè),例如存儲器設(shè)備和UART,通常只有一個連接到Avalon總線模塊上的從端口。在SOPC環(huán)境中,區(qū)分以下兩類外設(shè)是十分重要的,它們均可以是主外設(shè)或從外設(shè)。第一類外設(shè)可以在SOPCBuilder的組件庫中找到,或者用戶指定了用戶自定義外設(shè)的設(shè)計(jì)文件的位置,SOPCBuilder自動將該外設(shè)連接到Avalon總線模塊上。這樣的外設(shè)是系統(tǒng)模塊內(nèi)部的外設(shè),它們是系統(tǒng)模塊的一部分。這些外設(shè)與Avalon總線模塊的地址、數(shù)據(jù)和控制端口的細(xì)節(jié)對用戶是透明的,這些模塊上的非Avalon總線的端口作為系統(tǒng)模塊的端口引出到外部,這些端口可以直接連接到物理器件的引腳,也可以連接到其它片上模塊的端口。另一類Avalon總線外設(shè)位于系統(tǒng)模塊的外部,在以下幾種情況下,一般將Avalon總線模塊置于系統(tǒng)模塊外部:①外設(shè)實(shí)際存在于可編程邏輯器件的外部;②需要通過一些時(shí)序轉(zhuǎn)換邏輯才能將外設(shè)連接到Avalon總線上;③在生成系統(tǒng)模塊時(shí)外設(shè)的設(shè)計(jì)尚未完成。在這些情況下,可以把Avalon總線模塊信號作為系統(tǒng)模塊的端口引出,連接外部外設(shè)。

7.主端口

主端口是主外設(shè)在Avalon總線上發(fā)起傳輸?shù)囊唤M信號。主端口直接連接到Avalon總線模塊上。一個主外設(shè)可以擁有一個或多個主端口,也可以擁有從端口。這些主端口和從端口之間的相互關(guān)系取決于外設(shè)的設(shè)計(jì),而在這些端口上的單個總線傳輸必須符合Avalon總線規(guī)范。主傳輸是指從主端口角度描述的Avalon總線傳輸。

8.從端口與從傳輸

從端口是外設(shè)用于接收來自另一個Avalon外設(shè)主端口的總線傳輸?shù)囊唤M信號。從端口直接連接到Avalon總線模塊上。主外設(shè)也可以擁有從端口,使得它能夠響應(yīng)來自Avalon總線上其它主外設(shè)的總線傳輸。從傳輸是指從從端口角度描述的Avalon總線傳輸。

9.主從端口對

主從端口對是指通過Avalon總線模塊連接到一起的一個主端口和一個從端口的組合。在結(jié)構(gòu)上,這些主端口和從端口連接到Avalon總線模塊的相應(yīng)端口上。主端口的控制和數(shù)據(jù)信號穿過Avalon總線模塊,與從端口進(jìn)行交互。在SOPCBuilder中指定主端口和從端口之間的連接,即建立主從端口對。

10.PTF文件與SOPCBuilder參數(shù)和選項(xiàng)

Avalon總線和外設(shè)的配置是在SOPCBuilder的圖形用戶界面中指定的。用戶在圖形用戶界面中指定各種參數(shù)及選項(xiàng),SOPCBuilder將這些參數(shù)和選項(xiàng)存入一個系統(tǒng)PTF文件。PTF文件是一個文本文件,其中包括以下內(nèi)容:

(1)

Avalon總線模塊結(jié)構(gòu)與功能的參數(shù)。

(2)每個外設(shè)結(jié)構(gòu)與功能的參數(shù)。

(3)每個外設(shè)的主/從角色。

(4)每個外設(shè)提供的端口信號,例如讀使能、讀數(shù)據(jù)、寫使能、寫數(shù)據(jù)。

(5)每個可被多個主端口訪問的從端口的仲裁機(jī)制。

SOPCBuilder將PTF文件傳遞給HDL生成器,來創(chuàng)建系統(tǒng)模塊實(shí)際的寄存器傳輸級(RTL)描述。6.3.2Avalon總線信號

Avalon總線是一種同步總線接口,是由主設(shè)備提供的總線時(shí)鐘。Avalon總線規(guī)范定義了主端口和從端口之間通過Avalon總線模塊傳輸數(shù)據(jù)所需的信號和時(shí)序。每一個信號都要指定一個有效的Avalon信號類型,以確定該信號的作用。Avalon總線規(guī)范不要求Avalon外設(shè)必須包含哪些信號,它只定義了外設(shè)可以包含的各種信號類型(例如地址、數(shù)據(jù)、時(shí)鐘等)。信號也可以是用戶自定義的,在這種情況下,SOPCBuilder不將該端口與Avalon總線模塊連接。Avalon信號分為主端口信號和從端口信號兩類,外設(shè)使用的信號類型由端口的主/從角色來決定,每個單獨(dú)的主端口或從端口使用的信號類型由外設(shè)的設(shè)計(jì)決定。例如,設(shè)計(jì)一個只有輸出的PIO從外設(shè)只需定義用于寫傳輸(從外設(shè)向Avalon總線模塊方向)的信號,而不需定義用于讀傳輸?shù)男盘枴1M管從端口允許使用中斷請求(IRQ)信號,但也不是必須使用。

Avalon總線規(guī)范沒有規(guī)定Avalon外設(shè)信號的命名規(guī)則,信號可以按照它的信號類型來命名,也可以遵照系統(tǒng)級的命名規(guī)范采用不同的名稱。

表6-2列舉了部分Avalon從端口可用的信號類型,信號的方向是從外設(shè)的角度定義的。例如時(shí)鐘信號clk(方向?yàn)閕n)對于從外設(shè)來說是輸入信號,而對于Avalon總線模塊來說是輸出信號。

表6-2部分Avalon從端口可用的信號類型表6-2中列舉的信號類型都是高電平有效。Avalon總線還提供了各信號類型的反向形式,在PTF聲明中,在信號類型名稱后面添加“_n”,便可將對應(yīng)的端口聲明為低電平有效,這對許多使用低電平有效邏輯的片外外設(shè)非常有用。

不論外設(shè)是在系統(tǒng)模塊的內(nèi)部還是外部實(shí)現(xiàn),Avalon總線信號及操作都是相同的。在內(nèi)部實(shí)現(xiàn)的情況下,SOPCBuilder自動將外設(shè)的主端口或從端口連接到Avalon總線模塊。在外部實(shí)現(xiàn)的情況下,用戶必須手工地將主端口或從端口連接到系統(tǒng)模塊。在任何情況下,Avalon總線信號的行為都是相同的。

Avalon總線允許多個主端口連接到Avalon總線模塊,而且實(shí)現(xiàn)Avalon總線的并發(fā)多主端口功能時(shí),Avalon總線模塊不需要額外的特殊信號。當(dāng)多個主外設(shè)試圖同時(shí)訪問同一個從外設(shè)時(shí),Avalon總線模塊用內(nèi)部的從端口仲裁邏輯來解決沖突。

Avalon三態(tài)接口用于將片外設(shè)備通過可編程邏輯器件的I/O引腳直接連接到Avalon總線模塊上。用PTF參數(shù)Bus_Type=“avalon_tristate”指定一個片外的外設(shè)使用了Avalon三態(tài)接口。大多數(shù)系統(tǒng)都需要使用片外存儲器設(shè)備。片外存儲器設(shè)備一般會共享地址和數(shù)據(jù)總線線路,與這些設(shè)備連接時(shí)需要使用三態(tài)雙向數(shù)據(jù)接口,以便其它外設(shè)也能夠驅(qū)動數(shù)據(jù)線而不會引起信號競爭,如Flash存儲器、SRAM以及同步SRAM(SSRAM)等。

表6-3列舉了片外從外設(shè)與Avalon總線模塊之間接口的信號類型,信號的方向是從外設(shè)的角度定義的。外設(shè)提供的端口由外設(shè)的設(shè)計(jì)和PTF文件中的端口定義決定,不需要提供全部的信號類型。

表6-3Avalon總線接口三態(tài)從端口信號6.3.3Avalon總線傳輸類型及時(shí)序

Avalon總線是一個同步總線接口,由Avalon總線主時(shí)鐘提供定時(shí)。所有總線傳輸?shù)男盘柖寂cAvalon總線時(shí)鐘同步。同步總線接口并不意味著所有的Avalon總線信號都是鎖存的,比如,Avalon的chipselect信號便是由組合邏輯產(chǎn)生的,其輸入同步于Avalon總線時(shí)鐘的寄存器輸出,因此,外設(shè)不能使用Avalon信號的邊沿,因?yàn)锳valon信號在達(dá)到穩(wěn)定之前會發(fā)生多次變化。就像所有同步設(shè)計(jì)一樣,Avalon總線外設(shè)只能在時(shí)鐘上升沿對穩(wěn)定的信號作出響應(yīng),輸出信號也必須在時(shí)鐘上升沿到來之前達(dá)到穩(wěn)定。

Avalon總線模塊也可以連接異步外設(shè),例如片外異步存儲器。但設(shè)計(jì)時(shí)需要考慮一些額外因素:由于Avalon總線模塊的同步操作,Avalon信號只以Avalon總線時(shí)鐘周期為間隔變化,此外,如果異步外設(shè)的輸出直接連接到Avalon總線模塊,則用戶必須保證輸出信號在時(shí)鐘上升沿到來之前達(dá)到穩(wěn)定。

Avalon總線規(guī)范并不定義在時(shí)鐘上升沿之間信號如何變化,信號的變化由Avalon總線時(shí)鐘觸發(fā),信號只要在捕獲時(shí)鐘上升沿之前達(dá)到穩(wěn)定就可以了,因此總線規(guī)范中的Avalon總線時(shí)序圖中不會描繪精確的時(shí)間信息。在時(shí)鐘上升沿之間信號是可變的,它取決于用于實(shí)現(xiàn)系統(tǒng)的Altera可編程邏輯器件的特性。類似地,Avalon總線沒有規(guī)定固有的最高性能,系統(tǒng)模塊在特定的器件上綜合布線之后,用戶必須對系統(tǒng)模塊進(jìn)行標(biāo)準(zhǔn)的時(shí)序分析,以確定Avalon總線傳輸能達(dá)到的最高速度。

不同Avalon總線端口的傳輸能力并不一致,基本的Avalon總線傳輸只能實(shí)現(xiàn)一次總線傳輸中在一對主設(shè)備和從設(shè)備之間傳遞一個數(shù)據(jù)單元。在基本的Avalon總線傳輸基礎(chǔ)上,通過增加以下幾種特性中的一種或多種,對總線傳輸作以擴(kuò)展,可以派生出能夠適應(yīng)所有外設(shè)的傳輸模式,這些特性包括:

(1)插入固定長度的或可變長度的等待狀態(tài)。

(2)固定延遲或可變延遲的流水線傳輸模式。

(3)建立和保持時(shí)間。

(4)突發(fā)傳輸。

(5)流控信號。

(6)三態(tài)驅(qū)動。例如,在傳輸中增加等待狀態(tài)可以適應(yīng)低速外設(shè),而使用流控信號實(shí)現(xiàn)的流模式傳輸以及多主傳輸則可以適應(yīng)對帶寬要求較高的外設(shè)。主端口的基本傳輸模式是所有Avalon主傳輸?shù)幕A(chǔ),諸如:Avalon總線基本從讀(SlaveRead)傳輸、Avalon總線基本從寫(SlaveWrite)傳輸、流水線傳輸模式及流控(FlowControl)傳輸。以下就常用的幾種Avalon總線傳輸?shù)臅r(shí)序加以說明。本書中只涉及Avalon總線模塊與從外設(shè)之間的傳輸。

1.Avalon總線基本從讀傳輸

Avalon總線基本從讀傳輸是所有Avalon從讀傳輸?shù)男盘枙r(shí)序都源自從端口的基本傳輸模式?;緩淖x傳輸(FundamentalSlaveReadTransfer)是在一個總線時(shí)鐘周期內(nèi),由Avalon總線從外設(shè)向Avalon總線模塊傳輸一個全數(shù)據(jù)總線寬度的數(shù)據(jù),基本從讀傳輸由Avalon總線模塊發(fā)起。

2.Avalon總線基本從寫傳輸

Avalon總線基本從寫傳輸是所有Avalon總線從寫傳輸?shù)幕A(chǔ),它不包括Avalon總線規(guī)范定義的所有傳輸特性。Avalon總線基本從寫傳輸由Avalon總線模塊發(fā)起,在一個總線時(shí)鐘周期內(nèi),向總線從外設(shè)傳輸一個單元的數(shù)據(jù)。如果數(shù)據(jù)總線寬度超過一個字節(jié),byteenable信號確定向那一個字節(jié)寫入數(shù)據(jù);如果沒有byteenalble信號,則表示向數(shù)據(jù)總線上的所有字節(jié)寫數(shù)據(jù)。

3.流水線傳輸模式

針對需要多個時(shí)鐘周期才能返回第一個數(shù)據(jù),之后每個周期都可以返回?cái)?shù)據(jù)的同步從外設(shè),使用Avalon流水線從讀傳輸模式可以增加數(shù)據(jù)傳輸?shù)膸挕?/p>

4.流控傳輸

Avalon流控信號提供了一種從外設(shè)控制數(shù)據(jù)傳輸?shù)哪J?,傳輸由從外設(shè)發(fā)起。當(dāng)從外設(shè)表明其數(shù)據(jù)有效或可以接收數(shù)據(jù)時(shí),傳輸便開始了。由于主端口不需要不斷輪詢從端口,因此流控信號簡化了邏輯設(shè)計(jì)。另外流控信號也降低了帶寬開銷,適合大量數(shù)據(jù)的傳輸。主、從端口必須都使用流控信號才可以。

在NiosⅡ下開發(fā)軟件和其它嵌入式系統(tǒng)有所不同,系統(tǒng)開發(fā)環(huán)境SOPCBuilder和

NiosⅡIDE已經(jīng)為開發(fā)者提供了生成硬件系統(tǒng)的工具以及底層的基本驅(qū)動,軟件開發(fā)者可以在與硬件無關(guān)的平臺(HardwareAbstractionLayer,HAL)上編制程序。這種分離了驅(qū)動和應(yīng)用軟件的系統(tǒng)開發(fā)方式為協(xié)同開發(fā)帶來可能,在很大程度上提高了系統(tǒng)開發(fā)的效率。目前NiosⅡ的開發(fā)都是在HAL的基礎(chǔ)上進(jìn)行的。6.4NoisⅡ應(yīng)用軟件開發(fā)

1.HAL工程結(jié)構(gòu)

HAL系統(tǒng)庫是一個輕量級的運(yùn)行環(huán)境,提供了簡單的和硬件通信的設(shè)備驅(qū)動程序。HAL給上層應(yīng)用程序提供了一系列API函數(shù),用來讀/寫底層硬件。HALAPI集成了ANSIC標(biāo)準(zhǔn)庫,允許用標(biāo)準(zhǔn)C函數(shù)(例如printf、fopen、fwrite等)去存取設(shè)備,這會使控制外設(shè)變得簡單。例如:需要在LCD上顯示一系列字符,只需要將LCD設(shè)置為標(biāo)準(zhǔn)輸出,調(diào)用printf()就可以實(shí)現(xiàn)字符顯示。這種基于HAL編寫和管理軟件工程的方式,可通過NiosⅡIDE來實(shí)現(xiàn)。

HAL類似于ARM系統(tǒng)中的BSP(Board-SupportPackage),提供了一個一致的設(shè)備存取界面。如圖6-7所示,最底層是SOPCBuilder定義的NiosⅡ硬件系統(tǒng),因此在NiosⅡIDE中使用system.h文件來描述。由于SOPCBuilder和NiosⅡIDE緊密地集成,在SOPCBuilder生成硬件系統(tǒng)以后,NiosⅡIDE能夠自動生成對應(yīng)的客戶HAL系統(tǒng)庫。更新硬件系統(tǒng)設(shè)置以后,NiosⅡIDE能自動更新HAL的驅(qū)動設(shè)置,system.h文件會被更新。在創(chuàng)建軟件項(xiàng)目的時(shí)候,NiosⅡIDE會自動生成并管理HAL系統(tǒng)庫。

圖6-7NiosⅡIDE工程結(jié)構(gòu)

HAL系統(tǒng)庫連接上層應(yīng)用程序和下層硬件系統(tǒng),可以通過設(shè)置來修改HAL配置,由NiosⅡIDE根據(jù)底層提供的

.ptf文件來創(chuàng)建。頂層是用戶創(chuàng)建的應(yīng)用程序代碼,在NiosⅡIDE中編譯并調(diào)試。依據(jù)這種互相獨(dú)立的工程結(jié)構(gòu),如果SOPCBuilder改變了底層硬件配置,由NiosⅡIDE管理的HAL系統(tǒng)庫也會升級相應(yīng)的硬件配置信息,應(yīng)用程序和硬件配置完全被HAL系統(tǒng)庫分離,即基于HAL的應(yīng)用程序總是和底層硬件配置同步。

HAL系統(tǒng)庫用system.h頭文件描述底層硬件信息,這個文件是整個HAL系統(tǒng)庫的基礎(chǔ),它對SOPCBuilder生成的NiosⅡ系統(tǒng)的硬件做了完全描述。簡單來說,system.h描述了當(dāng)前系統(tǒng)的硬件。它的詳細(xì)內(nèi)容包含以下幾方面信息:

(1)外設(shè)的硬件配置。

(2)基地址。

(3)中斷優(yōu)先級。

(4)外設(shè)的符號名。

2.HAL的使用

HAL提供字符模式設(shè)備和數(shù)據(jù)文件的文件系統(tǒng)的訪問操作。對文件系統(tǒng)進(jìn)行訪問時(shí),可以通過使用newlib庫提供的C標(biāo)準(zhǔn)I/O函數(shù)(例如fopen、fclose、fread等函數(shù)),或使用HAL系統(tǒng)庫提供的UNIX類型文件I/O函數(shù)。

HAL系統(tǒng)庫提供的UNIX類型文件I/O函數(shù)有:close()、fstat()、ioctl()、isatty()、lseek()、open()、read()、stat()、write()。文件子系統(tǒng)在HAL文件系統(tǒng)中作為掛載點(diǎn),如果訪問在掛載點(diǎn)下的文件,可直接訪問掛文件子系統(tǒng)。例如,如果ZIP子系統(tǒng)掛在/mount/zipfs0,則可用fopen()函數(shù)訪問zipfs文件子系統(tǒng)下的相關(guān)文件myfile,路徑為/mount/zipfs0/myfile。另外一種較簡單的方法是使用標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出及標(biāo)準(zhǔn)錯誤輸出。HAL系統(tǒng)庫可以在幕后管理stdin、stdout和stderr,這樣不用明確操作文件描述符就可以通過信道進(jìn)行字符的發(fā)送和接收。例如,用printf()的輸出作為標(biāo)準(zhǔn)輸出,用perror()作為標(biāo)準(zhǔn)錯誤輸出。對于字符模式設(shè)備,HAL將其視為節(jié)點(diǎn)。通常,system.h文件在SOPCBuilder的硬件器件名稱前加前綴/dev來定義設(shè)備節(jié)點(diǎn)。例如,訪問SOPCBuilder中的UART硬件uart1時(shí),在system.h文件中使用/dev/uart1表示。

下面我們設(shè)計(jì)一個最簡單的SOPC系統(tǒng),使用NiosⅡ處理器的通用輸入/輸出(PIO)去控制一個LED燈,通過這個例子我們可以了解整個SOPC系統(tǒng)的設(shè)計(jì)流程。

6.5SOPC系統(tǒng)設(shè)計(jì)實(shí)例6.5.1建立SOPC硬件系統(tǒng)

首先,為了定義系統(tǒng),我們打開QuartusⅡ軟件并進(jìn)行以下步驟:

(1)如圖6-8所示,為系統(tǒng)創(chuàng)建一個新的QuartusⅡ工程,我們把工程保存為“D:\sopc_builder_tutorial”,并對工程和頂層文件設(shè)計(jì)實(shí)體進(jìn)行命名。我們可以選擇不同的路徑或工程名字,但是必須注意SOPCBuilder軟件不允許文件名字里面有空格。例如,用sopcbuilderturorial作為目錄名就會導(dǎo)致出錯。在工程當(dāng)中,選擇EP2C35F672C6芯片,因?yàn)镈E2板上的FPGA采用此款芯片。

圖6-8創(chuàng)建一個工程

(2)選擇菜單命令Tools->SOPCBuilder,彈出一個如圖6-9所示的對話框。鍵入“nios_system”作為系統(tǒng)的名字,這將作為SOPCBuilder生成的系統(tǒng)名。選擇“Verilog”作為“TargetHDL”,系統(tǒng)的模塊數(shù)將被指定,點(diǎn)擊“OK”按鈕出現(xiàn)如圖6-10所示的窗口。

圖6-9創(chuàng)建一個新的NiosⅡ系統(tǒng)

圖6-10系統(tǒng)內(nèi)容標(biāo)簽窗口

(3)圖6-10展示了SOPCBuilder系統(tǒng)的列表內(nèi)容,其中包含系統(tǒng)需增加的元件和配置選擇的元件以滿足設(shè)計(jì)要求。窗口左側(cè)是可選的元件。在選擇元件之前,應(yīng)檢查圖像標(biāo)簽對象,下拉列表中有一些可供Altera板選擇的選項(xiàng)。沒有必要去選擇板,因?yàn)樵贒E2板的列表當(dāng)中不包括未指明的板。然后,檢查設(shè)備組的配置以確定已經(jīng)選擇了CycloneⅡ。

(4)

NiosⅡ處理器在時(shí)鐘的控制下工作,在本例中我們給DE2板提供50

MHz的時(shí)鐘,如圖6-10所示,在SOPCBuilder顯示器上指定名稱和時(shí)鐘信號的頻率。如果列表中沒有包括這些,則指定時(shí)鐘命名為clk,指定外部時(shí)鐘頻率為50.0

MHz。

(5)指定處理器。在圖6-10左邊的窗口中選擇“AvalonComponents->NiosⅡProcessor-AlteraCorporation”,然后點(diǎn)擊“Add”按鈕,彈出如圖6-11所示的窗口。選擇“NiosⅡ/e”,這個是最簡單的處理器,再點(diǎn)擊“Finish”按鈕回到圖6-10所示的窗口,顯示NiosⅡ處理器已經(jīng)被指定。在SOPCBuilder信息窗口(在屏幕的下方)里可能會出現(xiàn)一些警告和錯誤信息,這是因?yàn)橛幸恍﹨?shù)還未指定。先忽略這些信息,后面會提供一些必需的數(shù)據(jù)。通過觀察可以發(fā)現(xiàn)一個叫做NiosⅡMore“cpu_0”Settings的選項(xiàng)出現(xiàn)(見圖6-12),這個選項(xiàng)允許我們對處理器做更進(jìn)一步的配置,在這里我們沒有用到它。

圖6-11創(chuàng)建NiosⅡ處理器

圖6-12設(shè)定處理器

(6)指定芯片存儲器。選擇菜單命令A(yù)valonComponents->Memory->On-chipMemory(RAMorROM),然后點(diǎn)擊“Add”按鈕,在如圖6-13所示的窗口“On-chipMemoryCon?gurationWizard”中設(shè)置存儲器的寬度為“32”位,總的存儲容量為“4Kbytes”,不要改變其它的默認(rèn)設(shè)置。點(diǎn)擊“Finish”按鈕,回到如圖6-14所示的系統(tǒng)內(nèi)容標(biāo)簽窗口。

圖6-13定義onchip_memory

圖6-14包含onchip_memory

(7)指定輸入并行I/O接口。選擇菜單命令A(yù)valonComponents->Other->PIO(ParallelI/O),點(diǎn)擊“Add”按鈕,出現(xiàn)如圖6-15所示的窗口,指定端口寬度為“8”位并選擇端口的方向?yàn)檩斎搿|c(diǎn)擊“Finish”按鈕回到如圖6-16所示的窗口。

圖6-15定義一個并行輸入接口

圖6-16包含并行輸入接口

(8)用同樣的方法指定輸出I/O并行接口。選擇菜單命令A(yù)valonComponents->Other->PIO(ParallelI/O),點(diǎn)擊“Add”按鈕,再次出現(xiàn)PIOCon?gurationWizard窗口,指定端口寬度為“8”位,選擇端口方向?yàn)檩敵觥|c(diǎn)擊“Finish”按鈕回到“SystemContents”標(biāo)簽頁。

(9)如果希望FPGA和主機(jī)連接并使NiosⅡ系統(tǒng)和主機(jī)通信,安裝JTAGUART接口就可以實(shí)現(xiàn):選擇菜單命令A(yù)valonComponents->Communication->JTAGUART,點(diǎn)擊“Add”按鈕,打開如圖6-17所示的窗口,不要改變默認(rèn)設(shè)置。點(diǎn)擊“Finish”按鈕回到“SystemContents”標(biāo)簽頁。

圖6-17定義JTAGUART接口

(10)完整的系統(tǒng)如圖6-18所示。注意SOPCBuilder將自動地給各個元件命名。名字有必要描述得很仔細(xì)就能夠輕易地與設(shè)計(jì)目標(biāo)文件關(guān)聯(lián),而且名字也是可以改變的。如圖6-18所示,分別命名開關(guān)和LED作為并行輸入和輸出接口,這些名字可用在執(zhí)行系統(tǒng)當(dāng)中。擊pio_0的名字后選擇Rename,把名字改為Switches。同樣地,改變pio_1為LEDs。

圖6-18完整的系統(tǒng)

(11)各個元件的基數(shù)和終端地址都可以由用戶指定,也可以由SOPCBuilder自動指定。在這里我們選擇后者。選擇命令(用SOPCBuilder窗口上面的菜單)System->Auto-AssignBaseAddresses,出現(xiàn)如圖6-19所示的窗口。

圖6-19系統(tǒng)的最終配置

(12)指定所有執(zhí)行系統(tǒng)需要的元件后,就開始生成了,選擇“SystemGeneration”檢簽頁,出現(xiàn)如圖6-20所示的窗口。取消“Simulation,Createsimulatorproject?les”,在本例中不采用處理器硬件仿真,在SOPCBuilder窗口的底部點(diǎn)擊“Generate”按鈕。圖中顯示了生成過程產(chǎn)生的信息。當(dāng)出現(xiàn)“SUCCESS:SYSTEMGENERATIONCOMPLETED”這樣的信息時(shí),點(diǎn)擊“Exit”按鈕,回到QuartusⅡ主窗口。SOPCBuilder生成的系統(tǒng)包含一個系統(tǒng)說明文件(nios_system.ptf文件),該文件中保存了所有在SOPCBuilder中輸入的設(shè)置、選項(xiàng)和參數(shù)。

圖6-20生成SOPC系統(tǒng)如果想改變設(shè)計(jì)好的系統(tǒng)也相當(dāng)簡單,無論什么時(shí)候重新打開SOPCBuilder工具,任何在SOPCBuilder系統(tǒng)內(nèi)容列表中的元件都可以被選擇和刪除或者增加一個新的元件,然后重新生成系統(tǒng)。

(13)在生成硬件系統(tǒng)后,例化該模塊到QuartusⅡ的工程當(dāng)中,并指定FPGA管腳,編譯設(shè)計(jì)電路,下載并配置CycloneⅡ設(shè)備到DE2板上。

SOPCBuilder生成的Verilog模塊在工程目錄下的nios_system.v文件里(注意Verilog模塊的名字與第一次使用SOPCBuilder時(shí)指定的系統(tǒng)名字相同)。Verilog代碼相當(dāng)龐大,下面僅給出定義nios_system輸入/輸出信號模塊的部分代碼。

modulenios_system(

//globalsignal:

clk,

reset_n,

//the_LEDs

out_port_from_the_LEDs,

//the_Switches

in_port_to_the_Switches

);

output[7:0]

out_port_from_the_LEDs;

inputclk;

input[7:0]in_port_to_the_Switches;

input

reset_n;

8位輸入向量作為并行口開關(guān)的輸入叫做in_port_to_the_Switches,8位輸出向量叫做out_port_from_the_LEDs。時(shí)鐘和復(fù)位信號分別叫做clk和reset_n。注意復(fù)位信號是SOPCBuilder自動生成的,由于它是低電平有效,故命名為reset_n。例化NiosⅡ系統(tǒng)的上層Verilog模塊,該模塊命名為lights(這是在QuartusⅡ?yàn)轫攲釉O(shè)計(jì)實(shí)體時(shí)指定的名字)。指定FPGA管腳,注意模塊中輸入和輸出端口用的管腳名:50

MHz的時(shí)鐘對應(yīng)CLOCK_50,按鈕開關(guān)對應(yīng)KEY,撥動開關(guān)對應(yīng)SW,綠色LED燈對應(yīng)LEDG

(這些名字在DE2UserManual中已經(jīng)被指定)。將下列代碼輸入到一個名為light.v的文件中,并將該文件和所有SOPCBuilder生成的*.v文件添加到QuartusⅡ工程中。

//ImplementsasimpleNiosⅡsystemfortheDE2board.

//Inputs: SW7?0areparallelportinputstotheNiosⅡsystem

//CLOCK_50isthesystemclock

//KEY0istheactive-lowsystemreset

//Outputs:LEDG7?0areparallelportoutputsfromtheNiosⅡsystem

modulelights(SW,KEY,CLOCK_50,LEDG);

input [7:0]SW;

input [0:0]KEY;

input CLOCK_50;

output[7:0]LEDG;

//InstantiatetheNiosⅡsystemmodulegeneratedbytheSOPCBuilder:

//nios_system(clk,reset_n,out_port_from_the_LEDs,in_port_to_the_Switches)

nios_systemNiosII(CLOCK_50,KEY[0],LEDG,SW);

endmodule同時(shí),在DE2板上增加一些必要的管腳來分配到指定的工程當(dāng)中。可采用一個簡單的方法來設(shè)置管腳分配,當(dāng)我們使用的管腳名字和DE2用戶指南的名字相同時(shí),直接在DE2_tutorials\design_?les中導(dǎo)入DE2_pin_assignments.csv文件,該文件包含在伴隨DE2板的CD-ROM中,也可以在Altera公司的網(wǎng)頁上找到。在JTAG程序操作模式中,下載和配置CycloneⅡFPGA的步驟如下:

①依靠USB電纜插入U(xiǎn)SB-Blaster口使DE2板和主機(jī)連接。開啟DE2板的電源,確保RUN/PROG開關(guān)打在RUN的位置。

②選擇菜單命令Tools->Programmer后出現(xiàn)下載窗口。

③如果沒有選擇默認(rèn)模式,則選擇JTAG模式。同樣,如果USB-Blaster沒有選擇默認(rèn)模式,則點(diǎn)擊下載窗口中的HardwareSetup...按鈕并在出現(xiàn)的窗口中選擇USB-Blaster。④配置文件lights.sof在窗口中必須列出,如果該文件沒有列出,則點(diǎn)擊下載窗口中的AddFile并選擇它。

⑤點(diǎn)擊下載窗口中的Program/Con?gure下的box按鈕來選擇這次活動。

⑥點(diǎn)擊Start按鈕,開始配置FPGA。

(14)在SOPCBuilder中,點(diǎn)擊“RunNiosⅡIDE”按鈕,啟動NiosⅡIDE,如圖6-21所示。在NiosⅡIDE中,選擇菜單命令File->New->Project,開啟“NewProject”對話框。選擇“C/C++Application”,如圖6-22所示,然后點(diǎn)擊“Next”按鈕,進(jìn)入下一步。填寫項(xiàng)目名,在“SelectProjectTemplate”中選擇“HelloLED”,如圖6-23所示,然后點(diǎn)擊“Next”按鈕,進(jìn)入下一步。

圖6-21啟動NiosⅡIDE

圖6-22建立NiosⅡ應(yīng)用程序(一)

圖6-23建立NiosⅡ應(yīng)用程序(二)

(15)選擇“Createanewsystemlibrarynamed”,最后點(diǎn)擊“Finish”按鈕,即可創(chuàng)建應(yīng)用項(xiàng)目,如圖6-24所示。

圖6-24建立NiosⅡ應(yīng)用程序(三)6.5.2基于SOPC硬件系統(tǒng)運(yùn)行應(yīng)用程序

在FPGA設(shè)備上配置完需要的硬件后,就可以創(chuàng)建和執(zhí)行一個應(yīng)用程序來實(shí)現(xiàn)需要的操作??梢酝ㄟ^NiosⅡ匯編語言或者用像C之類的高級語言編寫需要的程序?qū)崿F(xiàn)。我們這里給出這兩種方法的例子。

1.NiosⅡIDE的啟動及編程

NiosⅡ的軟件開發(fā)環(huán)境為TheNiosⅡIntegratedDevelopmentEnvironment(IDE),即NiosⅡ集成開發(fā)環(huán)境,如圖6-25所示。NiosⅡIDE是在EclipseIDE的基礎(chǔ)上建立的,編譯器采用GNUC/C++的編譯器。在NiosⅡIDE中可以完成基于NiosⅡ處理器軟件的編輯、編譯、運(yùn)行管理、調(diào)試及下載等工作。

一般在設(shè)計(jì)完SOPC硬件后,可直接通過SOPCBuilder生成頁面來啟動NiosⅡIDE,也可從“開始”菜單中啟動NiosⅡIDE。啟動時(shí),NiosⅡIDE會提示選擇工作空間,工程文件將保存在工作空間中,如圖6-26所示。

圖6-25NiosⅡIDE啟動界面

圖6-26NiosⅡIDE進(jìn)入界面

SOPCBuilder生成的并行I/O口可以由接口的寄存器實(shí)現(xiàn),其設(shè)置取決于PIO的配置,系統(tǒng)中共有四個寄存器,其中一個稱為數(shù)據(jù)寄存器。若PIO配置作為一個輸入接口,數(shù)據(jù)寄存器讀出的數(shù)據(jù)是當(dāng)前出現(xiàn)在PIO輸入線上的數(shù)據(jù)。若PIO配置作為一個輸出接口,則數(shù)據(jù)寫入(通過NiosⅡ處理器)數(shù)據(jù)寄存器來驅(qū)動PIO輸出線。如果PIO配置成為一個雙向的接口,那么PIO輸入和輸出就共用同一條物理線。在這種情況下,設(shè)計(jì)應(yīng)增加一個數(shù)據(jù)方向寄存器,用來決定輸入/輸出的傳遞的方向。在本系統(tǒng)中,使用單向PIO時(shí)只需要一個數(shù)據(jù)寄存器。在PIO口的開關(guān)數(shù)據(jù)寄存器中,SOPCBuilder指定0x00001800作為它的地址,0x00001810作為在PIO數(shù)據(jù)寄存器中LEDs的地址。

可以通過打開SOPCBuilder窗口,如圖6-16所示,并右擊PIO的模塊名(開關(guān)或者LEDs)來獲得PIO接口的完整描述。然后,在pop-upbox窗口中選擇DataSheettoopenthedocumentPIOCorewithAvalonInterface,它將給出接口的完整描述,利用這些可以很容易實(shí)現(xiàn)與總線連接。下面給出了一個NiosⅡ匯編語言的程序,實(shí)現(xiàn)開關(guān)控制LED點(diǎn)亮/熄滅的簡單任務(wù)。程序?qū)蓚€PIO的數(shù)據(jù)寄存器的內(nèi)容加載到寄存器r2和r3,然后通過無限循環(huán)來完成動作

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論