日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

FPGA 之 SOPC 系列(二)SOPC开发流程及开发平台简介

發(fā)布時間:2023/12/14 70 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA 之 SOPC 系列(二)SOPC开发流程及开发平台简介 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今天給大俠帶來今天帶來FPGA 之 SOPC 系列第二篇,SOPC開發(fā)流程及開發(fā)平臺簡介相關(guān)內(nèi)容,希望對各位大俠的學(xué)習(xí)有參考價值,話不多說,上貨。

本篇首先詳細(xì)介紹了SOPC開發(fā)的基本流程,然后通過實(shí)際操作的視頻,生動詳細(xì)的講述了一個簡單的SOPC系統(tǒng)的設(shè)計(jì)過程,包括使用Quartus II、SOPC Builder定制Nios II系統(tǒng)以及利用Nios II IDE進(jìn)行應(yīng)用程序開發(fā)。本篇力求以實(shí)例的途徑讓讀者以最快的方式了解SOPC開發(fā)以及各軟件的使用,從而激起讀者對SOPC的興趣。

以下為本篇的目錄簡介:

  • 2.1 SOPC開發(fā)流程
  • 2.2 簡單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個方面:基于Quartus II、SOPC Builder的硬件設(shè)計(jì)、基于NiosII IDE的軟件設(shè)計(jì)。對于比較簡單的NiosII系統(tǒng),一個人便可執(zhí)行所有設(shè)計(jì)。對于比較復(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)試平臺的生成;
  • Quartus II:
    用于完成Nios II系統(tǒng)的分析綜合、硬件優(yōu)化、適配、配置文件編程下載以及硬件系統(tǒng)測試等;
  • Nios II IDE:
    用于完成基于Nios II系統(tǒng)的軟件開發(fā)和調(diào)試,并可借助其自帶的Flash編程器完成對Flash以及EPCS的編程操作。

硬件開發(fā)(1):

  • 用SOPC Builder軟件從NiosII處理器內(nèi)核和NiosII開發(fā)套件提供的外設(shè)列表中選取合適的CPU、存儲器以及各外圍器件,并定制和配置它們的功能;
  • 分配外設(shè)地址及中斷號;
  • 設(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)成的知識產(chǎn)權(quán)設(shè)計(jì)模塊。
  • Quartus II軟件用來選取具體的Altera FPGA器件型號,然后為Nios II系統(tǒng)上的各I/O口分配管腳。

硬件開發(fā)(3):

  • 編譯Quartus II工程,對HDL文件進(jìn)行布局布線,從HDL源文件綜合生成一個適合目標(biāo)器件網(wǎng)表,生成FPGA配置文件(.sof);
  • 用下載電纜(如 ByteBlaster II),將配置文件下載到目標(biāo)板上。硬件校驗(yàn)完成后,可將新的硬件配置文件下載到目標(biāo)板上的非易失存儲器(如EPCS器件)。

軟件開發(fā):

軟件開發(fā)使用Nios II IDE,它是一個基于Eclipse IDE架構(gòu)的集成開發(fā)環(huán)境,它包括:

  • GNU開發(fā)工具(標(biāo)準(zhǔn)GCC編譯器,連接器,匯編器和makefile工具等);
  • 基于GDB的調(diào)試器,包括軟件仿真和硬件調(diào)試;
  • 提供用戶一個硬件抽象層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ū)動程序和硬件抽象層(HAL),使用戶能夠快速編寫與低級硬件細(xì)節(jié)無關(guān)的Nios II程序;
  • 除了應(yīng)用代碼,用戶還可以在Nios II IDE 工程中設(shè)計(jì)和重新使用定制庫。

軟件開發(fā)(2):

  • 即使在沒有軟件開發(fā)的目標(biāo)板的情況下,也可以經(jīng)過編譯、連接后通過Nios II指令仿真器(ISS)運(yùn)行和調(diào)試代碼。
  • 一旦有一個目標(biāo)板,用戶就可以使用下載電纜下載軟件到目標(biāo)板進(jìn)行調(diào)試/運(yùn)行。

SOPC基本開發(fā)流程簡介:

從以上“硬件開發(fā)”與“軟件開發(fā)”兩部分介紹中,在我們的腦海里一定已經(jīng)形成了一個大致的開發(fā)流程,下面我們仔細(xì)的對其進(jìn)行梳理和理解。見SOPC開發(fā)流程簡圖。

開發(fā)流程簡圖解析:

  • 1、分析系統(tǒng)需求:
    如果需要,用戶可以定制指令和外設(shè)邏輯。
  • 2、建立Quartus II工程,建立頂層圖*.bdf:
    每個開發(fā)過程開始時都應(yīng)建立一個工程,Quartus II是以工程的方式對設(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è)模塊),完成后生成一個系統(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è)計(jì)自己的功能模塊。并在頂層模塊中使用;
  • 7、集成SOPC生成的系統(tǒng)到Quartus II 工程:
    在頂層模塊中,分別將SOPC Builder生成的系統(tǒng)模塊、LPM功能模塊以及用戶自定義功能模塊添加到頂層模塊中;
  • 8、連接各功能模塊:
    然后將各個功能模塊用連線連起來組成系統(tǒng)功能原理圖。
  • 9、選擇FPGA型號并進(jìn)行管腳分配:
    為系統(tǒng)功能原理圖選擇芯片載體并為各個輸入輸出信號分配芯片的管腳;
  • 10、進(jìn)行編譯選項(xiàng)設(shè)置:
    設(shè)置編譯選項(xiàng),從而讓編譯器按照用戶設(shè)定來進(jìn)行編譯;
  • 11、編譯硬件系統(tǒng)生成配置文件sof:
    編譯系統(tǒng)生成硬件系統(tǒng)的配置文件*.sof和*.pof。編譯系統(tǒng)是一個非常復(fù)雜的過程,包括優(yōu)化邏輯的組合、綜合邏輯、適配FPGA、布線以及時序分析等步驟。
  • 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
    對用戶程序進(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 簡單SOPC實(shí)例開發(fā)任務(wù)及步驟

通過實(shí)際操作來體驗(yàn)一個簡單的SOPC開發(fā)的整個過程。建立一個基于Nios II處理器的系統(tǒng)來控制一個LED燈閃爍。具體的操作步驟如下:(具體代碼略)

  • 1、分析系統(tǒng)需求。
  • 2、啟動QuartusII軟件和新建實(shí)例設(shè)計(jì)工程。
  • 3、啟動新的SOPC Builder系統(tǒng)。
  • 4、在SOPC Builder中定義并生成系統(tǒng)。
  • 5、集成SOPC Builder系統(tǒng)到QuartusII工程。
  • 6、選擇芯片型號并進(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)需求

每一個SOPC系統(tǒng)開發(fā)之前,都應(yīng)該仔細(xì)分析系統(tǒng)需求,例如:

每一個SOPC系統(tǒng)開發(fā)之前,都應(yīng)該仔細(xì)分析系統(tǒng)需求,基于這些問題,用戶可確定具體的系統(tǒng)要求,例如:

  • 使用哪種NiosII處理器內(nèi)核:比較小的還是比較快的?
  • 設(shè)計(jì)要求什么外設(shè)及其數(shù)量?
  • 功耗要求?
  • 使用哪種實(shí)時操作系統(tǒng)(RTOS)?
  • 硬件加速邏輯在哪些方面可大大提高系統(tǒng)性能?例如:增加一個DMA外設(shè)能釋放CPU在進(jìn)行數(shù)據(jù)拷貝時所占用的資源?定制的指令能取代DSP算法嗎?

本篇實(shí)例的開發(fā)任務(wù)是:

  • 展示可用于控制LED閃爍的簡單NiosII處理器系統(tǒng)。
  • 利用最通用和有效的方法來建立實(shí)際的定制NiosII系統(tǒng)。
  • 整個系統(tǒng)僅使用片內(nèi)資源,且不依賴于目標(biāo)板。

分析任務(wù)可以知道FPGA內(nèi)硬件系統(tǒng)組成應(yīng)包含:

  • NiosII/e處理器核;
  • 4kBytes片內(nèi)RAM存儲器(Onchip_RAM)用于儲程序代碼以及程序運(yùn)行空間,
  • 變量存儲(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建立工程

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

2.5 使用SOPC Builder創(chuàng)建Nios II系統(tǒng)

1、用SOPC BUILDER 定制 NIOS II處理器和外設(shè)。

用主窗口抬頭下的命令:tools> SOPC Builder ...等待約半分鐘后(具體時間隨計(jì)算機(jī)性能而定),隨即彈出一個對話的子窗口:

等待用戶的輸入,在窗口中鍵入用戶希望建立的系統(tǒng)名,NIOSII_C,并且選擇Verilog,再點(diǎn)擊OK按鈕。

2、隨即激活如圖所示的Altera SoPC Builder 人機(jī)對話窗口,其中我們可以看到三個子窗口。

1)左上部子窗口的目錄樹列出了許多可以供選擇的IP,從NiosII 處理器核到各種外圍IP器件,應(yīng)有盡有;

2)右上部子窗口可以配置所用的FPGA器件類型和時鐘頻率設(shè)置。并且可以顯示配置后確認(rèn)的部件和連接等信息;

3)下部子窗口顯示配置后出現(xiàn)的反饋信息,告訴用戶設(shè)計(jì)過程中可能存在問題的地方。

3、將NiosII處理器核添加到系統(tǒng)。

選擇TARGET,本例選擇UnspecifiedBoard;選擇時鐘頻率,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ù)位后啟動時的Memory類型和偏移量, Exception Vector是異常情況時的Memory類型和偏移量。現(xiàn)在還不能配置,需要SDRAM和FLASH設(shè)置好以后才能修改這里,這兩個地方很重要。這里暫時不加,等添加了MEMERY在返回修改。

  • 部件之間的連接的確定:
    從上圖所示的窗口中,我們可以看到NiosII 處理器已經(jīng)生成,有幾條黑色的弧線表示該處理器部件之間的連接。將光標(biāo)移動至弧線交接處可以見到實(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)。
    可以看到在圖所示的窗口底部有五個按鈕,其中有一個是虛的,表示不能執(zhí)行。標(biāo)記為Generate的按鈕雖然是實(shí)的,但系統(tǒng)尚未配置完畢,還不能生成可以運(yùn)行的系統(tǒng)。所以必須根據(jù)數(shù)字系統(tǒng)的要求,把需要的部件逐個地添加上去,直到可以組成一個完整的系統(tǒng)為止。這項(xiàng)工作類似于在印刷線路板上安排各個部件,并連接線路。

4、穿插一下NIOS啟動過程。

意:這里如果是選擇NIOSii/f則將Data Cache處選擇為None,也就是關(guān)閉Data Cache,那Data Cache到底是什么呢,簡單的說,Data Cache是像電腦的一級緩存二級緩存一樣的東東,就是為了提高系統(tǒng)速度的。可是有個這個高速緩沖區(qū)后,我們的代碼執(zhí)行時間卻發(fā)得不可確定了,降低了程序的實(shí)時性。我們發(fā)出的數(shù)據(jù),放到了高速緩沖區(qū)里而沒有及時的去執(zhí)行才導(dǎo)致代碼不執(zhí)行,沒有顯示效果。如果以后發(fā)現(xiàn)寄存器方式操作PIO不好用時,請關(guān)閉這個。

點(diǎn)擊該窗口下部標(biāo)記為Next的按鈕,隨即進(jìn)入第3個配置窗口。用同樣方法進(jìn)入第4、第5、第6個配置窗口(均使用缺省配置)。設(shè)置JTAG Debug Module,即JTAG調(diào)試時所用到的功能模塊。功能越多,需要的資源越多,這里,我們選擇Level 1即可,不需要過多其他的功能。在第6個配置窗口下部點(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)有盡有,但必須注意許多高級的IP是需要付費(fèi)后才能從網(wǎng)上下載的。用鼠標(biāo)拉動 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)中添加一個4位的PIO同時驅(qū)動4個發(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)識符。

為了在編寫軟件程序時,容易記住和理解所添加的硬件部件, 給這些部件重新命名是很有意義的。用鼠標(biāo)點(diǎn)擊模塊名,然后點(diǎn)擊鼠標(biāo)右鍵,再點(diǎn)擊彈出下拉菜單中的Rename項(xiàng),設(shè)計(jì)者就可以隨意地更改自動生成的硬件部件名。

7、基地址和中斷請求優(yōu)先級別的指定。

至此,我們已經(jīng)將必須的組件添加到這個最小系統(tǒng)中,見圖所示。接下來的工作是為每個外設(shè)分配基地址和中斷請求優(yōu)先級(IRQ)。最小系統(tǒng)中所有外設(shè)都沒有中斷,所以不需要分配中斷優(yōu)先級。SoPC Builder 界面提供自動分配基地址和自動分配IRQ命令。在 SoPC Builder 主窗口臺頭下,點(diǎn)擊命令System > Auto-Assign Base Addresses 和 Auto-Assign IRQs 即可。 這兩個命令可以分別滿足簡單系統(tǒng)的外設(shè)基地址分配和中斷分配。MyNiosSystem 采用自動分配外設(shè)基地址分配和中斷就能達(dá)到要求。但對于某些復(fù)雜的系統(tǒng)往往需要用戶自己調(diào)整外設(shè)基地址分配和中斷優(yōu)先級才能滿足系統(tǒng)要求。Nios內(nèi)核的可尋址范圍為2G(31位,即從 0x0000_0000 到 0x7FFF_FFFF 之間)。由于Nios II 程序用宏定義的符號常量來訪問外設(shè),所以基地址的改動不需要修改原已調(diào)通的程序。

8、Nios II 復(fù)位和異常地址的設(shè)置。

在cpu_0上點(diǎn)右鍵,選擇edit,重新彈出對話框。在本系統(tǒng)中,設(shè)置如下:

8、Nios II 復(fù)位和異常地址的設(shè)置。

在cpu_0上點(diǎn)右鍵,選擇edit,重新彈出對話框。在本系統(tǒng)中,設(shè)置如下:

在生成Nios II系統(tǒng)的過程中,SoPC Builder 執(zhí)行了一系列操作,為組成系統(tǒng)中的每一個部件生成了相應(yīng)的Verilog源文件,且生成了各硬件部件和NiosII核連接的片內(nèi)總線結(jié)構(gòu)、中斷邏輯和仲裁邏輯。SoPC Builder 還為用戶配置的Nios II系統(tǒng)自動生成了IDE軟件開發(fā)所必須的硬件抽象層(HAL)、C語言和匯編語言的頭文件。這些頭文件定義了存儲器 映射 (mapping)、中斷優(yōu)先級和每個外設(shè)寄存器空間的數(shù)據(jù)結(jié)構(gòu)。一旦Nios II系統(tǒng)的硬件需要修改,則 SoPC Builder 將會更新這些頭文件。它也會為系統(tǒng)中的每個部件生成定制的C語言和匯編函數(shù)庫。如果部件中有片內(nèi)ROM或者RAM,它還將為這些片內(nèi)存儲器生成初始化文件(擴(kuò)展名為.HEX的空白文件)。在系統(tǒng)生成的最后階段,SoPC Builder 會自動地創(chuàng)建可以將所有部件連接起來的Avlone總線結(jié)構(gòu)。系統(tǒng)生成過程中,在標(biāo)簽為System Generation的子窗口中將報告生成過程的進(jìn)展,最后會出現(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 模塊符號文件:niosii.bsf,該文件是一個表示線路圖符號(Symbol)的文件,有一個Verilog文件(MyNiosSystem.v)與之對應(yīng)。用于添加到Use_Niosii 項(xiàng)目的頂層。

3)硬件描述語言文件:niosii.v以及每個外設(shè)部件的Verilog HDL文件。這些文件描述了系統(tǒng)的硬件設(shè)計(jì)。Quartus II 編譯器將應(yīng)用這些Verilog文件,并配合Altera器件庫中的文件,生成可以在目標(biāo)FPGA上運(yùn)行的數(shù)字邏輯系統(tǒng)。

2.6 集成Nios II系統(tǒng)到Quartus II頂層模塊

1、類似往QUARTUSII工程添加功能模塊,將所定制的NIOSII軟核CPU添加到本例工程中,即雙擊工程頂層文件空白處(新建一個),彈出SYMBOL對話框,在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)如何啟動Nios II 軟件開發(fā)環(huán)境來創(chuàng)建一個新的C/C++應(yīng)用工程;
  • 2)如何編寫一個簡單的由NiosII控制的LED閃光程序。
  • 3)如何把編譯后的軟件代碼下載到這個小系統(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)建一個工作空間。點(diǎn)擊該窗口下面的OK按鈕。

點(diǎn)擊抬頭欄下的命令:File > New Project.隨即彈出如圖所示的新軟件項(xiàng)目窗口。

展開Altera Nios II 目錄項(xiàng)選擇Nios II C/C++ Application,然后點(diǎn)擊該窗口下面的Next 按鈕。

在該窗口中左下側(cè)拉動滑標(biāo),選擇軟件程序的樣板Hello World,并在該窗口的上部標(biāo)有Name的框內(nèi)填寫:hello_led_0 作為這個軟件項(xiàng)目的名。也就是說我們在sopc_led的工作目錄下的software目錄下又生成了一個新的名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,又彈出一個窗口,讓用戶選擇創(chuàng)建一個新的庫還是用已經(jīng)存在的庫,如果是新創(chuàng)建的目錄應(yīng)該選擇創(chuàng)建新的庫。然后點(diǎn)擊該窗口下部的Finish按鈕。

代碼區(qū)就是顯示代碼的,工程目錄區(qū)是顯示所有與工程有關(guān)系的文件,跟我們有關(guān)系有.C和.h文件,還有一個非常非常之重要的system.h文件。觀察區(qū)中有兩個欄我們是會經(jīng)常用到的,一個是console,一個是problems。第一個是編譯信息顯示區(qū),一個是錯誤警告顯示區(qū)。有了JTAG UART后,第一個CONSOLE(控制臺)欄多了一個用途,就是作為標(biāo)準(zhǔn)輸出(stdout)的終端。?

我們接下來的工作就是需要對工程配置一下。在工程目錄區(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)錯誤(stderr)設(shè)置區(qū)。

紅圈2處,這個地方也不需要修改,不過有一個地方需要注意,就是Support C++,這個庫相對Small C library要大,如果大家手中的板子沒有FLASH,SDRAM這樣大容量存儲設(shè)備的話,選擇Small C library,用FPGA內(nèi)部的SRAM,也可以跑些小程序。

紅圈3處,這個是一些有關(guān)內(nèi)存的選項(xiàng),我們構(gòu)建了SDRAM模塊,這個地方也用到了,默認(rèn)就可以,不用修改。

紅圈4了,點(diǎn)擊紅圈4后,出現(xiàn)下面界面,這個是對編譯器就行配置的界面,大家可以自己觀察一下,大部分都不需要修改,我們來看一下比較重要癿地方,點(diǎn)擊紅圈處。

一個是紅圈1處,這個地方配置編譯器的優(yōu)化級別,紅圈2的地方是調(diào)試級別。編譯器的優(yōu)化級別會讓你的生成的代碼更小,要求也越高,你的代碼如果不嚴(yán)謹(jǐn),有可能優(yōu)化以后不好用了,大家要注意。調(diào)試級別是你在編譯過程中顯示編譯內(nèi)容多少,級別越高系顯示內(nèi)容的越多,建議將調(diào)試級別調(diào)到最高。

2)將程序 hello_led.c覆蓋樣板程序

/********************************************************************* hello_led.c 是一段可在最小NiosII系統(tǒng)上運(yùn)行的軟件程序。* 該程序通過4位并行PIO口,輸出數(shù)據(jù)將分成兩組(高2位一組,低2位一組)* 的8個發(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)行程序

對于NIOS IDE提供了幾種方法來驗(yàn)證,一種是直接硬件在線仿真,一種是軟件仿真。我們先說第一種硬件在線仿真,很顯然這種方式需要硬件配合,一塊開發(fā)板,一個仿真器(仿真器就是大家用的USB-BLASTER或者BYTE-BLASTER)。將仿真器與開發(fā)板的JTAG口相連(假設(shè)你的仿真器驅(qū)動已經(jīng)裝好了)。安裝好以后,我們進(jìn)行下面癿操作,點(diǎn)擊紅圈處Nios II Hardware。軟件仿真不需要硬件,電腦單獨(dú)運(yùn)行即可,按下圖所示操作,點(diǎn)擊紅圈處,Nios II Insruction Set Simulator。

點(diǎn)擊后,看看控制臺,結(jié)果怎樣?

不建議大家用軟件仿真,因?yàn)檐浖抡嬖诓簧婕暗接布那闆r下還好,如果有相關(guān)硬件操作了,效果就沒有了。

結(jié)合結(jié)果,可以非常容易地理解代碼。通過一個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)容。各位大俠,明天見!

?

接下來編譯,第一次的編譯時間比較長,因?yàn)榫幾g過程中會生成一個我們之前所說的一個非常非常重要的文件system.h,這個文件是根據(jù)我們構(gòu)建的NIOS II軟核產(chǎn)生的,也就是說,system.h的內(nèi)容與軟核的模塊一一對應(yīng)。一旦軟核發(fā)生變化,就需要重新編譯,重新產(chǎn)生system.h文件。現(xiàn)在就開始編譯,如下圖所示,在工程目錄中單擊右鍵后,點(diǎn)擊紅圈處Build Project,或者直接按快捷鍵Ctrl + b。

?大家好,我是【FPGA功夫熊貓】精益求精,不斷推薦好文章。

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的FPGA 之 SOPC 系列(二)SOPC开发流程及开发平台简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。