版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)</b></p><p> 名稱 基于FPGA的數(shù)字鐘設(shè)計(jì)</p><p> 姓名 </p><p> 專業(yè)班級(jí) 通信工程(1)班</p><p> 學(xué)院 信息與機(jī)電工程學(xué)院 </p><p>
2、; 完成日期 2017年6月</p><p><b> 摘 要</b></p><p> VHDL是一種用形式化方法來(lái)描述數(shù)字化電路和設(shè)計(jì)數(shù)字邏輯系統(tǒng)的語(yǔ)言,設(shè)計(jì)者可以利用這種語(yǔ)言來(lái)描述自己的設(shè)計(jì)思想,然后利用電子設(shè)計(jì)自動(dòng)化工具進(jìn)行仿真,再自動(dòng)綜合到門級(jí)電路,最后用PLD實(shí)現(xiàn)其功能。與傳統(tǒng)設(shè)計(jì)方法相比,VHDL描述電路行為的算法設(shè)計(jì)層次較高、用于較復(fù)雜的計(jì)算時(shí)
3、,能盡早發(fā)現(xiàn)存在的問題,縮短設(shè)計(jì)周期,可獨(dú)立實(shí)現(xiàn),修改方便,系統(tǒng)硬件描述能力強(qiáng),語(yǔ)言標(biāo)準(zhǔn)、規(guī)范、移植性強(qiáng),是多層次的硬件描述語(yǔ)言具有很好的實(shí)用。</p><p> 本文是基于VHDL語(yǔ)言的簡(jiǎn)易電子數(shù)字鐘的設(shè)計(jì)。設(shè)計(jì)主要是由數(shù)碼管結(jié)合按鍵來(lái)顯示相應(yīng)的時(shí)間,可以對(duì)時(shí)、分進(jìn)行單獨(dú)校時(shí),使其顯示標(biāo)準(zhǔn)時(shí)間,并且具有設(shè)置鬧鐘以及整點(diǎn)半點(diǎn)報(bào)時(shí)的功能。總的程序由幾個(gè)各具不同功能的單元模塊組,其中包括分頻模塊、時(shí)分秒計(jì)數(shù)和設(shè)置模
4、塊、比較器模塊、譯碼顯示等模塊。</p><p> 關(guān)鍵詞:數(shù)字鐘、VHDL、狀態(tài)機(jī)</p><p><b> 一、緒論</b></p><p><b> 1.1 前言</b></p><p> 隨著生產(chǎn)和科學(xué)技術(shù)發(fā)展的需要,現(xiàn)在電子技術(shù)的應(yīng)用已經(jīng)滲透到了人類生活和生產(chǎn)的各個(gè)方面,有力地推動(dòng)
5、了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。</p><p> 在這個(gè)生活節(jié)奏飛快的社會(huì),時(shí)間概念對(duì)人們來(lái)說尤為重要。在我們現(xiàn)代的生活中,早已離不開鐘表的身影。原始的機(jī)械鐘只能實(shí)現(xiàn)走時(shí)報(bào)時(shí)的功能早已不能滿足人們的需求。數(shù)字鐘是一種數(shù)字電路實(shí)現(xiàn)時(shí)、分、秒計(jì)時(shí)的裝置,通過計(jì)時(shí)精度很高的石英晶振,采用相應(yīng)進(jìn)制的計(jì)數(shù)器,轉(zhuǎn)化為二進(jìn)制數(shù),通過譯碼和顯示電路準(zhǔn)
6、確的將時(shí)間“時(shí)”“分”“秒”用數(shù)字的方式顯示出來(lái)。與傳統(tǒng)的機(jī)械時(shí)鐘相比具有更高的準(zhǔn)確性與直觀性,且無(wú)機(jī)械裝置,具有更高的使用壽命。</p><p> 鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、定時(shí)啟閉電路、定時(shí)開關(guān)烘箱、通斷動(dòng)力設(shè)備,甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘
7、及擴(kuò)大其應(yīng)用,有著非?,F(xiàn)實(shí)的意義。</p><p><b> FPGA概述</b></p><p><b> FPGA簡(jiǎn)介</b></p><p> FPGA是英文Field-Programmable Gate Array的縮寫,即現(xiàn)場(chǎng)可編程門陣列,是由存放在片內(nèi)RAM中的程序來(lái)設(shè)置其工作狀態(tài)的,因此,工作時(shí)需要對(duì)片
8、內(nèi)的RAM進(jìn)行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。加電時(shí),F(xiàn)PGA芯片將EPROM中數(shù)據(jù)讀入片內(nèi)編程RAM中,配置完成后,F(xiàn)PGA進(jìn)入工作狀態(tài)。掉電后,F(xiàn)PGA恢復(fù)成白片,內(nèi)部邏輯關(guān)系消失,因此,F(xiàn)PGA能夠反復(fù)使用。FPGA的編程無(wú)須專用的FPGA編程器,只須用通用的EPROM、PROM編程器即可。當(dāng)需要修改FPGA功能時(shí),只需換一片EPROM即可。這樣,同一片F(xiàn)PGA,不同的編程數(shù)據(jù),可以產(chǎn)生不同的電路功能。因此,
9、FPGA的使用非常靈活。 FPGA有多種配置模式:并行主模式為一片F(xiàn)PGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片F(xiàn)PGA;串行模式可以采用串行PROM編程FPGA;外設(shè)模式可以將FPGA作為微處理器的外設(shè),由微處理器對(duì)其編程。</p><p> 1.2.2用FPGA設(shè)計(jì)數(shù)字鐘的優(yōu)點(diǎn)</p><p> FPGA的邏輯功能全部用硬件電路實(shí)現(xiàn),內(nèi)部有豐富的觸發(fā)器和I/O
10、引腳,是ASIC電路中設(shè)計(jì)周期最短、開發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一,并且FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容。因此,F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。使用FPGA 可以實(shí)現(xiàn)你想實(shí)現(xiàn)的任何數(shù)字電路,可以定制各種電路,減少受制于專用芯片的束縛,在設(shè)計(jì)過程中可以靈活的更改設(shè)計(jì)。因此,利用FPGA 設(shè)計(jì)數(shù)字鐘更加靈活方便。</p><p> 1.3硬件描述
11、語(yǔ)言VHDL</p><p> VHDL,即超高速集成電路硬件描述語(yǔ)言,是最早被接納為IEEE標(biāo)準(zhǔn)的硬件描述語(yǔ)言。它是一種多層次的硬件描述語(yǔ)言,覆蓋面廣,描述能力強(qiáng),具有良好的可讀性,既可以被計(jì)算機(jī)接受,也容易被理解。因?yàn)閂HDL的硬件描述與工藝技術(shù)無(wú)關(guān),因此其本身的生命期長(zhǎng),工藝改變時(shí),只需修改相應(yīng)程序中的屬性參數(shù)即可,VHDL支持大規(guī)模設(shè)計(jì)的分解與已有設(shè)計(jì)的再利用,事實(shí)上已經(jīng)成為通用硬件描述語(yǔ)言。</
12、p><p> 1.4 QuartusⅡ軟件</p><p> QuartusⅡ是Altera公司推出的新一代FPGA/CPLD開發(fā)軟件,適合于大規(guī)模復(fù)雜的邏輯電路設(shè)計(jì)。它是Altera公司的第四代可編程邏輯器件集成開發(fā)環(huán)境,提供了從設(shè)計(jì)輸入到器件編程的全部功能,同低三代設(shè)計(jì)工具M(jìn)AXPLUS Ⅱ相比,QuartusⅡ設(shè)計(jì)軟件增加了網(wǎng)絡(luò)編輯功能,提升了調(diào)試能力,解決了潛在的設(shè)計(jì)延遲,同時(shí)其強(qiáng)
13、大的設(shè)計(jì)能力和直觀易用的接口,越來(lái)越受到數(shù)字系統(tǒng)設(shè)計(jì)者的歡迎。</p><p> 二、數(shù)字鐘總體設(shè)計(jì)方案</p><p><b> 2.1總體結(jié)構(gòu)</b></p><p><b> 圖 1 系統(tǒng)結(jié)構(gòu)圖</b></p><p><b> 2.2 設(shè)計(jì)思路</b></
14、p><p> 數(shù)字鐘的設(shè)計(jì)模塊包括:分頻器、“時(shí)、分、秒”計(jì)數(shù)器、設(shè)置時(shí)間模塊、設(shè)置鬧鐘、比較模塊、選擇模塊、控制模塊和譯碼顯示電路。每一個(gè)功能模塊作為一個(gè)實(shí)體單獨(dú)進(jìn)行設(shè)計(jì),最后再將各個(gè)模塊的原理圖連接起來(lái)。</p><p> ?。?)開關(guān)EN(SW0)控制數(shù)碼管顯示,SW0關(guān)閉時(shí)顯示學(xué)號(hào),打開后24h計(jì)時(shí)制計(jì)時(shí)并顯示。</p><p> ?。?)校時(shí)以及設(shè)置鬧鐘:按
15、下TIMESET鍵開始設(shè)置時(shí)間,按下SHIFT鍵表示移位,按下ADD鍵對(duì)應(yīng)數(shù)字加一,再次按下TIMESET鍵回到走時(shí)狀態(tài)。分鐘和時(shí)鐘校準(zhǔn)時(shí),下方LED發(fā)光表示提示。</p><p> ?。?)鬧鐘:鬧鐘定時(shí)時(shí)間到,對(duì)應(yīng)LED閃爍,持續(xù)60s。</p><p> (4)整點(diǎn)、半點(diǎn)報(bào)時(shí):當(dāng)分鐘時(shí)間為00或30 時(shí),對(duì)應(yīng)不同的LED發(fā)光。</p><p> (5)顯示
16、: 6個(gè)LED數(shù)碼管顯示小時(shí)、分、秒。</p><p><b> 2.4 RTL圖</b></p><p><b> 圖2 系統(tǒng)RTL圖</b></p><p> 三、數(shù)字鐘各功能模塊介紹</p><p><b> 3.1 分頻模塊</b></p>&l
17、t;p> 3.1.1引腳說明及功能介紹</p><p> 圖3 分頻模塊bdf圖 </p><p> 表1 分頻模塊引腳說明</p><p> 3.1.2核心源代碼及解釋</p><p> PROCESS(CLK,EN)</p><p> VARIABLE TEMP1 : INTEGER RANGE
18、 24999999 DOWNTO 0;</p><p> VARIABLE TEMP50 : INTEGER RANGE 499999 DOWNTO 0;</p><p><b> BEGIN </b></p><p> IF EN='1' THEN </p><p> IF CLK'E
19、VENT AND CLK='1'THEN </p><p> IF TEMP1=24999999 THEN TEMP1:=0;Q1<=NOT Q1;</p><p> ELSE TEMP1:=TEMP1+1;</p><p><b> END IF;</b></p><p> IF TE
20、MP50=499999 THEN TEMP50:=0;Q50<=NOT Q50;</p><p> ELSE TEMP50:=TEMP50+1; ---通過計(jì)數(shù)將較高頻率的時(shí)鐘分頻,得到得到較低頻率的時(shí)鐘信號(hào)</p><p><b> END IF;</b></p><p><b> END IF;</b>
21、</p><p><b> ELSE </b></p><p> TEMP1:=0;Q1<='0';</p><p> TEMP50:=0;Q50<='0';</p><p><b> END IF;</b></p><p>
22、; END PROCESS;</p><p> PROCESS(QUICK)</p><p><b> BEGIN</b></p><p> IF QUICK='0' THEN CLK_OUT1OR50<=Q1;---通過按鍵選擇輸出的頻率</p><p> ELSE CLK_OUT1
23、OR50<=Q50;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p><b> 3.2 控制模塊</b></p><p> 3.2.1引腳說明及功能介紹</p><p> 圖4 控制模塊bdf圖&l
24、t;/p><p> 表2 控制模塊引腳說明</p><p> 3.2.2部分源代碼及解釋</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p>
25、<p> ENTITY COUTROL IS</p><p> PORT ( ALARM,EN:IN STD_LOGIC;</p><p> COUT:OUT STD_LOGIC_VECTOR(1 DOWNTO 0)</p><p><b> );</b></p><p> END ENTITY;
26、</p><p> ARCHITECTURE ONE OF COUTROL IS</p><p> SIGNAL TEMP1:STD_LOGIC:='0'; ——設(shè)置變量TEMP1表示KEY0的狀態(tài)</p><p><b> BEGIN </b></p><p> PROCESS(ALARM)
27、</p><p><b> BEGIN</b></p><p> IF ALARM'EVENT AND ALARM='1' THEN </p><p> TEMP1<=NOT TEMP1; </p><p><b> END IF;</b></p>
28、<p> END PROCESS;</p><p> PROCESS(TEMP1) ——TEMP1=0時(shí),輸出狀態(tài)為計(jì)時(shí)(01);TEMP1=1 </p><p> BEGIN時(shí),輸出狀態(tài)為鬧鐘設(shè)置(10)</p><p> IF TEMP1<='0' THEN </p><
29、;p> COUT<="01";</p><p> ELSE COUT<="10";</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ONE;</p&g
30、t;<p> 3.3 時(shí)、分、秒模塊</p><p> 3.3.1 引腳說明及功能介紹</p><p> 圖5 秒模塊bdf圖 圖6 分模塊bdf圖 圖7 時(shí)模塊bdf圖</p><p> 表3 時(shí)/分/秒模塊引腳說明</p><p> 3.3.2部分源代碼及解釋&l
31、t;/p><p><b> 以秒鐘模塊為例:</b></p><p> ARCHITECTURE ONE OF SEC IS</p><p> SIGNAL S0,S1:STD_LOGIC_VECTOR(3 DOWNTO 0);--定義兩個(gè)變量表示秒鐘高位和低位</p><p><b> BEGIN<
32、/b></p><p> PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF CLK'EVENT AND CLK='1' THEN</p><p><b> S0<=S0+1;</b></p>&l
33、t;p> IF S0=9 THEN S0<=(OTHERS=>'0');</p><p><b> S1<=S1+1;</b></p><p><b> END IF;</b></p><p> IF S1=5 AND S0=9 THEN </p><p&
34、gt; S1<="0000";S0<="0000";COUT<='1';</p><p> ELSE COUT<='0'; --60進(jìn)制計(jì)數(shù)器,即滿六十則賦0且進(jìn)位信號(hào)加一</p><p><b> END IF;</b></p><p&
35、gt;<b> END IF;</b></p><p> END PROCESS;</p><p> SEC0<=S0;SEC1<=S1;</p><p><b> END;</b></p><p> 3.4 設(shè)置時(shí)間模塊</p><p> 3.4.1
36、 引腳說明及功能介紹</p><p> 圖8 設(shè)置時(shí)間模塊bdf圖</p><p> 表4 設(shè)置時(shí)間模塊引腳說明</p><p> 3.4.2部分源代碼及解釋</p><p> ARCHITECTURE BEHAV OF ST IS</p><p> SIGNAL TEMP1: STD_LOGIC_VECT
37、OR (1 DOWNTO 0):="00";--表示SHIFT按鍵按下產(chǎn)生的三種不同狀態(tài)</p><p> SIGNAL TEMP2: STD_LOGIC:='0'; --檢測(cè)TIMESET是否按下的變量</p><p><b> BEGIN</b></p><p> PROCESS(SHIFT,ADD
38、)</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> IF TIMESET'EVENT AND TIMESET='1' THEN </p><p> TEMP2<=NOT TEMP2;</p>
39、<p><b> END IF;</b></p><p> IF TEMP2='1' THEN </p><p> IF SHIFT'EVENT AND SHIFT='1' THEN </p><p> TEMP1<=TEMP1+1;</p><p>&
40、lt;b> END IF;</b></p><p><b> ELSE </b></p><p> TEMP1<="00"; </p><p><b> END IF;</b></p><p><b> END IF;</b&g
41、t;</p><p> CASE TEMP1 IS</p><p> WHEN "00"=>CO1<=SEC;CO2<=MIN; --shift鍵沒有按下,屬于走時(shí)狀態(tài) </p><p> LED13<='0';LED16<='0';</p><p>
42、 WHEN "01"=>CO1<=ADD;CO2<='0'; --shift按下一次,分鐘可設(shè)置</p><p> LED13<='1';LED16<='0';</p><p> WHEN "10"=>CO1<='0';CO2<=
43、ADD; -- shift按下兩次,時(shí)鐘可設(shè)置 </p><p> LED13<='0';LED16<='1'; </p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p> E
44、ND PROCESS;</p><p><b> END;</b></p><p> 3.5 設(shè)置鬧鐘模塊</p><p> 3.5.1 引腳說明及功能介紹</p><p> 圖9 設(shè)置鬧鐘模塊bdf圖</p><p> 表5 時(shí)/分/秒模塊引腳說明</p><p&
45、gt; 3.5.2部分源代碼及解釋</p><p> ARCHITECTURE BEHAV OF SA IS</p><p> SIGNAL TEMP1: STD_LOGIC:='0'; --表示SHIFT鍵是否按下的變量</p><p> SIGNAL TEMP2: STD_LOGIC:='0';--表示CLOCKSET鍵是
46、否按下的變量</p><p><b> BEGIN</b></p><p> PROCESS(SHIFT,ADD)</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> IF CLOCKSE
47、T'EVENT AND CLOCKSET='1' THEN </p><p> TEMP2<=NOT TEMP2;</p><p><b> END IF;</b></p><p> IF TEMP2='1' THEN </p><p> IF SHIFT'E
48、VENT AND SHIFT='1' THEN </p><p> TEMP1<=NOT TEMP1;</p><p><b> END IF;</b></p><p><b> ELSE </b></p><p> TEMP1<='0'; &l
49、t;/p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> IF TEMP2='1' THEN </p><p> CASE TEMP1 IS</p><p> WHEN '0'
50、=>CO1<=ADD;CO2<='0'; --分鐘可設(shè)置</p><p> LED14<='1';LED17<='0';</p><p> WHEN '1'=>CO1<='0';CO2<=ADD; --時(shí)鐘可設(shè)置</p><p>
51、LED14<='0';LED17<='1'; </p><p> WHEN OTHERS=>NULL;</p><p><b> END CASE;</b></p><p><b> END IF;</b></p><p> END
52、 PROCESS;</p><p><b> END;</b></p><p> 3.6 比較鬧鐘模塊</p><p> 3.6.1 引腳說明及功能介紹</p><p> 圖10 鬧鐘比較模塊</p><p> 表6 比較鬧鐘模塊引腳說明</p><p> 3.
53、6.2部分源代碼及解釋</p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY COMPARE IS</p><p> PORT
54、 ( TH1,TH0,TM1,TM0,SAH1,SAH0,SAM1,SAM0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> LED:OUT STD_LOGIC</p><p><b> );</b></p><p> END ENTITY;</p><p> ARCHITEC
55、TURE BAHAV OF COMPARE IS</p><p><b> BEGIN</b></p><p> PROCESS(TH1,TH0,TM1,TM0,SAH1,SAH0,SAM1,SAM0)</p><p> BEGIN——時(shí)間顯示與設(shè)置的鬧鐘時(shí)間相等時(shí),LED燈亮</p><p> IF TH
56、1=SAH1 AND TH0=SAH0 AND TM1=SAM1 AND TM0=SAM0 THEN </p><p><b> LED<='1';</b></p><p> ELSE LED<='0';</p><p><b> END IF;</b></p>
57、<p> END PROCESS;</p><p> END ARCHITECTURE;</p><p><b> 3.7 選擇模塊</b></p><p> 3.7.1 引腳說明及功能介紹</p><p> 圖11選擇模塊bdf圖</p><p> 表7 選擇模塊引腳
58、說明</p><p> 3.7.2部分源代碼及解釋</p><p> ARCHITECTURE BAHAV OF CHOOSE IS</p><p><b> BEGIN</b></p><p> PROCESS(CONTROL)</p><p><b> BEGIN</
59、b></p><p> CASE CONTROL IS </p><p> WHEN "01"=>HOUR1<=TH1;HOUR0<=TH0;MIN1<=TM1;MIN0<=TM0;SEC1<=TS1;SEC0<=TS0; --當(dāng)control為01時(shí),顯示正常走時(shí)以及設(shè)置時(shí)鐘的時(shí)間</p><p&
60、gt; WHEN "10"=>HOUR1<=SAH1;HOUR0<=SAH0;MIN1<=SAM1;MIN0<=SAM0;SEC1<="1111";SEC0<="1111";--當(dāng)control為10時(shí),時(shí)、分顯示設(shè)置鬧鐘的時(shí)間,秒鐘不顯示</p><p> WHEN OTHERS=>HOUR1<
61、=TH1;HOUR0<=TH0;MIN1<=TM1;MIN0<=TM0;SEC1<=TS1;SEC0<=TS0; </p><p><b> END CASE;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE;</p><p>&
62、lt;b> 3.8 譯碼模塊</b></p><p> 3.8.1 引腳說明及功能介紹</p><p><b> 圖12 譯碼模塊</b></p><p> 表8 譯碼模塊引腳說明</p><p> 3.8.2部分源代碼及解釋</p><p> ARCHITECTUR
63、E BAHAV OF DISPLAY IS</p><p> SIGNAL REG7_0: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_1: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_2: STD_LOGIC_VECTOR(6 DOWNTO
64、 0);</p><p> SIGNAL REG7_3: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_4: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_5: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><
65、;p> SIGNAL REG7_6: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_7: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_8: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7
66、_9: STD_LOGIC_VECTOR(6 DOWNTO 0);</p><p> SIGNAL REG7_NULL: STD_LOGIC_VECTOR(6 DOWNTO 0);-- --定義10個(gè)信號(hào)表示數(shù)字0~9</p><p> SIGNAL LEDX:STD_LOGIC;</p><p><b> BEGIN</b></p
67、><p> REG7_0<="1000000";</p><p> REG7_1<="1111001";</p><p> REG7_2<="0100100";</p><p> REG7_3<="0110000";</p>
68、<p> REG7_4<="0011001";</p><p> REG7_5<="0010010";</p><p> REG7_6<="0000010";</p><p> REG7_7<="1111000";</p>&l
69、t;p> REG7_8<="0000000";</p><p> REG7_9<="0010000";</p><p> REG7_NULL<="1111111";</p><p> PROCESS(H1,EN)--小時(shí)高位譯碼,初始為1</p><
70、p><b> BEGIN</b></p><p> IF EN='1' THEN</p><p> CASE H1 IS</p><p> WHEN "0000"=>HOUR1<=REG7_0;</p><p> WHEN "0001"=
71、>HOUR1<=REG7_1;</p><p> WHEN "0010"=>HOUR1<=REG7_2;</p><p> WHEN "0011"=>HOUR1<=REG7_3;</p><p> WHEN "0100"=>HOUR1<=REG7_4;&
72、lt;/p><p> WHEN "0101"=>HOUR1<=REG7_5;</p><p> WHEN "0110"=>HOUR1<=REG7_6;</p><p> WHEN "0111"=>HOUR1<=REG7_7;</p><p>
73、WHEN "1000"=>HOUR1<=REG7_8;</p><p> WHEN "1001"=>HOUR1<=REG7_9;</p><p> WHEN OTHERS=>HOUR1<=REG7_NULL;</p><p><b> END CASE;</b>&
74、lt;/p><p><b> ELSE </b></p><p> HOUR1<=REG7_1;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(H0,EN)--小時(shí)低位譯碼,初始
75、為5</p><p><b> BEGIN</b></p><p> IF EN='1' THEN</p><p> CASE H0 IS</p><p> WHEN "0000"=>HOUR0<=REG7_0;</p><p> WHEN
76、 "0001"=>HOUR0<=REG7_1;</p><p> WHEN "0010"=>HOUR0<=REG7_2;</p><p> WHEN "0011"=>HOUR0<=REG7_3;</p><p> WHEN "0100"=>
77、HOUR0<=REG7_4;</p><p> WHEN "0101"=>HOUR0<=REG7_5;</p><p> WHEN "0110"=>HOUR0<=REG7_6;</p><p> WHEN "0111"=>HOUR0<=REG7_7;</
78、p><p> WHEN "1000"=>HOUR0<=REG7_8;</p><p> WHEN "1001"=>HOUR0<=REG7_9;</p><p> WHEN OTHERS=>HOUR0<=REG7_NULL;</p><p><b> EN
79、D CASE;</b></p><p><b> ELSE </b></p><p> HOUR0<=REG7_5;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(M
80、1,EN)--分鐘高位譯碼,初始為3</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> CASE M1 IS</p><p> WHEN "0000"=>MIN1<=REG7_0;</p&g
81、t;<p> WHEN "0001"=>MIN1<=REG7_1;</p><p> WHEN "0010"=>MIN1<=REG7_2;</p><p> WHEN "0011"=>MIN1<=REG7_3;</p><p> WHEN "
82、;0100"=>MIN1<=REG7_4;</p><p> WHEN "0101"=>MIN1<=REG7_5;</p><p> WHEN "0110"=>MIN1<=REG7_6;</p><p> WHEN "0111"=>MIN1<=
83、REG7_7;</p><p> WHEN "1000"=>MIN1<=REG7_8;</p><p> WHEN "1001"=>MIN1<=REG7_9;</p><p> WHEN OTHERS=>MIN1<=REG7_NULL;</p><p><
84、b> END CASE;</b></p><p><b> ELSE</b></p><p> MIN1<=REG7_3;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PR
85、OCESS(M0,EN)--分鐘低位譯碼,初始為8</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> CASE M0 IS</p><p> WHEN "0000"=>MIN0<=REG7_0;&
86、lt;/p><p> WHEN "0001"=>MIN0<=REG7_1;</p><p> WHEN "0010"=>MIN0<=REG7_2;</p><p> WHEN "0011"=>MIN0<=REG7_3;</p><p> WHE
87、N "0100"=>MIN0<=REG7_4;</p><p> WHEN "0101"=>MIN0<=REG7_5;</p><p> WHEN "0110"=>MIN0<=REG7_6;</p><p> WHEN "0111"=>MI
88、N0<=REG7_7;</p><p> WHEN "1000"=>MIN0<=REG7_8;</p><p> WHEN "1001"=>MIN0<=REG7_9;</p><p> WHEN OTHERS=>MIN0<=REG7_NULL;</p><p&
89、gt;<b> END CASE;</b></p><p><b> ELSE</b></p><p> MIN0<=REG7_8;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p&
90、gt; PROCESS(S1,EN)--秒鐘高位譯碼,初始為4</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> CASE S1 IS</p><p> WHEN "0000"=>SEC1<=R
91、EG7_0;</p><p> WHEN "0001"=>SEC1<=REG7_1;</p><p> WHEN "0010"=>SEC1<=REG7_2;</p><p> WHEN "0011"=>SEC1<=REG7_3;</p><p&g
92、t; WHEN "0100"=>SEC1<=REG7_4;</p><p> WHEN "0101"=>SEC1<=REG7_5;</p><p> WHEN "0110"=>SEC1<=REG7_6;</p><p> WHEN "0111"
93、=>SEC1<=REG7_7;</p><p> WHEN "1000"=>SEC1<=REG7_8;</p><p> WHEN "1001"=>SEC1<=REG7_9;</p><p> WHEN OTHERS=> SEC1<=REG7_NULL;</p>
94、<p><b> END CASE;</b></p><p><b> ELSE </b></p><p> SEC1<=REG7_4;</p><p><b> END IF;</b></p><p> END PROCESS;</p>
95、;<p> PROCESS(S0,EN)--秒鐘低位譯碼,初始為5</p><p><b> BEGIN</b></p><p> IF EN='1' THEN </p><p> CASE S0 IS</p><p> WHEN "0000"=>S
96、EC0<=REG7_0;</p><p> WHEN "0001"=>SEC0<=REG7_1;</p><p> WHEN "0010"=>SEC0<=REG7_2;</p><p> WHEN "0011"=>SEC0<=REG7_3;</p>
97、<p> WHEN "0100"=>SEC0<=REG7_4;</p><p> WHEN "0101"=>SEC0<=REG7_5;</p><p> WHEN "0110"=>SEC0<=REG7_6;</p><p> WHEN "0
98、111"=>SEC0<=REG7_7;</p><p> WHEN "1000"=>SEC0<=REG7_8;</p><p> WHEN "1001"=>SEC0<=REG7_9;</p><p> WHEN OTHERS=> SEC0<=REG7_NULL;&
99、lt;/p><p><b> END CASE;</b></p><p><b> ELSE</b></p><p> SEC0<=REG7_5;</p><p><b> END IF;</b></p><p> END PROCESS;&
100、lt;/p><p> END ARCHITECTURE;</p><p><b> 3.9 報(bào)時(shí)模塊</b></p><p> 3.9.1 引腳說明及功能介紹</p><p> 圖13報(bào)時(shí)模塊bdf圖</p><p> 表7 報(bào)時(shí)模塊引腳說明</p><p> 3.
101、9.2部分源代碼及解釋</p><p> ARCHITECTURE BEHAV OF TIMER IS</p><p><b> BEGIN</b></p><p> PROCESS(M0,M1)</p><p><b> BEGIN</b></p><p> IF
102、 M0="0000" AND M1="0000" THEN --分鐘為00即整點(diǎn)時(shí),燈LEDR1 </p><p> LEDR1<=CLK;閃爍提示</p><p> ELSE LEDR1<='0';</p><p><b> END IF;</b>&
103、lt;/p><p> IF M0="0000" AND M1="0011" THEN ----分鐘為30即半點(diǎn)時(shí),燈LEDR0</p><p> LEDR0<=CLK;閃爍提示</p><p> ELSE LEDR0<='0';</p><p><
104、b> END IF;</b></p><p> END PROCESS;</p><p><b> END;</b></p><p><b> 四、設(shè)計(jì)結(jié)果圖示</b></p><p><b> EN=0,顯示學(xué)號(hào)</b></p>&l
105、t;p> 圖13 顯示學(xué)號(hào)153845</p><p> EN=1,初始狀態(tài),開始計(jì)時(shí)。</p><p> 圖14 初始狀態(tài),開始計(jì)時(shí)</p><p> 按下TIMESET鍵(kye3), 開始設(shè)置時(shí)間,再次按下表示設(shè)置結(jié)束;按下SHIFT鍵(key2),進(jìn)行小時(shí)和分鐘的移位,從高向低,同時(shí)指示燈亮;按下ADD鍵(key1),對(duì)應(yīng)數(shù)字加一。<
106、/p><p> 圖15 設(shè)置分鐘,ledr13燈亮</p><p> 圖16 設(shè)置小時(shí),ledr16燈亮</p><p> 按下ALARMSET鍵(KEY3),開始設(shè)置鬧鐘,再次按下表示設(shè)置結(jié)束;按下SHIFT鍵(KEY2),進(jìn)行小時(shí)和分鐘的移位,從高向低;按下ADD鍵(KEY1),設(shè)置鬧鐘的每一位數(shù)字:0~9</p><p> 圖1
107、7 設(shè)置鬧鐘時(shí)間</p><p> 圖18 鬧鐘提醒,ledg2燈亮</p><p> 整點(diǎn)報(bào)時(shí)、半點(diǎn)報(bào)時(shí),LED燈閃爍。</p><p> 圖19 整點(diǎn)報(bào)時(shí),ledr2燈亮</p><p> 圖20 半點(diǎn)報(bào)時(shí),ledr1燈亮</p><p><b> 五、結(jié)論</b></
108、p><p> 5.1遇到的問題和改進(jìn)</p><p><b> (1)問題1:</b></p><p> 在設(shè)置時(shí)間的時(shí)候,按下TIMESET鍵之后開始設(shè)置時(shí)間,再次按下TIMESET 鍵回到走時(shí)狀態(tài),顯示的時(shí)間仍為未設(shè)置前的時(shí)間,即設(shè)置的時(shí)間并不會(huì)反饋到走時(shí)狀態(tài)。</p><p> 解決辦法:在設(shè)置時(shí)間模塊以及走時(shí)
109、模塊之間增加聯(lián)系,即將走時(shí)模塊的進(jìn)位輸出作為設(shè)置時(shí)間的輸入,設(shè)置時(shí)間模塊輸出信號(hào)作為時(shí)、分模塊的clk。</p><p> (2)問題2: 已經(jīng)設(shè)置完時(shí)間之后再設(shè)置鬧鐘時(shí)間的時(shí)候,按下ADD鍵,對(duì)鬧鐘時(shí)間的小時(shí)和分鐘位進(jìn)行調(diào)整后,發(fā)現(xiàn)計(jì)時(shí)狀態(tài)下的小時(shí)和分鐘位也被進(jìn)行了相應(yīng)的調(diào)整,不能完成設(shè)置鬧鐘時(shí)間和正常計(jì)時(shí)的功能。</p><p> 解決辦法:增加設(shè)置時(shí)的限制條件,如只有在TIMES
110、ET按鍵按下的情況下才能更改走時(shí)時(shí)間。 </p><p><b> 5.2工作分配比例</b></p><p><b> 六、附錄</b></p><p><b> 6.1分頻模塊</b></p><p> LIBRARY IEEE;</p><p&
111、gt; USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY FD IS</p><p> PORT (CLK,EN,QUICK:IN STD_LOGIC;</p><p> CLK_OUT1OR50:OUT ST
112、D_LOGIC);</p><p> END ENTITY FD;</p><p> ARCHITECTURE BAHAV OF FD IS</p><p> SIGNAL Q1,Q50:STD_LOGIC;</p><p><b> BEGIN</b></p><p> PROCESS
113、(CLK,EN)</p><p> VARIABLE TEMP1 : INTEGER RANGE 24999999 DOWNTO 0;</p><p> VARIABLE TEMP50 : INTEGER RANGE 499999 DOWNTO 0;</p><p> --VARIABLE TEMP2: INTEGER RANGE 12499999 DOWNT
114、O 0;</p><p><b> BEGIN </b></p><p> IF EN='1' THEN </p><p> IF CLK'EVENT AND CLK='1'THEN </p><p> IF TEMP1=24999999 THEN TEMP1:=0;Q
115、1<=NOT Q1;</p><p> ELSE TEMP1:=TEMP1+1;</p><p><b> END IF;</b></p><p> IF TEMP50=499999 THEN TEMP50:=0;Q50<=NOT Q50;</p><p> ELSE TEMP50:=TEMP50
116、+1;</p><p><b> END IF;</b></p><p> --IF TEMP2=12499999 THEN TEMP2:=0;Q2<=NOT Q2;</p><p> --ELSE TEMP2:=TEMP2+1;</p><p> --END IF;</p&g
117、t;<p><b> END IF;</b></p><p><b> ELSE </b></p><p> TEMP1:=0;Q1<='0';</p><p> TEMP50:=0;Q50<='0';</p><p> --T
118、EMP2:=0;Q2<='0';</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> PROCESS(QUICK)</p><p><b> BEGIN</b></p><p> IF
119、 QUICK='0' THEN CLK_OUT1OR50<=Q1;</p><p> ELSE CLK_OUT1OR50<=Q50;</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> --CLK_OUT2<=Q2;
120、</p><p> END ARCHITECTURE;</p><p><b> 6.2控制模塊</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UN
121、SIGNED.ALL;</p><p> ENTITY COUTROL IS</p><p> PORT ( ALARM,EN:IN STD_LOGIC;</p><p> COUT:OUT STD_LOGIC_VECTOR(1 DOWNTO 0)</p><p><b> );</b></p>&
122、lt;p> END ENTITY;</p><p> ARCHITECTURE ONE OF COUTROL IS</p><p> SIGNAL TEMP1:STD_LOGIC:='0';</p><p><b> BEGIN </b></p><p> PROCESS(ALARM)&
123、lt;/p><p><b> BEGIN</b></p><p> IF ALARM'EVENT AND ALARM='1' THEN </p><p> TEMP1<=NOT TEMP1; </p><p><b> END IF;</b></p>
124、<p> END PROCESS;</p><p> PROCESS(TEMP1)</p><p><b> BEGIN</b></p><p> IF TEMP1<='0' THEN </p><p> COUT<="01";</p>&
125、lt;p> ELSE COUT<="10";</p><p><b> END IF;</b></p><p> END PROCESS;</p><p> END ARCHITECTURE ONE;</p><p><b> 6.3秒模塊</b></
126、p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY SEC IS</p><p> PORT(CLK:IN STD_LOGIC;&l
127、t;/p><p> SEC0,SEC1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> COUT:OUT STD_LOGIC);</p><p><b> END SEC;</b></p><p> ARCHITECTURE ONE OF SEC IS</p>&l
128、t;p> SIGNAL S0,S1:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF CLK'EVENT
129、AND CLK='1' THEN</p><p><b> S0<=S0+1;</b></p><p> IF S0=9 THEN S0<=(OTHERS=>'0');</p><p><b> S1<=S1+1;</b></p><p>
130、;<b> END IF;</b></p><p> IF S1=5 AND S0=9 THEN </p><p> S1<="0000";S0<="0000";COUT<='1';</p><p> ELSE COUT<='0';</
131、p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> SEC0<=S0;SEC1<=S1;</p><p><b> END;</b>
132、;</p><p><b> 6.4分模塊</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEEE.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY
133、 MIN IS</p><p> PORT(CLK:IN STD_LOGIC;</p><p> MIN0,MIN1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> COUT:OUT STD_LOGIC);</p><p><b> END MIN;</b></p>
134、;<p> ARCHITECTURE ONE OF MIN IS</p><p> SIGNAL M0,M1:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p><b> BEGIN</b></p><p> PROCESS(CLK)</p><p><b> B
135、EGIN</b></p><p> IF CLK'EVENT AND CLK='1' THEN</p><p><b> M0<=M0+1;</b></p><p> IF M0=9 THEN M0<=(OTHERS=>'0');</p><p>
136、;<b> M1<=M1+1;</b></p><p><b> END IF;</b></p><p> IF M1=5 AND M0=9 THEN </p><p> M1<="0000";M0<="0000";COUT<='1';
137、</p><p> ELSE COUT<='0';</p><p><b> END IF;</b></p><p><b> END IF;</b></p><p> END PROCESS;</p><p> MIN0<=M0;MIN
138、1<=M1;</p><p><b> END;</b></p><p><b> 6.5時(shí)模塊</b></p><p> LIBRARY IEEE;</p><p> USE IEEE.STD_LOGIC_1164.ALL;</p><p> USE IEE
139、E.STD_LOGIC_UNSIGNED.ALL;</p><p> ENTITY HOUR IS</p><p> PORT(CLK:IN STD_LOGIC;</p><p> HOUR0,HOUR1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p> COUT:OUT STD_LOGIC);&l
140、t;/p><p><b> END HOUR;</b></p><p> ARCHITECTURE ONE OF HOUR IS</p><p> SIGNAL H0,H1:STD_LOGIC_VECTOR(3 DOWNTO 0);</p><p><b> BEGIN</b></p>
141、;<p> PROCESS(CLK)</p><p><b> BEGIN</b></p><p> IF CLK'EVENT AND CLK='1' THEN</p><p><b> H0<=H0+1;</b></p><p> IF H0=
142、9 THEN H0<=(OTHERS=>'0');</p><p><b> H1<=H1+1;</b></p><p><b> END IF;</b></p><p> IF H1=2 AND H0=3 THEN </p><p> H1<=&qu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)--基于fpga的數(shù)字鐘設(shè)計(jì)
- eda課程設(shè)計(jì)---基于fpga的數(shù)字鐘設(shè)計(jì)
- 基于fpga的多功能數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 數(shù)字鐘課程設(shè)計(jì)
- 基于fpga的數(shù)字鐘設(shè)計(jì)
- 課程設(shè)計(jì)-- 數(shù)字鐘的設(shè)計(jì)
- 課程設(shè)計(jì)---數(shù)字鐘的設(shè)計(jì)
- 基于fpga的數(shù)字鐘設(shè)計(jì)
- 脈沖與數(shù)字電路課程設(shè)計(jì)報(bào)告--基于fpga的數(shù)字鐘
- 數(shù)字電子課程設(shè)計(jì)---數(shù)字鐘
- 數(shù)字鐘課程設(shè)計(jì)---多功能數(shù)字鐘的設(shè)計(jì)與制作
- 數(shù)字鐘課程設(shè)計(jì) (2)
- 課程設(shè)計(jì)數(shù)字鐘
- eda數(shù)字鐘課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論