久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

VHDL實現數字鐘課設報告[推薦]

時間:2019-05-13 23:58:02下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《VHDL實現數字鐘課設報告[推薦]》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《VHDL實現數字鐘課設報告[推薦]》。

第一篇:VHDL實現數字鐘課設報告[推薦]

東北大學信息學院

課程設計報告

課程設計題目:用VHDL語言實現數字鐘的設計

班 級:電子1001班 學 號:20102594 姓 名:劉云飛

指導老師:李世平、李寧

設計時間:2012年12月

東北大學信息學院

摘要

隨著EDA技術的發展,EDA在通信、電子等領域占有十分重要的地位。本設計介紹了基于VHDL語言的數字鐘的設計。數字鐘的功能是對年、月、日、時、分、秒、星期,以及鬧鐘時、分的預置;在正常計數時的時、分與鬧鐘設定的時、分相同時,實現報時,同時以stop和pass鍵對鬧鐘進行停止及延遲響鈴的控制;在整點的時候led燈閃爍一下。其中,用set脈沖的不同實現對預置,正常計時,鬧鐘的控制。Set為1~12分別控制顯示年月日、預置年月日、時分秒、星期、顯示時分秒、預置鬧鐘時分、顯示鬧鐘預置的時分。預置時用up的高、低電平實現對各預置量的加、減控制。將1KHZ的時鐘進行分頻為1HZ,實現每次脈沖為1秒。經仿真和驗證顯示,此數字鐘切實可行,可以實現顯示時間和鬧鐘的功能。

關鍵詞:VHDL語言,數字鐘,預置

東北大學信息學院

目錄

摘 要............................................................2

1、設計目的.........................................................4

2、設計內容和要求...................................................4

3、設計原理.........................................................4

3.1 數字鐘功能介紹..........................................................................................................4 3.2 數字鐘設計原理..........................................................................................................5

4、VHDL程序設計.....................................................6

4.1 整體設計思路................................................................................................................6 4.2 各模塊設計方法............................................................................................................7 4.2.1 頂層模塊...............................................................................................................7 4.2.2 其他模塊...............................................................................................................8 4.2.3 程序包模塊.........................................................................................................13

5、仿真與分析......................................................13

5.1 仿真結果....................................................................................................................13 5.2 仿真分析....................................................................................................................16

6、課程設計總結....................................................16

7、參考文獻........................................................17

東北大學信息學院

1、設計目的

掌握利用可編程邏輯器件和EDA設計工具進行電子系統設計的方法。

2、設計內容和要求

用VHDL語言實現數字鐘的設計,要求設計實現一個具有帶預置數的數字鐘,具有顯示年月日時分秒的功能。用6個數碼管顯示時分秒,set按鈕產生第一個脈沖時,顯示切換年月日,第2個脈沖到來時可預置年份,第3個脈沖到來時可預置月份,依次第4、5、6、7個脈沖到來時分別可預置日期、時、分、秒,第 8個脈沖到來后預置結束,正常工作,顯示的是時分秒。Up為高電平時,upclk有脈沖到達時,預置位加1。否則減1。

3、設計原理 3.1 數字鐘功能介紹

數字鐘具有計時、預置、報時的功能。以不同的set脈沖控制各個功能。

(1)在計時功能中,數字鐘實現對年月日時分秒即星期的計時,并可以通過LED數碼管分別顯示年月日、或時分秒、或星期、或鬧鐘的時分。

(2)在預置功能中,可以通過UP鍵對各需要預置的量進行控制。UP=1時,進行“加”控制,UP=0時,進行“減”控制。

(3)在報時功能中,分為整點報時和設置時間報時。其中整點報時以ce作為使能輸入端,在整點時燈進行一秒閃爍;設置時間報時以enable作為使能輸入端,enable=1時設置時間報時功能啟動,在鬧鐘預置時間與時鐘當前時間相同時報時,若此時按下stop,鬧鐘立即停止并不再響鈴,若按下pass,則鬧鐘立即停止,但三分鐘后再響,如此循環5次后不再響鈴,若什么都不按,鬧鐘響鈴持續1分鐘。

東北大學信息學院

3.2 數字鐘設計原理

本設計功能有8個子模塊:分頻模塊、時分秒模塊、日模塊、年月模塊、鬧鐘預置模塊、星期模塊、響鈴模塊。通過元件例化由頂層文件timekeeper綜合。

整體設計框圖及外觀圖如(圖 3-1)及(圖3-2)

圖3-1 數字鐘設計整體框圖

東北大學信息學院

圖3-2 數字鐘外觀圖

4、VHDL程序設計

4.1 整體設計思路

采用自上而下的方法進行整體設計。整個設計共分為8個模塊,通過頂

層文件timekeeper元件例化將8個模塊各個端口對應相連。在設計各個模塊時所用到的其它運算方法等放于work庫中,通過程序包及程序包體的方式對所使用函數進行定義。

主要使用的語句有:元件例化語句,過程語句,信號賦值語句,if語句,case語句(在狀態機中)。

圖(4-1)表示了個模塊的連接及連接是所用到的觸發器等。

東北大學信息學院

圖4-1

整體結構圖

4.2 各模塊設計方法

4.2.1 頂層模塊

頂層模塊timekeeper是.對對所有模塊的綜合。

它包含的功能是:通過元件例化連接各模塊;實現對鬧鐘控制位sp2的控制;實現鬧鐘的整點報時閃爍。

輸入端:up

全局加減選擇,控制預置時的加減

setpin 設定選擇

東北大學信息學院

upclk 加減觸發

f1000 時鐘輸入

輸出端:a0~d1 八位數碼管控制引腳的輸出

z

整點報時輸出 4.2.2 其他模塊

1、時分秒模塊

時分秒模塊h_m_s是對時、分、秒正常計時(set=0 or 1 or 12)和預置時分秒(set=5 or 6 or 7)的實現。

分和秒由兩個六十進制實現,時由24進制實現。當時間達到23時59分59秒時,時分秒全部歸零,進位位ov由零變為1,通過管腳連接到date模塊的時鐘計數信號clk0,開啟date模塊。

2、日的模塊

日的模塊date實現日子進行正常計時(set=0 or 1 or 12)和預置(set=4)。

由于每月的天數與月份、年份有關,故需判斷年月。(1)(2)(3)當1、3、5、7、8、10、12月時,每月31天,使用31進制。當4、6、9、11月時,每月30天,使用30進制。當2月時,分閏年和平年。閏年29天,平年28天。

閏年和平年的判斷方法是:由于通過年月模塊傳輸的年份為兩位BCD碼。若高位信號為“xxx0”且低位信號為“xx00”或高位信號為“xxx1”且低位信號為“xx10”,則可判定為閏年,否則為平年。

以上各月,當日期至月底時返回1,進位位ov變為1通過管腳連接年月模塊的時鐘計數信號clk0,開啟年月模塊。

3、年月模塊

年月模塊year_mon實現年月正常計時(set=0 or 1 or 12)和年、月的預置(set=2 or 3)。

月為12進制,當達到12時變回為1,同時使年份進1。由兩位BCD碼表示年份,故可以表示100年之年的所有年,為100進制。

東北大學信息學院

圖4-2 year_mon和date模塊的電路連接圖

4、星期模塊

星期模塊week的功能是實現對星期的計時(set=0 or 1 or 12)和預置(set=8)。為七進制。

圖4-3 week模塊的RTL

5、鬧鐘模塊

東北大學信息學院

鬧鐘模塊alarm是對鬧鐘時和分的預置(set=10 or 11)。時為24進制,分為60進制。

圖4-3 alarm模塊的RTL

另外,在頂層模塊timekeeper,當鬧鐘預置時間與計時時間相同時(僅時、分),鬧鐘響鈴,當不對其進行任何操作時,響鈴維持1分鐘。響鈴方式見4.2.7響鈴模塊。

6、響鈴模塊

響鈴模塊alarm是對鬧鐘響鈴的控制。其中主要包含:

Enable:當enable=1時,鬧鐘可以工作。

Sp2 :當頂層模塊鬧鐘時間與計時相等時,sp2=1,響鈴開啟。Stop :鬧鐘停止并不再響鈴。

Pass :鬧鐘停止但三分鐘后再響,循環5次。Sp :響鈴輸出。Sp=1時響鈴,sp=0時不響。本模塊主要使用的方法是狀態機。相應狀態轉換圖如下:

東北大學信息學院

圖 4-4 響鈴模塊狀態轉換圖

在狀態t_pass時,使用計數的方法實現對3分鐘,5次循環的計數。

圖 4-5 計數的流程圖

東北大學信息學院

圖4-6 speak模塊的RTL

7、分頻模塊

分頻模塊fenpin使輸入為1KHZ時鐘信號時,接入電路經分頻后仍能按1HZ即1s計數。

圖4-7 fenpin模塊的RTL

8、顯示模塊

顯示模塊led即七段數碼管的顯示電路。

東北大學信息學院

圖4-8 led模塊的RTL 4.2.3 程序包模塊

程序模塊是對各模塊所用到的函數的定義,通過程序包package定義時、日、月、年等的增減函數(procedure),并用程序包體package body具體說明函數的內容。通過use.work.pac.all語句調用程序包,使程序書寫更加方便簡潔。

5、仿真與分析

5.1 仿真結果

1、h_m_s模塊

東北大學信息學院

表示當up=1時,時鐘時(set=5)、分(set=6)、秒(set=7)從0開始加。

圖 5-1

2、date模塊

以下為對應月份截圖。另外,當日期由最末變為1時,ov進1以控制year_mon模塊。

(1)大月:每月31天。

圖5-2-1(2)小月:每月30天。

圖5-2-2(3)平年2月:每月28天。

東北大學信息學院

圖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模塊

下圖反映對鬧鐘時(set=10)、分(set=11)的預置,up=1為加。

圖 5-5

6、speak模塊

(1)按下pass

由下圖可見,當時間相同sp為高電平;按下pass后sp變為低電平,三分鐘

東北大學信息學院

后sp又為高電平。

圖5-6-1(2)按下stop

由下圖可見,當時間相同時sp為高電平,按下stop后sp變為低電平。

圖 5-6-2

5.2 仿真分析

各模塊仿真均可實現,且波形顯示可以實現預想的功能。

6、課程設計總結

通過這次的課程設計,我又一次系統的復習了VHDL語言,通過實踐對VHDL語言和EDA技術有了更具現實性應用性的了解,并熟練了相關軟件的使用方法。

此次課程設計的內容是數字鐘,我學會了如何利用元件例化將各個模塊結合起來,而不是一味的想起一個功能設計一個功能,而是有一個總體的自上而下的設計,建立基本的設計框圖(如圖 3-1),再進行具體的設計。

在程序調試的過程中,出現了很多的問題。我發現往往是一行出現了錯誤導致了接下來一系列錯誤的出現。

還有在仿真中出現錯誤的紅線,并出現了‘U’字符,全都是未設置初值所致。而在設置初值時仍然出現了問題。最開始我想定義一個clr信號,當clr為高電平時各功能清零,但是在實際仿真時,由于常常要看在月末或類似23時59分59秒這樣的時刻是否有進位信號進為高電平,從零開始顯然讓仿真變的十

東北大學信息學院

分麻煩,如果可以直接賦初值到接近進位的時刻就會讓仿真變得簡便。即使用信號賦初值的方法對信號進行賦初值,既解決錯誤又利于仿真。

在最后對頂層仿真時出現了很多的問題,最后發現都是未對應的問題。當然,我的設計還有很多不足的地方。比如有一處的競爭冒險產生的毛刺沒有解決。最開始是將speak模塊控制信號sp2的相關程序寫在了alarm模塊,仿真時發現在一處出現了毛刺,在對鬧鐘進行預置時分時的第一個時間都未足一個時鐘周期(如圖 5-5)。后來我想是否因為alarm模塊有兩個process進程,就將sp2的相關程序挪到了頂層模塊,但是最后還是沒有實現。咨詢了一下同學們,他們都說這沒有問題,不需要解決,所以就沒有解決這個問題。

此次課程設計我學到了很多,但是我覺得應該放在剛剛考完EDA之后,那時候對只是記得比較清楚,不像在這次設計時很多知識都想不起來了。其他的對我幫助都很大。

7、參考文獻 李景華,杜玉遠等著.可編程邏輯器件與EDA技術.沈陽:東北大學出版社,2000 2 齊懷印等.高級邏輯器件與設計.北京:電子工業出版社,1996 3 可編程邏輯器件與數字系統設計[M].北京航天航空大學出版社,1999 4 劉真,畢才術.數字邏輯與計算機設計[M ]北京:高等教育出版社,2002 5 王小軍.VHDL簡明教程[M].北京:清華大學出版社,1997

第二篇:數字鐘課設任務書

課程設計任務書

一、設計課題

數字鐘

二、設計時間

2011年 6 月 20日至2011年 6 月 24日

三、設計內容及要求

1、設計要求

1)時間以24小時為一個周期; 2)能顯示時、分、秒,24小時制;

3)有校時功能,可以分別對時及分進行單獨校時,使其校正到標準時間; 4)計時過程具有報時功能,當時間到達整點前5秒進行蜂鳴報時; 5)為了保證計時的穩定及準確須由晶體振蕩器提供表針時間基準信號。6)在完成上述設計內容的基礎上,可以自行設計一些附加功能。注意:硬件資源的節約,否則器件內資源會枯竭。

2、工作任務與要求

1)搜集有關資料,進行方案設計,畫出總體設計框圖,說明搶答器由哪些相對獨立的功能模塊組成,標出各個模塊之間互相聯系,并以文字對原理作輔助說明。

2)進行電路參數分析、論證,以及電路可靠性分析。3)設計各個功能模塊的電路圖,加上原理說明。

4)在驗證各個功能模塊基礎上,對整個電路的元器件和布線,進行合理布局,畫出總體電路圖。

3、設計報告正文內容要求

1)設計目的。2)設計指標。3)設計方案及論證。

4)畫出設計的原理框圖,并要求說明該框圖的工作過程及每個模塊的功能。5)畫出各功能模塊的電路圖,加上原理說明(例如搶答門及控制電路,鎖存器及譯碼顯示原理等)。

6)畫出總布局接線圖(集成塊按實際布局位置畫,關鍵的連接應單獨畫出,集成塊的引腳須按實際位置畫,并注明名稱。)

7)元器件清單。

胡靜波

第三篇:基于VHDL的多功能數字鐘設計報告

基于VHDL的多功能數字鐘

設計報告

021215班 衛時章 02121451

一、設計要求

1、具有以二十四小時制計時、顯示、整點報時、時間設置和鬧鐘的功能。

2、設計精度要求為1秒。

二、設計環境:Quartus II

三、系統功能描述

1、系統輸入:時鐘信號clk采用50MHz;系統狀態及較時、定時轉換的控制信號為k、set,校時復位信號為reset,均由按鍵信號產生。

2、系統輸出:LED顯示輸出;蜂鳴器聲音信號輸出。

3、多功能數字電子鐘系統功能的具體描述如下:

(一)計時:正常工作狀態下,每日按24h計時制計時并顯示,蜂鳴器無聲,逢整點報時。

(二)校時:在計時顯示狀態下,按下“k”鍵,進入“小時”待校準狀態,若此時按下“set”鍵,小時開始校準;之后按下“k”鍵則進入“分”待校準狀態;繼續按下“k”鍵則進入“秒”待復零狀態;再次按下“k”鍵數碼管顯示鬧鐘時間,并進入鬧鐘“小時”待校準狀態;再次按下“k”鍵則進入鬧鐘“分”待校準狀態;若再按下“k”鍵恢復到正常計時顯示狀態。若校時過程中按下“reset”鍵,則系統恢復到正常計數狀態。(1)“小時”校準狀態:在“小時”校準狀態下,顯示“小時”的數碼管以2Hz閃爍,并按下“set”鍵時以2Hz的頻率遞增計數。(2)“分”校準狀態:在“分”校準狀態下,顯示“分”的數碼管以2Hz閃爍,并按下“set”鍵時以2Hz的頻率遞增計數。(3)“秒”校準狀態:在“秒復零”狀態下,顯示“秒”的數碼管以2Hz閃爍,并以1Hz的頻率遞增計數。

(4)鬧鐘“小時”校準狀態:在鬧鐘“小時”校準狀態下,顯示“小時”的數碼管以2Hz閃爍,并按下“set”鍵時以2Hz的頻率遞增計數。

(5)鬧鐘“分”校準狀態:在鬧鐘“分”校準狀態下,顯示“分”的數碼管以2Hz閃爍,并按下“set”鍵時以2Hz的頻率遞增計數。

(三)整點報時:蜂鳴器在“59”分鐘的第“51”、“53”、“55”、“57”秒發頻率為500Hz的低音,在“59”分鐘的第“59”秒發頻率為1000Hz的高音,結束時為整點。

(四)顯示:采用掃描顯示方式驅動4個LED數碼管顯示小時、分,秒由兩組led燈以4位BCD 碼顯示。

(五)鬧鐘:鬧鐘定時時間到,蜂鳴器發出頻率為1000Hz的高音,持續時間為60秒。

四、各個模塊分析說明

1、分頻器模塊(freq.vhd)(1)模塊說明:輸入一個頻率為50MHz的CLK,利用計數器分出 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;

--輸入時鐘信號

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;

--每來個時鐘上升沿時cout開始計數 if cout<=25000 then q1KHz<='0';

--當cout<=25000時,q1KHz輸出“0”

elsif cout<50000 then q1KHz<='1';--當25000

else cout:=0;

--輸出“1”,完成1KHz頻率輸出 end if;

end if;end process;

P500HZ:process(q1KHz)

--q1KHz作為輸入信號,分出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個狀態,這六個狀態分別是: 顯示計時時間狀態,調計時的時、分、秒的3個狀態,調鬧鈴的時、分的3個狀態,reset鍵是復位鍵,用來回到顯示計時時間的狀態。(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、計時模塊

a.秒計時(second.vhd)(1)仿真波形圖:

(2)模塊圖:

b.分計時(minute.vhd)(1)仿真波形圖:

(2)模塊圖:

c.小時計時(hour.vhd)(1)仿真波形圖:

(2)模塊圖:

d.鬧鐘分計時(cntm60b.vhd)(1)仿真波形圖:

(2)模塊圖:

e.鬧鐘小時計時(cnth24b.vhd)(1)仿真波形圖:

(2)模塊圖:

5、鬧鐘比較模塊(compare.vhd)(1)模塊說明:比較正常計數時間與鬧鐘定時時間是否相等,若相等,compout輸出“1”,反之輸出“0”。(2)仿真波形圖:

(3)模塊圖:

6、報時模塊(bell.vhd)(1)模塊說明:該模塊既實現了整點報時的功能,又實現了鬧鈴的功能,蜂鳴器通過所選頻率的不同,而發出不同的聲音。(2)仿真波形圖:

(3)模塊圖:

7、控制顯示模塊(show_con.vhd)(1)模塊說明:該模塊實現了數碼管既可以顯示正常時間,又可以顯示鬧鐘時間的功能;調時過程的定時閃爍功能也在此模塊中真正實現。(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”;--顯示小時數碼管以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”,數碼管顯示鬧鐘時間

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、動態掃描顯示模塊(scan_led.vhd)(1)模塊說明:由4組輸入信號和輸出信號進而實現了時鐘時、分的動態顯示。(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

--控制數碼管位選 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)模塊圖:

五、端口設定

k:button2,set:button1,reset:button0 ; Bell:SW1 用于開關蜂鳴器;

六、頂層電路圖

七、心得體會

此次的數字鐘設計重在于按鍵的控制和各個模塊代碼的編寫,雖然能把鍵盤接口和各個模塊的代碼編寫出來,并能正常顯示,但對于各個模塊的優化設計還有一定的缺陷和不足,比如對按鍵消抖等細節處并未作出優化。

經過此次數字鐘的設計,我確實從中學到很多的東西。首先,通過VHDL硬件語言的學習,我充分認識到了功能模塊如何用語言實現,讓我初步了解到了一個數字電路用硬件語言設計的方式和設計思想。其次,也讓我深深地體會到實踐的重要性,起初我學VHDL語言的時候,只是學得書本上的知識,經過這次課程設計,通過對模塊的語言實現,對于VHDL語言我有了更深的認識。而且在程序錯誤的發現和改正的過程中,我得到了更多的收獲,也確實讓我進步了不少。再次,當我遇到一些問題的時候,請教老師,和同學們一起討論,令我受益頗多!最后,這個多功能數字電子鐘是自我創造與吸取借鑒共同作用的產物,是自我努力的結果。這讓我對數字電路的設計充滿了信心。雖然課程設計已經結束,但這并不代表著我已經真正掌握了VHDL語言,仍需繼續學習!

第四篇:用狀態機實現的EDA多功能數字鐘課程設計VHDL代碼

設計并實現具有一定功能的數字鐘

1、該數字鐘可以實現3個功能:計時功能、整點報時功能和重置時間功能,因此有3個功能:計時、重置時間、復位。

2、對所有設計的小系統能夠正確分析;

3、基于VHDL語言描述系統的功能;

4、在quartus 2環境中編譯通過;

5、仿真通過并得到正確的波形;

6、給出相應的設計報告。

其中計時模塊有4部分構成:秒計時器(second)、分計時器(minute)、時計時器(hour)、日計時器(date)、月計時器(mouth)、年計時器(year)

1)秒計時器(second)是由一個60進制的計數器構成的,具有清0、置數和計數功能。其中reset為清0信號,當reset為0時,秒計時器清0;set 為置數信號,當set為0時,秒計時器置數,置s1的值。clk為驅動秒計時器的時鐘,sec為秒計時器的輸出,ensec為秒計時器的進位信號,作為下一級的時鐘輸入信號。

2)分計時器(minute)是由一個60進制的計數器構成的,具有清0、置數和計數功能。其中reset為清0信號,當reset為0時,分計時器清0;set 為置數信號,當set為0時,分計時器置數,置m1的值。clkm為驅動分計時器工作的時鐘,與ensec相連接;min為分計時器的輸出;enmin為分計時器的進位信號,作為下一級的時鐘輸入信號。

3)時計時器(hour)是由一個24進制的計數器構成的,具有清0、置數和計數功能。其中reset為清0信號,當reset為0時,時計時器清0;set 為置數信號,當set為0時,時計時器置數,置h1的值。clkh為驅動時計時器工作的時鐘,與enmin相連接;hour為時計時器的輸出;enhour為時計時器的進位信號,作為下一級的時鐘輸入信號。

4)日計時器(date1)是由一個60進制的計數器構成的,具有清0、置數和計數功能。其中reset為清0信號,當reset為0時,星期計時器清0;set 為置數信號,當set為0時,星期計時器置數,置d1的值。clkd為驅動星期計時器工作的時鐘,與enhour相連接;date為日計時器的輸出,endate為分計時器的進位信號,作為下一級的時鐘輸入信號,由于月份的天數存在天數不同,閏年2月的天數為28天等情況,還設計了一個潤年判別器,準確顯示時間。

5)月計時器(mouth)是由一個60進制的計數器構成的,具有清0、置數和計數功能。其中reset為清0信號,當reset為0時,星期計時器清0;set 為置數信號,當set為0時,星期計時器置數,置mou1的值,clkmou為驅動星期計時器工作的時鐘,與enday相連接;mou為日計時器的輸出,enmou為分計時器的進位信號,作為下一級的時鐘輸入信號。6)計時器(year)是由一個60進制的計數器構成的,具有清0、置數和計數功能。其中reset為清0信號,當reset為0時,星期計時器清0;set 為置數信號,當set為0時,星期計時器置數,置y1的值,clky為驅動星期計時器工作的時鐘,與enmou相連接;year為日計時器的輸出。VHDL程序

1、屏幕切換模塊

運用狀態機進行屏幕切換,分別顯示年月日,以及時分秒 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--決定轉換狀態的進程

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)

--主控時序進程

BEGIN

IF Reset = '1' THEN

STX<= st0;

--異步復位

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、置數操作模塊

運用狀態機,進行置數操作 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、小時顯示模塊 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;

第五篇:電工電子課設-數字鐘元器件清單

數字鐘課程設計元器件清單單價(元/個)1、2、3、共陽極數碼管:6個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個12、32768時鐘晶體:1個13、1K電阻:1個

14、三極管:1個15、100Ω電阻:6個

17、蜂鳴器:1個

18、小飯盒:1個

19、面包板:1塊1 1 1 11 111

下載VHDL實現數字鐘課設報告[推薦]word格式文檔
下載VHDL實現數字鐘課設報告[推薦].doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    數字電子技術課設(數字鐘)

    太原理工大學現代科技學院學院《數字電子技術》課程設計報告數字電子技術課程設計報告 題目: 多功能數字鐘課程設計 學年:2007 學期:第二學期專業:自動化班級:0703 學號:0710055......

    EDA實現多功能數字鐘

    EDA實現多功能數字鐘 實 驗 報 告 專業班級:學生姓名:學生學號: 目錄 一、內容摘要 二、實驗要求 三、各底層模塊設計 四、總體方案 五、 心得體會一、實驗內容 利用 QuartusI......

    eda 實現多功能數字鐘

    一、標題:EDA實現多功能數字鐘 二、任務書:設計要求是用FPGA器件和EDA技術實現多功能數字鐘的設計,⑴ 控制功能包括①以數字形式顯示時、分、秒的時間;②小時計數器為24進制;③分......

    用VHDL語言編寫的數字鐘程序5篇

    永州職業技術學院 課 程 設 計 課程名稱: EDA技術實用教程 題 目:基于FPGA的數字鐘設計 系、專業: 電子技術系應用電子 年級、班級: 07級電子大專 學生姓名: 馮 苗 指導老師: 龍......

    多功能數字鐘課程設計VHDL代碼書上程序改

    library ieee; use ieee.std_logic_1164.all; entity clock is port( clk1hz:in std_logic;--1hz脈沖-- clk100:in std_logic;--100hz脈沖-- weekclk:in std_logic;--星期調......

    數據結構課設報告

    華 中 科 技 大 學 計 算 機 科 學 與 技 術 學 院 課 程 設 計 報 告 課程設計報告 題目:華科校園導航 課程名稱:數據結構課程設計 專業班級: 學號: 姓名: 指導教師: 報告日期:......

    ERP課設報告

    《企業資源計劃ERP》 課程設計 題目:關于企業實施ERP對人力資源管理影響的探究班 級 信管 092 專 業 信息管理和信息系統 學 號 3090561053 姓 名 竇 婷 地 點 經濟與管理學......

    財務會計課設報告(最終定稿)

    武漢理工大學《財務會計課程設計》報告書13年我們一起做的財務會計課程設計財務會計課程設計,是我的第三次專業課程設計,說實話做起來應該輕車熟路,但實際卻不是如此。在剛開始......

主站蜘蛛池模板: 熟女人妻少妇精品视频| 亚洲精品美女久久久久9999| 日韩欧精品无码视频无删节| 国产乱理伦片在线观看| 国产69精品久久久久99尤物| 九九re6热在线视频精品66| 久久综合狠狠综合久久| 日韩亚洲精品国产第二页| 欧美日韩国产免费一区二区三区| 国产午夜男女爽爽爽爽爽| 国产亚洲欧美另类一区二区| 伊人精品成人久久综合全集观看| 亚洲成av人片在线观看橙子| 熟妇熟女乱妇乱女网站| 欧美在线人视频在线观看| 精品无码久久久久国产手机版| 人成午夜免费视频无码| 亚洲精品国偷拍自产在线麻豆| 自拍亚洲一区欧美另类| 国产嫖妓风韵犹存对白| 国产精品青青草原免费无码| 成人免费播放视频777777| 国产亚洲真人做受在线观看| 欧美xxxx性bbbbb喷水| 国产精品午睡沙发系列| 亚洲综合伊人久久综合| 人妻熟女一区二区aⅴ千叶宁真| 色欲网天天无码av| 老司机精品视频一区二区| 精品av国产一区二区三区四区| 中文无码乱人伦中文视频在线v| 毛茸茸的中国女bbw| 亚洲人人玩人人添人人| 在线va无码中文字幕| 国产超碰人人模人人爽人人喊| 又湿又黄裸乳漫画无遮挡网站| 97在线视频免费人妻| 精品久久久bbbb人妻| 免费无码又爽又刺激动态图| 精品一区二区三区免费播放| 亚洲乳大丰满中文字幕|