畢業(yè)論文--數(shù)字電路課程設(shè)計(jì)報(bào)告--基于1602液晶屏的數(shù)字萬年歷Verilog版_第1頁
畢業(yè)論文--數(shù)字電路課程設(shè)計(jì)報(bào)告--基于1602液晶屏的數(shù)字萬年歷Verilog版_第2頁
畢業(yè)論文--數(shù)字電路課程設(shè)計(jì)報(bào)告--基于1602液晶屏的數(shù)字萬年歷Verilog版_第3頁
畢業(yè)論文--數(shù)字電路課程設(shè)計(jì)報(bào)告--基于1602液晶屏的數(shù)字萬年歷Verilog版_第4頁
畢業(yè)論文--數(shù)字電路課程設(shè)計(jì)報(bào)告--基于1602液晶屏的數(shù)字萬年歷Verilog版_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、畢業(yè)論文- 數(shù)字電路課程設(shè)計(jì)報(bào)告- 基于 1602 液晶屏的數(shù)字萬年歷Verilog 版基于 1602 液晶屏的數(shù)字萬年歷(Verilog 版)課程名稱:數(shù)字電路課程設(shè)計(jì)專 業(yè): 集成電路設(shè)計(jì)與集成系統(tǒng)基于 1602 液晶屏的數(shù)字萬年歷(Verilog 版)一設(shè)計(jì)要求1基本功能設(shè)計(jì)一個(gè)數(shù)字鐘,能夠顯示當(dāng)前時(shí)間,分別用6 個(gè)數(shù)碼管顯示小時(shí)、分鐘、秒鐘的時(shí)間,秒針的計(jì)數(shù)頻率為1Hz,可由系統(tǒng)脈沖分頻得到。在整點(diǎn)進(jìn)行提示,可通過LED閃爍實(shí)現(xiàn),閃爍頻率及花型可自己設(shè)計(jì)。能夠調(diào)整小時(shí)和分鐘的時(shí)間,調(diào)整的形式為通過按鍵進(jìn)行累加。具有鬧鐘功能,鬧鐘時(shí)間可以任意設(shè)定(設(shè)定的形式同樣為通過按鍵累加),并且在設(shè)

2、定的時(shí)間能夠進(jìn)行提示,提示同樣可以由LED閃爍實(shí)現(xiàn)。2擴(kuò)展功能設(shè)計(jì)模式選擇計(jì)數(shù)器,通過計(jì)數(shù)器來控制各個(gè)功能之間轉(zhuǎn)換。調(diào)整當(dāng)前時(shí)間以及鬧鐘時(shí)間,在按鍵累加的功能不變的基礎(chǔ)上,增加一個(gè)功能,即當(dāng)按住累加鍵超過3秒,時(shí)間能夠以4Hz的頻率累加。用LCD液晶屏來顯示當(dāng)前時(shí)間及功能模式。二設(shè)計(jì)分析及系統(tǒng)方案設(shè)計(jì)1要求分析:基于FPGA?際并發(fā)處理的特點(diǎn),對于實(shí)現(xiàn)數(shù)字萬歷年系統(tǒng),相比于任何嵌入式處理器而言,其特點(diǎn)和優(yōu)勢將得以更加全面體現(xiàn)。數(shù)字萬年歷中所有模塊都將基于基準(zhǔn)時(shí)鐘源進(jìn)行處理,結(jié)合FPG心身的特點(diǎn),在時(shí)鐘源下可進(jìn)行精確計(jì)數(shù),可輕易而產(chǎn)生十分精確的萬年歷時(shí)間。基礎(chǔ)部分:萬年歷可包括以下時(shí)間處理模塊:

3、基于秒時(shí)鐘計(jì)數(shù)器進(jìn)行判斷處理。秒,分,時(shí)。星期,上/下午。日,月,年。鬧鐘功能部分:時(shí)間設(shè)定:使用四個(gè)按鍵進(jìn)行控制,分別是: 設(shè)置復(fù)位按鍵,設(shè)置移位鍵,功能“加”鍵,功能“減”鍵。整點(diǎn)報(bào)時(shí)部分:使用7個(gè)綠色LED作為提示燈。鬧鐘提示部分:使用16個(gè)紅色LED作為鬧鐘報(bào)時(shí)提示。顯示部分:使用LCD1602夜晶顯示屏作為萬年歷的主顯示屏, 鬧鐘顯示部分使用 6 個(gè) 7 段數(shù)碼管。2方案設(shè)計(jì)基于FPGA勺特點(diǎn)以及本萬年歷系統(tǒng)自身功能特點(diǎn)的實(shí)現(xiàn)方式。系統(tǒng)采用模塊化方案進(jìn)行設(shè)計(jì)。各個(gè)模塊及其相關(guān)實(shí)現(xiàn)功能描述,同時(shí)具體的代碼中模塊設(shè)計(jì)將以此基礎(chǔ)進(jìn)行代碼的編寫,詳細(xì)代碼設(shè)計(jì)將在后面給出。時(shí)鐘發(fā)生模塊:基于系

4、統(tǒng)外部輸入基準(zhǔn)時(shí)鐘源進(jìn)行秒計(jì)數(shù),產(chǎn)生秒時(shí)鐘,在此基礎(chǔ)上可進(jìn)行相關(guān)判斷已經(jīng)在計(jì)數(shù)處理產(chǎn)生其他需要的時(shí)間信號(hào)。時(shí)鐘處理模塊:在時(shí)鐘發(fā)生模塊基礎(chǔ)上,利用FPG夠模塊并發(fā)處理特點(diǎn),產(chǎn)生分鐘,小時(shí)等基礎(chǔ)信號(hào),在此基礎(chǔ)上再進(jìn)行計(jì)數(shù)以及一些判斷處理可容易產(chǎn)生星期,上/ 下午,日,月,年等信號(hào)。但需要注意的是以上所有萬年歷時(shí)鐘信號(hào)的每位數(shù)(十進(jìn)制)在底層均為 4位二進(jìn)制數(shù)表示,且由于FPG師乘除法運(yùn) 算不可綜合,在處理平閏年判斷時(shí),采用拼接語句,然后內(nèi)嵌多個(gè) CASES旬進(jìn) 行處理實(shí)現(xiàn)該功能。以上所有萬年歷信號(hào)在其他模塊處理時(shí)仍然需要進(jìn)行相關(guān)轉(zhuǎn)換或者譯碼。功能設(shè)定模塊:這里主要是針對功能按鍵和一些狀態(tài)開關(guān)。功

5、能按鍵部分主要包括上述分析中的四個(gè),即設(shè)置復(fù)位,設(shè)置移位,功能“加”,功能“減”。在代碼編寫時(shí)需要進(jìn)行按鍵的消抖處理,同時(shí), 由于鬧鐘設(shè)定和時(shí)間設(shè)定時(shí)均用到,故需要進(jìn)行設(shè)置復(fù)用,這里采用的方法是,以復(fù)位鍵為區(qū)分,長摁下后可進(jìn)行萬年歷的時(shí)間設(shè)定,長摁下后在短按一下返回正常狀態(tài),而鬧鐘設(shè)定需要在鬧鐘開關(guān)有效狀態(tài)下,上述的功能鍵方有效。功能開關(guān)主要控制整個(gè)系統(tǒng)的復(fù)位,鬧鐘開關(guān),液晶顯示屏的讀寫開關(guān),背光,讀寫等,這里全部采用二狀態(tài)的撥碼開關(guān)實(shí)現(xiàn)。顯示模塊:采用液晶屏1602 作為數(shù)字萬年歷的主顯示屏,由于屏幕顯示字符數(shù)量有限,再考慮本課程設(shè)計(jì)的綜合全面性,這里鬧鐘顯示部分采用6 位數(shù)碼管作為顯示。本

6、模塊主要功能是實(shí)現(xiàn)1602 的驅(qū)動(dòng)顯示程序,數(shù)碼管的譯碼驅(qū)動(dòng)程序。鬧鐘模塊:對鬧鐘寄存器的值與萬年歷實(shí)現(xiàn)時(shí)鐘的值進(jìn)行判斷處理,并驅(qū)動(dòng)紅色LED燈閃爍實(shí)現(xiàn)鬧鐘的報(bào)時(shí)提示。紅色 LED的效果設(shè)定為整體閃爍。整點(diǎn)報(bào)時(shí)模塊:對萬年歷實(shí)時(shí)時(shí)鐘的分鐘和秒鐘進(jìn)行判斷處理,實(shí)現(xiàn)在每個(gè)小時(shí)的整點(diǎn)報(bào)時(shí)功能,報(bào)時(shí) 10 秒鐘, 即從 59 分 50 秒開始進(jìn)行報(bào)時(shí)。以綠色 LED燈作為提示,實(shí)現(xiàn)效果是流水閃動(dòng)。三系統(tǒng)以及模塊硬件電路設(shè)計(jì)1系統(tǒng)總體結(jié)構(gòu)框圖基于上述方案分析,以 FPGAK片Cyclone II EP2c35F672C6為核心構(gòu)建的數(shù)字萬年歷系統(tǒng)的硬件總體結(jié)構(gòu)框圖如下:2各個(gè)硬件模塊接口電路圖以上各個(gè)模

7、塊實(shí)際硬件接口電路如下:FPGA最小系統(tǒng)電源及控制電路I/O 接口 BANKM BANK2I/O 接口 BANK和 BANK4I/O 接口 BANK劑 BANK6I/O 接口 BANK和 BANK8萬年歷顯示屏模塊(LCD1602夜晶顯示屏)鬧鐘顯示模塊(7端數(shù)碼管)注:本系統(tǒng)只用了開發(fā)板上的6位數(shù)碼管作為鬧鐘顯示,即數(shù)碼管 73整點(diǎn)報(bào)時(shí)模塊(綠色LED閃爍燈)鬧鐘提示模塊(紅色LED閃爍燈)萬年歷設(shè)置模塊(功能按鍵)系統(tǒng)設(shè)置模塊(功能撥碼開關(guān))注:本系統(tǒng)只用到了開發(fā)板上的以上幾個(gè)撥碼開關(guān)作為系統(tǒng)控制3系統(tǒng)芯片管腳配置情況數(shù)字萬年歷系統(tǒng)I/O 配置表:接口名稱 類型輸入 / 輸出 結(jié)構(gòu)圖上引腳

8、號(hào) 說明輸入 clk D13 系 統(tǒng) 輸 出 時(shí) 鐘 源系統(tǒng)復(fù)位輸入 rst_nP25系統(tǒng)復(fù)位開關(guān)時(shí)間設(shè)定輸入key_r G26設(shè)定復(fù)位按鍵設(shè)定移位輸入 key_yi N23設(shè)定移位按鍵設(shè)定/力口輸入 key_jia P23功能“加”按鍵 設(shè)定/減 輸入 key_jianW2M能“減”按鍵鬧鐘設(shè)定輸入alr_clk_setN26鬧鐘設(shè)定開關(guān)鬧鐘開關(guān)輸入 alr_clk_swN25鬧鐘開關(guān)控制開關(guān)1602開關(guān) 輸入sw3 AF14液晶屏 顯示開關(guān)控制開關(guān)1602背光輸入sw2 AE14 液晶屏背光開關(guān)控制開關(guān)1602 讀寫控制輸入sw1 AD13 液晶顯示屏讀寫控制開關(guān)1602 開關(guān) 輸出 lc

9、d_on L4 液晶屏開關(guān)控制輸出1602 背光 輸出 lcd_blon K2 液晶屏背光控制輸出1602 讀 寫控制 輸出 rw K4 液晶顯示屏讀寫控制輸出1602使能端輸 出en K3 液晶顯示屏使能輸出1602 數(shù)據(jù) /命令 輸出 rs K1 液晶顯示屏命令/數(shù)據(jù)選擇輸出1602數(shù)據(jù)8位 輸出 data7 0一 液晶屏并行數(shù)據(jù)輸出數(shù)碼管77位 輸出 seg76- -0 數(shù)碼管7并行數(shù)據(jù)輸出數(shù)碼管6 7位 輸出 seg66 0 數(shù)碼管6并行數(shù)據(jù)輸出數(shù)碼管5 7位 輸出 seg56 - O 數(shù)碼管5并行數(shù)據(jù)輸出 數(shù)碼管4 7位 輸出 seg46 0 數(shù)碼管4并行數(shù)據(jù)輸出綠色LEW輸出 le

10、d_g7 - -O 一 整點(diǎn)報(bào)時(shí)綠色LED燈輸出紅色LED燈 輸出alr_led_g15 0 鬧鐘報(bào)時(shí)紅色LED燈輸出四系統(tǒng)的Verilog 設(shè)計(jì)1根據(jù)上述分析設(shè)計(jì),系統(tǒng)的代碼編寫可分為如下三個(gè)模塊文件實(shí)現(xiàn): key_scan 模塊文件模塊功能及其實(shí)現(xiàn)算法描述:功能: 四個(gè)設(shè)置按鍵的消抖及其處理,產(chǎn)生在長按下復(fù)位鍵下的有效狀態(tài)送萬年歷時(shí)間設(shè)定,以及在鬧鐘有效狀態(tài)下的按鍵輸出。算法描述:每個(gè)消抖處理才用延遲打兩拍的處理方法實(shí)現(xiàn)消抖20 毫秒,其中對于設(shè)定復(fù)位按鍵設(shè)定長按下達(dá) 3s為有效輸出,短按一下置無效,在設(shè)置復(fù)位有效狀態(tài)下其他三個(gè)按鍵對于萬年歷時(shí)鐘部分方有效。在鬧鐘設(shè)置開關(guān)有效狀態(tài)下,其他三

11、個(gè)按鍵對于鬧鐘設(shè)定有效。 clock 模塊文件模塊功能及其實(shí)現(xiàn)算法描述:功能:萬年歷時(shí)間產(chǎn)生模塊,包括時(shí)間中的秒,分,時(shí),星期,上/ 下日,月,年的產(chǎn)生和處理,鬧鐘寄存器的設(shè)置,整點(diǎn)報(bào)時(shí)的處理及輸出顯示,鬧鐘報(bào)時(shí)的處理及顯示。算法描述:對于秒,分,時(shí),中的每一位十進(jìn)制數(shù),代碼中定義一個(gè)4 位二進(jìn)制數(shù)來表示(如秒時(shí)間定義2 個(gè) 4 位二進(jìn)制數(shù)表示秒的十位和個(gè)位),采用逐級(jí)計(jì)數(shù)的方法產(chǎn)生相應(yīng)的時(shí)間信號(hào),在設(shè)置按鍵有效或者前一級(jí)時(shí)間信號(hào)產(chǎn)生進(jìn)位時(shí), 當(dāng)前時(shí)間相應(yīng)加1 或者減一,以此類推產(chǎn)生更高級(jí)的時(shí)間信號(hào)(如分對于秒來說有高級(jí)信號(hào),秒滿 60對分信號(hào)為進(jìn)一信號(hào)), 在日, 月模塊的判斷處理才有內(nèi)嵌多

12、個(gè)case 語句的方法實(shí)現(xiàn),而平潤年的判斷則采用對年份的十位和個(gè)位拼接利用case 語句判斷在非整百年下是否為閏年,而對于整百年情況下再拼接年的百位和千位,再內(nèi)嵌一個(gè)case 語句用同樣的方法進(jìn)行判斷是否為閏年。 display 模塊文件功能:液晶顯示屏的驅(qū)動(dòng),萬年歷時(shí)間譯碼成1602 的 ASCII 碼字符,鬧鐘寄存器的譯碼及6 個(gè) 7 段數(shù)碼管的驅(qū)動(dòng)。算法描述:根據(jù)液晶顯示屏1602 的驅(qū)動(dòng)時(shí)序圖(如下圖,由于本系統(tǒng)只用到了 1602 的寫時(shí)序,故讀時(shí)序不給出), 可編寫 1602的狀態(tài)機(jī)驅(qū)動(dòng), 有時(shí)序圖可知,初始化是,RS 0, EN 0 狀態(tài)下,下一個(gè)狀態(tài)送出命令數(shù)據(jù),再下一個(gè)狀態(tài)將

13、EN 1,即產(chǎn)生高脈沖信號(hào),完成一次命令的初始化,相應(yīng)顯示輸出一個(gè)字符驅(qū)動(dòng)方法也也一直,只需將上述的RS1 即可, 驅(qū)動(dòng)狀態(tài)機(jī)如下圖。相應(yīng)的 ASCII碼譯碼詳見源代碼。對于鬧鐘的譯碼也詳見源代碼。數(shù)碼管的驅(qū)動(dòng)直接才有并行數(shù)據(jù)輸出即可。Lcd1602液晶顯示屏寫時(shí)序圖LCD160N區(qū)動(dòng)狀態(tài)機(jī)頂層模塊為:clk_16022系統(tǒng)Verilog 代碼軟件分析綜合結(jié)果系統(tǒng)Verilog模塊綜合的RTL視圖如下:系統(tǒng)綜合報(bào)告如下:3系統(tǒng)代碼的重要變量及模塊名稱由于系統(tǒng)代碼量較大,其中涉及的寄存器變量較多,always 塊語句較多,在源代碼的各個(gè)文件模塊里面均有詳細(xì)的注釋說明,這里不一一列舉,詳見源代碼。

14、五結(jié)論以及結(jié)果說明1系統(tǒng)開發(fā)環(huán)境:PC機(jī)一臺(tái):Windos XP綜合開發(fā)軟件:QuartusII9.1仿真軟件:modelsim6.52系統(tǒng)運(yùn)行環(huán)境:Altera DE2-115 FPGA 開發(fā)板 modelsim6.5 的應(yīng)用,故本系統(tǒng)沒有進(jìn)行相關(guān)仿真, 而是著重進(jìn)行了調(diào)試,調(diào)試方法采用基于開發(fā)板的實(shí)驗(yàn)現(xiàn)象,采用單模塊調(diào)試, 多模塊組合調(diào)試等多種方法相結(jié)合的調(diào)試方法進(jìn)行,確保了每個(gè)小模塊功能的正常及整個(gè)系統(tǒng)的穩(wěn)定運(yùn)行。4系統(tǒng)運(yùn)行結(jié)果系統(tǒng)實(shí)現(xiàn)功能和結(jié)果如下:系統(tǒng)正常運(yùn)行時(shí),按萬年歷實(shí)時(shí)時(shí)鐘的功能正常運(yùn)行,其中,液晶顯示屏1602越每 600毫秒更新一次。若系統(tǒng)復(fù)位開關(guān)復(fù)位,系統(tǒng)所有數(shù)據(jù)復(fù)位,按

15、下載時(shí)的初始化時(shí)間重新運(yùn)行,即實(shí)現(xiàn)可手動(dòng)復(fù)位。在每個(gè)59分50秒開始,整點(diǎn)報(bào)時(shí)綠色LED以流水效果進(jìn)行閃爍,閃爍時(shí)間10秒,即整點(diǎn)時(shí)停止。在鬧鐘開關(guān)開情況下,數(shù)碼管顯示當(dāng)前鬧鐘時(shí)間,并且到時(shí)鐘走到相應(yīng)鬧鐘設(shè)定時(shí)間時(shí),紅色LED以閃動(dòng)效果進(jìn)行鬧鐘報(bào)時(shí)提示,持續(xù)一分鐘后停止。在鬧 鐘開關(guān)關(guān)閉狀態(tài)下,數(shù)碼管滅,相應(yīng)鬧鈴功能關(guān)閉。在鬧鐘設(shè)置開關(guān)有效狀態(tài)下,按下功能“加”鍵,鬧鐘的分鐘的個(gè)位加 1,按下功能“減”則該位減1,若按下設(shè)置移位鍵后,再按功能“加”或“減”,則分鐘的十位加1 或者減1。由此循環(huán),實(shí)現(xiàn)任意修改鬧鐘。只有在長按下設(shè)置復(fù)位鍵達(dá)3 秒時(shí), 液晶顯示屏上秒的個(gè)位有光標(biāo)閃爍,表示可修改該位

16、,功能“加”和“減”鍵可實(shí)現(xiàn)加 1 或減1。若此時(shí)按下設(shè)置移位鍵, 則光標(biāo)移到秒的十位閃爍。如此循環(huán),實(shí)現(xiàn)可任意修改液晶顯示屏萬年歷上的任一時(shí)間量。其中上/ 下午為系統(tǒng)自動(dòng)判斷,無須修改。若想退出修改狀態(tài),此時(shí),短按一下設(shè)置復(fù)位鍵即可退出,系統(tǒng)正常狀態(tài)下,短按設(shè)置復(fù)位鍵無效。系統(tǒng)還設(shè)置了液晶顯示屏的背光開關(guān),顯示開關(guān)控制開關(guān),可實(shí)現(xiàn)液晶顯示屏的顯示與否,以及背光的有無。5系統(tǒng)設(shè)計(jì)指標(biāo)情況分析本系統(tǒng)基本實(shí)現(xiàn)課程設(shè)計(jì)的基本功能和擴(kuò)展功能要求,但本次課程設(shè)計(jì)過程中仍存在以下一個(gè)Bug和一個(gè)需要完善的功能點(diǎn)。限于學(xué)時(shí)有限,始終未能找到錯(cuò)誤源頭。Bug:數(shù)字萬年歷系統(tǒng)中月份的十位在未能正常進(jìn)位走時(shí)。其他

17、位數(shù)在平潤年情況下均正常。需要完善的功能點(diǎn):鬧鐘系統(tǒng)中未設(shè)定是否重響,鬧鈴后認(rèn)為可關(guān)閉功能。Bug分析:基于設(shè)計(jì)系統(tǒng)中采用的平潤年的處理方法順利實(shí)現(xiàn)了萬年歷中日由此可證明同樣的算法也可處理月份,使之正常走時(shí)。但經(jīng)過多次的檢查代碼及其調(diào)試未能找出錯(cuò)誤源頭,現(xiàn)分析可能的錯(cuò)誤如下:由于在一個(gè)always 語句模塊里面內(nèi)嵌過多的case 語句以及判斷語句,致使綜合成實(shí)際電路后,本模塊電路起始到最終有效信號(hào)延遲時(shí)間過長,導(dǎo)致在一個(gè) clk 周期內(nèi) (本系統(tǒng)晶振位27MHZ, 一個(gè)clk 為 36ns) 無法正常實(shí)現(xiàn)本always語句功能。這從芯片內(nèi)部門電路單元或寄存器延遲角度講也是有可能的本人自身代碼編

18、寫風(fēng)格特點(diǎn)不好,導(dǎo)致代碼編寫中出現(xiàn)難以察覺的錯(cuò)誤,與傳統(tǒng)編程語言不同,硬件描述語言不是主打簡潔,而是追求一個(gè)良好的代碼風(fēng)格,良好的代碼風(fēng)格對于系統(tǒng)穩(wěn)定運(yùn)行有不可忽視的作用。還有可能是代碼中各個(gè)寄存器變量的復(fù)合判斷使得代碼編寫過程中出現(xiàn)了不易察覺的錯(cuò)誤。6課程設(shè)計(jì)收獲及體會(huì)本次課程設(shè)計(jì),在自身現(xiàn)有的FPGA勺知識(shí)基礎(chǔ)上,幫助我很好的加強(qiáng)了 FPGA的訓(xùn)練和實(shí)踐。其次一點(diǎn)非常重要的是更加熟悉了FPGA勺開發(fā)流程和相關(guān)過程中的重要環(huán)節(jié)。再者是學(xué)習(xí)了例外一種硬件描述語言VHDL雖然本系統(tǒng)是采用自身比較擅長的Verilog 語言進(jìn)行代碼的編寫,但從某種程度上來說,通過兩種語言之間的對比和聯(lián)系的學(xué)習(xí)方法,

19、收獲很大的一點(diǎn)就是理解了FPG秋部門電路系統(tǒng)搭建運(yùn)行與語言代碼編寫的聯(lián)系和工作原理,相比之下,F(xiàn)PGA的多并發(fā)處理系統(tǒng)對比較其他所有包括嵌入式等微處理器設(shè)計(jì)開發(fā)系統(tǒng)有其非常鮮明的特點(diǎn),以往一些如嵌入式微處理器處理過程都是順序執(zhí)行代碼內(nèi)容,而FPGA(正實(shí)現(xiàn)了并發(fā)多線程的處理,相比之下,對于以往傳統(tǒng)未處理器相對復(fù)雜的問題 對于用FPGAt理可能將會(huì)大大簡化,如本數(shù)字萬年歷系統(tǒng)就是很明顯的一個(gè)例子,但對于某些比較簡單的單線處理問題對于FPG林說在代碼編寫就顯得比較麻煩,例如本系統(tǒng)中的液晶顯示屏驅(qū)動(dòng)程序的編寫,F(xiàn)PGA對時(shí)序的要求較傳統(tǒng)處理器更加嚴(yán)格,但實(shí)現(xiàn)速度更快,這些是本次課程設(shè)計(jì)過程中體驗(yàn)比較

20、深刻的一點(diǎn)。第二點(diǎn)收獲是 VHD困Verilog語言之間的比較和聯(lián)系學(xué)習(xí),更加深了對硬件描述語言特點(diǎn)的理解,對于在代碼編寫過程中的個(gè)人代碼風(fēng)格有了很好的提高,對于今后開發(fā)FPGA丁下必要的基礎(chǔ)。再者, 本次課程設(shè)計(jì)很大程度下加強(qiáng)了前段時(shí)間自學(xué)的Verilog 語言與編寫應(yīng)用,理解了硬件描述在FPG秋部的分析綜合情況。最后,本次課程設(shè)計(jì)非常大的收獲就是,本次設(shè)計(jì)中出現(xiàn)的找不到錯(cuò)誤源頭的Bug深深提醒了我今后養(yǎng)成一個(gè)良好的風(fēng)格和習(xí)慣,一個(gè)良好的編寫代碼風(fēng)格,對于系統(tǒng)的正確和穩(wěn)定實(shí)現(xiàn)意義重大,一個(gè)良好的仿真習(xí)慣,對于錯(cuò)誤的查找和算法的深入分析具有指導(dǎo)意義,能幫助我很快很好的找到那些難以察覺的錯(cuò)誤,或

21、是算法漏洞。附錄:數(shù)字萬年歷Verilog 源代碼頂層文件:clk_1602.vmodule clk_1602clk,rst_n,key_r,key_yi,key_jia,key_jian,alr_clk_set,alr_clk_sw,sw1,sw2,sw3,rs,rw,en,lcd_on,lcd_blon,data,seg7,seg6,seg5,seg4,alr_led_r,led_g;input clk;input rst_n;input key_r;input key_yi;input key_jia;input key_jian;input alr_clk_set;input alr_

22、clk_sw;input sw1;input sw2;input sw3;output 7:0 data;output rs;output en;output rw;output lcd_on;output lcd_blon;output 6:0 seg7;output 6:0 seg6;output 6:0 seg5;output 6:0 seg4;output 15:0 alr_led_r;output 7:0 led_g;wire r_en;wire yi_en;wire jia_en;wire jian_en;wire alr_yi;wire alr_jia;wire alr_jian

23、;wire 3:0 clk_nian_qian;wire 3:0 clk_nian_bai;wire 3:0 clk_nian_shi;wire 3:0 clk_nian_ge;wire 3:0 clk_yue_shi;wire 3:0 clk_yue_ge;wire 3:0 clk_ri_shi;wire 3:0 clk_ri_ge;wire 2:0 clk_xing;wire 3:0 clk_shi_shi;wire 3:0 clk_shi_ge;wire 3:0 clk_fen_shi;wire 3:0 clk_fen_ge;wire 3:0 clk_miao_shi;wire 3:0

24、clk_miao_ge;wire 3:0 alr_clk_shi_shi;wire 3:0 alr_clk_shi_ge;wire 3:0 alr_clk_fen_shi;wire 3:0 alr_clk_fen_ge;key_scan i1/按鍵處理模塊.clk clk ,.rst_n rst_n ,.key_r key_r , .key_yi key_yi ,.key_jia key_jia ,.key_jian key_jian ,.r_en r_en ,.yi_en yi_en ,.jia_en jia_en ,.jian_en jian_en ,.alr_yi alr_yi ,.al

25、r_jia alr_jia ,.alr_jian alr_jian;clock i2/萬年歷時(shí)間處理模塊.clk clk ,.rst_n rst_n ,.r_en r_en ,.yi_en yi_en ,.jia_en jia_en ,.jian_en jian_en ,.alr_yi alr_yi ,.alr_jia alr_jia ,.alr_jian alr_jian ,.alr_clk_set alr_clk_set ,.alr_clk_sw alr_clk_sw ,.clk_nian_qian clk_nian_qian ,.clk_nian_bai clk_nian_bai ,.c

26、lk_nian_shi clk_nian_shi ,.clk_nian_ge clk_nian_ge ,.clk_yue_shi clk_yue_shi ,.clk_yue_ge clk_yue_ge ,.clk_ri_shi clk_ri_shi ,.clk_ri_ge clk_ri_ge ,.clk_xing clk_xing ,.clk_shi_shi clk_shi_shi ,.clk_shi_ge clk_shi_ge ,.clk_fen_shi clk_fen_shi ,.clk_fen_ge clk_fen_ge ,.clk_miao_shi clk_miao_shi ,.clk

27、_miao_ge clk_miao_ge ,.alr_clk_shi_shi alr_clk_shi_shi ,.alr_clk_shi_ge alr_clk_shi_ge ,.alr_clk_fen_shi alr_clk_fen_shi ,.alr_clk_fen_ge alr_clk_fen_ge ,.alr_led_r alr_led_r , .led_g led_gJdisplay i3/顯示模塊 1602.clk clk ,.rst_n rst_n ,.r_en r_en ,.yi_en yi_en ,.alr_clk_sw alr_clk_sw ,.sw1 sw1 ,.sw2 s

28、w2 ,.sw3 sw3 ,.alr_clk_shi_shi alr_clk_shi_shi ,.alr_clk_shi_ge alr_clk_shi_ge ,.alr_clk_fen_shi alr_clk_fen_shi ,.alr_clk_fen_ge alr_clk_fen_ge ,.clk_nian_qian clk_nian_qian ,.clk_nian_bai clk_nian_bai ,.clk_nian_shi clk_nian_shi ,.clk_nian_ge clk_nian_ge ,.clk_yue_shi clk_yue_shi ,.clk_yue_ge clk_

29、yue_ge , .clk_ri_shi clk_ri_shi ,.clk_ri_ge clk_ri_ge , .clk_xing clk_xing ,.clk_shi_shi clk_shi_shi ,.clk_shi_ge clk_shi_ge ,.clk_fen_shi clk_fen_shi ,.clk_fen_ge clk_fen_ge ,.clk_miao_shi clk_miao_shi ,.clk_miao_ge clk_miao_ge ,.data data ,.rs rs ,.en en ,.rw rw ,.lcd_on lcd_on ,.lcd_blon lcd_blon

30、 ,.seg7 seg7 ,.seg6 seg6 ,.seg5 seg5 ,.seg4 seg4;endmodule按鍵處理模塊文件:key_scan.vmodule key_scanclk, rst_n, key_r, key_yi, key_jia, key_jian, r_en, yi_en, jia_en, jian_en, alr_yi, alr_jia, alr_jian;input clk;input rst_n;input key_r;input key_yi;input key_jia;input key_jian;output r_en;output yi_en;outpu

31、t jia_en;output jian_en;output alr_yi;output alr_jia;output alr_jian;/reg 26:0 cnt_1;/3s 75000_000*40nsreg 19:0 cnt_2;/20ms 500_000*40nsreg r1,r2,r3,r4,r5;wire key_an1,key_an2;always posedge clk or negedge rst_nif rst_n 1'b0r1 1'b1;else r1 key_r;always posedge clk or negedge rst_nif rst_n 1&

32、#39;b0r2 1'b1;else r2 r1;assign key_an1 r2 & r1 ;/有 key_r 低電平時(shí),key_an1 產(chǎn)生一個(gè)時(shí)鐘的高電平always posedge clk or negedge rst_nif rst_n 1'b0cnt_2 20'b0;else if key_an1cnt_2 20'b0;else cnt_2 cnt_2+20'b1;/key_an1計(jì)數(shù)器清零,否則計(jì)數(shù)實(shí)現(xiàn)消抖延遲20msalways posedge clk or negedge rst_nif rst_n 1'b0r3 1&

33、#39;b1;else if cnt_2 20'd499_999 r3 key_r; /似的方法檢測按鍵在消抖后是否是摁下,摁下為低電平always posedge clk or negedge rst_nif rst_n 1'b0r4 1'b1;else r4 r3;assign key_an2 r4 & r3 ;/一次,時(shí)間較短。always posedge clk or negedge rst_n /摁if rst_n 1'b0cnt_1 27'b0;else if key_r 1'b0高電平時(shí),消抖消抖20ms完成后,用類檢測復(fù)位

34、鍵key_r 有按下檢測按鍵key_r 是否是長cnt_1 cnt_1+27'b1;else cnt_1 27'b0;always posedge clk or negedge rst_n /按鍵 key_r 長摁計(jì)數(shù)滿3s,將r5置有效1if rst_n 1'b0r5 1'b0;else if cnt_1 27'd74_999_999 r5 1'b1;else if key_an2 r5 1'b0;/如果按鍵key_r 只摁一次,則r5 置無效 0assign r_en r5;/reg 19:0 cnt_3;/20ms 500_000*

35、40nsreg 2:0 r6,r7,r8,r9;wire 2:0 key_an3;always posedge clk or negedge rst_nif rst_n 1'b0r6 3'b111;else r6 key_yi,key_jia,key_jian ;always posedge clk or negedge rst_nif rst_n 1'b0r7 3'b111;else r7 r6;assign key_an3 r7 & r6 ;always posedge clk or negedge rst_nif rst_n 1'b0cnt

36、_3 20'b0;else if key_an3cnt_3 20'b0;else cnt_3 cnt_3+20'b1;always posedge clk or negedge rst_nif rst_n 1'b0r8 3'b111;else if cnt_3 20'd499_999r8 key_yi,key_jia,key_jian ;always posedge clk or negedge rst_nif rst_n 1'b0r9 3'b111;else r9 r8;assign yi_en r5 & r92 &am

37、p; r82 ;/key_r 有效( r5 有效)前提下,按鍵按下才有效,assign jia_en r5 & r91 & r81 ;/下也輸出無效assign jian_en r5 & r90 & r80 ;/位鍵有效下才能進(jìn)行修改,及顯示屏上光標(biāo)的移動(dòng)在滿足復(fù)位鍵否則,即使按實(shí)現(xiàn)時(shí)鐘在復(fù)assign alr_yi r92 & r82 ;/需復(fù)位有效assign alr_jia r91 & r81 ;assign alr_jian r90 & r80 ;endmodule萬年歷時(shí)鐘處理模塊文件:clock.vmodule clockcl

38、k,rst_n,r_en,yi_en,jia_en,jian_en,alr_yi,alr_jia,alr_jian,alr_clk_set,alr_clk_sw,clk_nian_qian, clk_nian_bai,clk_nian_shi, clk_nian_ge,clk_yue_shi, clk_yue_ge, clk_ri_shi, clk_ri_ge,clk_xing,clk_shi_ge, clk_fen_shi, clk_fen_ge,clk_shi_shi,clk_miao_shi,clk_miao_ge,alr_clk_shi_shi, alr_clk_shi_ge, alr

39、_clk_fen_shi, alr_clk_fen_ge, alr_led_r,led_g;input clk;input rst_n;input r_en;input yi_en;input jia_en;input jian_en;input alr_yi;input alr_jia;input alr_jian;input alr_clk_set;input alr_clk_sw;output 3:0 clk_nian_qian;output 3:0 clk_nian_bai;output 3:0 clk_nian_shi;output 3:0 clk_nian_ge;output 3:

40、0 clk_yue_shi;output 3:0 clk_yue_ge;output 3:0 clk_ri_shi;output 3:0 clk_ri_ge;output 2:0 clk_xing;output 3:0 clk_shi_shi;output 3:0 clk_shi_ge;output 3:0 clk_fen_shi;output 3:0 clk_fen_ge;output 3:0 clk_miao_shi;output 3:0 clk_miao_ge;output 3:0 alr_clk_shi_shi;output 3:0 alr_clk_shi_ge;output 3:0

41、alr_clk_fen_shi;output 3:0 alr_clk_fen_ge;output 15:0 alr_led_r;output 7:0 led_g;/reg 3:0 cnt_yi;reg 15:0 yi_r;always posedge clk or negedge rst_nif !rst_ncnt_yi 4'b0;else if yi_en cnt_yi cnt_yi+4'b1;always cnt_yi/yi_r的功能是,在移位鍵下實(shí)現(xiàn)相應(yīng)時(shí)問部分的修改case cnt_yi4'b0000 : yi_r 16'b0000_0000_0000_

42、0001;4'b0001 : yi_r 16'b0000_0000_0000_0010;4'b0010 : yi_r 16'b0000_0000_0000_0100;4'b0011 : yi_r 16'b0000_0000_0000_1000;4'b0100 : yi_r 16'b0000_0000_0001_0000;4'b0101 : yi_r 16'b0000_0000_0010_0000;4'b0110 : yi_r 16'b0000_0000_0100_0000;4'b0111 :

43、 yi_r 16'b0000_0000_1000_0000;4'b1000 : yi_r 16'b0000_0001_0000_0000;4'b1001 : yi_r 16'b0000_0010_0000_0000;4'b1010 : yi_r 16'b0000_0100_0000_0000;4'b1011 : yi_r 16'b0000_1000_0000_0000;4'b1100 : yi_r 16'b0001_0000_0000_0000;4'b1101 : yi_r 16'b0010

44、_0000_0000_0000;4'b1110 : yi_r 16'b0100_0000_0000_0000;4'b1111 : yi_r 16'b1000_0000_0000_0000;default: ;endcase/reg 3:0 clk_nian_qian_r 4'd2;reg 3:0 clk_nian_bai_r 4'd0;reg 3:0 clk_nian_shi_r 4'd1;reg 3:0 clk_nian_ge_r 4'd2;reg 3:0 clk_yue_shi_r 4'b0;reg 3:0 clk_y

45、ue_ge_r 4'b1;reg 3:0 clk_ri_shi_r 4'b0;reg 3:0 clk_ri_ge_r 4'b1;reg 2:0 clk_xing_r;reg 3:0 clk_shi_shi_r;reg 3:0 clk_shi_ge_r;reg 3:0 clk_fen_shi_r;reg 3:0 clk_fen_ge_r;reg 3:0 clk_miao_shi_r;reg 3:0 clk_miao_ge_r;reg 24:0 cnt_1s;/27MHZ晶always posedge clk or negedge rst_n振下 1s 計(jì)數(shù)if rst_n

46、 1'b0cnt_1s 25'b0;else if cnt_1s 25'd26_999_999 cnt_1s 25'b0;else if !r_en cnt_1s cnt_1s+25'b1;always posedge clk or negedge rst_n/秒的個(gè)位if !rst_nclk_miao_ge_r 4'b0;else if clk_miao_ge_r 4'd10 clk_miao_ge_r 4'b0;else if cnt_1s 25'd26_999_999 |yi_r0&& jia_enc

47、lk_miao_ge_r clk_miao_ge_r+4'b1;else ifyi_r0&& jian_enclk_miao_ge_rclk_miao_ge_r-4'b1;always posedge clk or negedge rst_n/秒的十位if !rst_nclk_miao_shi_r 4'b0;else if clk_miao_shi_r 4'd6 clk_miao_shi_r 4'b0;else if clk_miao_ge_r 4'd10|yi_r1&& jia_enclk_miao_shi_r

48、clk_miao_shi_r+4'b1;else ifyi_r1&& jian_enclk_miao_shi_rclk_miao_shi_r-4'b1;always posedge clk or negedge rst_n/分的個(gè)位if !rst_nclk_fen_ge_r 4'b0;else if clk_fen_ge_r 4'd10 clk_fen_ge_r 4'b0;else if clk_miao_shi_r 4'd6|yi_r2&& jia_enclk_fen_ge_r clk_fen_ge_r+4

49、9;b1;else if yi_r2&& jian_en clk_fen_ge_r clk_fen_ge_r-4'b1;always posedge clk or negedge rst_n/分的十位if !rst_nclk_fen_shi_r 4'b0;else if clk_fen_shi_r 4'd6 clk_fen_shi_r 4'b0;else if clk_fen_ge_r 4'd10|yi_r3&& jia_enclk_fen_shi_r clk_fen_shi_r+4'b1;else if yi_r

50、3&& jian_en clk_fen_shi_r clk_fen_shi_r-4'b1;always posedge clk or negedge rst_n/時(shí)的個(gè)位if !rst_nclk_shi_ge_r 4'b0;else if clk_shi_ge_r 4'd4 && clk_shi_shi_r 4'd2|clk_shi_ge_r 4'd10 clk_shi_ge_r 4'b0;else if clk_fen_shi_r 4'd6|yi_r4&& jia_enclk_shi_ge

51、_r clk_shi_ge_r+4'b1;else if yi_r4 && jian_en clk_shi_ge_r clk_shi_ge_r-4'b1;always posedge clk or negedge rst_n/時(shí)的十位if !rst_nclk_shi_shi_r 4'b0;else if clk_shi_ge_r 4'd4 && clk_shi_shi_r clk_shi_shi_r 4'd3 clk_shi_shi_r 4'b0;else if clk_shi_ge_r 4'd10|yi_

52、r5clk_shi_shi_r clk_shi_shi_r+4'b1;else if yi_r5&& jian_enclkclk_shi_shi_r-4'b1;always posedge clk or negedge rst_n/星期if !rst_nclk_xing_r 3'b0;else if clk_xing_r 3'd7 clk_xing_r 3'b0;else if clk_shi_ge_r 4'd4 && clk_shi_shi_ryi_r7 && jia_en clk_xing_r

53、clk_xing_r+3'b1;else if yi_r7 && jian_en clk_xing_r clk_xing_r-3'b1;always posedge clk or negedge rst_n/4'd2 |&& jia_enshi_shi_r4'd2|日的個(gè)位,進(jìn)行閏月的判斷及大小月的判斷if !rst_nclk_ri_ge_r 4'b1;8'd5,if clk_ri_ge_rclk_shi_shi_ryi_r8&& jian_en6,9,11else begincase clk_yu

54、e_shi_r,clk_yue_ge_r8'd1,8'd3,/1,3,5,7,8,10,12 月8'd7, 8'd8, 8'd16, 8'd18 :beginif clk_ri_shi_r 4'd3 &&clk_ri_ge_r 4'd2 clk_ri_ge_r 4'd1;else4'd10 clk_ri_ge_r 4'd0;elseif4'd2 && clk_shi_ge_r 4'd4 | yi_r8&& jia_enclk_ri_ge_r c

55、lk_ri_ge_r+4'b1;elseifclk_ri_ge_r clk_ri_ge_r-4'b1;end8'd4, 8'd6, 8'd9, 8'd17 :begin /4月if clk_ri_shi_r 4'd3 &&clk_ri_ge_r 4'd1 clk_ri_ge_r 4'd1;elseifclk_ri_ge_r4'd10 clk_ri_ge_r 4'd0;elseif clk_shi_shi_r4'd2 && clk_shi_ge_r 4'd4 |

56、 yi_r8&& jia_enclk_ri_ge_rclk_ri_ge_r+4'b1;elseif yi_r8&& jian_enclk_ri_ge_r clk_ri_ge_r-4'b1;end8'd2: begin/ 2月case clk_nian_shi_r,clk_nian_ge_r /年份的低兩位能整除4 的為閏年,低兩位為00 除外8'b0010_0000,8'b0001_0010,8'b0000_0100,8'b0001_0110,8'b0000_1000,8'b0100_0000,8'b0011_0010,8'b0010_0100,8'b0011_0110,8'b0010_1000,8'b0110_0000,8'b0101_0010,8'b0100_0100,8'b0101_0110,8'b0100_1000,8'b1000_0000,8'b0111_0010,8'b

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論