聲明:本文為原創作品,著作權歸本博文作者所有,如需轉載,請註明出處http://www.cnblogs.com/kingst/
這一節,我將給大家講解NIOS II軟體開發部分,這一部分是以第一節硬體開發部分為基礎的,如果大家是從這一節開始看的,那我們就先回顧一下上一節我們所講的內容。
回顧
上一節,我們詳細講解了NIOS II硬體開發部分的全過程,其中包括了工程的建立,NIOS II軟核的構建,以及鎖相環PLL倍頻和如何下載等等。其中NIOS II軟核的構建是重點內容,我們在軟核中構建了CPU,SDRAM,AVALON三態橋,FLASH,SYSTEM ID,JTAG UART 6個模組,時鐘我們設計為100MHz,FLASH為8位元模式。這一節我們就在其基礎上詳細講解軟體開發的全過程。
摘要
首先,我先給大家簡單介紹一下這一節的重要內容,這一節將詳細講述NIOS II的軟體開發的整個流程,並簡單介紹NIOS II 9.0 IDE的一些簡單的使用方法,會讓那些從來沒有用過NIOS II IDE軟體的人可以很輕鬆的上手使用。
NIOS II IDE簡介
NIOS II IDE是一個基於Eclipse IDE構架的整合式開發環境,它包括了很多的功能,學過JAVA的人對其應該非常的熟悉,它的功能是非常之強大,下面我們就簡單介紹一下NIOS II IDE的功能和特點:
- GNU開發工具。熟悉Linux作業系統的人對它一定不陌生,它是一種開源的編譯環境,包括標準的GCC編譯器,連接器,彙編器以及makefile工具等。說到這大家可能頭都大了,這些都是啥東西啊,如果你是一個Linux的忠實粉絲,這些你必須非常的清楚,但在NIOS II開發過程中你只要知道這些就OK了,沒必要刨根問底的弄清楚它們,不過我在這裡強烈推薦大家學習學習linux方面的東西,你一旦接觸上了它,你就會發現它的魅力是太大了,裡面的好東西讓你一輩子都受益,呵呵,話說多了,我們繼續我們的NIOS II。
- 基於GDB的調試工具,包括模擬和硬體調試。這個東西也是在Linux平台下流行的調試工具,所以說Linux很強大吧。 整合了一個硬體抽象層HAL(Hardware Abstraction Layer);
- 支援MicroChip/OS II 和 LwTCP/IP協議棧。
- 支援Flash下載(Flash Programmer 和 Quartus II Programmer)。
理論的就說這麼多了,下面我們來點實際的。
建立軟體工程
首先,將NIOS II 9.0 IDE軟體開啟,開啟後NIOS II IDE的介面赫然顯現在我們面前,介面很簡單,跟其他的IDE沒什麼太大的區別,我們需要做的就是首先建立一個軟體工程,操作方式如所示,File->New->Project
點擊後,會出現工程嚮導介面,如所示,選中紅圈處的內容,Nios II C/C++ Application,
點擊Next,會出現所示內容,紅圈1處是工程名,我將其修改為hello_world,紅圈2處是目標硬體檔案,點擊Browse,找到我們上一節產生的NIOS軟核的位置,這個檔案是以.ptf為尾碼的,如果大家跟我的地址一樣的話,地址應該是在E:\nios\KERNEL.ptf。在紅圈3處選中Hello World,這個地方是工程模版。再說說紅圈4,這個地方是改變工程所放位置的,如果不修改,軟體工程的位置就在Quartus工程目錄下的software下面。
點擊Next,這裡不用修改,點擊Finish,完成工程嚮導。
完成了上面的工程嚮導後,我們正式進入NIOS II IDE的介面了,如所示,我主要介紹三個部分,其他部分用處不大。我按功能將這三部分命名為代碼區,工程目錄區,和觀察區(這幾個名字很山寨吧,哥追求的就是通俗易懂,呵呵)
不用我多說,代碼區就是顯示代碼的,工程目錄區呢,顯示所有與工程有關係的檔案,跟我們有關係有.c和.h檔案,還有一個非常非常之重要的system.h檔案。觀察區中有兩個欄我們是會經常用到的,一個是Console,一個是Problems。第一個是編譯資訊顯示區,一個是錯誤警告顯示區。有了JTAG UART後,第一個Console(控制台)欄多了一個用途,就是作為標準輸出(stdout)的終端,這裡不多了,一會我們就會用到。
我們接下來的工作就是需要對工程配置一下,大家跟我來吧。在工程目錄區中的hello_world項單擊滑鼠右鍵後,點擊紅圈處的位置system library Properties
點擊後,可看到所示介面,
按順序來,紅圈1處是標準輸入(stdin)、標準輸出(stdout)、標準錯誤(stderr)的設定區,我們在軟核中構建了JTAG UART,在此出現效果了吧,如果我們沒有構建JTAG UART,那麼,這個地方就不會出現jtag_uart選項了。在所紅圈2處,這個地方也不需要修改,不過有一個地方需要注意,就是Support C++,這個庫相對Small C library要大,如果大家手中的板子沒有FLASH,SDRAM這樣大量儲存裝置的話,選擇Small C library,用FPGA內部的SRAM,也可以跑些小程式。再說紅圈3處,這個是一些有關記憶體的選項,我們構建了SDRAM模組,這個地方也用到了,預設就可以,不用修改。該說紅圈4了,點擊紅圈4後,出現下面介面,這個是對編譯器就行配置的介面,大家可以自己觀察一下,大部分都不需要修改,我們來看一下比較重要的地方,點擊紅圈處。
點擊後,我們看看是什麼樣子,這裡有兩個關鍵點,一個是紅圈1處,這個地方時配置編譯器的最佳化層級,紅圈2的地方是調試層級。編譯器的最佳化層級會讓你的產生的程式碼更小,當要求也很高,你的代碼如果不嚴謹,有可能最佳化以後不好用了,大家要注意。調試層級是你在編譯過程中顯示編譯內容多少,層級越高顯示內容的越多,建議將調試層級調到最高。
將上面設定好以後,點擊Apply,然後點擊OK,回到首頁面。
接下來我們就要開始編譯了,第一次的編譯時間比較長,因為編譯過程中會產生一個我們之前所說的一個非常非常重要的檔案system.h,這個檔案是根據我們構建的NIOS II軟核產生的,也就是說,system.h的內容與軟核的模組一一對應。一旦軟核發生變化,就需要重新編譯,重新產生system.h檔案。現在就開始編譯,如所示,在工程目錄欄中單擊右鍵後,點擊紅圈處Build Project,或者直接按快速鍵Ctrl + b。
開始編譯後,會出現下面的介面,進度條走的很慢吧,如果不想看它,點擊Run in Background,編譯就在後台進行了。在編譯構成中,大家可以觀察觀察欄中Console欄的內容,其中出現的內容就是編譯器正在編譯的東西,大家不妨好好看看編譯過程都編譯和產生了哪些東西。
編譯好以後,大家可以看到下面介面,紅圈處說明了,編譯完成。
大家可以對比一下,編譯前和編譯後工程目錄欄有哪些變化。
看來編譯的成果還是很顯著的,其他的我們沒必要知道,關鍵的一個大家要知道,就是我們反覆提到的system.h檔案。下面我們就把它揪出來,它隱藏的還是很深的。
看到了吧,它在hello_world_syslib/Debug/system_description/system.h,現在我們就看看裡面有什麼東西這麼重要。
雙擊以後,在代碼區大家就可以看到了,都是一些宏定義,我們找一個典型的作為例子,我給大家講解一下,看下面的
在這些資訊中,對我們有用的是JTAG_UART_BASE,還有JTAG_UART_IRQ,JTAG_UART_BASE是JTAG_UART的基地址,JTAG_UART_IRQ是中斷號,其他的是一些配置資訊,我們先不關注。同理,SDRAM、FLASH等都有相應的基地址,我們以後就要用到這些地址對NIOS軟核進行寄存器操作,達到我們要實現的跟單片機一樣的寄存器操作方式,在此我們就不詳細講述了,後面我們會單獨講解這一節。看了這個例子以後,大家在看看其他的,都大同小異,沒有中斷的就不會出現*_IRQ這一項,不信大家自己看。NIOS強大之處就在於此,根據大家的需求進行對軟核的構建,然後產生相應的寄存器,整個構建都由設計者來掌控,缺什麼建什麼,不行的話還可以自己寫底層的模組,你說強不強大。
system.h檔案我們以後還會提到,暫時先講到這,接下來我們要看看我們編譯好的程式是不是跟我們想想的一樣。對於NIOS IDE提供了幾種方法來驗證,一種是直接硬體線上模擬,一種是軟體模擬。我們先說第一種硬體線上模擬,很顯然這種方式需要硬體配合,一塊開發板,一個模擬器(模擬器就是大家用的USB-BLASTER或者BYTE-BLASTER)。將模擬器與開發板的JTAG口相連(假設你的模擬器驅動已經裝好了,如果有不知道怎麼裝模擬器驅動的請跟我聯絡)。安裝好以後,我們進行下面的操作,點擊紅圈處Nios II Hardware。
點擊後,可以看觀察欄的控制台(Console),如果一切正常,我們將看到下面的結果出現。
看到了嗎?如果沒看到,再好好檢查一下,你的操作是否跟我說的一樣,如果自己無法解決,請聯絡我,我將手把手幫你解決。
說完第一種硬體線上模擬以後,我們再說說軟體模擬。軟體模擬不需要硬體,電腦單獨運行即可,按所示操作,點擊紅圈處,Nios II Insruction Set Simulator。
點擊後,還是看觀察欄的控制台(Console),結果一樣吧。我不建議大家用軟體模擬,因為軟體模擬在不涉及到硬體的情況下還好,如果有相關硬體操作了,效果就沒有了。
到此為止,我們的NIOS II軟體開發部分就結束了,如果想熟練掌握NIOS II IDE,還要大家自己親手去試試,光靠我的講解是不行的,大家沒事的時候可以研究一下它的每一個選項,都有什麼功能,這樣才能加深你對它的熟悉程度,更好的去掌握它,用好它。在此再多說一句,我不建議大家經常更新軟體,對於Quartus和NIOS軟體的升級,無非就是解決一些BUG,多支援一些器件,編譯的速度快了一點。在你還沒有遇到非常嚴重的BUG之前,最好不要去更新它。更新以後帶來的後果就是需要重新熟悉它的特性。NIOS II IDE 9.1和9.0之間變化就很大,使用起來就不是那麼順手。建議大家不要輕易去更改。
好了,這一節的內容就到此結束吧,下一節我將給大家講解“如何讓NIOS II的開發像單片機一樣簡單,看透NIOS II系統的寄存器操作方式”。這一節內容是我教程中的核心部分,希望大家耐心等待,拜拜了!