實(shí)驗(yàn)說(shuō)明
本節(jié)說(shuō)明了如何基于在Qsys中搭建支持RT-Thread操作系統(tǒng)的基本NIOS II處理器系統(tǒng),并在此基礎(chǔ)上實(shí)現(xiàn)創(chuàng)建2個(gè)LED閃爍的靜態(tài)線程的示例。RT-Thread操作系統(tǒng)版本:3.0軟件版本:Quartus II 13.0開(kāi)發(fā)環(huán)境:Windows7 64位旗艦版硬件平臺(tái):小梅哥AC620 FPGA開(kāi)發(fā)板嵌入式處理器:NIOS II
操作步驟
搭建支持RT-Thread操作系統(tǒng)的NIOS II CPU系統(tǒng)
在Qsys中搭建能夠支持RT-Thread操作系統(tǒng)的NIOS II 處理器系統(tǒng),除了必要的NIOS II處理器、RAM存儲(chǔ)器(片上RAM、SRAM、SDRAM、DDR2)、FLASH存儲(chǔ)器(EPCS)外,為了支持RT-Thread操作系統(tǒng)的運(yùn)行,還需要添加UART串口外設(shè)、定時(shí)器外設(shè)、以及為了使系統(tǒng)能夠工作在較高的頻率,而添加PLL鎖相環(huán)。同時(shí),為了能夠驅(qū)動(dòng)LED燈,還需要根據(jù)實(shí)際硬件情況添加一定位寬的輸出型PIO以驅(qū)動(dòng)LED燈。本系統(tǒng)主要包含以下外設(shè):
PLL 時(shí)鐘管理單元,輸出2路相位相差90°的時(shí)鐘,一路提供給系統(tǒng)內(nèi)所有邏輯使用,一路輸出到SDRAM芯片的clk管腳上。(相位為-90°)
NIOS II 處理器 ,選擇f(快速)版本,其他默認(rèn)。
SDRAM控制器,16位數(shù)據(jù)位寬,12位行地址,9位列地址,用作NIOS II的數(shù)據(jù)和指令存儲(chǔ)器
EPCS控制器,用以掉電存儲(chǔ)FPGA和NIOS II的軟硬件固件信息
UART(RS232)控制器,用作系統(tǒng)標(biāo)準(zhǔn)輸入輸出設(shè)備,默認(rèn)115200波特率
Timer定時(shí)器,設(shè)置默認(rèn)10毫秒定時(shí)器,并可通過(guò)軟件修改寄存器以修改定時(shí)時(shí)間。
PIO,僅輸出型PIO,4位,對(duì)應(yīng)開(kāi)發(fā)板上4個(gè)LED燈
下圖為搭建好的最小NIOS II應(yīng)用系統(tǒng)
其中需要注意的是,驅(qū)動(dòng)LED的PIO為4位,并直接命名為了led,uart串口被命名為了RS232,這是為了與RT-Thread官方提供的NIOS II的BSP文件中相關(guān)代碼相對(duì)應(yīng)。
NIOS II CPU相關(guān)設(shè)置
定時(shí)器參數(shù)設(shè)置
UART控制器相關(guān)設(shè)置
LED PIO相關(guān)設(shè)置
在Quartus II工程中例化CPU系統(tǒng)
設(shè)計(jì)頂層文件
將Qsys中搭建的系統(tǒng)命名為mysystem,然后generate得到HDL文件,在Quartus II軟件中添加mysystem.qsys文件,新建Verilog文件,完善頂層例化信息,完善后的代碼如下所示:
module ac620_ghrd( input wire reset_n, input wire clk, output wire [11:0] sdram_addr, output wire [1:0] sdram_ba, output wire sdram_cas_n, output wire sdram_cke, output wire sdram_clk, output wire sdram_cs_n, inout wire [15:0] sdram_dq, output wire [1:0] sdram_dqm, output wire sdram_ras_n, output wire sdram_we_n, output wire [3:0] led, input wire uart_rxd, output wire uart_txd, output wire epcs_dclk, output wire epcs_sce, output wire epcs_sdo, input wire epcs_data0 ); mysystem u0 ( .clk_in_reset_reset_n (reset_n), .clk_in_clk (clk), .sdram_addr (sdram_addr), .sdram_ba (sdram_ba), .sdram_cas_n (sdram_cas_n), .sdram_cke (sdram_cke), .sdram_cs_n (sdram_cs_n), .sdram_dq (sdram_dq), .sdram_dqm (sdram_dqm), .sdram_ras_n (sdram_ras_n), .sdram_we_n (sdram_we_n), .led_export (led), .uart_rxd (uart_rxd), .uart_txd (uart_txd), .sdram_cko_clk (sdram_clk), .epcs_dclk (epcs_dclk), .epcs_sce (epcs_sce), .epcs_sdo (epcs_sdo), .epcs_data0 (epcs_data0), .altpll_0_phasedone_conduit_export (), .altpll_0_locked_conduit_export (), .altpll_0_areset_conduit_export () ); endmodule
設(shè)置EPCS管腳功能
根據(jù)AC620 FPGA開(kāi)發(fā)板引腳分配表或者開(kāi)發(fā)板背面的絲印對(duì)用到的引腳功能一一分配正確的管腳。注意設(shè)置所有的IO電平為3.3LVTTL,以防止無(wú)法正確驅(qū)動(dòng)SDRAM存儲(chǔ)器。另外由于使用到了EPCS,因此需要在Quartus中設(shè)置其功能為regular IO,如下圖所示:
添加SDC約束文件
在做基于NIOS II的SOPC開(kāi)發(fā)時(shí),務(wù)必要添加SDC約束文件,對(duì)系統(tǒng)的時(shí)鐘進(jìn)行約束,以保證Quartus II軟件能夠按照運(yùn)行的頻率要求對(duì)系統(tǒng)進(jìn)行布局布線,否則,在沒(méi)有加約束的情況下,整個(gè)系統(tǒng)可能最高運(yùn)行頻率比50MHz還要低,就會(huì)出現(xiàn)系統(tǒng)無(wú)法正常運(yùn)行,軟件無(wú)法下載等各種故障。本實(shí)例中約束文件比較簡(jiǎn)單,大家只需要將下述內(nèi)容新建一個(gè)sdc文件保存起來(lái)并添加到Quartus II工程中即可:
set_time_format -unit ns -decimal_places 3 create_clock -name {clk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {clk}] derive_pll_clocks
添加完成后編譯整個(gè)工程,得到sof文件。
創(chuàng)建NIOS II應(yīng)用工程模版
打開(kāi)Quartus II集成的NIOS II軟件開(kāi)發(fā)工具(基于Eclipse),然后切換工作空間到Quartus II工程目錄下。
然后新建一個(gè)空白模版工程和bsp工程,如下所示。注意,sopcinfo文件路徑一定不能錯(cuò)。
移植RT-Thread操作系統(tǒng)
下載RT-Thread操作系統(tǒng)源碼
從git上下載RT-Thread操作系統(tǒng)的源文件,源碼地址:https://github.com/RT-Thread/rt-thread選擇master分支,點(diǎn)擊Clone or download按鈕,選擇Download zip來(lái)下載源文件,當(dāng)然也可以從我們提供的本實(shí)例的壓縮包中得到該文件。
下載完成之后的文件名為:rt-thread-master.zip
移植RT-Thread操作系統(tǒng)源碼
在RTT_Test工程下新建一個(gè)文件夾,命名為”rt-thread”,添加src文件夾,include文件夾到rt-thread文件夾下,然后添加libcpu下nios部分內(nèi)容到rt-thread文件夾下。注意,libcpu下提供了對(duì)各種體系架構(gòu)的cpu的支持,我們這里只需要nios部分即可,其他部分不需要添加到工程中。上述就完成了RT-Thread操作系統(tǒng)源碼的添加。但是此時(shí)還并不完整,我們還需要添加對(duì)NIOS II CPU的bsp文件,該文件在bsp路徑下的nios ii路徑下,我們拷貝該路徑下的所有.c和.h文件到工程中,注意,application.c是整個(gè)系統(tǒng)的應(yīng)用部分,也就是main函數(shù)所在文件,因此將該文件從rt-thread文件夾中移出到軟件工程的根目錄(拖動(dòng)即可),添加完成后的工程如下所示(具體可以參考我們提供的實(shí)例工程文件)。
設(shè)置頭文件搜索路徑
添加完所有的文件之后,我們還必須要在軟件的設(shè)置中添加頭文件搜索路徑,選中RTT_test工程,鼠標(biāo)右擊選擇Properties選項(xiàng),在彈出的對(duì)話框中選中Nios II Application Paths選項(xiàng),添加include和bsp文件夾道頭文件路徑中,然后確認(rèn)關(guān)閉。如果彈出下述相對(duì)路徑轉(zhuǎn)換提示,選擇Yes即可。
至此,所有的運(yùn)行RT-Thread操作系統(tǒng)的要求都已經(jīng)滿足了。
關(guān)閉FINSH支持功能
接下來(lái),我們打開(kāi)工程的rt-thread -> bsp -> rtconfig.h文件,定位到第80行左右,將#define RT_USING_FINSH這句話前面加上單行注釋符“//”,以屏蔽該定義,即不使用FINSH功能。
運(yùn)行RT-Thread操作系統(tǒng)
編譯運(yùn)行程序
然后對(duì)整個(gè)工程進(jìn)行全編譯(快捷鍵為Ctrl + B),編譯無(wú)誤,就會(huì)得到可下載到NIOS II CPU中運(yùn)行的elf文件,然后在菜單欄中依次點(diǎn)擊RUN -> Run Configurations選項(xiàng),打開(kāi)下載運(yùn)行頁(yè)面。
新建一個(gè)硬件運(yùn)行配置并選擇RTT_test工程,然后切換到Target Connection選項(xiàng)卡,刷新連接以確認(rèn)硬件USB Blaster已經(jīng)找到CPU。注意,在此操作之前需要先將Quartus II軟件編譯生成的sof文件下載到開(kāi)發(fā)板中,并使用Micro USB數(shù)據(jù)線連接開(kāi)發(fā)板和電腦,并打開(kāi)串口調(diào)試工具,以找到開(kāi)發(fā)板對(duì)應(yīng)串口,設(shè)置波特率115200,ASCII接收。
勾選忽略system id和時(shí)間戳選項(xiàng),然后點(diǎn)擊Run。即可開(kāi)始軟件程序的下載。
實(shí)驗(yàn)結(jié)果
下載完成后,即可在串口調(diào)試助手上看到系統(tǒng)運(yùn)行時(shí)打印的信息,同時(shí),開(kāi)發(fā)板上4個(gè)LED燈循環(huán)閃爍。
-
RAM
+關(guān)注
關(guān)注
8文章
1368瀏覽量
114693 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3248瀏覽量
114800 -
uart
+關(guān)注
關(guān)注
22文章
1235瀏覽量
101392
原文標(biāo)題:基于 NIOS II 處理器的RT-Thread物聯(lián)網(wǎng)操作系統(tǒng)移植與使用教程
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論