新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于FPGA的片上可編程系統(tǒng)(SOPC)設(shè)計之:基于NIOS II的開發(fā)設(shè)計流程

基于FPGA的片上可編程系統(tǒng)(SOPC)設(shè)計之:基于NIOS II的開發(fā)設(shè)計流程

作者: 時間:2017-06-05 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/201706/348814.htm

8.3基于NIOSII的開發(fā)設(shè)計流程

NIOSII使用NIOSIIIDE集成開發(fā)環(huán)境來完成整個軟件工程的編輯、編譯、調(diào)試和下載。在采用NIOS處理器設(shè)計嵌入式系統(tǒng)時,通常會按照以下步驟。

(1)分析系統(tǒng)需求說明,包括功能需求和性能約束等。

(2)根據(jù)分析結(jié)果,選擇片外外設(shè)或片內(nèi)IP(知識產(chǎn)權(quán)核)。除此以外,還要對選擇的IP和外設(shè)進(jìn)行初步性能評估,以保證能夠滿足系統(tǒng)需求。

(3)設(shè)定IP和系統(tǒng)參數(shù)。

(4)確定系統(tǒng)互聯(lián)邏輯,分配的引腳等。

(5)結(jié)合NIOS提供的軟件開發(fā)包進(jìn)行軟件開發(fā)。

8.3.1硬件開發(fā)流程

首先來看一下NIOS的硬件系統(tǒng)組成。

1.NIOS硬件組成

如圖8.2所示為典型NIOSII系統(tǒng)的硬件組成。

圖8.2NIOSII系統(tǒng)的硬件組成

如圖8.3所示為典型NIOSCPU的系統(tǒng)框圖。

圖8.3NIOSCPU系統(tǒng)框圖

我們可以將圖8.3的系統(tǒng)結(jié)構(gòu)劃分如下。

其中,片內(nèi)邏輯是指實現(xiàn)在內(nèi)部的電路設(shè)計,系統(tǒng)模塊指的是由Builder自動生成的設(shè)計。

Builder會根據(jù)用戶選擇的IP生成相應(yīng)的HDL描述文件(系統(tǒng)模塊文件),這些文件與用戶邏輯區(qū)域內(nèi)的設(shè)計描述文件一起由Quartus軟件綜合,然后下載到內(nèi),這樣就構(gòu)成了系統(tǒng)的硬件基礎(chǔ)。

系統(tǒng)模塊包含至少一個Avalon主外設(shè)和整個Avalon總線模塊。系統(tǒng)模塊通常還包含一些Avalon從外設(shè),例如UART、PIO和定時器等。Builder可以幫助設(shè)計者從IP庫尋找合適的IP并很快地集成一個系統(tǒng),它采用圖形用戶界面(GUI)顯示和組織IP模塊,能夠自動生成IP模塊互連邏輯以及生成用于綜合和模擬的文件,使得設(shè)計者可以輕松完成系統(tǒng)設(shè)計。

當(dāng)用戶使用SOPCBuilder創(chuàng)建一個新的系統(tǒng)時,SOPCBuilder會為該系統(tǒng)自動生成一個PTF文件,所有的設(shè)計信息都存儲在該P(yáng)TF文件里。當(dāng)使用SOPCBuilder重新打開一個已有的系統(tǒng)時,SOPCBuilder會從并且只從PTF文件中讀取系統(tǒng)具體設(shè)計信息。

用戶邏輯區(qū)內(nèi)可以包含用戶自定義的Avalon外設(shè),以及同系統(tǒng)模塊無關(guān)的其他的用戶自定義邏輯。硬件系統(tǒng)建立起來以后,用戶可以利用Altera公司提供的NIOSIIIDE工具結(jié)合SOPCBuilder生成的與硬件系統(tǒng)對應(yīng)的軟件開發(fā)包來開發(fā)用戶軟件。

下面介紹使用這些設(shè)計工具進(jìn)行NIOSII開發(fā)的流程。

2.NIOSII硬件開發(fā)流程

下面是NIOSII硬件開發(fā)流程的主要步驟。

·用SOPCBuilder來選擇合適的CPU、存儲器及外圍器件,比如片內(nèi)存儲器、PIO、UART和片外存儲器接口。

·使用QuartusII軟件選取具體的器件,并對SOPCBuilder生成HDL設(shè)計文件進(jìn)行布局布線;再根據(jù)開發(fā)板分配I/O管腳;編譯完后生成適合目標(biāo)器件的網(wǎng)表。

·使用下載電纜將配置文件下載到開發(fā)板上。當(dāng)校驗硬件或時鐘完畢后,就可以開始軟件開發(fā)工作了。

下面這個例子將要添加一個NIOSII系統(tǒng)得所有硬件部分,主要包括以下內(nèi)容。

(1)選擇CPU。

選擇NIOSII/e經(jīng)濟(jì)型處理器,其特點(diǎn)是占用邏輯資源少,編譯速度快,不包括緩存,如圖8.4所示。

圖8.4選擇NIOSII處理器

(2)選擇JTAG調(diào)試模塊。

選擇第一層JTAG硬件調(diào)試模塊,如圖8.5所示。

圖8.5選擇JTAG調(diào)試模塊

(3)設(shè)置JTAGUART接口。

它是NIOSII系統(tǒng)嵌入式處理器新添加的接口元件,通過內(nèi)嵌在AlteraFPGA內(nèi)部的聯(lián)合測試行動組(JTAG)電路,在PC主機(jī)和FPGA之間進(jìn)行串行字符流通信。特點(diǎn)是在運(yùn)行時在調(diào)試區(qū)輸入信息可以與FPGA進(jìn)行交互。

如圖8.6所示,使用默認(rèn)選項即可。

(4)設(shè)置定時器。

如圖8.7所示,定時器對于HAL系統(tǒng)庫中的器件驅(qū)動非常有用,比如JTAGUART驅(qū)動使用定時器來實現(xiàn)10s的暫停。選擇Intervaltimer在設(shè)置向?qū)е兄芷谶x擇1msec,預(yù)設(shè)置(PresetConfigurations)中選擇Full-featured。

圖8.6JTAGUART接口 圖8.7Avalon總線定時器

(5)添加外部Flash。

設(shè)置Flash地址寬度為20bits,帶寬為16bits,如圖8.8所示。

圖8.8添加外部Flash

圖8.8添加外部Flash(續(xù))

如果用戶程序和數(shù)據(jù)比較大,超出了EPCS1的容量,則程序和數(shù)據(jù)可以保存在普通Flash中。Flash的燒寫可以采用NIOSIIIDE的“FlashProgrammer”來燒寫,具體操作過程請參考/altera/kits/NIOS2/documents目錄下“ug_NIOS2_flash_programmer.pdf”。

(6)添加外部SDRAM。

通常的系統(tǒng)都需要用戶指定一個內(nèi)存空間,這個內(nèi)存是指RAM,可以是片上的,也可以是片外的SDRAM或SRAM等。如果用戶程序較大,超出了EP1C20所能定制的最大片上RAM容量,則也可以將程序放在SDRAM中運(yùn)行。

將SDRAM進(jìn)行如圖8.9所示的設(shè)置。

圖8.9添加外部SDRAM

(7)設(shè)置Avalon外部總線。

軟件使用Avalon接口來連接片上元件和Avalon主從端口的。在NIOS開發(fā)板上,要實現(xiàn)NIOS系統(tǒng)與FPGA片外存儲器通信,就必須在Avalon總線和連接外部存儲器的總線之間添加一個橋,這個橋就是Avalon三態(tài)總線。

在如圖8.10中選擇為Avalon外部總線添加寄存器。

(8)添加串行通信設(shè)備UART。

通用串行總線RS-232協(xié)議是我們最常用的通信協(xié)議,所以把它也添加到我們的系統(tǒng)里。注意選擇所需的數(shù)據(jù)幀格式,如圖8.11所示。

圖8.10設(shè)置Avalon外部總線 圖8.11添加串行通信設(shè)備UART

(9)添加LCD顯示。

使用標(biāo)準(zhǔn)16027字符型液晶顯示器。

(10)添加片上RAM。

如圖8.12所示,為SOPC系統(tǒng)添加片上RAM資源,并設(shè)置RAM參數(shù)。

(11)添加systemid。

(12)添加8個LED和輸入設(shè)備按鍵開關(guān)。

以上幾個步驟包含了一個標(biāo)準(zhǔn)SOPC一般所需要的設(shè)備,根據(jù)下面信息欄中的提示把RAM的數(shù)據(jù)線連接到總線上。接下來指定Flash地址為基地址,自動分配基地址及中斷。

最后完成的SOPC模塊如圖8.13所示。

接下來就可以在QuartusII中搭建完整的系統(tǒng),加入鎖相環(huán)、定義管腳等,并進(jìn)行編譯。這部分的內(nèi)容詳見本書其他章節(jié)的介紹。

需要注意的是由于Flash與SRAM共用一條數(shù)據(jù)總線,所以要把SRAM的片選關(guān)閉,如圖8.14所示。

至此,整體SOPC硬件系統(tǒng)搭建完畢,其原理圖如圖8.15所示。

這樣一個硬件系統(tǒng)規(guī)模已經(jīng)比較完整了,可以作一些設(shè)計,比如Flash讀寫、液晶顯示、串口傳輸?shù)裙δ堋0堰@些集合起來就可以用C++軟件編寫一個簡單的圖像處理算法。

下面介紹一下SOPC系統(tǒng)的軟件開發(fā)流程。

圖8.13建立的SOPC模塊

圖8.14關(guān)閉SRAM片選

圖8.15SOPC系統(tǒng)原理圖

8.3.2軟件開發(fā)流程

系統(tǒng)軟件設(shè)計具體工作如下。

(1)在用SOPCBuilder系統(tǒng)集成軟件進(jìn)行硬件設(shè)計同時,開始編寫C/C++軟件,比如算法或控制程序。用戶可以使用現(xiàn)成的軟件庫和開放的操作系統(tǒng)內(nèi)核加快開發(fā)進(jìn)程。

(2)在NIOSIIIDE中建立新的軟件工程時,IDE會根據(jù)SOPCBuilder對系統(tǒng)的硬件配置自動定制HAL(硬件抽象層)系統(tǒng)庫。這個系統(tǒng)庫可以為程序和底層硬件的通信提供接口驅(qū)動程序。

(3)使用NIOSIIIDE編譯調(diào)試軟件。

(4)在硬件邏輯已經(jīng)下載到開發(fā)板的基礎(chǔ)上將軟件下載到開發(fā)板上并在硬件上運(yùn)行。

下面主要介紹使用SOPCBuilder來為一個NIOSⅡ嵌入式處理器系統(tǒng)進(jìn)行軟件開發(fā)的過程,具體實現(xiàn)過程如下。

(1)進(jìn)行硬件開發(fā),如8.3.1小節(jié)所示。

(2)啟動NIOSIIIDE。

首先在AlterSOPCBuilder中,單擊RunNIOSIIIDE,啟動NIOSIIIDE,如圖8.16所示。

圖8.16NIOSIIIDE界面

(3)新建軟件工程。

選擇“File”菜單的“New”菜單的“Project”選項,開啟“NewProject”對話框,選擇“C/C++Application”,如圖8.17所示。

(4)選擇軟件模板。

在新建軟件工程對話框中單擊“Next”按鈕,為SOPC系統(tǒng)選擇軟件模板,如圖8.18所示。

圖8.17新建軟件工程 圖8.18選擇軟件模板

(5)獲取SOPC系統(tǒng)信息。

單擊“SOPCBuilderSystem”右邊的“Browse”按鈕打開目錄對話框,從該工程目錄下找到“NIOSII_c.ptf”,因為NIOSIIIDE必須從這個文件獲取該系統(tǒng)的相關(guān)信息。打開該文件后,界面顯示如圖8.19所示。

圖8.19新建的軟件工程

單擊“Finish”按鈕,即可建立一個名為Hello_LED_0的軟件模板工程。

(6)編輯軟件代碼。

(7)設(shè)置工程優(yōu)化級別。

編譯之前我們先對項目進(jìn)行一些設(shè)置,以使編譯器編譯出更高效、占用空間更小的代碼。右鍵單擊工程名稱,在彈出的菜單中選擇“Properties”選項,如圖8.20所示。

圖8.20設(shè)置工程屬性

單擊后打開工程屬性對話框,在“ConfigurationSettings”點(diǎn)擊“General”頁面,在“OptimizationLevel”(優(yōu)化級別)中選擇“Optimizesize(-Os)”,如圖8.21所示。

圖8.21工程優(yōu)化級別

(8)設(shè)置系統(tǒng)庫屬性。

右鍵單擊*_syslib[NIOSII_c]工程名稱,在彈出的菜單中選擇“Properties”選項,如圖8.22所示。

圖8.22設(shè)置系統(tǒng)庫屬性

在系統(tǒng)庫工程屬性對話框中,同樣在“ConfigurationSettings”點(diǎn)擊“General”頁面,在“OptimizationLevel”中選擇“Optimizesize(-Os)”,如圖8.23所示。

圖8.23系統(tǒng)庫工程優(yōu)化級別

然后,單擊該對話框左側(cè)的“SystemLibrary”打開“SystemLibrary”屬性頁面。將“Maxfiledescriptors:”欄改為4,清除“Cleanexit(flushbuffers)”和“Linkwithprofilinglibrary”,選上“Reduceddevicedrivers”和“SmallClibrary”,如圖8.24所示。

單擊“OK”按鈕,完成設(shè)置。以上設(shè)置主要目的是為了優(yōu)化程序,并減少程序占用內(nèi)存空間。

圖8.24設(shè)置系統(tǒng)庫其他屬性

(9)編譯。

右鍵單擊工程,在彈出的菜單中選擇“BuildProject”選項,開始進(jìn)行軟件工程編譯(為使編譯過程更加順利,此時最好關(guān)閉殺毒軟件和其他占用電腦資源較大的軟件)。

如果工程設(shè)計無誤,可以看到以下信息:“Buildcompleted”。如果看到了該條提示,表示軟件編譯成功,可以看到程序占用空間等信息。

(10)調(diào)試。

將ByteBlasterII下載線接到FPGA實驗平臺的JTAG口,接上5V電源。選擇“Run”菜單下的“DebugAs”選項,選擇“NIOSIIHardware”,如圖8.26所示。

圖8.26打開調(diào)試界面

選擇后,NIOSIIIDE會打開調(diào)試界面(DebugPerspective)。可以在程序中設(shè)置斷點(diǎn),運(yùn)行停止在斷點(diǎn)處(圖8.27的箭頭處),如圖8.27所示。

圖8.27調(diào)試至斷點(diǎn)

單擊繼續(xù)執(zhí)行(Resume)按鈕,程序就會繼續(xù)運(yùn)行。單擊暫停按鈕,程序暫停運(yùn)行。單擊停止按鈕,將退出運(yùn)行,如圖8.28所示。

圖8.28調(diào)試按鈕

如需對程序進(jìn)行修改,單擊停止按鈕退出運(yùn)行,然后單擊如圖8.29所示的按鈕回到C/C++編輯界面。

選擇后,即可返回程序編輯界面修改代碼,然后后再重復(fù)上述調(diào)試過程。

(11)編譯并下載。

編寫完軟件工程后,我們還要回到QuartusⅡ里面對整個系統(tǒng)進(jìn)行編譯。選擇“Processing”菜單下面的“StarCompilation”。編譯成功以后我們就可以選擇“Tools”菜單里面的“Programmer”,下載整個配置到FPGA中去了。

至此整個SOPC系統(tǒng)的軟硬件開發(fā)流程就已經(jīng)介紹完畢。讀者可以動手設(shè)計自己的SOPC系統(tǒng)了。



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉