<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/201706/348814.htm

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

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

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

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

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

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

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

          8.3.1硬件開發(fā)流程

          首先來(lái)看一下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)邏輯是指實(shí)現(xiàn)在內(nèi)部的電路設(shè)計(jì),系統(tǒng)模塊指的是由Builder自動(dòng)生成的設(shè)計(jì)。

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

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

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

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

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

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

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

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

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

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

          下面這個(gè)例子將要添加一個(gè)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)嵌入式處理器新添加的接口元件,通過(guò)內(nèi)嵌在AlteraFPGA內(nèi)部的聯(lián)合測(cè)試行動(dòng)組(JTAG)電路,在PC主機(jī)和FPGA之間進(jìn)行串行字符流通信。特點(diǎn)是在運(yùn)行時(shí)在調(diào)試區(qū)輸入信息可以與FPGA進(jìn)行交互。

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

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

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

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

          (5)添加外部Flash。

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

          圖8.8添加外部Flash

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

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

          (6)添加外部SDRAM。

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

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

          圖8.9添加外部SDRAM

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

          軟件使用Avalon接口來(lái)連接片上元件和Avalon主從端口的。在NIOS開發(fā)板上,要實(shí)現(xiàn)NIOS系統(tǒng)與FPGA片外存儲(chǔ)器通信,就必須在Avalon總線和連接外部存儲(chǔ)器的總線之間添加一個(gè)橋,這個(gè)橋就是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個(gè)LED和輸入設(shè)備按鍵開關(guān)。

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

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

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

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

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

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

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

          圖8.13建立的SOPC模塊

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

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

          8.3.2軟件開發(fā)流程

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

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

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

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

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

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

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

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

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

          圖8.16NIOSIIIDE界面

          (3)新建軟件工程。

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

          (4)選擇軟件模板。

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

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

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

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

          圖8.19新建的軟件工程

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

          (6)編輯軟件代碼。

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

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

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

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

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

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

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

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

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

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

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

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

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

          (9)編譯。

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

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

          (10)調(diào)試。

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

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

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

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

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

          圖8.28調(diào)試按鈕

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

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

          (11)編譯并下載。

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

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



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();