第一篇:VHDL實(shí)現(xiàn)數(shù)字鐘課設(shè)報(bào)告[推薦]
東北大學(xué)信息學(xué)院
課程設(shè)計(jì)報(bào)告
課程設(shè)計(jì)題目:用VHDL語言實(shí)現(xiàn)數(shù)字鐘的設(shè)計(jì)
班 級(jí):電子1001班 學(xué) 號(hào):20102594 姓 名:劉云飛
指導(dǎo)老師:李世平、李寧
設(shè)計(jì)時(shí)間:2012年12月
東北大學(xué)信息學(xué)院
摘要
隨著EDA技術(shù)的發(fā)展,EDA在通信、電子等領(lǐng)域占有十分重要的地位。本設(shè)計(jì)介紹了基于VHDL語言的數(shù)字鐘的設(shè)計(jì)。數(shù)字鐘的功能是對(duì)年、月、日、時(shí)、分、秒、星期,以及鬧鐘時(shí)、分的預(yù)置;在正常計(jì)數(shù)時(shí)的時(shí)、分與鬧鐘設(shè)定的時(shí)、分相同時(shí),實(shí)現(xiàn)報(bào)時(shí),同時(shí)以stop和pass鍵對(duì)鬧鐘進(jìn)行停止及延遲響鈴的控制;在整點(diǎn)的時(shí)候led燈閃爍一下。其中,用set脈沖的不同實(shí)現(xiàn)對(duì)預(yù)置,正常計(jì)時(shí),鬧鐘的控制。Set為1~12分別控制顯示年月日、預(yù)置年月日、時(shí)分秒、星期、顯示時(shí)分秒、預(yù)置鬧鐘時(shí)分、顯示鬧鐘預(yù)置的時(shí)分。預(yù)置時(shí)用up的高、低電平實(shí)現(xiàn)對(duì)各預(yù)置量的加、減控制。將1KHZ的時(shí)鐘進(jìn)行分頻為1HZ,實(shí)現(xiàn)每次脈沖為1秒。經(jīng)仿真和驗(yàn)證顯示,此數(shù)字鐘切實(shí)可行,可以實(shí)現(xiàn)顯示時(shí)間和鬧鐘的功能。
關(guān)鍵詞:VHDL語言,數(shù)字鐘,預(yù)置
東北大學(xué)信息學(xué)院
目錄
摘 要............................................................2
1、設(shè)計(jì)目的.........................................................4
2、設(shè)計(jì)內(nèi)容和要求...................................................4
3、設(shè)計(jì)原理.........................................................4
3.1 數(shù)字鐘功能介紹..........................................................................................................4 3.2 數(shù)字鐘設(shè)計(jì)原理..........................................................................................................5
4、VHDL程序設(shè)計(jì).....................................................6
4.1 整體設(shè)計(jì)思路................................................................................................................6 4.2 各模塊設(shè)計(jì)方法............................................................................................................7 4.2.1 頂層模塊...............................................................................................................7 4.2.2 其他模塊...............................................................................................................8 4.2.3 程序包模塊.........................................................................................................13
5、仿真與分析......................................................13
5.1 仿真結(jié)果....................................................................................................................13 5.2 仿真分析....................................................................................................................16
6、課程設(shè)計(jì)總結(jié)....................................................16
7、參考文獻(xiàn)........................................................17
東北大學(xué)信息學(xué)院
1、設(shè)計(jì)目的
掌握利用可編程邏輯器件和EDA設(shè)計(jì)工具進(jìn)行電子系統(tǒng)設(shè)計(jì)的方法。
2、設(shè)計(jì)內(nèi)容和要求
用VHDL語言實(shí)現(xiàn)數(shù)字鐘的設(shè)計(jì),要求設(shè)計(jì)實(shí)現(xiàn)一個(gè)具有帶預(yù)置數(shù)的數(shù)字鐘,具有顯示年月日時(shí)分秒的功能。用6個(gè)數(shù)碼管顯示時(shí)分秒,set按鈕產(chǎn)生第一個(gè)脈沖時(shí),顯示切換年月日,第2個(gè)脈沖到來時(shí)可預(yù)置年份,第3個(gè)脈沖到來時(shí)可預(yù)置月份,依次第4、5、6、7個(gè)脈沖到來時(shí)分別可預(yù)置日期、時(shí)、分、秒,第 8個(gè)脈沖到來后預(yù)置結(jié)束,正常工作,顯示的是時(shí)分秒。Up為高電平時(shí),upclk有脈沖到達(dá)時(shí),預(yù)置位加1。否則減1。
3、設(shè)計(jì)原理 3.1 數(shù)字鐘功能介紹
數(shù)字鐘具有計(jì)時(shí)、預(yù)置、報(bào)時(shí)的功能。以不同的set脈沖控制各個(gè)功能。
(1)在計(jì)時(shí)功能中,數(shù)字鐘實(shí)現(xiàn)對(duì)年月日時(shí)分秒即星期的計(jì)時(shí),并可以通過LED數(shù)碼管分別顯示年月日、或時(shí)分秒、或星期、或鬧鐘的時(shí)分。
(2)在預(yù)置功能中,可以通過UP鍵對(duì)各需要預(yù)置的量進(jìn)行控制。UP=1時(shí),進(jìn)行“加”控制,UP=0時(shí),進(jìn)行“減”控制。
(3)在報(bào)時(shí)功能中,分為整點(diǎn)報(bào)時(shí)和設(shè)置時(shí)間報(bào)時(shí)。其中整點(diǎn)報(bào)時(shí)以ce作為使能輸入端,在整點(diǎn)時(shí)燈進(jìn)行一秒閃爍;設(shè)置時(shí)間報(bào)時(shí)以enable作為使能輸入端,enable=1時(shí)設(shè)置時(shí)間報(bào)時(shí)功能啟動(dòng),在鬧鐘預(yù)置時(shí)間與時(shí)鐘當(dāng)前時(shí)間相同時(shí)報(bào)時(shí),若此時(shí)按下stop,鬧鐘立即停止并不再響鈴,若按下pass,則鬧鐘立即停止,但三分鐘后再響,如此循環(huán)5次后不再響鈴,若什么都不按,鬧鐘響鈴持續(xù)1分鐘。
東北大學(xué)信息學(xué)院
3.2 數(shù)字鐘設(shè)計(jì)原理
本設(shè)計(jì)功能有8個(gè)子模塊:分頻模塊、時(shí)分秒模塊、日模塊、年月模塊、鬧鐘預(yù)置模塊、星期模塊、響鈴模塊。通過元件例化由頂層文件timekeeper綜合。
整體設(shè)計(jì)框圖及外觀圖如(圖 3-1)及(圖3-2)
圖3-1 數(shù)字鐘設(shè)計(jì)整體框圖
東北大學(xué)信息學(xué)院
圖3-2 數(shù)字鐘外觀圖
4、VHDL程序設(shè)計(jì)
4.1 整體設(shè)計(jì)思路
采用自上而下的方法進(jìn)行整體設(shè)計(jì)。整個(gè)設(shè)計(jì)共分為8個(gè)模塊,通過頂
層文件timekeeper元件例化將8個(gè)模塊各個(gè)端口對(duì)應(yīng)相連。在設(shè)計(jì)各個(gè)模塊時(shí)所用到的其它運(yùn)算方法等放于work庫中,通過程序包及程序包體的方式對(duì)所使用函數(shù)進(jìn)行定義。
主要使用的語句有:元件例化語句,過程語句,信號(hào)賦值語句,if語句,case語句(在狀態(tài)機(jī)中)。
圖(4-1)表示了個(gè)模塊的連接及連接是所用到的觸發(fā)器等。
東北大學(xué)信息學(xué)院
圖4-1
整體結(jié)構(gòu)圖
4.2 各模塊設(shè)計(jì)方法
4.2.1 頂層模塊
頂層模塊timekeeper是.對(duì)對(duì)所有模塊的綜合。
它包含的功能是:通過元件例化連接各模塊;實(shí)現(xiàn)對(duì)鬧鐘控制位sp2的控制;實(shí)現(xiàn)鬧鐘的整點(diǎn)報(bào)時(shí)閃爍。
輸入端:up
全局加減選擇,控制預(yù)置時(shí)的加減
setpin 設(shè)定選擇
東北大學(xué)信息學(xué)院
upclk 加減觸發(fā)
f1000 時(shí)鐘輸入
輸出端:a0~d1 八位數(shù)碼管控制引腳的輸出
z
整點(diǎn)報(bào)時(shí)輸出 4.2.2 其他模塊
1、時(shí)分秒模塊
時(shí)分秒模塊h_m_s是對(duì)時(shí)、分、秒正常計(jì)時(shí)(set=0 or 1 or 12)和預(yù)置時(shí)分秒(set=5 or 6 or 7)的實(shí)現(xiàn)。
分和秒由兩個(gè)六十進(jìn)制實(shí)現(xiàn),時(shí)由24進(jìn)制實(shí)現(xiàn)。當(dāng)時(shí)間達(dá)到23時(shí)59分59秒時(shí),時(shí)分秒全部歸零,進(jìn)位位ov由零變?yōu)?,通過管腳連接到date模塊的時(shí)鐘計(jì)數(shù)信號(hào)clk0,開啟date模塊。
2、日的模塊
日的模塊date實(shí)現(xiàn)日子進(jìn)行正常計(jì)時(shí)(set=0 or 1 or 12)和預(yù)置(set=4)。
由于每月的天數(shù)與月份、年份有關(guān),故需判斷年月。(1)(2)(3)當(dāng)1、3、5、7、8、10、12月時(shí),每月31天,使用31進(jìn)制。當(dāng)4、6、9、11月時(shí),每月30天,使用30進(jìn)制。當(dāng)2月時(shí),分閏年和平年。閏年29天,平年28天。
閏年和平年的判斷方法是:由于通過年月模塊傳輸?shù)哪攴轂閮晌籅CD碼。若高位信號(hào)為“xxx0”且低位信號(hào)為“xx00”或高位信號(hào)為“xxx1”且低位信號(hào)為“xx10”,則可判定為閏年,否則為平年。
以上各月,當(dāng)日期至月底時(shí)返回1,進(jìn)位位ov變?yōu)?通過管腳連接年月模塊的時(shí)鐘計(jì)數(shù)信號(hào)clk0,開啟年月模塊。
3、年月模塊
年月模塊year_mon實(shí)現(xiàn)年月正常計(jì)時(shí)(set=0 or 1 or 12)和年、月的預(yù)置(set=2 or 3)。
月為12進(jìn)制,當(dāng)達(dá)到12時(shí)變回為1,同時(shí)使年份進(jìn)1。由兩位BCD碼表示年份,故可以表示100年之年的所有年,為100進(jìn)制。
東北大學(xué)信息學(xué)院
圖4-2 year_mon和date模塊的電路連接圖
4、星期模塊
星期模塊week的功能是實(shí)現(xiàn)對(duì)星期的計(jì)時(shí)(set=0 or 1 or 12)和預(yù)置(set=8)。為七進(jìn)制。
圖4-3 week模塊的RTL
5、鬧鐘模塊
東北大學(xué)信息學(xué)院
鬧鐘模塊alarm是對(duì)鬧鐘時(shí)和分的預(yù)置(set=10 or 11)。時(shí)為24進(jìn)制,分為60進(jìn)制。
圖4-3 alarm模塊的RTL
另外,在頂層模塊timekeeper,當(dāng)鬧鐘預(yù)置時(shí)間與計(jì)時(shí)時(shí)間相同時(shí)(僅時(shí)、分),鬧鐘響鈴,當(dāng)不對(duì)其進(jìn)行任何操作時(shí),響鈴維持1分鐘。響鈴方式見4.2.7響鈴模塊。
6、響鈴模塊
響鈴模塊alarm是對(duì)鬧鐘響鈴的控制。其中主要包含:
Enable:當(dāng)enable=1時(shí),鬧鐘可以工作。
Sp2 :當(dāng)頂層模塊鬧鐘時(shí)間與計(jì)時(shí)相等時(shí),sp2=1,響鈴開啟。Stop :鬧鐘停止并不再響鈴。
Pass :鬧鐘停止但三分鐘后再響,循環(huán)5次。Sp :響鈴輸出。Sp=1時(shí)響鈴,sp=0時(shí)不響。本模塊主要使用的方法是狀態(tài)機(jī)。相應(yīng)狀態(tài)轉(zhuǎn)換圖如下:
東北大學(xué)信息學(xué)院
圖 4-4 響鈴模塊狀態(tài)轉(zhuǎn)換圖
在狀態(tài)t_pass時(shí),使用計(jì)數(shù)的方法實(shí)現(xiàn)對(duì)3分鐘,5次循環(huán)的計(jì)數(shù)。
圖 4-5 計(jì)數(shù)的流程圖
東北大學(xué)信息學(xué)院
圖4-6 speak模塊的RTL
7、分頻模塊
分頻模塊fenpin使輸入為1KHZ時(shí)鐘信號(hào)時(shí),接入電路經(jīng)分頻后仍能按1HZ即1s計(jì)數(shù)。
圖4-7 fenpin模塊的RTL
8、顯示模塊
顯示模塊led即七段數(shù)碼管的顯示電路。
東北大學(xué)信息學(xué)院
圖4-8 led模塊的RTL 4.2.3 程序包模塊
程序模塊是對(duì)各模塊所用到的函數(shù)的定義,通過程序包package定義時(shí)、日、月、年等的增減函數(shù)(procedure),并用程序包體package body具體說明函數(shù)的內(nèi)容。通過use.work.pac.all語句調(diào)用程序包,使程序書寫更加方便簡(jiǎn)潔。
5、仿真與分析
5.1 仿真結(jié)果
1、h_m_s模塊
東北大學(xué)信息學(xué)院
表示當(dāng)up=1時(shí),時(shí)鐘時(shí)(set=5)、分(set=6)、秒(set=7)從0開始加。
圖 5-1
2、date模塊
以下為對(duì)應(yīng)月份截圖。另外,當(dāng)日期由最末變?yōu)?時(shí),ov進(jìn)1以控制year_mon模塊。
(1)大月:每月31天。
圖5-2-1(2)小月:每月30天。
圖5-2-2(3)平年2月:每月28天。
東北大學(xué)信息學(xué)院
圖5-2-3(3)閏年2月:每月29天。
圖5-2-4
3、year_mon模塊
圖5-3
4、week模塊
前半部分up=1,為加,1~7,后半部分up=0,為減,6~1
圖5-4
5、alarm模塊
下圖反映對(duì)鬧鐘時(shí)(set=10)、分(set=11)的預(yù)置,up=1為加。
圖 5-5
6、speak模塊
(1)按下pass
由下圖可見,當(dāng)時(shí)間相同sp為高電平;按下pass后sp變?yōu)榈碗娖?,三分?/p>
東北大學(xué)信息學(xué)院
后sp又為高電平。
圖5-6-1(2)按下stop
由下圖可見,當(dāng)時(shí)間相同時(shí)sp為高電平,按下stop后sp變?yōu)榈碗娖健?/p>
圖 5-6-2
5.2 仿真分析
各模塊仿真均可實(shí)現(xiàn),且波形顯示可以實(shí)現(xiàn)預(yù)想的功能。
6、課程設(shè)計(jì)總結(jié)
通過這次的課程設(shè)計(jì),我又一次系統(tǒng)的復(fù)習(xí)了VHDL語言,通過實(shí)踐對(duì)VHDL語言和EDA技術(shù)有了更具現(xiàn)實(shí)性應(yīng)用性的了解,并熟練了相關(guān)軟件的使用方法。
此次課程設(shè)計(jì)的內(nèi)容是數(shù)字鐘,我學(xué)會(huì)了如何利用元件例化將各個(gè)模塊結(jié)合起來,而不是一味的想起一個(gè)功能設(shè)計(jì)一個(gè)功能,而是有一個(gè)總體的自上而下的設(shè)計(jì),建立基本的設(shè)計(jì)框圖(如圖 3-1),再進(jìn)行具體的設(shè)計(jì)。
在程序調(diào)試的過程中,出現(xiàn)了很多的問題。我發(fā)現(xiàn)往往是一行出現(xiàn)了錯(cuò)誤導(dǎo)致了接下來一系列錯(cuò)誤的出現(xiàn)。
還有在仿真中出現(xiàn)錯(cuò)誤的紅線,并出現(xiàn)了‘U’字符,全都是未設(shè)置初值所致。而在設(shè)置初值時(shí)仍然出現(xiàn)了問題。最開始我想定義一個(gè)clr信號(hào),當(dāng)clr為高電平時(shí)各功能清零,但是在實(shí)際仿真時(shí),由于常常要看在月末或類似23時(shí)59分59秒這樣的時(shí)刻是否有進(jìn)位信號(hào)進(jìn)為高電平,從零開始顯然讓仿真變的十
東北大學(xué)信息學(xué)院
分麻煩,如果可以直接賦初值到接近進(jìn)位的時(shí)刻就會(huì)讓仿真變得簡(jiǎn)便。即使用信號(hào)賦初值的方法對(duì)信號(hào)進(jìn)行賦初值,既解決錯(cuò)誤又利于仿真。
在最后對(duì)頂層仿真時(shí)出現(xiàn)了很多的問題,最后發(fā)現(xiàn)都是未對(duì)應(yīng)的問題。當(dāng)然,我的設(shè)計(jì)還有很多不足的地方。比如有一處的競(jìng)爭(zhēng)冒險(xiǎn)產(chǎn)生的毛刺沒有解決。最開始是將speak模塊控制信號(hào)sp2的相關(guān)程序?qū)懺诹薬larm模塊,仿真時(shí)發(fā)現(xiàn)在一處出現(xiàn)了毛刺,在對(duì)鬧鐘進(jìn)行預(yù)置時(shí)分時(shí)的第一個(gè)時(shí)間都未足一個(gè)時(shí)鐘周期(如圖 5-5)。后來我想是否因?yàn)閍larm模塊有兩個(gè)process進(jìn)程,就將sp2的相關(guān)程序挪到了頂層模塊,但是最后還是沒有實(shí)現(xiàn)。咨詢了一下同學(xué)們,他們都說這沒有問題,不需要解決,所以就沒有解決這個(gè)問題。
此次課程設(shè)計(jì)我學(xué)到了很多,但是我覺得應(yīng)該放在剛剛考完EDA之后,那時(shí)候?qū)χ皇怯浀帽容^清楚,不像在這次設(shè)計(jì)時(shí)很多知識(shí)都想不起來了。其他的對(duì)我?guī)椭己艽蟆?/p>
7、參考文獻(xiàn) 李景華,杜玉遠(yuǎn)等著.可編程邏輯器件與EDA技術(shù).沈陽:東北大學(xué)出版社,2000 2 齊懷印等.高級(jí)邏輯器件與設(shè)計(jì).北京:電子工業(yè)出版社,1996 3 可編程邏輯器件與數(shù)字系統(tǒng)設(shè)計(jì)[M].北京航天航空大學(xué)出版社,1999 4 劉真,畢才術(shù).數(shù)字邏輯與計(jì)算機(jī)設(shè)計(jì)[M ]北京:高等教育出版社,2002 5 王小軍.VHDL簡(jiǎn)明教程[M].北京:清華大學(xué)出版社,1997
第二篇:數(shù)字鐘課設(shè)任務(wù)書
課程設(shè)計(jì)任務(wù)書
一、設(shè)計(jì)課題
數(shù)字鐘
二、設(shè)計(jì)時(shí)間
2011年 6 月 20日至2011年 6 月 24日
三、設(shè)計(jì)內(nèi)容及要求
1、設(shè)計(jì)要求
1)時(shí)間以24小時(shí)為一個(gè)周期; 2)能顯示時(shí)、分、秒,24小時(shí)制;
3)有校時(shí)功能,可以分別對(duì)時(shí)及分進(jìn)行單獨(dú)校時(shí),使其校正到標(biāo)準(zhǔn)時(shí)間; 4)計(jì)時(shí)過程具有報(bào)時(shí)功能,當(dāng)時(shí)間到達(dá)整點(diǎn)前5秒進(jìn)行蜂鳴報(bào)時(shí); 5)為了保證計(jì)時(shí)的穩(wěn)定及準(zhǔn)確須由晶體振蕩器提供表針時(shí)間基準(zhǔn)信號(hào)。6)在完成上述設(shè)計(jì)內(nèi)容的基礎(chǔ)上,可以自行設(shè)計(jì)一些附加功能。注意:硬件資源的節(jié)約,否則器件內(nèi)資源會(huì)枯竭。
2、工作任務(wù)與要求
1)搜集有關(guān)資料,進(jìn)行方案設(shè)計(jì),畫出總體設(shè)計(jì)框圖,說明搶答器由哪些相對(duì)獨(dú)立的功能模塊組成,標(biāo)出各個(gè)模塊之間互相聯(lián)系,并以文字對(duì)原理作輔助說明。
2)進(jìn)行電路參數(shù)分析、論證,以及電路可靠性分析。3)設(shè)計(jì)各個(gè)功能模塊的電路圖,加上原理說明。
4)在驗(yàn)證各個(gè)功能模塊基礎(chǔ)上,對(duì)整個(gè)電路的元器件和布線,進(jìn)行合理布局,畫出總體電路圖。
3、設(shè)計(jì)報(bào)告正文內(nèi)容要求
1)設(shè)計(jì)目的。2)設(shè)計(jì)指標(biāo)。3)設(shè)計(jì)方案及論證。
4)畫出設(shè)計(jì)的原理框圖,并要求說明該框圖的工作過程及每個(gè)模塊的功能。5)畫出各功能模塊的電路圖,加上原理說明(例如搶答門及控制電路,鎖存器及譯碼顯示原理等)。
6)畫出總布局接線圖(集成塊按實(shí)際布局位置畫,關(guān)鍵的連接應(yīng)單獨(dú)畫出,集成塊的引腳須按實(shí)際位置畫,并注明名稱。)
7)元器件清單。
胡靜波
第三篇:基于VHDL的多功能數(shù)字鐘設(shè)計(jì)報(bào)告
基于VHDL的多功能數(shù)字鐘
設(shè)計(jì)報(bào)告
021215班 衛(wèi)時(shí)章 02121451
一、設(shè)計(jì)要求
1、具有以二十四小時(shí)制計(jì)時(shí)、顯示、整點(diǎn)報(bào)時(shí)、時(shí)間設(shè)置和鬧鐘的功能。
2、設(shè)計(jì)精度要求為1秒。
二、設(shè)計(jì)環(huán)境:Quartus II
三、系統(tǒng)功能描述
1、系統(tǒng)輸入:時(shí)鐘信號(hào)clk采用50MHz;系統(tǒng)狀態(tài)及較時(shí)、定時(shí)轉(zhuǎn)換的控制信號(hào)為k、set,校時(shí)復(fù)位信號(hào)為reset,均由按鍵信號(hào)產(chǎn)生。
2、系統(tǒng)輸出:LED顯示輸出;蜂鳴器聲音信號(hào)輸出。
3、多功能數(shù)字電子鐘系統(tǒng)功能的具體描述如下:
(一)計(jì)時(shí):正常工作狀態(tài)下,每日按24h計(jì)時(shí)制計(jì)時(shí)并顯示,蜂鳴器無聲,逢整點(diǎn)報(bào)時(shí)。
(二)校時(shí):在計(jì)時(shí)顯示狀態(tài)下,按下“k”鍵,進(jìn)入“小時(shí)”待校準(zhǔn)狀態(tài),若此時(shí)按下“set”鍵,小時(shí)開始校準(zhǔn);之后按下“k”鍵則進(jìn)入“分”待校準(zhǔn)狀態(tài);繼續(xù)按下“k”鍵則進(jìn)入“秒”待復(fù)零狀態(tài);再次按下“k”鍵數(shù)碼管顯示鬧鐘時(shí)間,并進(jìn)入鬧鐘“小時(shí)”待校準(zhǔn)狀態(tài);再次按下“k”鍵則進(jìn)入鬧鐘“分”待校準(zhǔn)狀態(tài);若再按下“k”鍵恢復(fù)到正常計(jì)時(shí)顯示狀態(tài)。若校時(shí)過程中按下“reset”鍵,則系統(tǒng)恢復(fù)到正常計(jì)數(shù)狀態(tài)。(1)“小時(shí)”校準(zhǔn)狀態(tài):在“小時(shí)”校準(zhǔn)狀態(tài)下,顯示“小時(shí)”的數(shù)碼管以2Hz閃爍,并按下“set”鍵時(shí)以2Hz的頻率遞增計(jì)數(shù)。(2)“分”校準(zhǔn)狀態(tài):在“分”校準(zhǔn)狀態(tài)下,顯示“分”的數(shù)碼管以2Hz閃爍,并按下“set”鍵時(shí)以2Hz的頻率遞增計(jì)數(shù)。(3)“秒”校準(zhǔn)狀態(tài):在“秒復(fù)零”狀態(tài)下,顯示“秒”的數(shù)碼管以2Hz閃爍,并以1Hz的頻率遞增計(jì)數(shù)。
(4)鬧鐘“小時(shí)”校準(zhǔn)狀態(tài):在鬧鐘“小時(shí)”校準(zhǔn)狀態(tài)下,顯示“小時(shí)”的數(shù)碼管以2Hz閃爍,并按下“set”鍵時(shí)以2Hz的頻率遞增計(jì)數(shù)。
(5)鬧鐘“分”校準(zhǔn)狀態(tài):在鬧鐘“分”校準(zhǔn)狀態(tài)下,顯示“分”的數(shù)碼管以2Hz閃爍,并按下“set”鍵時(shí)以2Hz的頻率遞增計(jì)數(shù)。
(三)整點(diǎn)報(bào)時(shí):蜂鳴器在“59”分鐘的第“51”、“53”、“55”、“57”秒發(fā)頻率為500Hz的低音,在“59”分鐘的第“59”秒發(fā)頻率為1000Hz的高音,結(jié)束時(shí)為整點(diǎn)。
(四)顯示:采用掃描顯示方式驅(qū)動(dòng)4個(gè)LED數(shù)碼管顯示小時(shí)、分,秒由兩組led燈以4位BCD 碼顯示。
(五)鬧鐘:鬧鐘定時(shí)時(shí)間到,蜂鳴器發(fā)出頻率為1000Hz的高音,持續(xù)時(shí)間為60秒。
四、各個(gè)模塊分析說明
1、分頻器模塊(freq.vhd)(1)模塊說明:輸入一個(gè)頻率為50MHz的CLK,利用計(jì)數(shù)器分出 1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity freq is
port
(CLK: in std_logic;
--輸入時(shí)鐘信號(hào)
q1KHz: buffer std_logic;
q500Hz: buffer std_logic;
q2Hz: buffer std_logic;
q1Hz: out std_logic);end freq;
architecture bhv of freq is begin P1KHZ:process(CLK)variable cout:integer:=0;begin
if CLK'event and CLK='1' then
cout:=cout+1;
--每來個(gè)時(shí)鐘上升沿時(shí)cout開始計(jì)數(shù) if cout<=25000 then q1KHz<='0';
--當(dāng)cout<=25000時(shí),q1KHz輸出“0”
elsif cout<50000 then q1KHz<='1';--當(dāng)25000 else cout:=0; --輸出“1”,完成1KHz頻率輸出 end if; end if;end process; P500HZ:process(q1KHz) --q1KHz作為輸入信號(hào),分出q500Hz variable cout:integer:=0;begin if q1KHz'event and q1KHz='1' then cout:=cout+1;if cout=1 then q500Hz<='0'; --二分頻 elsif cout=2 then cout:=0;q500Hz<='1';end if; end if;end process; P2HZ:process(q500Hz)variable cout:integer:=0;begin if q500Hz'event and q500Hz='1' then cout:=cout+1;if cout<=125 then q2Hz<='0'; elsif cout<250 then q2Hz<='1'; else cout:=0;end if; end if;end process; P1HZ:process(q2Hz)variable cout:integer:=0;begin if q2Hz'event and q2Hz='1' then cout:=cout+1;if cout=1 then q1Hz<='0'; elsif cout=2 then cout:=0;q1Hz<='1';end if; end if;end process;end bhv;(3)模塊圖: 2、控制器模塊(contral.vhd)(1)模塊說明:輸入端口k,set鍵來控制6個(gè)狀態(tài),這六個(gè)狀態(tài)分別是: 顯示計(jì)時(shí)時(shí)間狀態(tài),調(diào)計(jì)時(shí)的時(shí)、分、秒的3個(gè)狀態(tài),調(diào)鬧鈴的時(shí)、分的3個(gè)狀態(tài),reset鍵是復(fù)位鍵,用來回到顯示計(jì)時(shí)時(shí)間的狀態(tài)。(2)波形仿真圖: (3)模塊圖: 3、二選一模塊(mux21a.vhd)(1)源程序: library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity mux21a is port(a,b,s:in bit; y:out bit);end entity mux21a; architecture one of mux21a is begin process(a,b,s)begin if s='0' then y<=a; --若s=0,y輸出a,反之輸出b。else y<=b;end if;end process;end architecture one;(2)仿真波形圖: (3)模塊圖: 4、計(jì)時(shí)模塊 a.秒計(jì)時(shí)(second.vhd)(1)仿真波形圖: (2)模塊圖: b.分計(jì)時(shí)(minute.vhd)(1)仿真波形圖: (2)模塊圖: c.小時(shí)計(jì)時(shí)(hour.vhd)(1)仿真波形圖: (2)模塊圖: d.鬧鐘分計(jì)時(shí)(cntm60b.vhd)(1)仿真波形圖: (2)模塊圖: e.鬧鐘小時(shí)計(jì)時(shí)(cnth24b.vhd)(1)仿真波形圖: (2)模塊圖: 5、鬧鐘比較模塊(compare.vhd)(1)模塊說明:比較正常計(jì)數(shù)時(shí)間與鬧鐘定時(shí)時(shí)間是否相等,若相等,compout輸出“1”,反之輸出“0”。(2)仿真波形圖: (3)模塊圖: 6、報(bào)時(shí)模塊(bell.vhd)(1)模塊說明:該模塊既實(shí)現(xiàn)了整點(diǎn)報(bào)時(shí)的功能,又實(shí)現(xiàn)了鬧鈴的功能,蜂鳴器通過所選頻率的不同,而發(fā)出不同的聲音。(2)仿真波形圖: (3)模塊圖: 7、控制顯示模塊(show_con.vhd)(1)模塊說明:該模塊實(shí)現(xiàn)了數(shù)碼管既可以顯示正常時(shí)間,又可以顯示鬧鐘時(shí)間的功能;調(diào)時(shí)過程的定時(shí)閃爍功能也在此模塊中真正實(shí)現(xiàn)。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity show_con is port(th1,tm1,ts1:in std_logic_vector(7 downto 4); th0,tm0,ts0:in std_logic_vector(3 downto 0); bh1,bm1:in std_logic_vector(7 downto 4); bh0,bm0:in std_logic_vector(3 downto 0); sec1,min1,h1: out std_logic_vector(7 downto 4); sec0,min0,h0: out std_logic_vector(3 downto 0); q2Hz,flashs,flashh,flashm,sel_show:in std_logic);end show_con; architecture rtl of show_con is begin process(th1,tm1,ts1,th0,tm0,ts0,bh1,bm1,bh0,bm0,q2Hz,flashs,flashh,flashm,sel_show) begin if sel_show='0'then if(flashh='1'and q2Hz='1')then h1<=“1111”;h0<=“1111”;--顯示小時(shí)數(shù)碼管以2Hz閃爍 min1<=tm1;min0<=tm0; sec1<=ts1;sec0<=ts0; elsif(flashm='1'and q2Hz='1')then h1<=th1;h0<=th0; min1<=“1111”;min0<=“1111”; sec1<=ts1;sec0<=ts0; elsif(flashs='1'and q2Hz='1')then h1<=th1;h0<=th0; min1<=tm1;min0<=tm0; sec1<=“1111”;sec0<=“1111”; else h1<=th1;h0<=th0; min1<=tm1;min0<=tm0; sec1<=ts1;sec0<=ts0; end if; elsif sel_show='1'then--若sel_show為“1”,數(shù)碼管顯示鬧鐘時(shí)間 if(flashh='1' and q2Hz='1')then h1<=“1111”;h0<=“1111”; min1<=bm1;min0<=bm0; sec1<=“0000”;sec0<=“0000”; elsif(flashm='1' and q2Hz='1')then h1<=bh1;h0<=bh0; min1<=“1111”;min0<=“1111”; sec1<=“0000”;sec0<=“0000”; else h1<=bh1;h0<=bh0; min1<=bm1;min0<=bm0; sec1<=“0000”;sec0<=“0000”; end if; end if; end process;end rtl;(3)模塊圖: 8、動(dòng)態(tài)掃描顯示模塊(scan_led.vhd)(1)模塊說明:由4組輸入信號(hào)和輸出信號(hào)進(jìn)而實(shí)現(xiàn)了時(shí)鐘時(shí)、分的動(dòng)態(tài)顯示。(2)源程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity scan_led is port(clk1:in std_logic; h0:in std_logic_vector(3 downto 0); h1:in std_logic_vector(7 downto 4); min0:in std_logic_vector(3 downto 0); min1:in std_logic_vector(7 downto 4); ML:out std_logic_vector(7 downto 0); MH:out std_logic_vector(7 downto 0); HL:out std_logic_vector(7 downto 0); HH:out std_logic_vector(7 downto 0));end scan_led; architecture one of scan_led is signal cnt4:std_logic_vector(1 downto 0);signal a: std_logic_vector(3 downto 0);begin p1:process(clk1)begin if clk1'event and clk1 ='1' then cnt4<=cnt4+1; if cnt4=3 then cnt4<=“00”;end if;end if;end process p1; p2:process(cnt4,h1,h0,min1,min0)begin case cnt4 is --控制數(shù)碼管位選 when “00”=>case min0 is when “0000”=>ML<=“11000000”; when “0001”=>ML<=“11111001”; when “0010”=>ML<=“10100100”; when “0011”=>ML<=“10110000”; when “0100”=>ML<=“10011001”; when “0101”=>ML<=“10010010”; when “0110”=>ML<=“10000010”; when “0111”=>ML<=“11111000”; when “1000”=>ML<=“10000000”; when “1001”=>ML<=“10010000”; when others=>NULL; end case;when “01”=>case min1 is when “0000”=>MH<=“11000000”; when “0001”=>MH<=“11111001”; when “0010”=>MH<=“10100100”; when “0011”=>MH<=“10110000”; when “0100”=>MH<=“10011001”; when “0101”=>MH<=“10010010”; when “0110”=>MH<=“10000010”; when “0111”=>MH<=“11111000”; when “1000”=>MH<=“10000000”; when “1001”=>MH<=“10010000”; when others=>NULL; end case;when “10”=>case h0 is when “0000”=>HL<=“11000000”; when “0001”=>HL<=“11111001”; when “0010”=>HL<=“10100100”; when “0011”=>HL<=“10110000”; when “0100”=>HL<=“10011001”; when “0101”=>HL<=“10010010”; when “0110”=>HL<=“10000010”; when “0111”=>HL<=“11111000”; when “1000”=>HL<=“10000000”; when “1001”=>HL<=“10010000”; when others=>NULL; end case;when “11”=>case h1 is when “0000”=>HH<=“11000000”; when “0001”=>HH<=“11111001”; when “0010”=>HH<=“10100100”; when “0011”=>HH<=“10110000”; when “0100”=>HH<=“10011001”; when “0101”=>HH<=“10010010”; when “0110”=>HH<=“10000010”; when “0111”=>HH<=“11111000”; when “1000”=>HH<=“10000000”; when “1001”=>HH<=“10010000”; when others=>NULL; end case;when others =>null;end case;end process p2;end one;(3)模塊圖: 五、端口設(shè)定 k:button2,set:button1,reset:button0 ; Bell:SW1 用于開關(guān)蜂鳴器; 六、頂層電路圖 七、心得體會(huì) 此次的數(shù)字鐘設(shè)計(jì)重在于按鍵的控制和各個(gè)模塊代碼的編寫,雖然能把鍵盤接口和各個(gè)模塊的代碼編寫出來,并能正常顯示,但對(duì)于各個(gè)模塊的優(yōu)化設(shè)計(jì)還有一定的缺陷和不足,比如對(duì)按鍵消抖等細(xì)節(jié)處并未作出優(yōu)化。 經(jīng)過此次數(shù)字鐘的設(shè)計(jì),我確實(shí)從中學(xué)到很多的東西。首先,通過VHDL硬件語言的學(xué)習(xí),我充分認(rèn)識(shí)到了功能模塊如何用語言實(shí)現(xiàn),讓我初步了解到了一個(gè)數(shù)字電路用硬件語言設(shè)計(jì)的方式和設(shè)計(jì)思想。其次,也讓我深深地體會(huì)到實(shí)踐的重要性,起初我學(xué)VHDL語言的時(shí)候,只是學(xué)得書本上的知識(shí),經(jīng)過這次課程設(shè)計(jì),通過對(duì)模塊的語言實(shí)現(xiàn),對(duì)于VHDL語言我有了更深的認(rèn)識(shí)。而且在程序錯(cuò)誤的發(fā)現(xiàn)和改正的過程中,我得到了更多的收獲,也確實(shí)讓我進(jìn)步了不少。再次,當(dāng)我遇到一些問題的時(shí)候,請(qǐng)教老師,和同學(xué)們一起討論,令我受益頗多!最后,這個(gè)多功能數(shù)字電子鐘是自我創(chuàng)造與吸取借鑒共同作用的產(chǎn)物,是自我努力的結(jié)果。這讓我對(duì)數(shù)字電路的設(shè)計(jì)充滿了信心。雖然課程設(shè)計(jì)已經(jīng)結(jié)束,但這并不代表著我已經(jīng)真正掌握了VHDL語言,仍需繼續(xù)學(xué)習(xí)! 設(shè)計(jì)并實(shí)現(xiàn)具有一定功能的數(shù)字鐘 1、該數(shù)字鐘可以實(shí)現(xiàn)3個(gè)功能:計(jì)時(shí)功能、整點(diǎn)報(bào)時(shí)功能和重置時(shí)間功能,因此有3個(gè)功能:計(jì)時(shí)、重置時(shí)間、復(fù)位。 2、對(duì)所有設(shè)計(jì)的小系統(tǒng)能夠正確分析; 3、基于VHDL語言描述系統(tǒng)的功能; 4、在quartus 2環(huán)境中編譯通過; 5、仿真通過并得到正確的波形; 6、給出相應(yīng)的設(shè)計(jì)報(bào)告。 其中計(jì)時(shí)模塊有4部分構(gòu)成:秒計(jì)時(shí)器(second)、分計(jì)時(shí)器(minute)、時(shí)計(jì)時(shí)器(hour)、日計(jì)時(shí)器(date)、月計(jì)時(shí)器(mouth)、年計(jì)時(shí)器(year) 1)秒計(jì)時(shí)器(second)是由一個(gè)60進(jìn)制的計(jì)數(shù)器構(gòu)成的,具有清0、置數(shù)和計(jì)數(shù)功能。其中reset為清0信號(hào),當(dāng)reset為0時(shí),秒計(jì)時(shí)器清0;set 為置數(shù)信號(hào),當(dāng)set為0時(shí),秒計(jì)時(shí)器置數(shù),置s1的值。clk為驅(qū)動(dòng)秒計(jì)時(shí)器的時(shí)鐘,sec為秒計(jì)時(shí)器的輸出,ensec為秒計(jì)時(shí)器的進(jìn)位信號(hào),作為下一級(jí)的時(shí)鐘輸入信號(hào)。 2)分計(jì)時(shí)器(minute)是由一個(gè)60進(jìn)制的計(jì)數(shù)器構(gòu)成的,具有清0、置數(shù)和計(jì)數(shù)功能。其中reset為清0信號(hào),當(dāng)reset為0時(shí),分計(jì)時(shí)器清0;set 為置數(shù)信號(hào),當(dāng)set為0時(shí),分計(jì)時(shí)器置數(shù),置m1的值。clkm為驅(qū)動(dòng)分計(jì)時(shí)器工作的時(shí)鐘,與ensec相連接;min為分計(jì)時(shí)器的輸出;enmin為分計(jì)時(shí)器的進(jìn)位信號(hào),作為下一級(jí)的時(shí)鐘輸入信號(hào)。 3)時(shí)計(jì)時(shí)器(hour)是由一個(gè)24進(jìn)制的計(jì)數(shù)器構(gòu)成的,具有清0、置數(shù)和計(jì)數(shù)功能。其中reset為清0信號(hào),當(dāng)reset為0時(shí),時(shí)計(jì)時(shí)器清0;set 為置數(shù)信號(hào),當(dāng)set為0時(shí),時(shí)計(jì)時(shí)器置數(shù),置h1的值。clkh為驅(qū)動(dòng)時(shí)計(jì)時(shí)器工作的時(shí)鐘,與enmin相連接;hour為時(shí)計(jì)時(shí)器的輸出;enhour為時(shí)計(jì)時(shí)器的進(jìn)位信號(hào),作為下一級(jí)的時(shí)鐘輸入信號(hào)。 4)日計(jì)時(shí)器(date1)是由一個(gè)60進(jìn)制的計(jì)數(shù)器構(gòu)成的,具有清0、置數(shù)和計(jì)數(shù)功能。其中reset為清0信號(hào),當(dāng)reset為0時(shí),星期計(jì)時(shí)器清0;set 為置數(shù)信號(hào),當(dāng)set為0時(shí),星期計(jì)時(shí)器置數(shù),置d1的值。clkd為驅(qū)動(dòng)星期計(jì)時(shí)器工作的時(shí)鐘,與enhour相連接;date為日計(jì)時(shí)器的輸出,endate為分計(jì)時(shí)器的進(jìn)位信號(hào),作為下一級(jí)的時(shí)鐘輸入信號(hào),由于月份的天數(shù)存在天數(shù)不同,閏年2月的天數(shù)為28天等情況,還設(shè)計(jì)了一個(gè)潤(rùn)年判別器,準(zhǔn)確顯示時(shí)間。 5)月計(jì)時(shí)器(mouth)是由一個(gè)60進(jìn)制的計(jì)數(shù)器構(gòu)成的,具有清0、置數(shù)和計(jì)數(shù)功能。其中reset為清0信號(hào),當(dāng)reset為0時(shí),星期計(jì)時(shí)器清0;set 為置數(shù)信號(hào),當(dāng)set為0時(shí),星期計(jì)時(shí)器置數(shù),置mou1的值,clkmou為驅(qū)動(dòng)星期計(jì)時(shí)器工作的時(shí)鐘,與enday相連接;mou為日計(jì)時(shí)器的輸出,enmou為分計(jì)時(shí)器的進(jìn)位信號(hào),作為下一級(jí)的時(shí)鐘輸入信號(hào)。6)計(jì)時(shí)器(year)是由一個(gè)60進(jìn)制的計(jì)數(shù)器構(gòu)成的,具有清0、置數(shù)和計(jì)數(shù)功能。其中reset為清0信號(hào),當(dāng)reset為0時(shí),星期計(jì)時(shí)器清0;set 為置數(shù)信號(hào),當(dāng)set為0時(shí),星期計(jì)時(shí)器置數(shù),置y1的值,clky為驅(qū)動(dòng)星期計(jì)時(shí)器工作的時(shí)鐘,與enmou相連接;year為日計(jì)時(shí)器的輸出。VHDL程序 1、屏幕切換模塊 運(yùn)用狀態(tài)機(jī)進(jìn)行屏幕切換,分別顯示年月日,以及時(shí)分秒 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;--Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity mux3 is Port(clk,Reset,sel : in std_logic; int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--rst must a1,a2,a3,a4,a5,a6: out std_logic_vector(3 downto 0));end mux3; architecture Behavioral of mux3 is TYPE states IS(st0, st1, st2, st3, st4, st5, st6, st7); SIGNAL STX: states; begin COM1 : PROCESS(STX,int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12) BEGIN--決定轉(zhuǎn)換狀態(tài)的進(jìn)程 CASE STX IS WHEN st0 => a1<=int1;a2<=int2;a3<=int3;a4<=int4;a5<=int5;a6<=int6; WHEN st1 => a1<=int7;a2<=int8;a3<=int9;a4<=int10;a5<=int11;a6<=int12; WHEN st2 => a1<=int7;a2<=int8;a3<=int9;a4<=int10;a5<=int11;a6<=int12; WHEN st3 => a1<=int7;a2<=int8;a3<=int9;a4<=int10;a5<=int11;a6<=int12; WHEN st4 => a1<=int7;a2<=int8;a3<=int9;a4<=int10;a5<=int11;a6<=int12; WHEN st5 => a1<=int1;a2<=int2;a3<=int3;a4<=int4;a5<=int5;a6<=int6; WHEN st6 => a1<=int1;a2<=int2;a3<=int3;a4<=int4;a5<=int5;a6<=int6; WHEN st7 => a1<=int1;a2<=int2;a3<=int3;a4<=int4;a5<=int5;a6<=int6; WHEN OTHERS => NULL; END CASE; END PROCESS COM1;REG: PROCESS(clk,Reset,sel) --主控時(shí)序進(jìn)程 BEGIN IF Reset = '1' THEN STX<= st0; --異步復(fù)位 ELSIF clk='1' AND clk'EVENT THEN if sel='1' then CASE STX IS WHEN st0=>STX<=st1; WHEN st1=>STX<=st2; WHEN st2=>STX<=st3; WHEN st3=>STX<=st4; WHEN st4=>STX<=st5; WHEN st5=>STX<=st6; WHEN st6=>STX<=st7; WHEN st7=>STX<=st0; END CASE; END IF; END if;END PROCESS; 2、顯示切換程序 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity mux1 is Port(clk,ina,inb,sel,Reset : in std_logic; result : out std_logic);end mux1; architecture Behavioral of mux1 is TYPE state IS(st0,st1,st2,st3,st4,st5,st6,st7); SIGNAL STX:state;begin REG1: PROCESS(ina,inb,STX) BEGIN CASE STX IS WHEN st0=>result<=ina; WHEN st1=>result<=ina; WHEN st2=>result<=inb; WHEN st3=>result<=inb; WHEN st4=>result<=inb; WHEN st5=>result<=inb; WHEN st6=>result<=inb; WHEN st7=>result<=inb; END CASE; END PROCESS;REG2:PROCESS(clk,sel,Reset)BEGIN IF(Reset='1')THEN STX<=st0;ELSIF(clk'EVENT AND clk='1')THEN if sel='1' then CASE STX IS WHEN st0=>STX<=st1;WHEN st1=>STX<=st2;WHEN st2=>STX<=st3;WHEN st3=>STX<=st4;WHEN st4=>STX<=st5;WHEN st5=>STX<=st6;WHEN st6=>STX<=st7;WHEN st7=>STX<=st0; END CASE;END IF;end if;END PROCESS REG2; end Behavioral; 3、置數(shù)操作模塊 運(yùn)用狀態(tài)機(jī),進(jìn)行置數(shù)操作 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity mux is Port(clk,ina,inb,sel,Reset : in std_logic; r1,r2,r3,r4,r5,r6 : out std_logic);end mux; architecture Behavioral of mux is TYPE state IS(st0,st1,st2,st3,st4,st5,st6,st7); SIGNAL STX:state;begin PROCESS(ina,inb,STX)BEGIN CASE STX IS WHEN st0=>r1<=ina;r2<='0';r3<='0';r4<='0';r5<='0';r6<='0';WHEN st1=>r1<=ina;r2<='0';r3<='0';r4<='0';r5<='0';r6<='0';WHEN st2=>r1<='0';r2<='0';r3<='0';r4<='0';r5<='0';r6<=inb;WHEN st3=>r1<='0';r2<='0';r3<='0';r4<='0';r5<=inb;r6<='0';WHEN st4=>r1<='0';r2<='0';r3<='0';r4<=inb;r5<='0';r6<='0';WHEN st5=>r1<='0';r2<='0';r3<=inb;r4<='0';r5<='0';r6<='0';WHEN st6=>r1<='0';r2<=inb;r3<='0';r4<='0';r5<='0';r6<='0';WHEN st7=>r1<=inb;r2<='0';r3<='0';r4<='0';r5<='0';r6<='0';END CASE;END PROCESS;PROCESS(clk,sel,Reset)BEGIN IF(Reset='1')THEN STX<=st0;ELSIF(clk'EVENT AND clk='1')THEN if sel='1' then CASE STX IS WHEN st0=>STX<=st1;WHEN st1=>STX<=st2;WHEN st2=>STX<=st3;WHEN st3=>STX<=st4;WHEN st4=>STX<=st5;WHEN st5=>STX<=st6;WHEN st6=>STX<=st7;WHEN st7=>STX<=st0; END CASE;END IF;end if;END PROCESS;end Behavioral;end Behavioral; 4、秒顯示模塊 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity secute1 is Port(clkm,set,reset : in std_logic; sec2,sec1 : inout std_logic_vector(3 downto 0); ensec : out std_logic);end secute1; architecture Behavioral of secute1 is begin Process(clkm,reset,set) Begin If reset='1' then sec2<=“0000”;sec1<=“0000”; Elsif set='1' then sec2<=“0101”;sec1<=“1000”; Elsif(clkm'event and clkm='1')then if sec2=“0101” AND sec1=“1001” then sec2<=“0000”;sec1<=“0000”;ensec<='1'; elsif sec1=“1001” then sec2<=sec2+'1';sec1<=“0000”;ensec<='0'; else sec1<=sec1+'1';ensec<='0'; end if;end if;End process;end Behavioral; 5、分顯示模塊 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity minute1 is Port(clkm,set,reset : in std_logic; min2,min1 : inout std_logic_vector(3 downto 0); enmin : out std_logic);end minute1; architecture Behavioral of minute1 is begin Process(clkm,reset,set) Begin If reset='1' then min2<=“0000”;min1<=“0000”; Elsif set='1' then min2<=“0101”;min1<=“1000”; Elsif(clkm'event and clkm='1')then if min2=“0101” AND min1=“1001” then min2<=“0000”;min1<=“0000”;enmin<='1'; elsif min1=“1001” then min2<=min2+'1';min1<=“0000”;enmin<='0'; else min1<=min1+'1';enmin<='0'; end if;end if;End process;end Behavioral; 6、小時(shí)顯示模塊 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity hour1 is Port(clkh,set,reset: in std_logic; hor2,hor1 : inout std_logic_vector(3 downto 0); enhour : out std_logic);end hour1; architecture Behavioral of hour1 is begin Process(clkh,reset,set) Begin If reset='1' then hor2<=“0000”;hor1<=“0000”; Elsif set='1' then hor2<=“0010”;hor1<=“0011”; Elsif(clkh'event and clkh='1')then if hor2=“0010” AND hor1=“0011” then hor2<=“0000”;hor1<=“0000”;enhour<='1'; elsif hor1=“1001” then hor2<=hor2+'1';hor1<=“0000”;enhour<='0'; else hor1<=hor1+'1';enhour<='0'; end if; end if;End process;end Behavioral; 7、日顯示模塊(已加入閏年判斷功能)library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity date1 is Port(clkd,set : in std_logic; dat2,dat1 : inout std_logic_vector(3 downto 0); endate : out std_logic);end date1; architecture Behavioral of date1 is begin Process(clkd,set) Begin if set='1' then dat2<=“0010”;dat1<=“1000”; Elsif(clkd'event and clkd='1')then if dat2=“0011” AND dat1=“0000” then dat2<=“0000”;dat1<=“0001”;endate<='1';elsif dat1=“1001” then dat2<=dat2+'1';dat1<=“0000”;endate<='0'; else dat1<=dat1+'1';endate<='0'; end if;end if;End process;end Behavioral; 8、月顯示模塊 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity month1 is Port(clkn,set: in std_logic; mon2,mon1 : inout std_logic_vector(3 downto 0); enmon : out std_logic);end month1; architecture Behavioral of month1 is begin Process(clkn,set) Begin if set='1' then mon2<=“0000”;mon1<=“0110”; Elsif(clkn'event and clkn='1')then if mon2=“0001” AND mon1=“0010” then mon2<=“0000”;mon1<=“0001”;enmon<='1'; elsif mon1=“1001” then mon2<=mon2+'1';mon1<=“0000”;enmon<='0'; else mon1<=mon1+'1';enmon<='0'; end if;end if;End process; 9、年顯示模塊 library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; --Uncomment the following lines to use the declarations that are--provided for instantiating Xilinx primitive components.--library UNISIM;--use UNISIM.VComponents.all; entity yearth1 is Port(clkn,set: in std_logic; year2,year1 : inout std_logic_vector(3 downto 0); enyear : out std_logic);end yearth1; architecture Behavioral of yearth1 is begin Process(clkn,set) Begin if set='1' then year2<=“0001”;year1<=“0001”; Elsif(clkn'event and clkn='1')then if year2=“1001” AND year1=“1001” then year2<=“0000”;year1<=“0001”; elsif year1=“1001” then year2<=year2+'1';year1<=“0000”;enyear<='0'; else year1<=year1+'1';enyear<='0'; end if;end if; end Behavioral; 數(shù)字鐘課程設(shè)計(jì)元器件清單單價(jià)(元/個(gè))1、2、3、共陽極數(shù)碼管:6個(gè)174LS247集成芯片:6塊1 74LS90集成芯片:6塊14、CD4060集成芯片:1塊5、74LS00集成芯片:1塊6、74LS74集成芯片:2塊7、74LS20集成芯片:2塊8、74LS08集成芯片:2塊9、74LS04集成芯片:1塊10、74LS32集成芯片:1塊11、22pf電容:2個(gè)12、32768時(shí)鐘晶體:1個(gè)13、1K電阻:1個(gè) 14、三極管:1個(gè)15、100Ω電阻:6個(gè) 17、蜂鳴器:1個(gè) 18、小飯盒:1個(gè) 19、面包板:1塊1 1 1 11 111第四篇:用狀態(tài)機(jī)實(shí)現(xiàn)的EDA多功能數(shù)字鐘課程設(shè)計(jì)VHDL代碼
第五篇:電工電子課設(shè)-數(shù)字鐘元器件清單