FPGA 之 SOPC 系列(二)SOPC开发流程及开发平台简介
今天給大俠帶來今天帶來FPGA 之 SOPC 系列第二篇,SOPC開發(fā)流程及開發(fā)平臺(tái)簡(jiǎn)介相關(guān)內(nèi)容,希望對(duì)各位大俠的學(xué)習(xí)有參考價(jià)值,話不多說,上貨。
本篇首先詳細(xì)介紹了SOPC開發(fā)的基本流程,然后通過實(shí)際操作的視頻,生動(dòng)詳細(xì)的講述了一個(gè)簡(jiǎn)單的SOPC系統(tǒng)的設(shè)計(jì)過程,包括使用Quartus II、SOPC Builder定制Nios II系統(tǒng)以及利用Nios II IDE進(jìn)行應(yīng)用程序開發(fā)。本篇力求以實(shí)例的途徑讓讀者以最快的方式了解SOPC開發(fā)以及各軟件的使用,從而激起讀者對(duì)SOPC的興趣。
以下為本篇的目錄簡(jiǎn)介:
- 2.1 SOPC開發(fā)流程
- 2.2 簡(jiǎn)單SOPC實(shí)例開發(fā)任務(wù)及步驟
- 2.3 分析系統(tǒng)需求
- 2.4 使用Quartus II建立工程
- 2.5 使用SOPC Builder創(chuàng)建Nios II系統(tǒng)
- 2.6 集成Nios II系統(tǒng)到Quartus II頂層模塊
- 2.7 設(shè)置編譯選項(xiàng)并編譯硬件系統(tǒng)
- 2.8 使用Nios II IDE建立用戶程序
- 2.9 下載硬件設(shè)計(jì)到目標(biāo)FPGA
- 2.10 調(diào)試/運(yùn)行程序
2.1 SOPC開發(fā)流程
SOPC設(shè)計(jì)包括以Nios II軟核處理器為核心的嵌入式系統(tǒng)的硬件配置、硬件設(shè)計(jì)、硬件仿真、IDE環(huán)境的軟件設(shè)計(jì)、軟件調(diào)試等。
SOPC的開發(fā)流程通常包括2個(gè)方面:基于Quartus II、SOPC Builder的硬件設(shè)計(jì)、基于NiosII IDE的軟件設(shè)計(jì)。對(duì)于比較簡(jiǎn)單的NiosII系統(tǒng),一個(gè)人便可執(zhí)行所有設(shè)計(jì)。對(duì)于比較復(fù)雜的系統(tǒng),硬件和軟件設(shè)計(jì)可以分開進(jìn)行。
SOPC的開發(fā)過程中要使用到Quartus II、SOPC Builder以及Nios II IDE,三者之間關(guān)系如下所示:
- SOPC Builder:
它是Nios II軟核處理器的開發(fā)包,用于實(shí)現(xiàn)Nios II系統(tǒng)配置、生成以及與Nios II系統(tǒng)相關(guān)的監(jiān)控和軟件調(diào)試平臺(tái)的生成; - Quartus II:
用于完成Nios II系統(tǒng)的分析綜合、硬件優(yōu)化、適配、配置文件編程下載以及硬件系統(tǒng)測(cè)試等; - Nios II IDE:
用于完成基于Nios II系統(tǒng)的軟件開發(fā)和調(diào)試,并可借助其自帶的Flash編程器完成對(duì)Flash以及EPCS的編程操作。
硬件開發(fā)(1):
- 用SOPC Builder軟件從NiosII處理器內(nèi)核和NiosII開發(fā)套件提供的外設(shè)列表中選取合適的CPU、存儲(chǔ)器以及各外圍器件,并定制和配置它們的功能;
- 分配外設(shè)地址及中斷號(hào);
- 設(shè)定復(fù)位地址;
- 用戶也可以添加用戶自身定制指令邏輯到NiosII內(nèi)核以加速CPU性能;
- 添加用戶自己設(shè)計(jì)的IP模塊。
硬件開發(fā)(2):
- 將生成的Nios II系統(tǒng)集成到之前建立的Quartus II工程;
- Quartus II工程中可加入Nios II系統(tǒng)以外的邏輯。其可以是自身定制的硬件模塊,也可以是從Altera或第3方IP供應(yīng)商中得到的其它現(xiàn)成的知識(shí)產(chǎn)權(quán)設(shè)計(jì)模塊。
- Quartus II軟件用來選取具體的Altera FPGA器件型號(hào),然后為Nios II系統(tǒng)上的各I/O口分配管腳。
硬件開發(fā)(3):
- 編譯Quartus II工程,對(duì)HDL文件進(jìn)行布局布線,從HDL源文件綜合生成一個(gè)適合目標(biāo)器件網(wǎng)表,生成FPGA配置文件(.sof);
- 用下載電纜(如 ByteBlaster II),將配置文件下載到目標(biāo)板上。硬件校驗(yàn)完成后,可將新的硬件配置文件下載到目標(biāo)板上的非易失存儲(chǔ)器(如EPCS器件)。
軟件開發(fā):
軟件開發(fā)使用Nios II IDE,它是一個(gè)基于Eclipse IDE架構(gòu)的集成開發(fā)環(huán)境,它包括:
- GNU開發(fā)工具(標(biāo)準(zhǔn)GCC編譯器,連接器,匯編器和makefile工具等);
- 基于GDB的調(diào)試器,包括軟件仿真和硬件調(diào)試;
- 提供用戶一個(gè)硬件抽象層HAL;
- 提供嵌入式操作系統(tǒng)MicroC/OS-II和LwTCP/IP協(xié)議棧的支持;
- 提供幫助用戶快速入門的軟件模板;
- 提供Flash下載支持(Flash Progrmmer 和QuartusII Programmer)。
軟件開發(fā)(1):
- 使用SOPC Builder生成系統(tǒng)后,可以直接使用Nios II IDE開始設(shè)計(jì)C/C++應(yīng)用程序代碼。Altera提供外設(shè)驅(qū)動(dòng)程序和硬件抽象層(HAL),使用戶能夠快速編寫與低級(jí)硬件細(xì)節(jié)無關(guān)的Nios II程序;
- 除了應(yīng)用代碼,用戶還可以在Nios II IDE 工程中設(shè)計(jì)和重新使用定制庫(kù)。
軟件開發(fā)(2):
- 即使在沒有軟件開發(fā)的目標(biāo)板的情況下,也可以經(jīng)過編譯、連接后通過Nios II指令仿真器(ISS)運(yùn)行和調(diào)試代碼。
- 一旦有一個(gè)目標(biāo)板,用戶就可以使用下載電纜下載軟件到目標(biāo)板進(jìn)行調(diào)試/運(yùn)行。
SOPC基本開發(fā)流程簡(jiǎn)介:
從以上“硬件開發(fā)”與“軟件開發(fā)”兩部分介紹中,在我們的腦海里一定已經(jīng)形成了一個(gè)大致的開發(fā)流程,下面我們仔細(xì)的對(duì)其進(jìn)行梳理和理解。見SOPC開發(fā)流程簡(jiǎn)圖。
開發(fā)流程簡(jiǎn)圖解析:
- 1、分析系統(tǒng)需求:
如果需要,用戶可以定制指令和外設(shè)邏輯。 - 2、建立Quartus II工程,建立頂層圖*.bdf:
每個(gè)開發(fā)過程開始時(shí)都應(yīng)建立一個(gè)工程,Quartus II是以工程的方式對(duì)設(shè)計(jì)過程進(jìn)行管理。在工程中建立頂層模塊文件.bdf相當(dāng)于傳統(tǒng)電路設(shè)計(jì)中的電路板(PCB)。 - 3、打開SOPC Builder,定義和生成系統(tǒng):
在SOPC Builder中添加需要的功能模塊(Nios II及其標(biāo)準(zhǔn)外設(shè)模塊),完成后生成一個(gè)系統(tǒng)模塊。 - 4、定制指令&定制外設(shè)邏輯:
如果需要,用戶可以定制指令和外設(shè)邏輯。 - 5、Altera的LPM模塊:
在Quartus II軟件中包含了大量的Altera公司提供的LPM功能模塊,相當(dāng)于傳統(tǒng)設(shè)計(jì)中除處理器以外的邏輯芯片(如74系列); - 6、自定義的功能模塊:
當(dāng)設(shè)計(jì)中現(xiàn)有模塊不能滿足設(shè)計(jì)要求時(shí),可設(shè)計(jì)自己的功能模塊。并在頂層模塊中使用; - 7、集成SOPC生成的系統(tǒng)到Quartus II 工程:
在頂層模塊中,分別將SOPC Builder生成的系統(tǒng)模塊、LPM功能模塊以及用戶自定義功能模塊添加到頂層模塊中; - 8、連接各功能模塊:
然后將各個(gè)功能模塊用連線連起來組成系統(tǒng)功能原理圖。 - 9、選擇FPGA型號(hào)并進(jìn)行管腳分配:
為系統(tǒng)功能原理圖選擇芯片載體并為各個(gè)輸入輸出信號(hào)分配芯片的管腳; - 10、進(jìn)行編譯選項(xiàng)設(shè)置:
設(shè)置編譯選項(xiàng),從而讓編譯器按照用戶設(shè)定來進(jìn)行編譯; - 11、編譯硬件系統(tǒng)生成配置文件sof:
編譯系統(tǒng)生成硬件系統(tǒng)的配置文件*.sof和*.pof。編譯系統(tǒng)是一個(gè)非常復(fù)雜的過程,包括優(yōu)化邏輯的組合、綜合邏輯、適配FPGA、布線以及時(shí)序分析等步驟。 - 12、下載配置文件到FPGA器件
將配置文件.sof下載到FPGA,將可執(zhí)行文件.elf下載到RAM。 - 13、使用IDE編程工具燒寫配置文件和軟件代碼
最后利用IDE的編程工具將配置文件燒寫到FPGA的配置芯片或Flash,將可執(zhí)行文件*.elf編程到Flash中。 - 14、調(diào)試好硬件和軟件
直到硬件和軟件設(shè)計(jì)都達(dá)到設(shè)計(jì)要求。 - 15、使用Nios II IDE開發(fā)軟件:
軟件開發(fā)也可以在SOPC Builder 生成系統(tǒng)模塊后立即進(jìn)行,與傳統(tǒng)軟件開發(fā)類似,唯一不同在于系統(tǒng)是自己定制的,所受局限小。 - 16、設(shè)置軟件運(yùn)行硬件環(huán)境屬性
設(shè)置好軟件運(yùn)行的硬件環(huán)境屬性后,便可進(jìn)行編譯、鏈接和調(diào)試、運(yùn)行程序。 - 17、編譯軟件生成可執(zhí)行文件elf
對(duì)用戶程序進(jìn)行編譯,生成可執(zhí)行文件*.elf。 - 18、在IDE中使用ISS運(yùn)行/調(diào)試軟件
接下來在IDE的指令集仿真器(ISS)上仿真軟件和運(yùn)行/調(diào)試軟件。 - 19、在目標(biāo)板上運(yùn)行/調(diào)試軟件
在目標(biāo)板上反復(fù)調(diào)試軟件。
2.2 簡(jiǎn)單SOPC實(shí)例開發(fā)任務(wù)及步驟
通過實(shí)際操作來體驗(yàn)一個(gè)簡(jiǎn)單的SOPC開發(fā)的整個(gè)過程。建立一個(gè)基于Nios II處理器的系統(tǒng)來控制一個(gè)LED燈閃爍。具體的操作步驟如下:(具體代碼略)
- 1、分析系統(tǒng)需求。
- 2、啟動(dòng)QuartusII軟件和新建實(shí)例設(shè)計(jì)工程。
- 3、啟動(dòng)新的SOPC Builder系統(tǒng)。
- 4、在SOPC Builder中定義并生成系統(tǒng)。
- 5、集成SOPC Builder系統(tǒng)到QuartusII工程。
- 6、選擇芯片型號(hào)并進(jìn)行管腳分配。
- 7、設(shè)置編譯選項(xiàng)并編譯硬件系統(tǒng)。
- 8、下載硬件設(shè)計(jì)到目標(biāo)FPGA。
- 9、使用NiosII IDE開發(fā)用戶程序。
- 10、調(diào)試用戶程序。
- 11、運(yùn)行程序。
2.3 分析系統(tǒng)需求
每一個(gè)SOPC系統(tǒng)開發(fā)之前,都應(yīng)該仔細(xì)分析系統(tǒng)需求,例如:
每一個(gè)SOPC系統(tǒng)開發(fā)之前,都應(yīng)該仔細(xì)分析系統(tǒng)需求,基于這些問題,用戶可確定具體的系統(tǒng)要求,例如:
- 使用哪種NiosII處理器內(nèi)核:比較小的還是比較快的?
- 設(shè)計(jì)要求什么外設(shè)及其數(shù)量?
- 功耗要求?
- 使用哪種實(shí)時(shí)操作系統(tǒng)(RTOS)?
- 硬件加速邏輯在哪些方面可大大提高系統(tǒng)性能?例如:增加一個(gè)DMA外設(shè)能釋放CPU在進(jìn)行數(shù)據(jù)拷貝時(shí)所占用的資源?定制的指令能取代DSP算法嗎?
本篇實(shí)例的開發(fā)任務(wù)是:
- 展示可用于控制LED閃爍的簡(jiǎn)單NiosII處理器系統(tǒng)。
- 利用最通用和有效的方法來建立實(shí)際的定制NiosII系統(tǒng)。
- 整個(gè)系統(tǒng)僅使用片內(nèi)資源,且不依賴于目標(biāo)板。
分析任務(wù)可以知道FPGA內(nèi)硬件系統(tǒng)組成應(yīng)包含:
- NiosII/e處理器核;
- 4kBytes片內(nèi)RAM存儲(chǔ)器(Onchip_RAM)用于儲(chǔ)程序代碼以及程序運(yùn)行空間,
- 變量存儲(chǔ)(R/W數(shù)據(jù))、Heap、stack;
- 1位輸出I/O (PIO)管腳來控制LED;
控制LED閃爍的系統(tǒng)框圖:
計(jì)算機(jī)硬件要求:
- Altera Quartus II 9.0或更高的軟件版本
- Nios II 9.0或更高版本
2.4 使用Quartus II建立工程
新建一個(gè)工程目錄“SOPC_LED”,在此目錄下建立一個(gè)名為”sopc_led”的QUARTUS工程,并新建一個(gè)頂層圖,保存于工程中。
2.5 使用SOPC Builder創(chuàng)建Nios II系統(tǒng)
1、用SOPC BUILDER 定制 NIOS II處理器和外設(shè)。
用主窗口抬頭下的命令:tools> SOPC Builder ...等待約半分鐘后(具體時(shí)間隨計(jì)算機(jī)性能而定),隨即彈出一個(gè)對(duì)話的子窗口:
等待用戶的輸入,在窗口中鍵入用戶希望建立的系統(tǒng)名,NIOSII_C,并且選擇Verilog,再點(diǎn)擊OK按鈕。
2、隨即激活如圖所示的Altera SoPC Builder 人機(jī)對(duì)話窗口,其中我們可以看到三個(gè)子窗口。
1)左上部子窗口的目錄樹列出了許多可以供選擇的IP,從NiosII 處理器核到各種外圍IP器件,應(yīng)有盡有;
2)右上部子窗口可以配置所用的FPGA器件類型和時(shí)鐘頻率設(shè)置。并且可以顯示配置后確認(rèn)的部件和連接等信息;
3)下部子窗口顯示配置后出現(xiàn)的反饋信息,告訴用戶設(shè)計(jì)過程中可能存在問題的地方。
3、將NiosII處理器核添加到系統(tǒng)。
選擇TARGET,本例選擇UnspecifiedBoard;選擇時(shí)鐘頻率,Clock(MHZ):本例選50;選擇目標(biāo)器件,TargetDeviceFamily:本例選Cyclone。
完成后,點(diǎn)擊左上部子窗口的目錄樹上有關(guān)組件,再點(diǎn)擊該子窗口下面標(biāo)記為Add..的按鈕,隨即可以在右上部子窗口的Module Name列觀察到系統(tǒng)中添加了相應(yīng)的部件。如果我們點(diǎn)擊目錄樹下的Nios II Processor,再點(diǎn)擊下面標(biāo)記為Add..的按鈕,隨即出現(xiàn)如圖所示的NiosII核配置窗口,可讓用戶選用不同規(guī)格的NiosII核。我們選擇了適合規(guī)格的處理器核NIOSII/E。
注:下面的Reset Vector是復(fù)位后啟動(dòng)時(shí)的Memory類型和偏移量, Exception Vector是異常情況時(shí)的Memory類型和偏移量。現(xiàn)在還不能配置,需要SDRAM和FLASH設(shè)置好以后才能修改這里,這兩個(gè)地方很重要。這里暫時(shí)不加,等添加了MEMERY在返回修改。
- 部件之間的連接的確定:
從上圖所示的窗口中,我們可以看到NiosII 處理器已經(jīng)生成,有幾條黑色的弧線表示該處理器部件之間的連接。將光標(biāo)移動(dòng)至弧線交接處可以見到實(shí)心的黑色接點(diǎn),表示部件之間的線路是連接的,若是空心的黑色接點(diǎn),則表明這兩條線沒有連接。設(shè)計(jì)者可以點(diǎn)擊空心的接點(diǎn)將其連接,或者點(diǎn)擊實(shí)心的接點(diǎn)將其斷開。至于應(yīng)該斷開還是連接,與系統(tǒng)的構(gòu)造有關(guān)。設(shè)計(jì)者必須清楚自己系統(tǒng)的構(gòu)造,才能設(shè)計(jì)出正確的以Nios II處理器核為中心的系統(tǒng)。
可以看到在圖所示的窗口底部有五個(gè)按鈕,其中有一個(gè)是虛的,表示不能執(zhí)行。標(biāo)記為Generate的按鈕雖然是實(shí)的,但系統(tǒng)尚未配置完畢,還不能生成可以運(yùn)行的系統(tǒng)。所以必須根據(jù)數(shù)字系統(tǒng)的要求,把需要的部件逐個(gè)地添加上去,直到可以組成一個(gè)完整的系統(tǒng)為止。這項(xiàng)工作類似于在印刷線路板上安排各個(gè)部件,并連接線路。
4、穿插一下NIOS啟動(dòng)過程。
意:這里如果是選擇NIOSii/f則將Data Cache處選擇為None,也就是關(guān)閉Data Cache,那Data Cache到底是什么呢,簡(jiǎn)單的說,Data Cache是像電腦的一級(jí)緩存二級(jí)緩存一樣的東東,就是為了提高系統(tǒng)速度的。可是有個(gè)這個(gè)高速緩沖區(qū)后,我們的代碼執(zhí)行時(shí)間卻發(fā)得不可確定了,降低了程序的實(shí)時(shí)性。我們發(fā)出的數(shù)據(jù),放到了高速緩沖區(qū)里而沒有及時(shí)的去執(zhí)行才導(dǎo)致代碼不執(zhí)行,沒有顯示效果。如果以后發(fā)現(xiàn)寄存器方式操作PIO不好用時(shí),請(qǐng)關(guān)閉這個(gè)。
點(diǎn)擊該窗口下部標(biāo)記為Next的按鈕,隨即進(jìn)入第3個(gè)配置窗口。用同樣方法進(jìn)入第4、第5、第6個(gè)配置窗口(均使用缺省配置)。設(shè)置JTAG Debug Module,即JTAG調(diào)試時(shí)所用到的功能模塊。功能越多,需要的資源越多,這里,我們選擇Level 1即可,不需要過多其他的功能。在第6個(gè)配置窗口下部點(diǎn)擊標(biāo)記為Finish.. 的按鈕,結(jié)束處理器核的配置。
5、把內(nèi)存部件添加到系統(tǒng)。
下面講解如何把片上ROM和RAM添加到最小系統(tǒng)中去,在圖所示的Altera SoPC Builder主窗口左邊的 System Contents 子窗中列出了許多可以供選擇的IP,從NiosII 處理器核到各種外圍IP器件,幾乎應(yīng)有盡有,但必須注意許多高級(jí)的IP是需要付費(fèi)后才能從網(wǎng)上下載的。用鼠標(biāo)拉動(dòng) System Contents 子窗的滑標(biāo),瀏覽目錄樹至 Memories and Memory Controllers分支,將其展開,選擇On-Chip,將其展開。雙擊On-chip Memory (RAM or ROM),隨即出現(xiàn)如圖所示窗口。
MEMORY TYPE 選擇RAM;DATA WIDTH選擇32bits,total memory size可以選擇4kbytes,將ROM和RAM部件配置完畢后,可以在Altera SoPC Builder主窗口右側(cè)的module Name 列找到新添加的模塊。
同樣的方法可以在系統(tǒng)中添加一個(gè)4位的PIO同時(shí)驅(qū)動(dòng)4個(gè)發(fā)光二極管。雙擊PIO(在PARALLEL I/O)(在AVALON MODULES-OTHER下),為系統(tǒng)添加輸出LED的輸出接口。WIDTH選擇4bits。
然后點(diǎn)擊FINISH,返回SOPC BUILDER界面。
6、系統(tǒng)構(gòu)成部件的重新命名和系統(tǒng)的標(biāo)識(shí)符。
為了在編寫軟件程序時(shí),容易記住和理解所添加的硬件部件, 給這些部件重新命名是很有意義的。用鼠標(biāo)點(diǎn)擊模塊名,然后點(diǎn)擊鼠標(biāo)右鍵,再點(diǎn)擊彈出下拉菜單中的Rename項(xiàng),設(shè)計(jì)者就可以隨意地更改自動(dòng)生成的硬件部件名。
7、基地址和中斷請(qǐng)求優(yōu)先級(jí)別的指定。
至此,我們已經(jīng)將必須的組件添加到這個(gè)最小系統(tǒng)中,見圖所示。接下來的工作是為每個(gè)外設(shè)分配基地址和中斷請(qǐng)求優(yōu)先級(jí)(IRQ)。最小系統(tǒng)中所有外設(shè)都沒有中斷,所以不需要分配中斷優(yōu)先級(jí)。SoPC Builder 界面提供自動(dòng)分配基地址和自動(dòng)分配IRQ命令。在 SoPC Builder 主窗口臺(tái)頭下,點(diǎn)擊命令System > Auto-Assign Base Addresses 和 Auto-Assign IRQs 即可。 這兩個(gè)命令可以分別滿足簡(jiǎn)單系統(tǒng)的外設(shè)基地址分配和中斷分配。MyNiosSystem 采用自動(dòng)分配外設(shè)基地址分配和中斷就能達(dá)到要求。但對(duì)于某些復(fù)雜的系統(tǒng)往往需要用戶自己調(diào)整外設(shè)基地址分配和中斷優(yōu)先級(jí)才能滿足系統(tǒng)要求。Nios內(nèi)核的可尋址范圍為2G(31位,即從 0x0000_0000 到 0x7FFF_FFFF 之間)。由于Nios II 程序用宏定義的符號(hào)常量來訪問外設(shè),所以基地址的改動(dòng)不需要修改原已調(diào)通的程序。
8、Nios II 復(fù)位和異常地址的設(shè)置。
在cpu_0上點(diǎn)右鍵,選擇edit,重新彈出對(duì)話框。在本系統(tǒng)中,設(shè)置如下:
8、Nios II 復(fù)位和異常地址的設(shè)置。
在cpu_0上點(diǎn)右鍵,選擇edit,重新彈出對(duì)話框。在本系統(tǒng)中,設(shè)置如下:
在生成Nios II系統(tǒng)的過程中,SoPC Builder 執(zhí)行了一系列操作,為組成系統(tǒng)中的每一個(gè)部件生成了相應(yīng)的Verilog源文件,且生成了各硬件部件和NiosII核連接的片內(nèi)總線結(jié)構(gòu)、中斷邏輯和仲裁邏輯。SoPC Builder 還為用戶配置的Nios II系統(tǒng)自動(dòng)生成了IDE軟件開發(fā)所必須的硬件抽象層(HAL)、C語言和匯編語言的頭文件。這些頭文件定義了存儲(chǔ)器 映射 (mapping)、中斷優(yōu)先級(jí)和每個(gè)外設(shè)寄存器空間的數(shù)據(jù)結(jié)構(gòu)。一旦Nios II系統(tǒng)的硬件需要修改,則 SoPC Builder 將會(huì)更新這些頭文件。它也會(huì)為系統(tǒng)中的每個(gè)部件生成定制的C語言和匯編函數(shù)庫(kù)。如果部件中有片內(nèi)ROM或者RAM,它還將為這些片內(nèi)存儲(chǔ)器生成初始化文件(擴(kuò)展名為.HEX的空白文件)。在系統(tǒng)生成的最后階段,SoPC Builder 會(huì)自動(dòng)地創(chuàng)建可以將所有部件連接起來的Avlone總線結(jié)構(gòu)。系統(tǒng)生成過程中,在標(biāo)簽為System Generation的子窗口中將報(bào)告生成過程的進(jìn)展,最后會(huì)出現(xiàn)一條消息,告訴用戶:系統(tǒng)已順利生成或者已經(jīng)失敗。
生成用戶配置的Nios II系統(tǒng)后,在sopc_led目錄中產(chǎn)生了下面一系列文件:
1)SoPC Builder 系統(tǒng)文件:niosii_c.ptf,該文件定義了已由用戶配置完畢的系統(tǒng)究竟包含哪些部件的詳細(xì)信息。Nios II 軟件集成開發(fā)環(huán)境(IDE)必須使用該文件的信息來為目標(biāo)硬件編譯相應(yīng)的軟件程序。關(guān)于這一點(diǎn)在以后還要深入介紹。
2)Quartus II 模塊符號(hào)文件:niosii.bsf,該文件是一個(gè)表示線路圖符號(hào)(Symbol)的文件,有一個(gè)Verilog文件(MyNiosSystem.v)與之對(duì)應(yīng)。用于添加到Use_Niosii 項(xiàng)目的頂層。
3)硬件描述語言文件:niosii.v以及每個(gè)外設(shè)部件的Verilog HDL文件。這些文件描述了系統(tǒng)的硬件設(shè)計(jì)。Quartus II 編譯器將應(yīng)用這些Verilog文件,并配合Altera器件庫(kù)中的文件,生成可以在目標(biāo)FPGA上運(yùn)行的數(shù)字邏輯系統(tǒng)。
2.6 集成Nios II系統(tǒng)到Quartus II頂層模塊
1、類似往QUARTUSII工程添加功能模塊,將所定制的NIOSII軟核CPU添加到本例工程中,即雙擊工程頂層文件空白處(新建一個(gè)),彈出SYMBOL對(duì)話框,在PROJECT下面可以找到剛才建立的niosii_c模塊,按OK將其niosii_c添加到頂層圖中。
2、添加其他模塊?
3、定義管腳
我們也可以編寫如下文件 (use_niosii.qsf) 來定義引腳。
set_location_assignment PIN_7 -to led[0];set_location_assignment PIN_8 -to led[1];set_location_assignment PIN_11 -to led[2];set_location_assignment PIN_12 -to led[3];set_location_assignment PIN_131 -to reset;set_location_assignment PIN_153 -to clk;//----------------the end of use_niosii.qsf ------------這里我們要命的名字就是后面那部分,PIN_*是FPGA硬件上的引腳,查找電路圖配好管腳后,執(zhí)行TCL腳本文件。
2.7 設(shè)置編譯選項(xiàng)并編譯硬件系統(tǒng)
點(diǎn)擊Quartus II 主窗口抬頭下的命令Processing > Start Compilation,隨即開始編譯。
2.8 使用Nios II IDE建立用戶程序
- 1)如何啟動(dòng)Nios II 軟件開發(fā)環(huán)境來創(chuàng)建一個(gè)新的C/C++應(yīng)用工程;
- 2)如何編寫一個(gè)簡(jiǎn)單的由NiosII控制的LED閃光程序。
- 3)如何把編譯后的軟件代碼下載到這個(gè)小系統(tǒng)中運(yùn)行。
1)在SOPC Builder窗口的System Generation 子窗口,點(diǎn)擊Nios II Tools框中的Nios II IDE 按鈕,彈出如圖的C/C++ NiosII IDE窗口,選擇菜單欄File>Switch Workspace,隨即彈出工作空間發(fā)起窗口,鍵入工作空間目錄名,見圖所示。
為Nios II 系統(tǒng)上運(yùn)行的C程序創(chuàng)建一個(gè)工作空間。點(diǎn)擊該窗口下面的OK按鈕。
點(diǎn)擊抬頭欄下的命令:File > New Project.隨即彈出如圖所示的新軟件項(xiàng)目窗口。
展開Altera Nios II 目錄項(xiàng)選擇Nios II C/C++ Application,然后點(diǎn)擊該窗口下面的Next 按鈕。
在該窗口中左下側(cè)拉動(dòng)滑標(biāo),選擇軟件程序的樣板Hello World,并在該窗口的上部標(biāo)有Name的框內(nèi)填寫:hello_led_0 作為這個(gè)軟件項(xiàng)目的名。也就是說我們?cè)趕opc_led的工作目錄下的software目錄下又生成了一個(gè)新的名hello_led_0的目錄用來存放自己編寫的C程序。然后選擇目標(biāo)硬件,即把niosii_c.ptf 文件名填入如圖所示的窗口中標(biāo)有Select Target Hardware方框下的空格。程序運(yùn)行的硬件環(huán)境是由 niosii_c.ptf 文件定義的,所以必須讓集成軟件開發(fā)環(huán)境(IDE)明確。點(diǎn)擊該窗口下部的Next,又彈出一個(gè)窗口,讓用戶選擇創(chuàng)建一個(gè)新的庫(kù)還是用已經(jīng)存在的庫(kù),如果是新創(chuàng)建的目錄應(yīng)該選擇創(chuàng)建新的庫(kù)。然后點(diǎn)擊該窗口下部的Finish按鈕。
代碼區(qū)就是顯示代碼的,工程目錄區(qū)是顯示所有與工程有關(guān)系的文件,跟我們有關(guān)系有.C和.h文件,還有一個(gè)非常非常之重要的system.h文件。觀察區(qū)中有兩個(gè)欄我們是會(huì)經(jīng)常用到的,一個(gè)是console,一個(gè)是problems。第一個(gè)是編譯信息顯示區(qū),一個(gè)是錯(cuò)誤警告顯示區(qū)。有了JTAG UART后,第一個(gè)CONSOLE(控制臺(tái))欄多了一個(gè)用途,就是作為標(biāo)準(zhǔn)輸出(stdout)的終端。?
我們接下來的工作就是需要對(duì)工程配置一下。在工程目錄區(qū)中的hello_led_0項(xiàng)單擊鼠標(biāo)右鍵后,點(diǎn)擊紅圈處的位置system library properties。
紅圈1處是標(biāo)準(zhǔn)輸入(stdin)、標(biāo)準(zhǔn)輸出(stdout)、標(biāo)準(zhǔn)錯(cuò)誤(stderr)設(shè)置區(qū)。
紅圈2處,這個(gè)地方也不需要修改,不過有一個(gè)地方需要注意,就是Support C++,這個(gè)庫(kù)相對(duì)Small C library要大,如果大家手中的板子沒有FLASH,SDRAM這樣大容量存儲(chǔ)設(shè)備的話,選擇Small C library,用FPGA內(nèi)部的SRAM,也可以跑些小程序。
紅圈3處,這個(gè)是一些有關(guān)內(nèi)存的選項(xiàng),我們構(gòu)建了SDRAM模塊,這個(gè)地方也用到了,默認(rèn)就可以,不用修改。
紅圈4了,點(diǎn)擊紅圈4后,出現(xiàn)下面界面,這個(gè)是對(duì)編譯器就行配置的界面,大家可以自己觀察一下,大部分都不需要修改,我們來看一下比較重要癿地方,點(diǎn)擊紅圈處。
一個(gè)是紅圈1處,這個(gè)地方配置編譯器的優(yōu)化級(jí)別,紅圈2的地方是調(diào)試級(jí)別。編譯器的優(yōu)化級(jí)別會(huì)讓你的生成的代碼更小,要求也越高,你的代碼如果不嚴(yán)謹(jǐn),有可能優(yōu)化以后不好用了,大家要注意。調(diào)試級(jí)別是你在編譯過程中顯示編譯內(nèi)容多少,級(jí)別越高系顯示內(nèi)容的越多,建議將調(diào)試級(jí)別調(diào)到最高。
2)將程序 hello_led.c覆蓋樣板程序
/********************************************************************* hello_led.c 是一段可在最小NiosII系統(tǒng)上運(yùn)行的軟件程序。* 該程序通過4位并行PIO口,輸出數(shù)據(jù)將分成兩組(高2位一組,低2位一組)* 的8個(gè)發(fā)光二極管輪流地點(diǎn)亮和熄滅,不斷地重復(fù)以上過程。* ***************************************************************/ #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" int main (void) __attribute__ ((weak, alias ("alt_main")));/* * Use alt_main as entry point for this free-standing application*/ int alt_main (void) {alt_u8 led = 0x0;alt_u32 i;while (1) { led = 0x0; //4 bits all turn offIOWR_ALTERA_AVALON_PIO_DATA(PIO_4BIT_BASE, led);i = 0;while (i<1000000) //delay for a while{ i++;}led = 0x3; ///MSB 2 bits all turn off, but LSB 2 bits all turn onIOWR_ALTERA_AVALON_PIO_DATA(PIO_4BIT_BASE, led);i = 0;while (i<1000000) //delay for a while{ i++; }led = 0xC; //MSB 2 bits all turn on, but LSB 2 bits all turn off IOWR_ALTERA_AVALON_PIO_DATA(PIO_4BIT_BASE, led); i = 0;while (i<1000000) //delay for a while{ i++;} }return 0; }2.9 下載硬件設(shè)計(jì)到目標(biāo)FPGA
利用JTAG下載。
2.10 調(diào)試/運(yùn)行程序
對(duì)于NIOS IDE提供了幾種方法來驗(yàn)證,一種是直接硬件在線仿真,一種是軟件仿真。我們先說第一種硬件在線仿真,很顯然這種方式需要硬件配合,一塊開發(fā)板,一個(gè)仿真器(仿真器就是大家用的USB-BLASTER或者BYTE-BLASTER)。將仿真器與開發(fā)板的JTAG口相連(假設(shè)你的仿真器驅(qū)動(dòng)已經(jīng)裝好了)。安裝好以后,我們進(jìn)行下面癿操作,點(diǎn)擊紅圈處Nios II Hardware。軟件仿真不需要硬件,電腦單獨(dú)運(yùn)行即可,按下圖所示操作,點(diǎn)擊紅圈處,Nios II Insruction Set Simulator。
點(diǎn)擊后,看看控制臺(tái),結(jié)果怎樣?
不建議大家用軟件仿真,因?yàn)檐浖抡嬖诓簧婕暗接布那闆r下還好,如果有相關(guān)硬件操作了,效果就沒有了。
結(jié)合結(jié)果,可以非常容易地理解代碼。通過一個(gè)while死循環(huán)來實(shí)現(xiàn)4位LED燈亮與滅的循環(huán)切換,輸出到變量led不同的值(0x00,0x3,0xC)以得到想要的結(jié)果。
FPGA 之 SOPC 系列第二篇就到這里結(jié)束,明天繼續(xù)帶來第三篇,Nios II 體系結(jié)構(gòu)相關(guān)內(nèi)容。各位大俠,明天見!
?
接下來編譯,第一次的編譯時(shí)間比較長(zhǎng),因?yàn)榫幾g過程中會(huì)生成一個(gè)我們之前所說的一個(gè)非常非常重要的文件system.h,這個(gè)文件是根據(jù)我們構(gòu)建的NIOS II軟核產(chǎn)生的,也就是說,system.h的內(nèi)容與軟核的模塊一一對(duì)應(yīng)。一旦軟核發(fā)生變化,就需要重新編譯,重新產(chǎn)生system.h文件。現(xiàn)在就開始編譯,如下圖所示,在工程目錄中單擊右鍵后,點(diǎn)擊紅圈處Build Project,或者直接按快捷鍵Ctrl + b。
?大家好,我是【FPGA功夫熊貓】精益求精,不斷推薦好文章。
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的FPGA 之 SOPC 系列(二)SOPC开发流程及开发平台简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scapy 中文文档:三、使用方法
- 下一篇: sockscap