<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

基于FPGA的片上可編程系統(SOPC)設計之:基于NIOS II的開(kāi)發(fā)設計流程

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

本文引用地址:http://dyxdggzs.com/article/201706/348814.htm

8.3基于NIOSII的開(kāi)發(fā)設計流程

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

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

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

(3)設定IP和系統參數。

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

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

8.3.1硬件開(kāi)發(fā)流程

首先來(lái)看一下NIOS的硬件系統組成。

1.NIOS硬件組成

如圖8.2所示為典型NIOSII系統的硬件組成。

圖8.2NIOSII系統的硬件組成

如圖8.3所示為典型NIOSCPU的系統框圖。

圖8.3NIOSCPU系統框圖

我們可以將圖8.3的系統結構劃分如下。

其中,片內邏輯是指實(shí)現在內部的電路設計,系統模塊指的是由Builder自動(dòng)生成的設計。

Builder會(huì )根據用戶(hù)選擇的IP生成相應的HDL描述文件(系統模塊文件),這些文件與用戶(hù)邏輯區域內的設計描述文件一起由Quartus軟件綜合,然后下載到內,這樣就構成了系統的硬件基礎。

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

當用戶(hù)使用SOPCBuilder創(chuàng )建一個(gè)新的系統時(shí),SOPCBuilder會(huì )為該系統自動(dòng)生成一個(gè)PTF文件,所有的設計信息都存儲在該PTF文件里。當使用SOPCBuilder重新打開(kāi)一個(gè)已有的系統時(shí),SOPCBuilder會(huì )從并且只從PTF文件中讀取系統具體設計信息。

用戶(hù)邏輯區內可以包含用戶(hù)自定義的Avalon外設,以及同系統模塊無(wú)關(guān)的其他的用戶(hù)自定義邏輯。硬件系統建立起來(lái)以后,用戶(hù)可以利用Altera公司提供的NIOSIIIDE工具結合SOPCBuilder生成的與硬件系統對應的軟件開(kāi)發(fā)包來(lái)開(kāi)發(fā)用戶(hù)軟件。

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

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

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

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

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

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

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

(1)選擇CPU。

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

圖8.4選擇NIOSII處理器

(2)選擇JTAG調試模塊。

選擇第一層JTAG硬件調試模塊,如圖8.5所示。

圖8.5選擇JTAG調試模塊

(3)設置JTAGUART接口。

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

如圖8.6所示,使用默認選項即可。

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

如圖8.7所示,定時(shí)器對于HAL系統庫中的器件驅動(dòng)非常有用,比如JTAGUART驅動(dòng)使用定時(shí)器來(lái)實(shí)現10s的暫停。選擇Intervaltimer在設置向導中周期選擇1msec,預設置(PresetConfigurations)中選擇Full-featured。

圖8.6JTAGUART接口 圖8.7Avalon總線(xiàn)定時(shí)器

(5)添加外部Flash。

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

圖8.8添加外部Flash

圖8.8添加外部Flash(續)

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

(6)添加外部SDRAM。

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

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

圖8.9添加外部SDRAM

(7)設置Avalon外部總線(xiàn)。

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

在如圖8.10中選擇為Avalon外部總線(xiàn)添加寄存器。

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

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

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

(9)添加LCD顯示。

使用標準16027字符型液晶顯示器。

(10)添加片上RAM。

如圖8.12所示,為SOPC系統添加片上RAM資源,并設置RAM參數。

(11)添加systemid。

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

以上幾個(gè)步驟包含了一個(gè)標準SOPC一般所需要的設備,根據下面信息欄中的提示把RAM的數據線(xiàn)連接到總線(xiàn)上。接下來(lái)指定Flash地址為基地址,自動(dòng)分配基地址及中斷。

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

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

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

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

這樣一個(gè)硬件系統規模已經(jīng)比較完整了,可以作一些設計,比如Flash讀寫(xiě)、液晶顯示、串口傳輸等功能。把這些集合起來(lái)就可以用C++軟件編寫(xiě)一個(gè)簡(jiǎn)單的圖像處理算法。

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

圖8.13建立的SOPC模塊

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

圖8.15SOPC系統原理圖

8.3.2軟件開(kāi)發(fā)流程

系統軟件設計具體工作如下。

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

(2)在NIOSIIIDE中建立新的軟件工程時(shí),IDE會(huì )根據SOPCBuilder對系統的硬件配置自動(dòng)定制HAL(硬件抽象層)系統庫。這個(gè)系統庫可以為程序和底層硬件的通信提供接口驅動(dòng)程序。

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

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

下面主要介紹使用SOPCBuilder來(lái)為一個(gè)NIOSⅡ嵌入式處理器系統進(jìn)行軟件開(kāi)發(fā)的過(guò)程,具體實(shí)現過(guò)程如下。

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

(2)啟動(dòng)NIOSIIIDE。

首先在A(yíng)lterSOPCBuilder中,單擊RunNIOSIIIDE,啟動(dòng)NIOSIIIDE,如圖8.16所示。

圖8.16NIOSIIIDE界面

(3)新建軟件工程。

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

(4)選擇軟件模板。

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

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

(5)獲取SOPC系統信息。

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

圖8.19新建的軟件工程

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

(6)編輯軟件代碼。

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

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

圖8.20設置工程屬性

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

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

(8)設置系統庫屬性。

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

圖8.22設置系統庫屬性

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

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

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

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

圖8.24設置系統庫其他屬性

(9)編譯。

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

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

(10)調試。

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

圖8.26打開(kāi)調試界面

選擇后,NIOSIIIDE會(huì )打開(kāi)調試界面(DebugPerspective)??梢栽诔绦蛑性O置斷點(diǎn),運行停止在斷點(diǎn)處(圖8.27的箭頭處),如圖8.27所示。

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

單擊繼續執行(Resume)按鈕,程序就會(huì )繼續運行。單擊暫停按鈕,程序暫停運行。單擊停止按鈕,將退出運行,如圖8.28所示。

圖8.28調試按鈕

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

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

(11)編譯并下載。

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

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



關(guān)鍵詞: 片上可編程系統 SOPC FPGA NiosII

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>