

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> FPGA-CPLD原理及應(yīng)用課程設(shè)計(jì)報(bào)告</p><p> 題目: 萬(wàn)年歷設(shè)計(jì) </p><p> 學(xué)院: 信息與電子工程學(xué)院</p><p> 專業(yè): 電子信息工程</p><p> 學(xué)號(hào): XXXXXXX
2、X</p><p> 姓名: XXXXXX </p><p> 指導(dǎo)老師: XXXXXX</p><p> 時(shí)間: 2015.12.20-2015.12.23</p><p><b> 一、摘要</b></p><p> 設(shè)計(jì)從系統(tǒng)
3、硬件出發(fā),由CPU、總線、RAM、外接設(shè)備等構(gòu)成SOPC Builder的硬件系統(tǒng),通過(guò)Nios II DE2開(kāi)發(fā)的嵌入式軟件編寫(xiě)并嵌入SOPC Builder的硬件中實(shí)現(xiàn)萬(wàn)年歷的整體開(kāi)發(fā)。通過(guò)應(yīng)用SoPC Builder開(kāi)發(fā)工具,設(shè)計(jì)者可以擺脫傳統(tǒng)的、易于出錯(cuò)的軟硬件設(shè)計(jì)細(xì)節(jié),從而達(dá)到加快項(xiàng)目開(kāi)發(fā)、縮短開(kāi)發(fā)周期、節(jié)約開(kāi)發(fā)成本的目的并具有高集成度、設(shè)計(jì)靈活和可移植性較好。</p><p> 關(guān)鍵詞:萬(wàn)年歷 S
4、OPC SOPC Builder Nios II DE2</p><p><b> 二、設(shè)計(jì)要求 </b></p><p> 用Nios II DE2 開(kāi)發(fā)板的LCD顯示電子鐘的日期和時(shí)間。LCD分兩行顯示,第1行顯示年、月、日;第2行顯示時(shí)、分、秒。用輸入BUTTON[0]來(lái)控制LCD行的修改,同時(shí)讓Nios II DE2開(kāi)發(fā)板上的綠色發(fā)光二極管亮滅來(lái)表示這
5、個(gè)選擇。當(dāng)BUTTON[0]按一下后,LEDG3亮,可以修改年、月和日的數(shù)字;再按一下BUTTON[0]后,LEDG3滅,可以修改時(shí)、分和秒的數(shù)字。</p><p> 另外用輸入按鈕BUTTON[3]來(lái)控制日期和時(shí)間的修改,當(dāng)處于日期修改方式時(shí),每次按動(dòng)一次BUTTON[3],依次更換“年”、“月”和“日”的修改。當(dāng)處于時(shí)間修改方式時(shí),每次按動(dòng)一次BUTTON[3],依次更換“時(shí)”、“分”和“秒”的修改。修改對(duì)
6、象被選中后,按動(dòng)BUTTON[2]輸入按鈕可以增加顯示的數(shù)字;按動(dòng)BUTTON[1]輸入按鈕可以減少顯示的數(shù)字。</p><p><b> 三、設(shè)計(jì)內(nèi)容</b></p><p><b> 1、按鍵信息</b></p><p> BUTTON[3]:“年”、“月”、“日”或“時(shí)”、“分”、“秒”切換鍵</p>
7、;<p> BUTTON[2]:+鍵</p><p> BUTTON[1]:-鍵</p><p> BUTTON[0]:“年”、“月”、“日”與“時(shí)”、“分”、“秒”切換鍵</p><p><b> 顯示信息</b></p><p> LCD_Line1:顯示“年”、“月”、“日” </p&
8、gt;<p> LCD_Line1:顯示“時(shí)”、“分”、“秒”</p><p> 2、SOPC Builder 硬件建立</p><p> SOPC Builder是在Quartus II里的SOPC Builder進(jìn)行的,先建立工程,在SOPC Builder里添加硬件,包括CPU ,jtag_uart ,RAM,LCD,PIO,按鍵,LED,以及LCD_ON。<
9、;/p><p> 3、Quartus II硬件處理</p><p> 硬件會(huì)自動(dòng)建立一個(gè)頂層模塊,通過(guò)建一個(gè)原理圖來(lái)對(duì)對(duì)應(yīng)的硬件進(jìn)行輸入輸出的添加,再鎖定引腳,編譯工程,硬件下載。</p><p> 4、Nios II DE2嵌入軟件編寫(xiě)</p><p> 在Nios II里建立工程,選擇相應(yīng)的模塊,編寫(xiě)需要嵌入的軟件,添加缺少的頭文件對(duì)
10、應(yīng)的宏定義,編譯工程,進(jìn)行軟件下載,在觀察結(jié)果。</p><p><b> 四、設(shè)計(jì)步驟</b></p><p> 1、打開(kāi)Quartus II新建工程</p><p> 2、打開(kāi)SOPC Builder生成相應(yīng)的硬件如圖所示</p><p><b> 圖1.SoPC配置</b></p
11、><p> 建立好后點(diǎn)擊Generate運(yùn)行,看是否出錯(cuò),然后點(diǎn)擊exit退出。</p><p> 3、在Quartus II中建立圖形文件,調(diào)用剛才生成的硬件系統(tǒng),然后進(jìn)行引腳配置。</p><p><b> 引腳配置圖如下:</b></p><p><b> 圖2.引腳配置</b></
12、p><p> 然后進(jìn)行編譯,生成文件如下圖:</p><p><b> 圖3.頂層電路</b></p><p><b> Nios II運(yùn)行</b></p><p> 打開(kāi)Nios II IDE2,建立工程,選擇count_binary模塊,添加一個(gè)LCD.h的頂層文件。</p>
13、<p> LCD.h的頂層文件為:</p><p> #ifndef _LCD_H_</p><p> #define _LCD_H_</p><p> //LCD Module 16*2</p><p> #define lcd_write_cmd(base,data) IOWR(base, 0, data)&l
14、t;/p><p> #define lcd_read_cmd(base) IORD(base, 1)</p><p> #define lcd_write_data(base,data) IOWR(base, 2, data)</p><p> #define lcd_read_data(base) IORD(base,
15、 3)</p><p> //==========================</p><p> void LCD_Init();</p><p> void LCD_Show_Text(char*Text);</p><p> void LCD_Line2();</p><p> void
16、 LCD_Test();</p><p> //=========================</p><p> #endif //_LCD_H_</p><p><b> C語(yǔ)言程序代碼為:</b></p><p> #include <stdio.h></p><p>
17、; #include "altera_avalon_pio_regs.h"</p><p> #include "alt_types.h"</p><p> #include "system.h"</p><p> #ifndef _LCD_H_</p><p> #def
18、ine _LCD_H_</p><p> //LCD Module 16*2</p><p> #define lcd_write_cmd(base,data) IOWR(base, 0, data)</p><p> #define lcd_read_cmd(base) IORD(base, 1)</p><p&
19、gt; #define lcd_write_data(base,data) IOWR(base, 2, data)</p><p> #define lcd_read_data(base) IORD(base, 3)</p><p> //==========================</p><p> void LCD_
20、Init();</p><p> void LCD_Show_Text(char*Text);</p><p> void LCD_Line2();</p><p> void LCD_Test();</p><p> //=========================</p><p> #e
21、ndif //_LCD_H_</p><p> int year=2015;</p><p> int month=12;</p><p> int day=23;</p><p> int hour=11;</p><p> int minute=10;</p><p> int
22、second=21;</p><p> int selectkey=1;</p><p> int selectkeylr=1;</p><p><b> int ms=0;</b></p><p> int KEY=0;</p><p> int shift=0,con=0,step=
23、0;</p><p> //#include "basic_io.h"</p><p> volatile int edge_capture;</p><p> void LCD_Init()</p><p><b> {</b></p><p> lcd_write
24、_cmd(LCD_BASE,0x38);</p><p> usleep(2000);</p><p> lcd_write_cmd(LCD_BASE,0x0C);</p><p> usleep(2000);</p><p> lcd_write_cmd(LCD_BASE,0x01);</p><p> u
25、sleep(2000);</p><p> lcd_write_cmd(LCD_BASE,0x06);</p><p> usleep(2000);</p><p> lcd_write_cmd(LCD_BASE,0x80);</p><p> usleep(2000);</p><p><b>
26、}</b></p><p> void LCD_Show_Text(char*Text)</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i=0;i<strlen(Text);i++)</p>&
27、lt;p><b> {</b></p><p> lcd_write_data(LCD_BASE,Text[i]);</p><p> usleep(2000);</p><p><b> }</b></p><p><b> }</b></p>
28、<p> void LCD_Line1()</p><p><b> {</b></p><p> lcd_write_cmd(LCD_BASE,0x80);</p><p> usleep(2000);</p><p><b> }</b></p><p&g
29、t; void LCD_Line2()</p><p><b> {</b></p><p> lcd_write_cmd(LCD_BASE,0xC0);</p><p> usleep(2000);</p><p><b> }</b></p><p> //=
30、=========判斷按鍵=================</p><p> int push_button(void){</p><p> if(IORD(KEY_PIO_BASE, 0)==14) {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 1;}</p><p> if(IORD(KEY_P
31、IO_BASE, 0)==13) {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 2;}</p><p> if(IORD(KEY_PIO_BASE, 0)==11) {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 3;}</p><p> if(IORD(KEY_PIO
32、_BASE, 0)==7) {while(1){if(IORD(KEY_PIO_BASE, 0)==15)break;}return 4;}</p><p> else return 0;</p><p><b> }</b></p><p> //==========判斷按鍵=================</p>&
33、lt;p> //==========修改時(shí)間=================</p><p> void modify(void)</p><p><b> {</b></p><p> if(shift==2){//修改時(shí)間</p><p> if(con==0){hour+=step;if(hour
34、>=24||hour<0)hour=0;}</p><p> else if(con==1){minute+=step;if(minute>=60||minute<0) minute=0;}</p><p> else if(con==2){second +=step;if(second>=60||second<0) second=0;}</p
35、><p><b> }</b></p><p> if(shift==1){//修改date</p><p> if(con==0) {year+=step;if(year<0)year=0;}</p><p> else if(con==1){ month+=step;if(month>12||mont
36、h<0)month=0;}</p><p> else if(con==2) {day +=step;if(day>31||day<0)day=0;}</p><p><b> }</b></p><p><b> step=0;</b></p><p><b>
37、 }</b></p><p> //==========修改時(shí)間=================</p><p> int main()</p><p><b> {</b></p><p><b> while(1){</b></p><p> if
38、(ms%10==0){</p><p> if(ms/10==1){//顯示</p><p> if(shift==1){ //date</p><p> if(con==0)//year</p><p> printf(" -%2d-%d\n",month,day);</p><p>
39、; if(con==1)//month</p><p> printf("%d- -%d\n",year,day);</p><p> if(con==2)//day</p><p> printf("%d-%2d- \n",year,month);</p><p> printf(&qu
40、ot;%d:%d:%2d\n",hour,minute,second); //time</p><p><b> }</b></p><p> if(shift==2){</p><p> printf("%d-%2d-%d\n",year,month,day);</p><p>
41、if(con==0)//hour</p><p> printf(" :%d:%2d\n",minute,second);</p><p> if(con==1)//minute</p><p> printf("%d: :%2d\n",hour,second);</p><p> if(c
42、on==2)//second</p><p> printf("%d:%d: \n",hour,minute);</p><p><b> }</b></p><p><b> }</b></p><p><b> else {</b></p
43、><p> printf("%d-%2d-%d\n",year,month,day);</p><p> printf("%d:%d:%2d\n",hour,minute,second);</p><p><b> }</b></p><p><b> }</b
44、></p><p> usleep(50000);</p><p><b> ms++;</b></p><p> if(ms==20){</p><p><b> ms=0;</b></p><p><b> second++;</b>
45、</p><p><b> }</b></p><p> if(second==60){</p><p><b> minute++;</b></p><p><b> second=0;</b></p><p> if(minute==60)
46、{</p><p><b> minute=0;</b></p><p><b> hour++;</b></p><p> if(hour==24){</p><p><b> hour=0;</b></p><p><b> da
47、y++;</b></p><p> if(day==31){</p><p><b> day=1;</b></p><p><b> month++;</b></p><p> if(month==12){</p><p><b> mont
48、h=1;</b></p><p><b> year++;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b&g
49、t; }</b></p><p><b> }</b></p><p> //=============檢測(cè)按鍵</p><p> KEY=push_button();</p><p> switch(KEY){</p><p> case 1: shift++;if(sh
50、ift>=3)shift=0; break;</p><p> case 2: step=1;break;</p><p> case 3: step=-1;break;</p><p> case 4: con++;if(con>=3)con=0; break;</p><p> default :break;</
51、p><p><b> }</b></p><p><b> modify();</b></p><p> //=============檢測(cè)按鍵</p><p><b> }</b></p><p><b> return 0;</
52、b></p><p><b> }</b></p><p> 連接開(kāi)發(fā)板,將文件下載到開(kāi)發(fā)板,運(yùn)行文件檢驗(yàn)是否正確。</p><p> 檢查錯(cuò)誤并修改,知道結(jié)果正確。 </p><p> 五、運(yùn)行情況與問(wèn)題分析</p><p> 1、建立工程時(shí),注意不能出現(xiàn)中文或者空格,且工程
53、名需與文件名一致,選定芯片;</p><p> 2、在生成CPU硬件系統(tǒng)時(shí),定義端口時(shí),需注意設(shè)定端口輸入與輸出的位寬,需與程序定義的數(shù)值一致,否則運(yùn)行溢出報(bào)錯(cuò),須修改;</p><p> 3、建立圖形文件后,需進(jìn)行編譯,出現(xiàn)錯(cuò)誤得返回原理圖核對(duì),找到錯(cuò)誤修改后重新編譯;</p><p> 4、進(jìn)行引腳鎖定時(shí),注意引腳文件的編寫(xiě),否則選擇引腳文件點(diǎn)擊Run后會(huì)
54、不成功,從而影響后面程序的調(diào)試;</p><p> 5、當(dāng)日數(shù)為31時(shí),調(diào)節(jié)月份日期不會(huì)隨機(jī)改變,就會(huì)出現(xiàn)4月31日等錯(cuò)誤,加入程序段但是還是沒(méi)有完成跳變;</p><p> 6、程序中閃爍程序段、跳變程序段不執(zhí)行,程序還需后續(xù)修改;</p><p><b> 7、實(shí)物圖</b></p><p><b>
55、 圖4.實(shí)物圖</b></p><p><b> 六、結(jié)論</b></p><p> 采用NIOSⅡ集成開(kāi)發(fā)環(huán)境提供的快捷開(kāi)發(fā)手段,在Cyclone 1C6Q240C8芯片上創(chuàng)建了一個(gè)用戶定制CPU和外設(shè)的片上系統(tǒng),同時(shí)完成對(duì)液晶顯示器和LED的編程控制。整個(gè)系統(tǒng)充分體現(xiàn)了SOPC設(shè)計(jì)方法的靈活性,設(shè)計(jì)時(shí)只定制系統(tǒng)需要的外設(shè)器件接口,避免過(guò)多的外圍電
56、路和器件造成體積、功耗的增多和可靠性的下降。由于采用軟核結(jié)構(gòu),方便系統(tǒng)的升級(jí)和擴(kuò)展,而不必硬件改版,節(jié)約了成本,加快開(kāi)發(fā)進(jìn)度,縮短了產(chǎn)品的開(kāi)發(fā)周期。</p><p><b> 七、心得體會(huì)</b></p><p> 經(jīng)過(guò)本次SoPC課程設(shè)計(jì)實(shí)驗(yàn),使我對(duì)QuartusⅡ與NiosⅡDE2以及開(kāi)發(fā)板的使用更加熟練,并且初步掌握了FPGA從理論設(shè)計(jì)到硬件開(kāi)發(fā)的流程,詳細(xì)
57、了解了萬(wàn)年歷的軟件設(shè)計(jì)跟硬件設(shè)計(jì)的整個(gè)過(guò)程。在課程設(shè)計(jì)的過(guò)程中,遇到了一些以前沒(méi)有出現(xiàn)過(guò)的問(wèn)題,例如:課程設(shè)計(jì)指導(dǎo)書(shū)上的電路圖中多了一個(gè)引腳LCD_ON,這個(gè)引腳是不需要的,但是沒(méi)有檢查出來(lái)錯(cuò)誤,導(dǎo)致開(kāi)發(fā)板無(wú)法顯示時(shí)間,后來(lái)在老師的指導(dǎo)下,才知道了問(wèn)題所在。萬(wàn)年歷的程序的編寫(xiě)也花費(fèi)了很多時(shí)間,諸如此類的問(wèn)題還有很多,后來(lái)在自己的努力和同學(xué)的幫助下完成了本次課程設(shè)計(jì),從而使得自己的理論知識(shí)與實(shí)踐能力得到了提升,這次經(jīng)歷是大學(xué)中的一次寶貴的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- fpga-cpld原理及應(yīng)用課程萬(wàn)年歷設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)報(bào)告--萬(wàn)年歷
- 萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 萬(wàn)年歷課程設(shè)計(jì)--萬(wàn)年歷電子時(shí)鐘
- 萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 微機(jī)原理課程設(shè)計(jì)報(bào)告--萬(wàn)年歷.doc
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 萬(wàn)年歷課程設(shè)計(jì)
- 數(shù)字萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)報(bào)告--電子萬(wàn)年歷
- java課程設(shè)計(jì)報(bào)告-萬(wàn)年歷
- java萬(wàn)年歷課程設(shè)計(jì)報(bào)告
- java課程設(shè)計(jì)報(bào)告---萬(wàn)年歷
- 萬(wàn)年歷系統(tǒng)課程設(shè)計(jì)報(bào)告
- 電子萬(wàn)年歷課程設(shè)計(jì)報(bào)告
評(píng)論
0/150
提交評(píng)論