




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于SOPC的數(shù)字鐘設(shè)計學(xué) 院:計控學(xué)院 班 級:計本121學(xué) 號:2012021001 姓 名:鐘濟(jì)強(qiáng)指導(dǎo)老師:張浩鵬一、 設(shè)計概述用Nios II DE2開發(fā)板的LCD顯示電子鐘的日期和時間,LCD分兩行顯示,第一行顯示年月日,第二行顯示時分秒。用輸入按鈕BUTTON來控制LCD行修改,通過Nios II IDE進(jìn)行軟件設(shè)計。二、 設(shè)計要求 1掌握Nios II系統(tǒng)的設(shè)計和使用方法; 2學(xué)習(xí)通過Nios II IDE進(jìn)行軟件設(shè)計的方法; 3實現(xiàn)在液晶屏上顯示時間和日期,并可以對其進(jìn)行設(shè)置。三、 實驗環(huán)境DE2 開發(fā)板QuartusII 7.2SOPC Builder 7.2NiosII I
2、DE 7.2四、 設(shè)計方案(總體設(shè)計、軟件設(shè)計、硬件設(shè)計)1. 總體設(shè)計要實現(xiàn)以下兩個功能:(1). 在液晶屏上顯示時間,日期(2). 對時間、日期能夠進(jìn)行設(shè)置建立新工程clock2. 硬件系統(tǒng)組成設(shè)計根據(jù)系統(tǒng)要實現(xiàn)的功能和開發(fā)板配置,需要用到的DE2開發(fā)板上的外圍器件有:LCD:電子鐘顯示屏幕按鈕:電子鐘設(shè)置功能鍵CFI Flash存儲器:存儲軟、硬件程序SDRAM存儲器:程序運行時將其導(dǎo)入SDRAM根據(jù)所用到的外設(shè)和器件特性,在SOPC Builder中建立系統(tǒng)要添加的模塊包括:NiosII CPU定時器,按鍵PIO,LCD, 外部存儲器總線(Avalon三態(tài)橋),外部SDRAM控制器,外
3、部Flash接口。打開SOPC Buider,系統(tǒng)名稱為sopc_clock加入SDRAM組件加入Flash Memory 組件加入外部存儲器總線(Avalon三態(tài)橋)加入按鍵PIO加入LCD加入NiosII CPU定時器,選擇標(biāo)準(zhǔn)型的元件添加完后,要為每個外設(shè)分配及地址和中斷請求優(yōu)先級(IRQ),在System中選擇Auto-Assign Base Address和Auto-Assign IRQs命令,這兩個命令可分別簡單分配外設(shè)基地址和中斷優(yōu)先級。然后生成Nios II系統(tǒng)。然后生成頂層文件,將Nios II系統(tǒng)模塊加入到頂層文件中,如圖所示原理圖進(jìn)行引腳鎖定,并編譯,然后進(jìn)行硬件下載3軟
4、件系統(tǒng)設(shè)計要實現(xiàn)系統(tǒng)所需的功能,大量的工作應(yīng)該集中在軟件設(shè)計和優(yōu)化上。電子鐘的軟件功能主要分為顯示、設(shè)置和時間算法三大部分。顯示部分的功能包括:顯示時間(小時:分鐘:秒)和 顯示日期(年-月-日)設(shè)置部分的功能包括:設(shè)置小時,設(shè)置分鐘,設(shè)置年份,設(shè)置月份,設(shè)置日期和退出設(shè)置。 設(shè)置部分的程序主要用在對按鍵的響應(yīng)。在編寫程序前要對DE2開發(fā)板上的四個按鍵BUTTON功能進(jìn)行如下分配:(1). 主菜單 BUTTON0:設(shè)置選擇鍵,可依次選擇設(shè)置時、分、秒和年、月、日BUTTON1:顯示日期鍵BUTTON2:顯示時間鍵(2). 子菜單(即進(jìn)入對某個選項設(shè)置后的按鍵功能):BUTTON1:選項數(shù)字增加
5、BUTTON2:選項數(shù)字減少BUTTON3:退出對選項的設(shè)置,返回主菜單時間算法部分的功能包括:時間累加和確定每個月的最大天數(shù),使年、月、日能正確累加五、 軟件代碼1count_binary.c的代碼:#include "count_binary.h"/程序每秒鐘檢測一次按鈕的狀態(tài),對日期和時間進(jìn)行設(shè)置#include "alt_types.h"#include <stdio.h>#include <string.h>#include <unistd.h>#include "system.h"#in
6、clude "sys/alt_irq.h"#include "altera_avalon_pio_regs.h"#include "lcd.h"volatile int edge_capture;void LCD_Init()/LCD初始化 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
7、_BASE,0x06); usleep(2000); lcd_write_cmd(LCD_BASE,0x80); usleep(2000);void LCD_Show_Text(char* Text)/LCD輸出格式 int i; for(i=0;i<strlen(Text);i+) lcd_write_data(LCD_BASE,Texti); usleep(2000); void LCD_Line1()/向LCD寫命令 lcd_write_cmd(LCD_BASE,0x80); usleep(2000);void LCD_Line2()/向LCD寫命令 lcd_write_cmd(L
8、CD_BASE,0xC0); usleep(2000);static void handle_button_interrupts(void* context,alt_u32 id) volatile int* edge_capture_ptr=(volatile int*) context; /*存儲按鈕的值到邊沿捕獲寄存器*/ *edge_capture_ptr=IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE); /*復(fù)位邊沿捕獲寄存器*/ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0);/
9、*初始化button_pio*/static void init_button_pio() void* edge_capture_ptr=(void*)&edge_capture; /*開放全部4個按鈕的中斷*/ IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE,0xf); /*復(fù)位邊沿捕獲寄存器*/ IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE,0x0); /*登記中斷源*/ alt_irq_register(BUTTON_PIO_IRQ,edge_capture_ptr,handle_b
10、utton_interrupts);void delay(unsigned int x) while(x-);int check_month(int month) /如果是1、3、5、7、8、10、12月,則每月31天,程序返回1 if(month=1)|(month=3)|(month=5)|(month=7)|(month=8)|(month=10)|(month=12) return 1; /如果是4、6、9、11月,則每月是30天,程序返回0 if(month=4)|(month=6)|(month=9)|(month=11) return 0; /如果是2月,程序返回2,具體多少天還
11、要根據(jù)年的判斷來決定 if(month=2) return 2;/*閏年的計算方法:公元紀(jì)年的年數(shù)可以被四整數(shù),即為閏年被100整除而不能被400整除為平年;被100整除也可被400整除的為閏年如2000年時閏年,而1900年不是 */int check_year(int year) if(year%400)=0)|(year%4)=0)&&(year%100)!=0) return 1; /是閏年,返回1 else return 0; /不是閏年,返回0int main(void) int screen=0;/共有兩行,一行顯示年月日,一行顯示時間 int pos=0;/每行
12、都有三個位置,第一行是年月日,第二行是時分秒 int year,month,day,hour,minute,second; unsigned long sum;/sum要設(shè)置為長整型變量,不然會溢出 char date16; char time16; int year1=6; int year2=0; int year3=0; int year4=2; int month1=1; int month2=0; int day1=1; int day2=0; int hour4,hour3,hour2,hour1,minute2,minute1,second2,second1; unsigned
13、int screenflag; hour=0;minute=0;second=0;year=2006;month=1;day=1; /年月日時分秒初始化init_button_pio();LCD_Init();while(1) if(pos>=3) pos=0;/共有三個位置0、1、2,超過了2要馬上清0 if(screen>=2) screen=0;/共有兩行0、1,超過了1要馬上清0 /na_LED8->np_piodata=1<<pos;/用一個LED指示當(dāng)前調(diào)整的位置 if(screen=0) screenflag=8; else screenflag=0
14、; /IOWR_ALTERA_AVALON_PIO_DATA(LED_GREEN_BASE,(1<<pos)|screenflag); usleep(1000000);/等待1秒的定時時間 if(second<59) second+; else second=0; if(minute<59) minute+; else minute=0; if(hour<23) hour+; else hour=0; if(day<30) day+; else day=1; if(month<12) month+; else month=1; if(year<9
15、999) year+; else year=2005; switch(edge_capture)/檢測按鈕 case 0x08:pos=pos+1;break;/改變調(diào)整位置/* 對數(shù)據(jù)進(jìn)行加減操作的CASE:case 0x02和case 0x04 根據(jù)當(dāng)前調(diào)整位置,判斷當(dāng)前屏顯示的是年、月、日還是時分、秒 然后決定是對年月日進(jìn)行加減還是對分時秒進(jìn)行加減*/case 0x02:/對當(dāng)前位置上的數(shù)據(jù)執(zhí)行減操作 if(pos=0) if(screen=0) if(day>1)day-; else if(check_month(month)=0)day=30; if(check_month(m
16、onth)=1)day=31; if(check_month(month)=2) if(check_year(year)day=29; else day=28; if(screen=1) if(second>0)second-; else second=59; if(pos=1) if(screen=0) if(month>1)month-; else month=12; if(screen=1) if(minute>0)minute-; else minute=59; if(pos=2) if(screen=0) if(year>0)year-; else year=
17、2005; if(screen=1) if(hour>0)hour-; else hour=23; break;case 0x04:/對當(dāng)前位置上的數(shù)據(jù)執(zhí)行加操作 if(pos=0) if(screen=0) if(check_month(month)=0)if(day<30)day+;else day=1; if(check_month(month)=1)if(day<31)day+;else day=1; if(check_month(month)=2) if(check_year(year)if(day<29)day+;else day=1; else if(da
18、y<28)day+;else day=1; if(screen=1) if(second<59)second+; else second=0; if(pos=1) if(screen=0) if(month<12)month+; else month=1; if(screen=1) if(minute<59)minute+; else minute=0; if(pos=2) if(screen=0) if(year<9999)year+; else year=2005; if(screen=1) if(hour<23)hour+; else hour=0;
19、break;case 0x01:screen+;break;/換屏edge_capture=0; year4=year/1000;year3=(year-year4*1000)/100; year2=(year-year4*1000-year3*100)/10;year1=year%10; month2=month/10;month1=month%10; day2=day/10;day1=day%10; LCD_Line1(); date0=year4+0x30;date1=year3+0x30; date2=year2+0x30;date3=year1+0x30; date4=' &
20、#39;date5=' ' date6=month2+0x30;date7=month1+0x30; date8=' 'date9=' ' date10=day2+0x30;date11=day1+0x30; date12=' 'date13=' ' date14=' 'date15=' ' LCD_Show_Text(date); hour4=0;hour3=0; hour2=hour/10;hour1=hour%10; minute2=minute/10;minute1=minu
21、te%10; second2=second/10;second1=second%10; time0=' 'time1=' ' time2=hour2+0x30;time3=hour1+0x30; time4=' 'time5=' ' time6=minute2+0x30;time7=minute1+0x30; time8=' 'time9=' ' time10=second2+0x30;time11=second1+0x30; time12=' 'time13=' '
22、 time14=' 'time15=' ' LCD_Line2(); LCD_Show_Text(time);2lcd.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(
23、base,3)/-void LCD_Init();void LCD_Show_Text(char* Text);void LCD_Line2();void LCD_Test();/-#endif六、 實驗分析和實驗結(jié)果用輸入按鈕BUTTON0可以控制LCD行修改,同時讓NiosII DE2開發(fā)板上的綠色發(fā)光二極管LEDG3的亮滅來表示。用輸入按鈕BUTTON3可以控制日期和時間的修改,BUTTON1和BUTTON2輸入按鈕可以減少和增加顯示的數(shù)字。實驗中開始時SDRAM的BIDIR端口的命名錯誤導(dǎo)致引腳鎖定未成功,此端口的名稱應(yīng)為DRAM_DQ15.0。此外,三態(tài)橋的設(shè)置被改變了,需要重新設(shè)置
24、,回到Quartus II中,在assignments中選擇settings,Device->Device and Pin Options->Unused Pins,改為As input tri-stated。七、 總結(jié)通過這12周的SOPC技術(shù)綜合設(shè)計實踐的學(xué)習(xí),我學(xué)會了Quartus II,SOPC Buider和Nios II DE2 的使用,并通過這些軟件可以進(jìn)行簡單的實驗操作,強(qiáng)化了我的動手能力,并通過這幾次實驗更加了解SOPC的設(shè)計與應(yīng)用。在實驗中,遇到了各種各樣的問題,首先是自己進(jìn)行檢查,查不出來再由老師同學(xué)進(jìn)行檢查和講解,提高了自己解決問題的能力,并且熟悉了整個實驗
25、的流程及具體的操作。我覺得這門課程很有意思,實驗中是把各個部分的操作整合在一起,形成一個系統(tǒng),做實驗時要有整體感,一旦出現(xiàn)問題整體的重新進(jìn)行設(shè)置和編譯,比如如果添加組建時出現(xiàn)錯誤,要重新添加,重新生成模塊,重新倒入模塊,重新編譯頂層文件,是一個整體的過程。八、 附錄參考SOPC技術(shù)與應(yīng)用,編著:江國強(qiáng),機(jī)械工業(yè)出版社。參考SOPC技術(shù)綜合設(shè)計實踐實驗指南,編著:邱德惠。思考題:1 何謂SOC?SOC(System On a Chip)稱為片上系統(tǒng),它是指將一個完整產(chǎn)品的功能集成在一個芯片上或芯片組上。SOC中可以包括微處理器CPU、數(shù)字信號處理器DSP、存儲器(ROM、RAM、Flash等)、
26、總線和總線控制器、外圍設(shè)備接口等,還可以包括數(shù)模混合電路(放大器、比較器、A/D和D/A轉(zhuǎn)換器、鎖相環(huán)等),甚至傳感器、微機(jī)電和微光電單元。2 何謂SOPC?SOPC(System On a Programmable Chip)稱為可編程片上系統(tǒng),它是基于可編程邏輯器件(FPGA或CPLD)可重構(gòu)的SOC。SOPC集成了硬核或軟核CPU、DSP、鎖相環(huán)(PLL)、存儲器、I/O接口及可編程邏輯,可以靈活高效地解決SOC方案,而且設(shè)計周期短,設(shè)計成本低,一般只需要一臺配有SOPC開發(fā)軟件的PC和一臺SOPC實驗開發(fā)系統(tǒng)(或開發(fā)板),就可以進(jìn)行SOPC的設(shè)計與開發(fā)。3 何謂IP核?IP(Intel
27、lectual Property)是知識產(chǎn)權(quán)的簡稱。集成電路IP是指經(jīng)過預(yù)先設(shè)計、預(yù)先驗證、符合產(chǎn)業(yè)界普遍認(rèn)同的設(shè)計規(guī)范和設(shè)計標(biāo)準(zhǔn),并具有相對獨立并可以重復(fù)利用的電路模塊或子系統(tǒng),如CPU、運算器、存儲器、放大器等。集成電路IP模塊具有知識含量高、占用芯片面積小、運行速度快、功耗低、工藝容差性大等特點,可重復(fù)用于SOC、SOPC或復(fù)雜ASIC設(shè)計中。4 何謂嵌入式系統(tǒng),嵌入式系統(tǒng)的CPU核可以分為哪兩種類型?嵌入式系統(tǒng)是指嵌入到對象體系中的專用計算機(jī)系統(tǒng),包括硬件和軟件兩大部分。硬件包括處理器、存儲器、輸入輸出接口和外部設(shè)備等,軟件包括系統(tǒng)軟件和應(yīng)用軟件。基于SOPC的嵌入式系統(tǒng)結(jié)構(gòu)主要包括嵌
28、入式微處理器(CPU核)、定時器(Timer)、嵌入式鎖相環(huán)(PLL)、嵌入式數(shù)字信號處理器(DSP)及其他IP模塊等部分。嵌入式系統(tǒng)的CPU核可以分為硬核和軟核。5 簡述CPU軟核的特點。軟核通常以可綜合的HDL提供,因此具有較高的靈活性,并與具體的實現(xiàn)工藝無關(guān),其主要缺點是缺乏對時序、面積和功耗的預(yù)見性。由于軟核是以源代碼的形式提供,盡管源代碼可以采用加密方法,但其知識產(chǎn)權(quán)保護(hù)問題不容忽視。6 簡述HAL的用途及基于HAL的外圍設(shè)備的編程方法。HAL作為支持Nios II處理器系統(tǒng)的軟件包,為用戶的嵌入式系統(tǒng)上的外圍設(shè)備提供了與之相匹配的接口程序。用戶不用自己建立或復(fù)制HAL文件,也不需要
29、編輯HAL中的任何源代碼,使用時只需要在C/C+源程序中指明代表這些接口程序的庫函數(shù)包含的頭文件即可。在一個基于Nios II的SOPC系統(tǒng)上,外圍設(shè)備包括通用異步串口UART、發(fā)光二極管LED、七段數(shù)碼管、按鈕、LCD、存儲器、定時器、鼠標(biāo)、VGA等。在應(yīng)用軟件的開發(fā)中,對于按鈕、發(fā)光二極管LED、七段數(shù)碼管等通用輸入輸出設(shè)備的編程比較簡單,而對于通用異步串口UART、LCD、VGA等字符模式外圍設(shè)備的編程就比較復(fù)雜。為了方便用戶對字符模式外圍設(shè)備的編程,HAL支持標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤函數(shù),允許在程序中調(diào)用stdio.h中的I/O函數(shù)來完成對這些設(shè)備的訪問,也支持字符模式外圍設(shè)備的通用訪問。7 簡述SOPC的設(shè)計流程。SOPC硬件開發(fā)流程a) 創(chuàng)建Quartus II工程b) 創(chuàng)建Nios II系統(tǒng)模塊c) 配置Nios II系統(tǒng)d) 將Nios II系統(tǒng)模塊、LPM和用戶自定義模塊連接起來e) 編譯、引腳分配、編程下載SOPC軟件開發(fā)流程Nios II
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年魯教版(五四制)七年級數(shù)學(xué)下冊期末考試計算專練
- 2021-2026年中國電液執(zhí)行機(jī)構(gòu)行業(yè)投資分析及發(fā)展戰(zhàn)略咨詢報告
- 焦末項目投資可行性研究分析報告(2024-2030版)
- 中國網(wǎng)絡(luò)整合營銷服務(wù)行業(yè)市場行情動態(tài)分析及發(fā)展前景趨勢預(yù)測報告
- 2025年 興化市明德技工學(xué)校招聘考試筆試試題附答案
- 2025年 黑龍江煙草考試試題附答案
- 2024年中國丁二烯橡膠行業(yè)市場調(diào)查報告
- 2025年中國存儲部件行業(yè)市場深度分析及投資策略研究報告
- 2024-2030年中國產(chǎn)業(yè)數(shù)字化行業(yè)市場深度研究及發(fā)展趨勢預(yù)測報告
- 窗型材項目投資可行性研究分析報告(2024-2030版)
- 2024年湖南省公安廳招聘警務(wù)輔助人員筆試真題
- 弘揚中國精神的課件
- 2025年高考英語全國二卷試題含答案
- 2025江蘇揚州寶應(yīng)縣“鄉(xiāng)村振興青年人才”招聘67人筆試備考題庫及完整答案詳解一套
- 云南省玉溪市2023-2024學(xué)年高二下學(xué)期期末教學(xué)質(zhì)量檢測語文試卷(含答案)
- 撫州市樂安縣招聘城市社區(qū)工作者筆試真題2024
- 網(wǎng)絡(luò)服務(wù)器配置與管理(微課版) 教案 項目02 虛擬化技術(shù)和VMware-2
- 2025年西式面點師(中級)面包烘焙實操考試試卷
- T/CAPEC 3-2018汽輪機(jī)制造監(jiān)理技術(shù)要求
- 工程完工后的回訪與保修服務(wù)承諾
- 醫(yī)療質(zhì)量管理質(zhì)控科的未來發(fā)展趨勢與挑戰(zhàn)
評論
0/150
提交評論