新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于FPGA的片上可編程系統(tǒng)(SOPC)設(shè)計之:典型實例-基于NIOS II處理器的“Hello LED”程序設(shè)計

基于FPGA的片上可編程系統(tǒng)(SOPC)設(shè)計之:典型實例-基于NIOS II處理器的“Hello LED”程序設(shè)計

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

本文引用地址:http://2s4d.com/article/201706/348813.htm

8.4典型實例14:基于NIOSII處理器的“HelloLED”程序設(shè)計

8.4.1實例的內(nèi)容及目標(biāo)

1.實例的主要內(nèi)容

本節(jié)旨在通過給定的工程實例——“HelloLED”來熟悉Altera軟嵌入式系統(tǒng)的軟硬件設(shè)計方法。同時使用基于Altera的開發(fā)板將該實例進(jìn)行下載驗證,完成工程設(shè)計的硬件實現(xiàn)。本節(jié)主要講解下面一些知識點。

·QuartusIIBuilder使用方法。

·NIOSIIIDE軟件開發(fā)流程。

通過這些知識點,按照本節(jié)實例的實現(xiàn)過程,讀者可以迅速掌握Altera軟嵌入式軟硬件設(shè)計方法。

2.實例目標(biāo)

通過詳細(xì)的流程講解,讀者應(yīng)達(dá)到下面的目標(biāo)。

·熟悉QuartusIIbuilder使用方法。

·熟悉NIOSIIIDE軟件設(shè)計方法。

8.4.2實例詳解

本實例使用圖解的方式將整個流程一步一步展現(xiàn)給讀者,使讀者能夠輕松掌握開發(fā)的流程。

本實例重點在于熟悉使用QuartusⅡ和Builder來創(chuàng)建一個NiosⅡ嵌入式處理器系統(tǒng),并通過軟件編程實現(xiàn)對實驗板上面的LED燈的控制,具體實現(xiàn)過程如下。

(1)新建工程。

新建一個工程目錄“sopc_led”,在此目錄下建立一個名為“sopc_led”的QuartusII工程,并新建一個頂層圖,保存于工程中。

(2)SOPCBuilder定制NIOSII處理器。

用SOPCBuilder定制處理器及其外設(shè)。打開“Tools”/“SOPCBuilder”,如圖8.30所示。

圖8.30打開Tools--SOPCBuilder

指定系統(tǒng)名字,本例中我們輸入niosii_c。單擊“OK”按鈕進(jìn)入SOPC定制界面。

圖8.31SOPCBuilder界面

為“Target”選擇“UnspecifiedBoard”,為“Clock(MHz)”選擇時鐘頻率為50.0,為“TargetDeviceFamily”選擇目標(biāo)器件系列為Cyclone。

在SOPC定制界面的左邊,我們可以看到有很多功能模塊,用戶可以按照需要將這些模塊添加到所設(shè)計的系統(tǒng)中。

首先,我們需要一個CPU。選擇“Processor”/“AlteraCorporation”,彈出Altera對話框,我們選擇一個經(jīng)濟(jì)型的CPU核,即NiosII/e,如圖8.32所示。

圖8.32加入NIOSIICPU

單擊“JTAGDebugModule”標(biāo)簽頁,選擇第一級調(diào)試支持Level1:特點是占用邏輯資源少,編譯速度快,不包括緩存,如圖8.33所示。

圖8.33設(shè)置CPU調(diào)試模型

單擊“Finish”按鈕完成NiosIICPU的配置工作。項目中會增加一個NiosII處理器,名字為cpu_0,為了簡便起見,沒有將它改名。改名的方法是:單擊右鍵,選擇“Rename”,輸入名字后回車即可,如圖8.34。

圖8.34定制CPU完成圖

(3)SOPCBuilder定制JTAG串口。

在左側(cè)器件池中雙擊“JTAGUARTInterface”,使用默認(rèn)參數(shù)設(shè)置,如圖8.35所示。

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

(4)SOPCBuilder定制計時器。

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

圖8.35JTAGUART參數(shù)設(shè)置 圖8.36計時器設(shè)置

(5)SOPCBuilder定制外部Flash。

在左側(cè)器件池中雙擊“CompactFlashInterface”。在“Presets”中選自定義Custom,地址寬度21bits,帶寬16bits。由于Flash是通用設(shè)備,所以時序標(biāo)簽使用默認(rèn)設(shè)置。如圖8.37和8.38所示。

圖8.37Flash帶寬設(shè)參數(shù)置界面 圖8.38Flash時序參數(shù)設(shè)置界面

(6)SOPCBuilder定制外部SDRAM。

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

在“Presets”中選擇“micronMT48LC4M32B2-7chip”,其他的參數(shù)設(shè)置可以使用系統(tǒng)的默認(rèn)選項,如圖8.39所示。

(7)SOPCBuilder定制外部RAM總線。

添加外部RAM總線(AvalonTri-StateBridge)。軟件使用Avalon接口來連接片上元件和Avalon主從端口。

圖8.39SDRAM參數(shù)設(shè)置

在Nios開發(fā)板上,要實現(xiàn)Nios系統(tǒng)與FPGA片外存儲器通信,就必須在Avalon總線和連接外部存儲器的總線之間添加一個橋,這個橋就是Avalon三態(tài)總線,如圖8.40所示。

圖8.40添加外部RAM總線

(8)SOPCBuilder定制串行通信設(shè)備UART。

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

(9)SOPCBuilder定制LCD液晶模塊。

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

(10)SOPCBuilder定制systemid。

在SOPCBuilder中使用默認(rèn)定制的systemid。

(11)SOPCBuilder定制PIO。

添加4個LED和輸入設(shè)備按鍵開關(guān)PIO,這是一個標(biāo)準(zhǔn)SOPC一般所需要的設(shè)備。

(12)SOPCBuilder指定基地址和中斷編號。

首先修改Flash的基地址為0x00000000,之后在Flash上單擊右鍵鎖定基地址,如圖8.42所示。

圖8.41串行通信設(shè)備UART參數(shù)設(shè)置

圖8.42鎖定Flash基地址

然后,選擇“System”/“Auto-AssignBaseAddresses”,讓系統(tǒng)自動分配基地址,如圖8.43所示。

圖8.43自動分配系統(tǒng)設(shè)備地址

最后,選擇“System”/“Auto-AssignIRQs”,讓系統(tǒng)自動分配中斷,如圖8.44所示。

(13)SOPCBuilderNIOSIICPU其他設(shè)置。

單擊“NiosIIMore“cpu_0”Settings”選項卡,進(jìn)行處理器設(shè)定。在本實例中,將“ResetAddress”修改為“ext_flash”,“ExceptionAddress”修改為“sdram”,“BreakLocation”使用默認(rèn)值,如圖8.45所示。

圖8.45自動分配系統(tǒng)設(shè)備中斷編號

(14)生成軟嵌入式系統(tǒng)IP核。

單擊“SystemGeneration”選項卡,進(jìn)行最后的設(shè)定并生成系統(tǒng)。選中“HDLGeneratesystemmodulelogicinVerilog”。如果需要仿真,也選擇“SimulationCreateModelSim(tm)projectfiles”,然后單擊“Generate”按鈕,執(zhí)行系統(tǒng)生成的任務(wù)。

然后,耐心地等待系統(tǒng)的生成。一般沒有問題的話,可以看到系統(tǒng)提示“SUCCESS:SYSTEMGENERATIONCOMPLETED”。如果看到此信息,則說明系統(tǒng)被正確生成了。如果失敗,請返回并檢查、修改。

(15)在QuartusII工程中添加上述NIOS系統(tǒng)。

類似向QuartusII工程添加功能模塊一樣,將所定制的NiosII軟核CPU添加到本例工程中。雙擊工程頂層圖空白處,彈出“Symbol”對話框,在“Project”下面可以找到剛才建立的niosii_c模塊,如圖8.46所示。

圖8.46在QuartusII中添加IP核

單擊“OK”按鈕將其niosii_c添加到頂層圖中。

(16)在QuartusII工程中添加端口分配管腳編譯。

首先在QuartusII中將NIOS等端口添加至工程中,并為工程添加相應(yīng)的管腳約束,然后即可對工程進(jìn)行編譯。

(17)設(shè)計該工程軟件。

首先在AlteraSOPCBuilder中,點擊RunNiosIIIDE,啟動NiosIIIDE,如圖8.47所示。

圖8.47打開NIOSIIIDE軟件

接下來我們要設(shè)計該工程的軟件。運行NiosIDE,在NiosIIIDE中,選擇“File”/“New”/“Project”選項,開啟“NewProject”對話框,選擇“C/C++Application”,如圖8.48所示。

圖8.48新建軟件工程

然后單擊“Next”按鈕,進(jìn)入下一步,在模板中選擇“HelloLED”,如圖8.49所示。

單擊“SOPCBuilderSystem”右邊的“Browse”按鈕打開目錄對話框,從該工程目錄下找到“niosii_c.ptf”,因為NiosIIIDE必須從這個文件獲取該系統(tǒng)的相關(guān)信息。單擊“Finish”按鈕,即建立一個名為Hello_LED_0的模板。

打開項目中的文件:hello_led.c,根據(jù)需要進(jìn)行修改。在本實例程序中,“PIO_0_BASE”名稱中的“PIO_0”應(yīng)改為SOPCBuilder定義時的名稱,如圖8.49中的“Hello_LED_0”。

圖8.49采用設(shè)計模板

(18)編譯軟件。

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

如果無誤,可以看到以下信息:Buildcompleted。如果看到了這條提示,表示軟件編譯成功,可以看到程序占用空間等信息。

(19)下載驗證。

最后我們還要回到QuartusⅡ里面選擇“Tools”菜單里面的“Programmer”,下載整個配置到FPGA中去。

然后在NiosII環(huán)境中單擊“RunAsNiosIIHardware”按鈕將C程序下載到實驗板中。

本實例最終的硬件實現(xiàn)現(xiàn)象是led跑馬燈。

8.4.3小結(jié)

本節(jié)講解了一個完整的軟嵌入式設(shè)計流程。雖然此實例實現(xiàn)的功能比較簡單,但對于初學(xué)者來說,是一個不錯的入門實例。其中硬件設(shè)計部分(SoPCbuilder)包括開發(fā)板上所有設(shè)備,以后讀者可以在此硬件平臺上建立多個軟件運行。



關(guān)鍵詞: SOPC NiosII FPGA

評論


相關(guān)推薦

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

關(guān)閉