NIOS II 內核使用 之 代碼保存FLASH(EPCSX芯片)

  • 一.背景介紹
    介於最近在使用FPGA( altera芯片 CYCLONE IV E ) 做項目開發,遂在之前基礎上深入探索。使用NIOS II 軟內核開發FPGA,在損失一部分FPGA內存資源和邏輯資源的情況下,NIOS能夠幫開發者實現類似在ARM、DSP中才能做了複雜邏輯、複雜計算和分析工作。

- 二.工具
1) Quartus ii V13.14 Bit32
2 ) 內部集成工具 Qsys 和 Eclipes等

- 三.Qsys實現操作過程
直接來乾貨,實現步驟如下 :
1)首先,建立NIOS II 內核,在Qsys中;具體過程在本人上一章中有具體描述;
2)在Qsys工程裏,添加 EPCS 控制器模塊
在這裏插入圖片描述
3)EPCS模塊配置;跟其他模塊配置方式相同,
a) 復位引腳配置到CLK模塊和JTAG-UART模塊,重點:必須兩個RESET都連接。
b) 時鐘正常配置,連接CLK的時鐘;數據總線和NIOS 模塊的數據總線連接。
c) External引腳配成外部引腳,重點:必須是外部引腳,在Quartus工程中需要用到。
d) EPCS定義起始地址:這裏之前我配置成0x0000的起始地址,導致在ECLIPSE 用FLASH PROGRAM 過程使用無法通道,提示"No EPCS registers found:tried looking at addresses 0x00001000 …"故障;
這個地方網上找了很多排故方式,都徒勞。最後靈光一閃;將它改成 0x7000。後面編譯通過下載成功。。。如果有朋友知道真正原因,請指導。
在這裏插入圖片描述4)生成代碼 Gernerate

- 四. Quartus 工程實現
1) 將上述生產的HDL文件,添加到自己的Quartus工程中,(所有都添加)不然容易報錯缺少.V文件。
2)在頂層文件中添加剛剛生成的NIOS HDL文件模塊名,實例化。
3)將實例化中的EPCS芯片操作引腳分配到FPGA的外部EPCS實際管腳上,這步非常重要;決定了NIOS 能夠操作EPCS芯片。注意:這裏容易遇到一個問題,EPCS芯片操作引腳無法配置的問題,Quartus提示報錯,這裏也有解決辦法。
工程>Device>Device advanced options > Dual-purpose > 將所有引腳都選 Use as regular I/O 模式,簡單理解成這幾個EPCS專用引腳配置成通用型引腳。
4)最後編譯該工程;生成了JTAG 配置的 sof 文件;
5)將sof文件下載到FPGA中,此時FPGA的內部NIOS就已經跑起來了。只是程序僅僅在FPGA內部RAM中,沒有存到外部FLASH內,掉電即消失。

- 五. Eclipse 工程實現
1) 在Quartus工程中啓動 Eclipe工具;新建工程 Filse > New > Nios ii application and BSP from Template ,意思是建立實例工程;包含了應用工程和FPGA底層驅動工程。如下所示:三步,第一選擇Quartus工程裏的"xx.sopcinfo"配置文件,一個工程只有一個;第二步取個名稱;第三步驟選擇工程模版,這裏選用Hellow Word Small ,佔用內存小。
在這裏插入圖片描述
2)出現兩個工程,其中bsp結尾的是庫工程,即FPGA的內存、引腳等等分配說明;

3)我們需要操作的僅僅只有TT2該應用工程;簡單舉例,在main中添加如下
#include “sys/alt_stdio.h”
#include “altera_avalon_pio_regs.h” // 在bsp工程中的FPGA 操作庫

int main()
{
alt_putstr(“Hello from Nios II!\n”);
while (1)
{
IOWR_ALTERA_AVALON_PIO_DATA(0x6000,0xFFFF);
usleep(100000);
IOWR_ALTERA_AVALON_PIO_DATA(0x6000,0x0000);
usleep(100000);
}
return 0;
}
4)測試在RAM中運行;
選擇工程,在菜單RUN中RUN AS > NIOS II HARDWARE ;這個時候在ECLIPE 的窗口可以看到運行情況;如果添加了指示燈,在開發部的LED燈將會閃爍。
說明NIOS 運行正常。
在這裏插入圖片描述
5)在進行最後一步,保存ECLIPSE工程與Quartus固件庫工程同時到FLASH前;要處理的問題。Eclipse自身問題,需要配置一個文件“ nios2-flash-override.txt ”
首先該文件的目的是,告訴Eclipes軟件,你所使用的外部FLASH芯片是什麼配置。
然後,操作方法是,直接網上DOWNLOAD,或者新建txt文件,添加下面內容。
[EPCS-202011] # EPCS1N (lead-free)
sector_size = 32768
sector_count = 4

[EPCS-202013] # EPCS4N (lead-free)
sector_size = 65536
sector_count = 8

[EPCS-C22013] # EPCS4N (lead-free)
sector_size = 65536
sector_count = 8

[EPCS-202013] # EPCS4N (lead-free)
sector_size = 65536
sector_count = 8

[EPCS-202015] # EPCS16N (lead-free)
sector_size = 65536
sector_count = 32

[EPCS-202017] # EPCS64N (lead-free)
sector_size = 65536
sector_count = 128

[EPCS-010215] #EPCS32N(lead-free)
sector_size = 65536
sector_count = 64

[EPCS-010216] # EPCS64N (lead-free)
sector_size = 65536
sector_count = 128

[EPCS-FF] # EPCS64N (lead-free)
sector_size = 65536
sector_count = 128

[EPCS-012018] #EPCS128N(lead-free)
sector_size = 262144
sector_count = 64

重點:當你不知道你的外部FLASH名稱時,不着急,直接在後面的步驟中看到報故障信息裏,會告訴你的FLASH名稱。上面加粗的信息是我的FLASH信息。
當然,該TXT文件必須放在 NIOS安裝目錄下bin文件夾中,才能被識別到。
在這裏插入圖片描述
6)最後一步,寫如外部FLASH 。FLASH PROGRAM 工具,在Eclipe軟件菜單中NIOS II > FLASH PROGRAM 打開。
在這裏插入圖片描述a) 添加固件庫文件 File > New
添加 Eclipe 的 bsp工程中的固件庫設置文件 “settings.bsp”
在這裏插入圖片描述b) 在 Connection 中 測試 USB Blaster 和 SYStem ID
在這裏插入圖片描述在這裏插入圖片描述
c) 添加 Quartus的工程文件 .sof 和 Eclipes應用工程文件 .LEF文件
在這裏插入圖片描述d) 添加 Quartus的工程文件 .sof 和 Eclipes應用工程文件 .LEF文件
將菜單裏的OPTIONS,最後四個都勾選。
e) START ,完成。上電重啓即可。
f) 最後補充一點:在Qsys配置NIOS內核中,Reset Vator 必須選擇 EPCS外設路徑。這樣啓動纔會從外部FLASH.

- 六. FLASH總結
1)Eclipse 工程,兩個工程,想要使用Qys配置的NIOS外部模塊時,必須查看bsp工程。比如:給GPIO輸出電平,. IOWR_ALTERA_AVALON_PIO_DATA(0x6000,0xFFFF);

2)Flash Progarm 問題;主要是 START後遇到各種報錯;
首先解決,Eclipse不認識FLASH芯片問題,添加上面的txt文件;
然後,在Qsys配置中,設置EPCS芯片的起始地址,如果0x0000,則報錯。改爲0X7000後正常。

3)對於剛入門的朋友,過程比較曲折,該教程希望能給你帶來幫助,少走彎路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章