SOPC課程設計實驗報告--萬年歷_第1頁
SOPC課程設計實驗報告--萬年歷_第2頁
SOPC課程設計實驗報告--萬年歷_第3頁
SOPC課程設計實驗報告--萬年歷_第4頁
SOPC課程設計實驗報告--萬年歷_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 FPGA-CPLD原理及應用課程設計報告 題目: 萬年歷 學院: 信息與電子工程學院專業: 電子科學與技術學號: 姓名: 指導老師: 時間:2013-7-152013-7-2010一、摘要本文介紹了一種基于片上可編程系統(SOPC)設計萬年歷的方法。本次設計從系統硬件出發,由CPU,總線,RAM,外接設備等構成SOPC Builder的硬件系統,通過Nios II DE2開發的嵌入式軟件編寫并嵌入SOPC Builder的硬件中實現萬年歷的整體開發。通過應用SoPC Builder開發工具,設計者可以擺脫傳統的、易于出錯的軟硬件設計細節,從而達到加快項目開發、縮短開發周期、節約開發成本的目的

2、并具有高集成度、設計靈活和可移植性較好。關鍵詞:萬年歷 SOPC SOPC Builder Nios II DE2二、設計要求 用Nios II DE2 開發板的LCD顯示電子鐘的日期和時間。LCD分兩行顯示,第1行顯示年、月、日;第2行顯示時、分、秒。用輸入BUTTON0來控制LCD行的修改,同時讓Nios II DE2開發板上的綠色發光二極管亮滅來表示這個選擇。當BUTTON0按一下后,LEDG3亮,可以修改年、月和日的數字;再按一下BUTTON0后,LEDG3滅,可以修改時、分和秒的數字。另外用輸入按鈕BUTTON3來控制日期和時間的修改,當處于日期修改方式時,每次按動一次BUTTON3

3、,依次更換“年”、“月”和“日”的修改。當處于時間修改方式時,每次按動一次BUTTON3,依次更換“時”、“分”和“秒”的修改。修改對象被選中后,按動BUTTON2輸入按鈕可以增加顯示的數字;按動BUTTON1輸入按鈕可以減少顯示的數字。三、設計內容1、按鍵信息BUTTON3:“年”、“月”、“日”或“時”、“分”、“秒”切換鍵BUTTON2:+鍵BUTTON1:-鍵BUTTON0:“年”、“月”、“日”與“時”、“分”、“秒”切換鍵顯示信息LCD_Line1:顯示“年”、“月”、“日” LCD_Line1:顯示“時”、“分”、“秒”2、SOPC Builder 硬件建立 SOPC Build

4、er是在Quartus II里的SOPC Builder進行的,先建立工程,在SOPC Builder里添加硬件,包括CPU ,jtag_uart ,RAM,LCD,PIO,按鍵,LED,以及LCD_ON。3、Quartus II硬件處理 硬件會自動建立一個頂層模塊,通過建一個原理圖來對對應的硬件進行輸入輸出的添加,再鎖定引腳,編譯工程,硬件下載。 4、Nios II DE2嵌入軟件編寫 在Nios II里建立工程,選擇相應的模塊,編寫需要嵌入的軟件,添加缺少的頭文件對應的宏定義,編譯工程,進行軟件下載,在觀察結果。四、設計步驟1、打開Quartus II新建工程2、打開SOPC Builde

5、r生成相應的硬件如圖所示 建立好后點擊Generate運行,看是否出錯,然后點擊exit退出。 3、調用剛才生成的硬件系統,在Quartus II中建立圖形文件,然后進行引腳鎖定。引腳鎖定引腳文件如下:#Setup.tcl#Setup pin settingset_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED"set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFFset_location_assignment PIN_N2 -t

6、o clkset_location_assignment PIN_V18 -to led3set_location_assignment PIN_W19 -to led2set_location_assignment PIN_AF22 -to led1set_location_assignment PIN_AE22 -to led0set_location_assignment PIN_W26 -to KEY3set_location_assignment PIN_P23 -to KEY2set_location_assignment PIN_N23 -to KEY1set_location_

7、assignment PIN_G26 -to KEY0set_location_assignment PIN_K4 -to LCD_RWset_location_assignment PIN_K3 -to LCD_ENset_location_assignment PIN_K1 -to LCD_RSset_location_assignment PIN_L4 -to LCD_ONset_location_assignment PIN_J1 -to LCD_DATA0set_location_assignment PIN_J2 -to LCD_DATA1set_location_assignme

8、nt PIN_H1 -to LCD_DATA2set_location_assignment PIN_H2 -to LCD_DATA3set_location_assignment PIN_J4 -to LCD_DATA4set_location_assignment PIN_J3 -to LCD_DATA5set_location_assignment PIN_H4 -to LCD_DATA6set_location_assignment PIN_H3 -to LCD_DATA7 然后進行編譯,在Quartus I下生成文件如下圖:4、 Nios II運行打開Nios II IDE2,建立工

9、程,選擇count_binary模塊,添加一個LCD.h的頂層文件。LCD.h的頂層文件為:#ifndef _LCD_H_#define _LCD_H_/LCD Module 16*2#define lcd_write_cmd(base,data) IOWR(base, 0, data)#define lcd_read_cmd(base) IORD(base, 1)#define lcd_write_data(base,data) IOWR(base, 2, data)#define lcd_read_data(base) IORD(base, 3)/=void LCD_Init();void

10、 LCD_Show_Text(char*Text);void LCD_Line2();void LCD_Test();/=#endif /_LCD_H_然后建立count_binary的C+文件。C+文件見附件。5、 連接開發板,將文件下載到開發板,運行文件檢驗是否正確。6、 檢查錯誤并修改,知道結果正確。五、運行情況與問題分析1、建立工程時,注意不能出現中文或者空格,且工程名需與文件名一致,選定芯片;2、在生成CPU硬件系統時,定義端口時,需注意設定端口輸入與輸出的位寬,需與程序定義的數值一致,否則運行溢出報錯,須修改;3、建立圖形文件后,需進行編譯,出現錯誤得返回原理圖核對,找到錯誤修改后

11、重新編譯;4、進行引腳鎖定時,注意引腳文件的編寫,否則選擇引腳文件點擊Run后會不成功,從而影響后面程序的調試; 5、當日數為31時,調節月份日期不會隨機改變,就會出現4月31日等錯誤,加入程序段但是還是沒有完成跳變; 6、程序中閃爍程序段、跳變程序段不執行,程序還需后續修改。 六、結論采用NIOS集成開發環境提供的快捷開發手段,在EP4CE115F29C7N芯片上創建了一個用戶定制CPU和外設的片上系統,同時完成對液晶顯示器和LED的編程控制。整個系統充分體現了SOPC設計方法的靈活性,設計時只定制系統需要的外設器件接口,避免過多的外圍電路和器件造成體積、功耗的增多和可靠性的下降。由于采用軟

12、核結構,方便系統的升級和擴展,而不必硬件改版,節約了成本,加快開發進度,縮短了產品的開發周期。綜上所述,萬年歷的設計思想新穎獨特,有很多創新之處。 七、心得體會 經過本次SOPC課程設計實驗,使我更加熟悉了Quartus 與Nios DE2以及開發板的使用,熟練掌握了從理論設計到硬件開發的流程,了解了萬年歷通過編程實現的整個過程。從整個實驗實現的過程中,碰到一些以前未出現過的問題,在自己的努力以及同學、老師的幫助下,使自己的理論及操作水平有所提高,在此我要鄭重感謝指導老師。附 件C+程序代碼如下:/* * "Hello World" example. * * This ex

13、ample prints 'Hello from Nios II' to the STDOUT stream. It runs on * the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example * designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT * device in your system's hardware.

14、* The memory footprint of this hosted application is 69 kbytes by default * using the standard reference design. * * For a reduced footprint version of this template, and an explanation of how * to reduce the memory footprint for a given application, see the * "small_hello_world" template.

15、 * */#include <stdio.h>#include "altera_avalon_pio_regs.h"#include "alt_types.h"#include "system.h"#ifndef _LCD_H_#define _LCD_H_/LCD Module 16*2#define lcd_write_cmd(base,data) IOWR(base, 0, data)#define lcd_read_cmd(base) IORD(base, 1)#define lcd_write_data(base

16、,data) IOWR(base, 2, data)#define lcd_read_data(base) IORD(base, 3)/=void LCD_Init();void LCD_Show_Text(char*Text);void LCD_Line2();void LCD_Test();/=#endif /_LCD_H_int year=2013;int month=7;int day=15;int hour=20;int minute=25;int second=30;int selectkey=1;int selectkeylr=1;int ms=0;int KEY=0;int s

17、hift=0,con=0,step=0;/#include "basic_io.h"volatile int edge_capture;void LCD_Init() lcd_write_cmd(LCD_BASE,0x38); usleep(2000); lcd_write_cmd(LCD_BASE,0x0C); usleep(2000); lcd_write_cmd(LCD_BASE,0x01); usleep(2000); lcd_write_cmd(LCD_BASE,0x06); usleep(2000); lcd_write_cmd(LCD_BASE,0x80);

18、usleep(2000);void LCD_Show_Text(char*Text) int i; for(i=0;i<strlen(Text);i+) lcd_write_data(LCD_BASE,Texti); usleep(2000); void LCD_Line1() lcd_write_cmd(LCD_BASE,0x80); usleep(2000);void LCD_Line2() lcd_write_cmd(LCD_BASE,0xC0); usleep(2000);/=判斷按鍵=int push_button(void) if(IORD(KEY_PIO_BASE, 0)=

19、14) while(1)if(IORD(KEY_PIO_BASE, 0)=15)break;return 1; if(IORD(KEY_PIO_BASE, 0)=13) while(1)if(IORD(KEY_PIO_BASE, 0)=15)break;return 2; if(IORD(KEY_PIO_BASE, 0)=11) while(1)if(IORD(KEY_PIO_BASE, 0)=15)break;return 3; if(IORD(KEY_PIO_BASE, 0)=7) while(1)if(IORD(KEY_PIO_BASE, 0)=15)break;return 4; el

20、se return 0;/=判斷按鍵=/=修改時間= void modify(void) if(shift=2)/修改時間 if(con=0)hour+=step;if(hour>=24|hour<0)hour=0; else if(con=1)minute+=step;if(minute>=60|minute<0) minute=0; else if(con=2)second +=step;if(second>=60|second<0) second=0; if(shift=1)/修改date if(con=0) year+=step;if(year<

21、;0)year=0; else if(con=1) month+=step;if(month>12|month<0)month=0; else if(con=2) day +=step;if(day>31|day<0)day=0; step=0; /=修改時間=int main()/* printf("%d-%2d-%dn",year,month,day); lcd_write_cmd(LCD_BASE,0x0f); usleep(1000000); lcd_write_cmd(LCD_BASE,0x10); usleep(1000000); lcd

22、_write_cmd(LCD_BASE,0x10); usleep(1000000); lcd_write_cmd(LCD_BASE,0x03); usleep(1000000); lcd_write_data(LCD_BASE,'c'); */ while(1) if(ms%10=0) if(ms/10=1)/顯示 if(shift=1) /date if(con=0)/year printf(" -%2d-%dn",month,day); if(con=1)/month printf("%d- -%dn",year,day); if(con=2)/day printf("%d-%2d- n",year,month); printf("%d:%d:%2dn",hour,minute,second); /time i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論