NIosII軟處理器快速入門
Nios II是一個用戶可配置的通用RISC嵌入式處理器。在這兒,我引用了Altera公司關(guān)于NiosII的官方介紹:
Altera推出的Nios? II系列嵌入式處理器擴展了目前世界上最流行的軟核嵌入式處理器的性能,
把Nios II嵌入到Altera的所有FPGA中,例如StratixII、Stratix、CycloneII,Cyclone、APEX,ACEX和HardCopy系列器件中,用戶可以獲得超過200 DMIPS的性能,用戶可以從三種處理器以及超過60個的IP核中選擇所需要的,Nios II系統(tǒng)為用戶提供了最基本的多功能性,設(shè)計師可以以此來創(chuàng)建一個最適合他們需求的嵌入式系統(tǒng)。
Nios II處理器的優(yōu)點和特性
使用Nios II處理器的用戶可以根據(jù)他們的需要來調(diào)整嵌入式系統(tǒng)的特性、性能以及成本,快速使得產(chǎn)品推向市場,擴展產(chǎn)品的生命周期,并且避免處理器的更新?lián)Q代。
提高系統(tǒng)性能
* 一系列的處理器核可供選擇,其中包括了超過200 DMIPS性能的核
* 實現(xiàn)任何數(shù)量的處理器或?qū)⒉煌奶幚砥骱私M和在一起
* 增加了已有的處理器,在FPGA中添加一個或更多的Nios II軟核處理器
更低的系統(tǒng)成本
* 通過將處理器、外設(shè)、存儲器和I/O接口集成到一個單一的FPGA中,從而降低了系統(tǒng)成本、復(fù)雜性和功耗
* 通過將Nios II處理器嵌入到低成本的FPGA中只需花費35美分或者更低(編者:對大多數(shù)用戶而言,NiosII所占邏輯資源的成本大約是10-20元人民幣,具體取決于所選FPGA的類型和NiosII的配置)
應(yīng)對產(chǎn)品的生命周期
* 提供易用的設(shè)計工具從而快速將產(chǎn)品推向市場。
* 提供永久的,免費的許可從而使基于Nios II處理器的產(chǎn)品避免了處理器的更新?lián)Q代而帶來的損失。
功能強大、易用的開發(fā)工具
* 通過使用Nios II集成開發(fā)環(huán)境(IDE),從而加速了軟件的開發(fā)
* 利用Altera的強大的SOPC Builder系統(tǒng)開發(fā)工具和Quartus II設(shè)計軟件可以在幾分鐘內(nèi)設(shè)計一個系統(tǒng)
使用完全功能的開發(fā)包
* 使用易用的Nios II 開發(fā)包開始一個設(shè)計
* 使用易用的Nios II開發(fā)包開始設(shè)計
* 可以選擇具有低成本特性的Cyclone FPGA開發(fā)套件,或高性能的Stratix FPGA開發(fā)套件
稍微了解一下NiosII后,我們就來開始設(shè)計、應(yīng)用它吧!
下面我們就設(shè)計一個最簡單的NiosII系統(tǒng),使用NiosII去控制一個LED燈,通過這個例子我們可以了解整個介紹NiosII的設(shè)計流程
第一節(jié):EDA軟件的安裝。
許多朋友在配置EDA環(huán)境的時候,就遇到了更多問題,我現(xiàn)在總結(jié)一下:
1。安裝QuartusII4.2
2。安裝NiosII IDE 用于軟件開發(fā)
3。安裝ModelSim6.0。 用于系統(tǒng)仿真
如下是ModelSim下的安裝說明:
1.Install, Select Full product instllation. When asked for security key, select no. When you
see License Wizard dialog, select close because license wizard dont know our license's format.
2.Use our keygen to generate license.dat, copy it to c:flexlm directory.
3.set enviroment string: LM_LICENSE_FILE = c:flexlmlicense.dat
4.Start Modelsim and have fun.
仍有許多人表示搞不定,通常是因為第三步有問題,可以如下設(shè)置:
在W2K下,在開始 -〉系統(tǒng) -〉設(shè)置 -〉 系統(tǒng) -〉 高級 -〉 環(huán)境變量 -〉系統(tǒng)變量中設(shè)置
變量名為 LM_LICENSE_FILE ,值為 你的存放license.dat的路徑 + 文件名,比如 c:flexlmlicense.dat,
(在unix/linux下,在.bashrc中export LM_LICENSE_FILE=/thePathOfLicenseFile/yourLicenseFileName就可以了?。?
第二節(jié):建立niosII系統(tǒng)。
1:建立項目。
建立一個目錄,比如H:DB2005projectniosDKExampleNiosSmall
啟動QuartusII4.2軟件。
選擇File -> New Project Wizard
在Diectory,Name,Top-Level Entity中如下填寫,在你自己的項目中,你可以類比著填寫:
在Add Files中如下填寫,在你自己的項目中,你可以類比著填寫:
在EDA Tools Setting中如下填寫,在你自己的項目中,你可以類比著填寫:
最后,選擇Finish,就OK了!
在H:DB2005projectniosDKExampleNiosSmall下建立一個name為Setup.tcl的file,其內(nèi)容如下:
#Setup.tcl
# Setup pin setting
set_global_assignment -name RESERVE_ALL_UNUSED_PINS AS OUTPUT DRIVING GROUND
set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFF
set_location_assignment PIN_16 -to clk
set_location_assignment PIN_37 -to led[0]
set_location_assignment PIN_39 -to led[1]
set_location_assignment PIN_1 -to led[2]
set_location_assignment PIN_41 -to led[3]
set_location_assignment PIN_42 -to led[4]
set_location_assignment PIN_49 -to led[5]
set_location_assignment PIN_50 -to led[6]
set_location_assignment PIN_51 -to led[7]
很淺顯的Script,你可以根據(jù)需要修改。
然后打開Tools -> Tcl Scripts,選中剛才編輯的Script文件:Setup,并點擊Run
2:生成一個可調(diào)試的nios 最小系統(tǒng)
選擇 Tools -> SopcBuilder,啟動Altera SOPC Builder
啟動Altera SOPC Builder后,SOPC Builder會立刻彈出對話框
填入System Name,比如niosII_e;HDL Language ,比如選擇verilog,如下圖:
選擇Board Target ,比如,我選擇Unspecified Board;
選擇Target Device Family,比如,我選擇Cyclone;
填入Clock,比如,我 填入22.1184
如下圖:
添加Nios II到項目中:
雙擊 Nios II Processor -Altera Corporation,會彈出Altera niosII 對話框,
在NiosII core配置選項中,點擊Nios II/e區(qū)域,選擇Nios II/e,如下圖。然后Next,進入下一步。
在JTAG Debug Module配置選項中,選擇Level 1,如下圖。然后Next,進入下一步。
在Custom Instructions配置選項中,我由于無需增加任何定制指令,所以為空,如下圖:
最后選擇Finish,你的項目中會增加一個niosII 處理器,名字為cpu_0,為了簡便起見,我沒有將它改名。你可以依照你自己的喜好,為該處理器取個名字。如下圖:
然后雙擊On-Chip Memory(RAM or ROM),(在Avalon Modules -> Memory -> 下),為系統(tǒng)添加RAM.
Memory Type選擇RAM;Data Width選擇32bits,Total Memory Size 可以選擇2K bytes,然后選擇Finish確認(rèn)。
如下圖,系統(tǒng)中會添加name 為onchip_memory_0的ram,為了簡便起見,我沒有將它改名。你可以依照你自己的喜好,為其取個名字。
之后,雙擊PIO(在Parallel I/O)(在Avalon Modules -> Other 下),為系統(tǒng)添加輸出接口。
Width 選擇8 bits,然后點擊 Finish
如下圖
如下圖,系統(tǒng)中會添加name 為pio_0的PIO,為了簡便起見,我沒有將它改名。你可以依照你自己的喜好,為其取個名字。
然后,選擇System ->Auto-Assign Base Addresses,讓系統(tǒng)自動分配基地址。如下圖:
然后,選擇Sysetm->Auto-Assign IRQs,讓系統(tǒng)自動分配中斷。如下圖:
點擊Nios II More cpu_0 settings選項卡,進行處理器設(shè)定。
在該例中,無需做任何更改;Reset Address、Exceptiong Address、Break Location默認(rèn)值如下圖所示。
點擊System Generation選項卡,進行最后的設(shè)定并生成系統(tǒng)。
選中HDL.Generate system module logic in Verilog,
如果需要仿真,也請選中Simulation.Create ModelSim(tm) project files
然后點擊Generate,進行系統(tǒng)生成的任務(wù)。如下圖:
然后,就是漫長的等待,你可以悠閑得喝一杯咖啡(因為等待的時間還是蠻長的,比如我,要等近10分鐘)。一般沒有問題的話,可以看到系統(tǒng)提示:SUCCESS: SYSTEM GENERATION COMPLETED.如果看到此信息,恭喜恭喜,系統(tǒng)被正確生成了。如果失敗,請返回并檢查、修改!
如下圖:
3:在QuartusII中使用上述niosII系統(tǒng)
在 SOPC Builder正確運行完畢后,可以在QuartusII中,打開SOPC Builder生成的niosII_e.bsf,檢查一下引腳,看看跟你的設(shè)想是否有誤,如下圖,niosII_e有兩個input:clk,reset_n,一組output:out_port_from_the_piop[7:0]
如下圖:
你可以使用上述的niosII_e,來構(gòu)造你自己的系統(tǒng)。如下圖,我簡單得創(chuàng)建了nisoSmall.bdf,來使用該niosII_e。
nios clk to clk
niso reset_n to VCC
out_port_from_the_pio_0[7:0] to LED[7:0]
第三節(jié):編寫程序。
在Alter SOPC Builder中,點擊Run Nios II IDE,啟動Nios II IDE,如下圖:
在Nios II IDE中,選擇File -> New -> Project,開啟New Project 對話框
選擇 C/C++ Application,如下圖。然后選擇Next,進入下一步。
填寫你自己的Project Name,比如我填寫hello_led_1;在Select Project Template中,我選擇Hello LED(因為存放程序的sram只有2kbytes,所以許多Template不可用),如下圖。然后選擇Next,進入下一步。
選擇Create a new system library named:,最后點擊Finish,創(chuàng)建項目。如下圖:
打開項目中的文件:hello_led.c,進行適當(dāng)?shù)男薷摹?
比如,我將PIO的基地址修改為PIO_0_BASE;while(i200000)修改為while(i20000).你可以依照你的需求修改!
然后選擇Project->Build All(Ctrl+B),編譯整個項目。
如果無誤,可以看到以下信息:Build completed.如果看到了該條提示,恭喜恭喜,距離成功只有一步之遙了!
第四節(jié):編譯整個項目。
然后,在QuartusII中,選擇Processing -> Star Compilation,開始編譯整個項目。
你又可以坐下來喝杯咖啡了,反正我是等了又十來分鐘。
成功后,可以看到如下信息:如果到了這一步,赫赫,基本上大功告成了!
第五節(jié):下載與測試。
最后,選擇Tools ->Programmer,下載整個配置到FPGA中,如下圖。
下載成功后,可以看到LED的有規(guī)律的變化。(物理硬件中,我只用了一個LED,觀察到LED是常亮,有規(guī)律得熄滅,因為我的LED是低電平才發(fā)光,與設(shè)計完全吻合?。?
OK,做到這一步,就大功告成了!
評論