NIOS開發(fā)結(jié)構(gòu)基礎(chǔ)構(gòu)思
至此,“橋”搭完。
接下來在把我們的“數(shù)碼管控制器”加入sopc builder系統(tǒng)中。
現(xiàn)在幾乎所有講nios的書都會(huì)提及自定義用戶外設(shè),而且用的都是altera官方提供的例子PWM,本文的“數(shù)碼管控制器”就是照著它依葫蘆畫瓢改過來 的,呵呵,慚愧慚愧,之所以想改它,一是因?yàn)樗玫氖莢erilog而不是VHDL,而大多數(shù)人先接觸卻是VHDL;二來PWM的顯示效果似乎不太明顯, 改成數(shù)碼管顯示相對比較有成就感;第三,PWM的邏輯稍微有一點(diǎn)點(diǎn)復(fù)雜,我們的重點(diǎn)在于說明怎樣自定義外設(shè),當(dāng)然例子越簡單越好。
既然是照著PWM原樣改的,所以本文工程的結(jié)構(gòu)與之保持高度一致,將其加入sopc builder的步驟也差不多,這里我就不再碼字了,各位照著書上做吧:
《SOPC嵌入式系統(tǒng)基礎(chǔ)教程(周立功等著)》第8章……
再接下來,建立一個(gè)包含“數(shù)碼管控制器”的nios系統(tǒng),并編寫應(yīng)用程序,實(shí)現(xiàn)從0到9計(jì)數(shù)。
貼張官方的nios設(shè)計(jì)流程圖,看起來很漂亮是吧,不愧是altera的東西,大而全而不亂。
先說最中間的SOPC Builder,它的任務(wù)是建立一個(gè)“以Nios CPU為核心,以Avalon總線為紐帶,將各種硬件設(shè)備連接起來”的nios系統(tǒng);這個(gè)系統(tǒng)要在FPGA中運(yùn)行,所以必須掛靠一個(gè)Quartus II工程,用左邊的Quartus II進(jìn)行分配引腳等等工作,生成硬件系統(tǒng);接著,右邊的Nios II IDE就可以在這個(gè)硬件系統(tǒng)上設(shè)計(jì)應(yīng)用程序了;最后將硬件系統(tǒng)和軟件程序分別下載到FPGA芯片上,大功告成。
下面step by step
1> Quartus II 新建一個(gè)工程名,工程名DE2_SEG7。
2> Tool → SOPC Builder 打開SOPC Builder。
3> System Name: nios2_system 選VHDL。
一個(gè)包含“數(shù)碼管控制器”的最小系統(tǒng)至少由3部分組成:CPU必不可少,RAM存儲(chǔ)代碼,還有剛才設(shè)計(jì)的seg7_avalon。
4> 加入Nios II Processor,選Nios II/e,精簡型夠用了。
5> 加入On-Chip Memory,類型選RAM,位寬默認(rèn)32 bits,Total Memory選48Kbytes,等會(huì)兒軟件要占用四十多K空間。
6> 加入seg7_avalon。
7> 將這三個(gè)組件的名稱改好看點(diǎn),然后設(shè)定RAM的基地址為0x00000000,再右鍵鎖定基地址,如圖:
為什么要鎖定RAM的基地址為0呢?點(diǎn)選第二個(gè)選項(xiàng)卡,可以看到Reset Address對應(yīng)著RAM,系統(tǒng)的復(fù)位肯定要從地址0開始。
8> 由于剛才人為改動(dòng)了地址分配,弄亂了,讓系統(tǒng)自動(dòng)再分配一次,當(dāng)然被鎖定的RAM基地址是不會(huì)變的。System →Auto-Assign Base Addresses。最終系統(tǒng)組件列表如下:
注意,seg7的地址范圍是0x00010800→0x00010807,占8個(gè)地址,nios系統(tǒng)的地址按字節(jié)分配,也就是說,每個(gè)字節(jié)占用一 個(gè)地址,數(shù)碼管控制器中定義了兩個(gè)寄存器,avalon總線規(guī)定每個(gè)寄存器占32位(實(shí)際上是不是32位它就不管了,反正按最大32位分配),這樣兩個(gè)寄 存器共占去8個(gè)字節(jié),自然需要8個(gè)地址。
9> 點(diǎn)擊Generate生成nios系統(tǒng),回到Quartus II。
10> 新建一個(gè)頂層文件File→New→Block Diagram/Schematic File,引入nios II系統(tǒng),增加輸入輸出引腳。然后,Assignment→Import Assignment,添加引腳分配文件(在DE2光盤目錄下的DE2_tutorialsdesign_files DE2_pin_assignments.csv),改動(dòng)頂層文件的引腳名稱使其與.csv文件中保持一致。
11> 編譯,查看編譯報(bào)告,可見,48K的RAM占用了芯片83%的memory bits,差不多耗光了。
12> 硬件部分已經(jīng)搞定,關(guān)掉Quartus II,打開Nios II IDE,切換到工作目錄下。
13> File→New→C/C++ Application,SOPC Builder System選擇nios2_system.ptf(就是剛才Generate Nios II系統(tǒng)生成的東東),再選模板Hello World(純屬偷懶 ),頂上的name改成seg_example,F(xiàn)inish。
14> 改動(dòng)hello_world.c,代碼的功能為:先初始化數(shù)碼管,等待2秒鐘,再進(jìn)行0-9的循環(huán),循環(huán)過程中穿插2秒鐘的清屏。SEG7_BASE的宏 定義在system.h中,實(shí)際上就是在SOPC Builder中的seg7_avalon的基地址0x00010800。
15> Project→Build Project,得到編譯報(bào)告,軟件占用了7K空間……
16> 下載到DE2板上,運(yùn)行,數(shù)碼管不停地閃啊閃。
OK,從硬件到軟件的一條龍講完了。本文引用地址:http://m.butianyuan.cn/article/191702.htm
評論