第一篇:EDA數字鐘課程設計
課 程 設 計 報 告
設計題目:用VHDL語言實現數字鐘的設計
班 級:電子1002班 學 號:20102625 姓 名:于曉 指導教師:李世平、李寧 設計時間:2012年12月
摘要
數字鐘是一種用數字電路技術實現時、分、秒計時的鐘表。本設計主要是實現數字鐘的功能,程序用VHDL語言編寫,整體采用TOP-TO-DOWN設計思路,具有基本的顯示年月日時分秒和星期的功能,此外還有整點報時功能。該數字鐘的實現程序分為頂層模塊、年月模塊、日模塊、時分秒定時模塊、數碼管顯示模塊、分頻模塊、星期模塊,此外還有一個庫。該程序主要是用了元件例化的方法,此外還有進程等重要語句。
沒有脈沖時,顯示時分秒,set按鈕產生第一個脈沖時,顯示年月日,第2個脈沖到來時可預置年份,第3個脈沖到來時可預置月份,依次第4、5、6、7、8個脈沖到來時分別可預置日期、時、分、秒、星期,第 9個脈沖到來時設置星期后預置結束,正常工作,顯示的是時分秒和星期。調整設置通過Up來控制,UP為高電平,upclk有脈沖到達時,預置位加1,否則減1。當整點到達時,報時器會鳴響,然后手動按鍵停止報時。
關鍵詞:數字鐘,VHDL,元件例化,數碼管
1、課程設計目的
掌握利用可編程邏輯器件和EDA設計工具進行電子系統設計的方法
2、課程設計內容及要求
設計實現一個具有帶預置數的數字鐘,具有顯示年月日時分秒的功能。用6個數碼管顯示時分秒,set按鈕產生第一個脈沖時,顯示切換年月日,第2個脈沖到來時可預置年份,第3個脈沖到來時可預置月份,依次第4、5、6、7個脈沖到來時分別可預置日期、時、分、秒,第 8個脈沖到來后預置結束,正常工作,顯示的是時分秒。Up為高電平時,upclk有脈沖到達時,預置位加1.否則減1,還可以在此基礎上增加其它功能。
3、VHDL程序設計
3.1整體設計思路
本設計采用top-down 模式設計,分模塊進行,各功能都使用元件例化方式設計,主要有LED顯示模塊、時分秒定時模塊、日期模塊、年月模塊、分頻模塊、星期模塊,此外還創建了一個程序包,用來實現年月日、時分秒的加減調整。主要運用了過程語句、元件例化語句、信號賦值語句、和順序語句
圖3-1-1 整體結構圖
圖3-1-2 頂層模塊引腳圖
3.2各模塊設計思路
3.2.1 普通計數器(時、分、秒、月、年計數器)設計
時鐘模塊通過調用程序包的時分秒加減過程語句實現兩個六十進制,一個二十四進制,秒的進位信號作為分的計數時鐘信號,分的進位信號作為時的時鐘信號。時的進位信號通過管腳映射到日期模塊的計數時鐘信號。
定時功能在時分秒模塊中,是由分計數器在到達59時產生一個脈沖,讓speaker產生高電位鳴響。
年月模塊主要實現月份的十二進制計數器,和100進制的年份計數器。月份的計數信號由日期模塊的進位信號傳遞過來,年份的時鐘信號由月份的進位信號產生。
圖3-2-1 時分秒引腳圖 圖3-2-2 年月引腳圖 3.2.2 可變進制計數器(天計數器)模塊設計
不同月中的天的數量是不同的,例如“大月”就有31“天”,“小月”有30“天”,平年“二月”有28“天”,而閏年“二月”有29“天”。所以天計數器應該具備進制可變的性能。日期模塊主要分為三個部分,預置日期加,預置日期減和產生進位信號,使月份增加。平閏年的判斷是通過年月模塊傳輸過來年份信號(兩個4位的BCD碼),如果高位的信號為“xxx0”且低位的信號為“xx00”(如20,84等),或高位為“xxx1”且低位為“xx10”(如32等)則判斷為閏年。這種方法的包含了一百年中的所有閏年的情況。然后判斷大月小月可以判斷月份來確定30進制還是31進制。進位信號也是分為大月、小月、平年閏年來確定是否產生。
圖3-2-3 日模塊引腳圖
3.2.3 LED顯示模塊
主要通過接受setpin的控制信號來選擇顯示的內容,把不同的信號賦給輸出的端口,從而實現時分秒,年月日的切換。3.2.4 星期模塊
通過七進制計數器實現,同時帶有預置的功能,不能同年月調整聯動,但是能單獨調整。
圖3-2-4 星期模塊引腳圖
4、仿真與分析
4.1 日模塊
4.1.1 年份為2000年,月份為2月,有29天,初值設為2000年2月28日,仿真中日為:28、29、1、2、?
4.1.2 年份為1999年,月份為2月,有28天,初值設為1999年2月28日,仿真中日為:28、1、2、?
4.1.3 年份為2000年,月份為3月,有31天,初值設為2000年3月30日,仿真中日為:30、31、1、2、?
4.1.4 年份為2000年,月份為4月,有30天,初值設為2000年4月30日,仿真中日為:30、1、2、?
4.2 年月模塊
初值設為1999年12月,lock為1時,顯示年月,lock為3時,預置月,lock為2時,預置年
4.3 時分秒定時模塊
lock為0時,顯示時分秒,lock為5時,預置時,lock為6時,預置分,lock為7時,預置秒。當分到達59時,整點報時器響,speaker高電位,隨著手動清零,恢復原位。
4.4 星期模塊
初值設為星期1,仿真中顯示為:1、2、3、4、5、6、7、1、?
4.5 分頻模塊
4.6 頂層設計模塊
5、課程設計總結
本次課程設計歷時兩天半,經過自己不斷的努力完成了數字鐘的設計,程序代碼的編寫調試及仿真。以前只是看書或者編一些很小的程序用來仿真,覺得沒怎么難,但當進行此次課程設計真正處理一個較大程序時,問題便都顯現出來。雖然在這個過程中遇到了很多的問題,但是最終都得到了很好的解決。
我此次設計的程序是在課本原有數字鐘程序的基礎上進行添加更改得來的,最初在運行原有程序時很順利,但是隨著加的東西越來越多,程序中出現的問題也就越來越多。很多同學都覺得在已有程序上再添加東西看似簡單,實則很容易混亂,理不清頭緒,而且這個原有程序是用進程所寫,比較麻煩。雖然這樣容易出現問題,不過我覺得這是一個鍛煉的好機會。、在處理分頻模塊時,最開始按照老師的要求設置了頻率,但是當運行時,發現根本出不來,后來與同學討論后,發現頻率過大,后來改為八分頻,使得分頻
模塊能夠使用。在一開始加星期模塊時,沒怎么考慮,可是當加進去后才發現,星期模塊不能與其他模塊很好的相連,不能很好的做到與“日模塊”相合,后來雖有改動,但最終沒能改成功。在加定時器功能時,一開始單獨為定時器列了一個模塊,所寫的程序也很復雜,錯誤百出,最后程序改好后,仿真卻出不來。后來經過同學的提點,就把程序改簡單了,單純的來個脈沖就出現高電平,但后來仿真發現高電平一直在高位,沒法給脈沖,最后沒辦法便手動脈沖。與頂層模塊連接后,又發現分滿59的脈沖沒給,因為我的時分秒全都放在了一起,只能將定時模塊挪到時分秒模塊中,這樣反而使得整個工程簡單了一些。
在各個模塊都能仿真成功后,頂層模塊的程序與仿真卻出現了很多問題。首先是頂層模塊程序有很多警告,例如“second_waver”沒有用到之類的,后來在改動的過程中,便把內變量換為了外變量,但是有些原來的警告沒有了,但是新的警告又出現了,原本能夠連好的U3與U4 模塊均不能正常連接,后來與同學自習查找,才終于將錯誤找出,由于粗心大意誤動了一些元件例化時的變量,使得時間拜拜浪費。最后在仿真的時候,仿真結果出不來,經過與同學商量在每個程序中都給年月日等變量均付了初值,才讓仿真出來。
此次課程設計雖然只有短短的兩天半的時間,但是經過前期的查找資料,后來的實驗室實際操作,再到現在的報告總結,我收獲了很多。其實完成一個設計,編程只是很小的一部分,最主要的在于查找資料以及調試程序,此次設計我在查找資料方面做的不是很充分,以至于設計的面很小,而且在遇到問題后不能很快的找出,以后一定要做好準備工作。此次課程設計中遇到的問題看似不大,但都是很好的問題,對我以后的設計有很大的幫助,一定會牢牢記住。
最后,此次課程設計的完成很大程度上取決于老師和同學對我的指導與幫助,這更能說明,一個較大設計的完成及實現,不是僅限于自身,我們要學會與別人交流溝通,才能做到更好。
6、參考文獻
[1]李景華,杜玉遠.可編程邏輯器件與EDA技術.沈陽:東北大學出版社,2000 [2] 姜如東,VHDL語言程序設計及應用,北京郵電大學出版社
[3] 康華光.電子技術基礎(數字部分)[M].北 京:高等教育出版社,2001.
[4] [5]
第二篇:EDA課程設計——多功能數字鐘
哈爾濱工業大學(威海)電子學課程設計報告
帶有整點報時的數字鐘設計與制作
姓名: 蔣棟棟 班級: 0802503 學號: 080250331 指導教師:
井巖
目錄
一、課程設計的性質、目的和任務????????????3
二、課程設計基本要求?????????????????3
三、設計課題要求???????????????????3
四、課程設計所需要儀器????????????????4
五、設計步驟?????????????????????4
1、整體設計框圖???????????????????4
2、各個模塊的設計與仿真???????????????4
2.1分頻模塊???????????????????????4
2.2計數器模塊??????????????????????6
2.3控制模塊??????????????????????10
2.4數碼管分配?????????????????????13
2.5顯示模塊??????????????????????14
2.6報時模塊??????????????????????16
六、調試中遇到的問題及解決的方法???????????18
七、心得體會?????????????????????18
一、課程設計的性質、目的和任務
創新精神和實踐能力二者之中,實踐能力是基礎和根本。這是由于創新基于實踐、源于實踐,實踐出真知,實踐檢驗真理。實踐活動是創新的源泉,也是人才成長的必由之路。
通過課程設計的鍛煉,要求學生掌握電路的一般設計方法,具備初步的獨立設計能力,提高綜合運用所學的理論知識獨立分析和解決問題的能力,培養學生的創新精神。
二、課程設計基本要求
掌握現代大規模集成數字邏輯電路的應用設計方法,進一步掌握電子儀器的正確使用方法,以及掌握利用計算機進行電子設計自動化(EDA)的基本方法。
三、設計課題要求
(1)構造一個24小時制的數字鐘。要求能顯示時、分、秒。(2)要求時、分、秒能各自獨立的進行調整。
(3)能利用喇叭作整點報時。從59分50秒時開始報時,每隔一秒報時一秒,到達00分00秒時,整點報時。整點報時聲的頻率應與其它的報時聲頻有明顯區別。
#設計提示(僅供參考):(1)對頻率輸入的考慮
數字鐘內所需的時鐘頻率有:基準時鐘應為周期一秒的標準信號。報時頻率可選用1KHz和2KHz左右(兩種頻率相差八度音,即頻率相差一倍)。另外,為防止按鍵反跳、抖動,微動開關輸入應采用寄存器輸入形式,其時鐘應為幾十赫茲。
(2)計時部分計數器設計的考慮 分、秒計數器均為模60計數器。
小時計數為模24計數器,同理可建一個24進制計數器的模塊。(3)校時設計的考慮
數字鐘校準有3個控制鍵:時校準、分校準和秒校準。
微動開關不工作,計數器正常工作。按下微動開關后,計數器以8Hz頻率連續計數(若只按一下,則計數器增加一位),可調用元件庫中的邏輯門建一個控制按鍵的模塊,即建立開關去抖動電路(見書70頁)。
(4)報時設計的考慮
可以將高頻時鐘分頻得到約2KHz和1KHz的音頻,作為數字鐘的報時頻率。當電子鐘顯示XX:59:50時,數字鐘開始報時“DO“,持續一秒,而且每隔一秒報一下,直至顯示XX:00:00時報“DI”,持續一秒后停止。最后輸出至喇叭。應調用元件庫中的邏輯門建一個控制報時的模塊。
(5)建一個七段譯碼的模塊
因在系統可編程器件實驗箱上的數碼管沒有經過譯碼,故要用AHDL語言寫一個七段譯碼的模塊,且應考慮數碼管為共陽極。數碼管上的點(D2、D4、D6)應置Vcc。
四、課程設計所需要儀器
1、計算機一臺
2、quartusⅡ軟件
3、FPGA開發板
五、設計步驟
1、模塊介紹
(1)分頻模塊:產生1Hz、1KHz、2KHz頻率(2)計數器模塊:生成60進制、24進制計數器(3)控制模塊:按鍵控制、按鍵消抖
(4)顯示模塊:7段數碼管顯示器,分別顯示小時、分鐘、秒(5)報時模塊:進行整點報時
2、各個模塊的設計與仿真
2.1分頻模塊
CLK晶振頻率50MHZ,分成2KHZ,1KHZ,1HZ的信號。基準1HZ信號作為時鐘計時的秒計數時鐘信號;分頻的1KHZ,2KHZ信號用于報時電路的不同聲訊。
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity fre is port(clk ,sel: in std_logic;clk1hz,clk1khz,clk2khz:out std_logic);end fre;architecture beh of fre is signal data1khz,data2khz,data1hz : std_logic := '0';begin clk1hz <= data1hz;clk1khz <= data1khz;clk2khz <= data2khz;clk1khz_pro : process(clk)--產生1khz信號 variable cnt : integer range 0 to 24999;begin if clk'event and clk='1' then if cnt = 24999 then cnt := 0;data1khz <= not data1khz;else cnt := cnt + 1;end if;end if;end process clk1khz_pro;clk2khz_pro : process(clk)--variable cnt : integer range 0 to 12499;begin if clk'event and clk='1' then if cnt = 12499 then cnt := 0;data2khz <= not data2khz;else cnt := cnt + 1;end if;end if;end process clk2khz_pro;clk1hz_pro : process(data1khz)--variable cnt : integer range 0 to 499;begin if data1khz'event and data1khz='1' then if sel='0' then cnt:=0;else if cnt = 499 then cnt := 0;data1hz <= not data1hz;else cnt := cnt + 1;end if;end if;end if;end process clk1hz_pro;end beh;
輸入模塊電路圖:
產生2khz信號 產生1hz 信號 5 freclkclk1hzclk2khzinst selclk1khz2.2計數器模塊
由秒計數器,分計數器,時計數器組成了最基本的數字鐘計時電路,兩個六十進制計數器與二十四進制計數器組合構成。
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;
entity shuzizhong is port(clk_change : in std_logic;s_en,m_en,h_en:in std_logic;sel:in std_logic;secout,minout,hourout :out std_logic;sl,sh,ml,mh,hl,hh:out std_logic_vector(3 downto 0);a:out std_logic_vector(15downto 0));end shuzizhong;architecture behav of shuzizhong is
signal low_rega,high_rega,low_regb,high_regb,low_regc,high_regc :std_logic_vector(3 downto 0):=“0000”;signal sout,mout,hout :std_logic :='0';begin--秒的60進制進制 counter_sec_l : process(clk_change,s_en)begin
sl<=low_rega;sh<=high_rega;ml<=low_regb;mh<=high_regb;hl<=low_regc;hh<=high_regc;6 if clk_change'event and clk_change='1' then if s_en='1' then if low_rega=“1001” then low_rega <= “0000”;else low_rega <= low_rega+'1';end if;end if;end if;end process counter_sec_l;counter_sec_h : process(clk_change,s_en,low_rega)begin if clk_change'event and clk_change='1' then if s_en='1' then if low_rega=“1001” then if high_rega =“0101”then high_rega <= “0000”;else high_rega <= high_rega+'1';end if;end if;end if;end if;end process counter_sec_h;sout <= '1' when low_rega=“1001” and high_rega=“0101” else '0';
----分鐘的60進制設置 counter_min_l : process(clk_change,m_en)begin if clk_change'event and clk_change='1' then if m_en='1' then if sout='1'or sel='0' then if low_regb=“1001” then low_regb <= “0000”;else low_regb <= low_regb+'1';end if;end if;end if;end if;end process counter_min_l;counter_min_h : process(clk_change,m_en,low_regb)begin if clk_change'event and clk_change='1' then 7 if sout='1'or sel='0' then if m_en='1' then if low_regb=“1001” then
if high_regb =“0101”then
high_regb <= “0000”;else high_regb <= high_regb+'1';end if;end if;end if;end if;end if;end process counter_min_h;mout <= '1' when low_regb=“1001” and high_regb=“0101”and sout='1' else '0';--小時的24進制設置 counter_hour_l : process(clk_change,h_en)begin if clk_change'event and clk_change='1' then if h_en='1' then if mout='1'or sel='0' then if low_regc=“1001”or hout='1' then low_regc <= “0000”;else low_regc <= low_regc+'1';end if;end if;end if;end if;end process counter_hour_l;counter_hour_h : process(clk_change,h_en,hout)begin if clk_change'event and clk_change='1' then if mout='1'or sel='0' then if h_en='1' then if hout='1' then high_regc<=“0000”;else if low_regc=“1001” then high_regc <= high_regc+'1';end if;end if;end if;8 end if;end if;end process counter_hour_h;hout <= '1' when low_regc=“0011” and high_regc=“0010” else '0';secout<=sout;minout<=mout;hourout<=hout;a<=high_regb&low_regb&high_rega&low_rega;end behav;
輸入模塊電路圖:
shuzizhongclk_changes_enm_enh_enselsecoutminouthouroutsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]a[15..0]inst
2.3控制模塊
分五個狀態0狀態正常計時,按下按鍵進入下一狀態開始調時模式1,按下按鍵進入調秒模式2,按下按鍵進入調分模式3,按下按鍵進入調小時模式4.按下按鍵恢復正常計時模式。
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity key_press is port(set ,mode: in std_logic;clk1khz,clk1hz: in std_logic;secout,minout: in std_logic;clk_change,clk2hz_en:out std_logic;sel,s_ce,m_ce,h_ce:out std_logic;s_en,m_en,h_en:out std_logic);end key_press;architecture beh of key_press is 9 signal key1,key2:std_logic;signal sce_reg, mce_reg ,hce_reg:std_logic;signal ssl,ssen,mmen,hhen:std_logic;signal con : integer range 0 to 4 :=0;--按鍵按下(延時)begin
key_press2 : process(set,clk1khz)variable cnt :integer range 0 to 999;begin if set='0' then if clk1khz'event and clk1khz='1'then if cnt=50 and set='0' then cnt :=cnt+1;key2 <= '1';else cnt:=cnt+1;key2 <= '0';end if;end if;else cnt:=0;key2<='0';end if;end process key_press2;key_press1 : process(mode,clk1khz)variable cnt :integer range 0 to 999;begin if mode='0' then if clk1khz'event and clk1khz='1'then if cnt=50 and mode='0' then cnt :=cnt+1;key1 <= '1';else cnt:=cnt+1;key1 <= '0';end if;end if;else cnt:=0;key1<='0';end if;end process key_press1;count : process(key1,key2)begin if key1'event and key1='1' then if con=4 then con<=0;else con<=con+1;end if;end if;10 end process count;con_pro : process(con)begin case con is when 0 => ssl<='1';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='0';when 1 => ssl<='0';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='1';when 2 => ssl<='0';sce_reg <= '1';ssen <='1';mce_reg <= '0';mmen <='0';hce_reg <= '0';hhen <='0';clk2hz_en <='1';when 3 => ssl<='0';sce_reg <= '0';ssen <='0';mce_reg <= '1';mmen <='1';hce_reg <= '0';hhen <='0';clk2hz_en <='1';when 4 => ssl<='0';sce_reg <= '0';ssen <='0';mce_reg <= '0';mmen <='0';hce_reg <= '1';hhen <='1';clk2hz_en <='1';when others => ssl<='0';sce_reg <= '0';ssen <='1';mce_reg <= '0';mmen <='1';hce_reg <= '0';hhen <='1';clk2hz_en <='0';end case;end process con_pro;sel_pro : process(ssl)begin case ssl is when '0'=> s_ce<=sce_reg;m_ce<=mce_reg;h_ce<=hce_reg;clk_change<=key2;when '1'=> s_ce<=ssen;11 m_ce<=mmen;h_ce<=hhen;clk_change<=clk1hz;when others=> s_ce<=ssen;m_ce<=secout;h_ce<=minout;clk_change<=clk1hz;end case;end process sel_pro;sel<=ssl;s_en<=ssen;m_en<=mmen;h_en<=hhen;end beh;
輸入模塊電路圖: key_presssetclk_changemodeclk2hz_enclk1khzselclk1hzs_cesecoutm_ceminouth_ces_enm_enh_eninst
2.4數碼管分配
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity display is port(datain : in std_logic_vector(3 downto 0);dataout : out std_logic_vector(7 downto 0));end display;architecture duan of display is begin process(datain)begin case datain is 12 when “0000” => dataout <=“11000000”;--dp,g,f,e,d,c,b,a when “0001” => dataout <=“11111001”;when “0010” => dataout <=“10100100”;when “0011” => dataout <=“10110000”;when “0100” => dataout <=“10011001”;when “0101” => dataout <=“10010010”;when “0110” => dataout <=“10000010”;when “0111” => dataout <=“11111000”;when “1000” => dataout <=“10000000”;when “1001” => dataout <=“10010000”;when “1010” => dataout <=“10111111”;when “1011” => dataout <=“10000011”;when “1100” => dataout <=“10100111”;when “1101” => dataout <=“10100001”;when “1110” => dataout <=“10000110”;when “1111” => dataout <=“10001110”;when others => null;end case;end process;end;
輸入模塊電路圖:
displaydatain[3..0]dataout[7..0]inst
2.5顯示模塊
使用七段數碼管顯示小時、分鐘與秒
程序代碼:
library ieee;use ieee.std_logic_1164.all;entity scan is port(clk1khz : in std_logic;sl,sh,ml,mh,hl,hh : in std_logic_vector(3 downto 0);clk2hz_en : in std_logic;s_ce,m_ce,h_ce : in std_logic;en_out : out std_logic_vector(7 downto 0);13 dataout : out std_logic_vector(3 downto 0));end scan;architecture beh of scan is signal cnt : integer range 0 to 7;signal en : std_logic_vector(7 downto 0);signal clk2hz : std_logic;signal h_ce_reg,m_ce_reg,s_ce_reg : std_logic;begin h_ce_reg <= not h_ce;m_ce_reg <= not m_ce;s_ce_reg <= not s_ce;cnt_pro : process(clk1khz)begin if clk1khz'event and clk1khz='1' then if cnt = 7 then cnt <= 0;else cnt <= cnt + 1;end if;end if;end process cnt_pro;clk2hz_pro :process(clk1khz)variable c : integer range 0 to 499 := 0;begin if clk1khz'event and clk1khz='1' then if clk2hz_en ='1' then if c =499 then c := 0;clk2hz <= not clk2hz;else c := c + 1;end if;else clk2hz <= '0';end if;end if;end process clk2hz_pro;scan_pro : process(cnt,sl,sh,ml,mh,hl,hh)begin case cnt is when 0 => dataout <= sl;en <= “11111110”;when 1 => dataout <= sh;en <= “11111101”;when 2 => dataout <= ml;en <= “11110111”;when 3 => dataout <= mh;en <= “11101111”;when 4 => dataout <= hl;en <= “10111111”;14 when 5 => dataout <= hh;en <= “01111111”;when 6 => dataout <= “1010”;en <= “11111011”;when 7 => dataout <= “1010”;en <= “11011111”;when others => null;end case;end process scan_pro;
en_out <= en or((clk2hz & clk2hz)or(h_ce_reg & h_ce_reg))& clk2hz &((clk2hz & clk2hz)or(m_ce_reg & m_ce_reg))& clk2hz &((clk2hz & clk2hz)or(s_ce_reg & s_ce_reg));end beh;
輸入模塊電路圖:
scanclk1khzen_out[7..0]sl[3..0]dataout[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]clk2hz_ens_cem_ceh_ceinst
2.6報時模塊
利用蜂鳴器進行整點報時
程序代碼:
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use IEEE.STD_LOGIC_ARITH.ALL;--整點報時 entity baoshi is port(clk1khz,clk2khz : in std_logic;a:in std_logic_vector(15 downto 0);sel:in std_logic;bell:out std_logic);end baoshi;architecture zhong of baoshi is signal c1,ring:std_logic;begin ring_bell :process(clk1khz,clk2khz)15 begin case a is when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk1khz;when “***0” => c1<=clk2khz;when “***0” => c1<=clk2khz;when others => c1<='0';end case;end process ring_bell;
bs: process(c1)begin if sel='1' then if c1='1' then ring<='0';else ring<='1';end if;end if;end process bs;bell<=ring;
end zhong;
輸入模塊電路圖:
baoshiclk1khzbellclk2khza[15..0]selinst
整體模塊電路圖
displayshuzizhongs_enm_enh_enselclk_changes_enm_enh_enselsecoutminouthouroutsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]hh[3..0]setmodefreclkINPUTVCCINPUTVCCdata[3..0]datain[3..0]secoutminoutinst1scanclk1khzclk1khzsl[3..0]sh[3..0]ml[3..0]mh[3..0]hl[3..0]a[15..0]dataout[7..0]OUTPUTdataout[7..0]en_out[7..0]dataout[3..0]OUTPUTen_out[7..0]data[3..0]key_presssetclk1khzmodeclk1khzclk1hzsecoutminoutclk_changeclk2hz_ensels_cem_ceh_ces_enm_enh_eninst6s_enm_enh_enselinst7a[15..0]INPUTVCChh[3..0]clk2hz_ens_cem_ceh_ceinst4baoshiclk1khzclk2khza[15..0]selclk1khzbellclk2khza[15..0]sel++selclkclk1hzselclk1khzclk2khzinst2clk1khzclk2khzsecoutminoutOUTPUTbellinst
六、調試中遇到的問題及解決的方法:
1、編程時,經常導致語法錯誤,如:“;”沒有寫上,變量類型沒有預先標明,前后變量名字由于缺少一個或多一個字母而導致出錯。解決辦法:對照錯誤,認真檢查程序,看哪個地方的標點,變量沒有寫上或標明。
2、進行編譯或波形仿真時,經常得到的不是預想中的結果。
解決辦法:將需要編譯或進行仿真的實體文件置頂,經檢錯無誤后,進行波形仿真,在仿真之前需要合理設置仿真結束時間和信號周期。
3、在控制時間的顯示的時候,由于變量太多多發現不能完全的控制住變量,導致顯示的時候出現了亂碼,數碼管顯示不正常 解決辦法:減少變量,仔細推敲,合理命名。
七、心得體會
一個多星期的課程設計讓我受益匪淺,也讓我真正明白理論與實踐相結合的重要性。通過具體實踐才能讓自己清楚哪些知識已經掌握,哪些知識仍需鞏固加強。與此同時,我也對EDA以及VHDL語言有了進一步了解,對于其結構、語法、功能等認識不少。當然,我目前所做的還僅僅只是一些基本操作,要想真正將其融會貫通還需要今后更多的學習與實踐。雖然只是一個小設計,我卻也從中學到了不少設計流程和一些相關問題。設計是一個十分嚴謹的過程,容不得隨意和馬虎。要想快速而高效地完成一項設計,必須先有一個清晰明了的設計思路,設想好一個整體框架,然后在此基礎上,逐漸將各個部分功能進行完善。在設計的過程中,也曾遇到不少困難,但正所謂堅持就是勝利,要想取得成功,必須要有努力付出,這樣所取得的結果才更有意義。
第三篇:EDA數字鐘設計
數字鐘
一、實驗目的
1、掌握多位計數器相連的設計方法。
2、掌握十進制,六進制,二十四進制計數器的設計方法。
3、掌握揚聲器的驅動及報時的設計。
4、LED燈的花樣顯示。
5、掌握CPLD技術的層次化設計方法。
二、實驗器材
1、主芯片Altera EPF10K10LC84-4。2、8個LED燈。
3、揚聲器。4、4位數碼顯示管。5、8個按鍵開關(清零,調小時,調分鐘)。
三、實驗內容
根據電路特點,運用層次設計概念設計。將此設計任務分成若干模塊,規定每一模塊的功能和各模塊之間的接口。
1、時計時程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity hour is
port(reset,clk : in std_logic;
daout : out std_logic_vector(7 downto 0));end hour;
architecture behav of hour is
signal count : std_logic_vector(3 downto 0);signal counter : std_logic_vector(3 downto 0);begin
p1: process(reset,clk)
begin
if reset='0' then
count<=“0000”;
counter<=“0000”;
elsif(clk'event and clk='1')then
if(counter<2)then
if(count=9)then
count<=“0000”;
counter<=counter + 1;
else
count<=count+1;
end if;
else
if(count=3)
then
counter<=“0000”;
else
count<=count+1;
count<=“0000”;
end if;
end if;
end if;
end process;
daout(7 downto 4)<=counter;daout(3 downto 0)<=count;
end behav;
2、分計時程序: library ieee;
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity minute is
port(reset,clk,sethour: in std_logic;
daout : out std_logic_vector(7 downto 0);
enhour : out std_logic);end minute;
architecture behav of minute is
signal count : std_logic_vector(3 downto 0);signal counter : std_logic_vector(3 downto 0);signal carry_out1 : std_logic;signal carry_out2 : std_logic;begin
p1: process(reset,clk)begin
if reset='0' then
count<=“0000”;
counter<=“0000”;
elsif(clk'event and clk='1')then
if(counter<5)then
if(count=9)then
count<=“0000”;
counter<=counter + 1;
else
count<=count+1;
end if;
carry_out1<='0';
else
if(count=9)then
count<=“0000”;
counter<=“0000”;
carry_out1<='1';
else
count<=count+1;
carry_out1<='0';
end if;
end if;end if;end process;
p2: process(clk)begin
if(clk'event and clk='0')then
if(counter=0)then
if(count=0)then
carry_out2<='0';
end if;
else
carry_out2<='1';
end if;end if;end process;
daout(7 downto 4)<=counter;daout(3 downto 0)<=count;enhour<=(carry_out1 and carry_out2)or sethour;end behav;
3、秒計時程序: library ieee;
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity second is
port(reset,clk,setmin : in std_logic;
daout : out std_logic_vector(7 downto 0);
enmin : out std_logic);end second;
architecture behav of second is
signal count : std_logic_vector(3 downto 0);signal counter : std_logic_vector(3 downto 0);signal carry_out1 : std_logic;signal carry_out2 : std_logic;begin
p1: process(reset,clk)begin
if reset='0' then
count<=“0000”;
counter<=“0000”;
elsif(clk'event and clk='1')then
if(counter<5)
then
if
(count=9)
then
count<=“0000”;
counter<=counter + 1;
else
count<=count+1;
end if;
carry_out1<='0';
else
if(count=9)
then
count<=“0000”;
counter<=“0000”;
carry_out1<='1';
else
count<=count+1;
carry_out1<='0';
end if;
end if;end if;end process;daout(7 downto
4)<=counter;
daout(3
downto
0)<=count;enmin<=carry_out1 or setmin;end behav;6
4、alert程序: library ieee;
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity alert is port(clkspk : in std_logic;
second : in std_logic_vector(7 downto 0);
minute : in std_logic_vector(7 downto 0);
speak : out std_logic;
lamp : out std_logic_vector(8 downto 0));end alert;
architecture behav of alert is signal divclkspk2 : std_logic;begin p1: process(clkspk)begin
if(clkspk'event and clkspk='1')then
divclkspk2<=not divclkspk2;
end if;end process;p2: process(second,minute)begin if(minute=“01011001”)then case second is
when “01010001”=>lamp<=“000000001”;speak<=divclkspk2;when “01010010”=>lamp<=“000000010”;speak<='0';when “01010011”=>lamp<=“000000100”;speak<=divclkspk2;when “01010100”=>lamp<=“000001000”;speak<='0';when “01010101”=>lamp<=“000010000”;speak<=divclkspk2;when “01010110”=>lamp<=“000100000”;speak<='0';when “01010111”=>lamp<=“001000000”;speak<=divclkspk2;when “01011000”=>lamp<=“010000000”;speak<='0';when “01011001”=>lamp<=“100000000”;speak<=clkspk;when others=>lamp<=“000000000”;end case;end if;end process;end behav;8
5、seltime程序 library ieee;
use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
entity seltime is port(ckdsp : in std_logic;
reset : in std_logic;
second : in std_logic_vector(7 downto 0);
minute : in std_logic_vector(7 downto 0);
hour : in std_logic_vector(7 downto 0);
daout : out std_logic_vector(3 downto 0);
sel : out std_logic_vector(2 downto 0));end seltime;
architecture behav of seltime is signal sec : std_logic_vector(2 downto 0);begin
process(reset,ckdsp)begin
if(reset='0')then sec<=“000”;
elsif(ckdsp'event and ckdsp='1')then
sec<=“000”;else
sec<=sec+1;end if;end if;end process;
process(sec,second,minute,hour)begin case sec is
when “000”=>daout<=second(3 downto 0);when “001”=>daout<=second(7 downto 4);when “011”=>daout<=minute(3 downto 0);when “100”=>daout<=minute(7 downto 4);when “110”=>daout<=hour(3 downto 0);when “111”=>daout<=hour(7 downto 4);when others=>daout<=“1111”;end case;end process;
if(sec=“111”)then
sel<=sec;end behav;
6、deled程序: LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;
ENTITY deled IS PORT(S: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
A,B,C,D,E,F,G,H: OUT STD_LOGIC);END deled;
ARCHITECTURE BEHAV OF deled IS
SIGNAL DATA:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL DOUT:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN DATA<=S;PROCESS(DATA)BEGIN
CASE DATA IS
WHEN “0000”=>DOUT<=“00111111”;WHEN “0001”=>DOUT<=“00000110”;WHEN “0010”=>DOUT<=“01011011”;WHEN “0011”=>DOUT<=“01001111”;WHEN “0100”=>DOUT<=“01100110”;WHEN “0101”=>DOUT<=“01101101”;WHEN “0110”=>DOUT<=“01111101”;WHEN “0111”=>DOUT<=“00000111”;WHEN “1000”=>DOUT<=“01111111”;WHEN “1001”=>DOUT<=“01101111”;WHEN “1010”=>DOUT<=“01110111”;WHEN “1011”=>DOUT<=“01111100”;WHEN “1100”=>DOUT<=“00111001”;WHEN “1101”=>DOUT<=“01011110”;WHEN “1110”=>DOUT<=“01111001”;WHEN “1111”=>DOUT<=“01000000”;WHEN OTHERS=>DOUT<=“00000000”;END CASE;END PROCESS;H<=DOUT(7);
G<=DOUT(6);
F<=DOUT(5);
E<=DOUT(4);D<=DOUT(3);C<=DOUT(2);B<=DOUT(1);A<=DOUT(0);END BEHAV;
7、頂層原理圖:
四、實驗結果 頂層原理圖仿真波形:
五、心得體會
1、系統設計進要行充分的方案論證,不可盲目就動手去做;
2、實驗中對每一個細節部分都要全面思考,要對特殊情況進行處理;
3、對于數字系統,要考慮同步、異步問題;
4、數字電路的理論分析要結合時序圖;
5、遇到問題,要順藤摸瓜,分析清楚,不可胡亂改動,每做一次改變都要有充分的理由;
6、模塊化設計方法的優點在于其簡潔性,但是在實驗設計中也發現,在實驗最終電路確定之前,要盡量減少模塊重疊嵌套,因為在總的電路敲定之前,電路還不成熟,很多地方需要改進,如果在開始時就進行多層模塊化,里層模塊電路的修改將影響其外層的全部電路,這樣就是牽一發動全身,很顯然,這樣將導致電 數字鐘課程設計 電路設計的低效,所以在設計過程中,一定要盡量減少超過兩層的模塊;
7、遇到問題花了很長時間沒有解決掉,要學會想他人請教,別人的不經意一點,可能就能把自己帶出思維死區。
第四篇:EDA數字鐘畢業設計
[ 標簽:數字鐘, eda ]
1、設計一個能顯示1/10秒、秒、分、時的12小時數字鐘。
2、時鐘源使用頻率為0.1Hz的連續脈沖。
3、設置兩個按鈕,一個供“開始”及“停止”用,一個供系統“復位”用。
4、時鐘顯示使用數碼管顯示。
基于VHDL的多功能數字鐘的設計 EDA課程設計 資料類別課程(專業)EDA 適用年級大學文件格式word+DLS 文件大小1725K 上傳時間2008-10-10 20:57:00 預覽文件無(只能預覽文件中的部分內容)下載次數0內容簡介:EDA課程設計 基于VHDL的多功能數字鐘的設計,共11頁,6086字,附源程序。摘要:介紹了利用VHDL硬件描述語言設計的多功能數字鐘的思路和技巧。在MAX+PLUSII開發環境中編譯和仿真了所設計的程序,并在可編程邏輯器件上下栽驗證。仿真和驗證結果表明,該設計方法切實可行。
EDA-時鐘設計-基于Altera數字鐘的實
現:EDA課程設計 基于VHDL的多功能數字鐘的設計:EDA數字鐘設計報告:資料包括: 論文(12頁2036字)圖紙說明:中文摘要:數字鐘學習的目的是掌握各類計數器及它們相連的設計方法;掌握多個數碼管顯示的原理與方法;掌握FPGA技術的層次化設計方法;掌握用VHDL語言的設計思想以及整個數字系統的設計。此數字鐘設計具有時,分,秒計數顯示功能,以24小時為計數循環;能實現清零,調節小時,分鐘以及整點報時的功能。
第五篇:eda數字鐘程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clock IS PORT(EN
:IN STD_LOGIC;數碼管使能
CLK
:IN STD_LOGIC;時鐘信號
RST
:IN STD_LOGIC;復位信號
SEC_1
:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);秒高位
SEC_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);秒低位
MIN_1
:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);分高位
MIN_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);分低位
HOU_1
:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);時高位
HOU_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);時低位
BEE
:OUT STD_LOGIC);END clock;
ARCHITECTURE behovior OF clock IS SIGNAL SEC_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL SEC_LOW
:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL MIN_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL MIN_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HOU_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL HOU_LOW
:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL CY_MIN
:STD_LOGIC;分進位
SIGNAL CY_HOU
:STD_LOGIC;時進位
SIGNAL LOGO_1
:STD_LOGIC;標志
SIGNAL LOGO_2
:STD_LOGIC;
SIGNAL LOGO_3
:STD_LOGIC;
BEGIN MIAOLOW:PROCESS(CLK,RST,EN)
BEGIN
IF(RST = '0')
THEN
SEC_LOW <= “1000”;附給秒低位為8
ELSIF(CLK'EVENT AND CLK = '1' AND EN = '1')THEN 檢測時鐘上升沿及數碼管使能端
IF(SEC_LOW = “1001”)THEN
SEC_LOW <= “0000”;
ELSE
SEC_LOW <= SEC_LOW + “0001”;加一
END IF;
END IF;
END PROCESS MIAOLOW;
LOGO_1 <= SEC_LOW(3)AND SEC_LOW(0);
SEC_01<= SEC_LOW;秒個位放8
MIAOHIGH:PROCESS(CLK,RST)
BEGIN
IF(RST = '0')
THEN
SEC_HIGH <= “0101”;
ELSIF(CLK'EVENT AND CLK = '1')THEN檢測時鐘上升沿
IF(LOGO_1 = '1')THEN
IF(SEC_HIGH = “0101”)THEN
SEC_HIGH <= “0000”;
CY_MIN <= '1';
ELSE
SEC_HIGH <= SEC_HIGH + “0001”;加一
CY_MIN <= '0';
END IF;
END IF;
END IF;
END PROCESS MIAOHIGH;
SEC_1 <= SEC_HIGH;秒十位放5
FENLOW:PROCESS(CY_MIN,RST,EN)
BEGIN
IF(RST = '0')
THEN 若復位位為0
MIN_LOW <= “1000”;則分個位為8
ELSIF(CY_MIN'EVENT AND CY_MIN = '1' AND EN = '1')THEN檢測時鐘上升沿及數碼管使能端
IF(MIN_LOW = “1001”)THEN
MIN_LOW <= “0000”;
ELSE
MIN_LOW <= MIN_LOW + “0001”;加一
END IF;
END IF;
END PROCESS FENLOW;
LOGO_2 <= MIN_LOW(3)AND MIN_LOW(0);
MIN_01 <= MIN_LOW;分個位放8
FENHIGH:PROCESS(CY_MIN,RST)
BEGIN
IF(RST = '0')
THEN
MIN_HIGH <= “0101”;
ELSIF(CY_MIN'EVENT AND CY_MIN = '1')THEN檢測分進位上升沿
IF(LOGO_2 = '1')THEN
IF(MIN_HIGH = “0101”)THEN若分十位為5
MIN_HIGH <= “0000”;
CY_HOU <= '1';時進位為1
ELSE
MIN_HIGH <= MIN_HIGH + “0001”;加一
CY_HOU <= '0';
END IF;
END IF;
END IF;
END PROCESS FENHIGH;
MIN_1 <= MIN_HIGH;分十位放5
SHILOW:PROCESS(CY_HOU,RST,EN)
BEGIN
IF(RST = '0')
THEN
HOU_LOW <= “1001”;
ELSIF(CY_HOU'EVENT AND CY_HOU = '1'
AND EN = '1')THEN檢測時進位上升沿及數碼管使能端
IF(HOU_LOW = “1001”)THEN若時低位為9
HOU_LOW <= “0000”;
ELSIF(HOU_HIGH = “0010” AND HOU_LOW = “0011”)THEN若時十位為2,個位為3
HOU_LOW <= “0000”;
ELSE
HOU_LOW <= HOU_LOW + “0001”;加一
END IF;
END IF;
END PROCESS SHILOW;
LOGO_3 <= HOU_LOW(3)AND HOU_LOW(0);
HOU_01 <= HOU_LOW;時個位放3
SHIHIGH:PROCESS(CY_HOU,RST)
BEGIN
IF(RST = '0')
THEN
HOU_HIGH <= “0001”;
ELSIF(CY_HOU'EVENT AND CY_HOU = '1')THEN檢測時進位上升沿
IF(HOU_HIGH = “0010” AND HOU_LOW = “0011”)THEN若時十位為2,時個位為3
HOU_HIGH <= “0000”;
ELSIF(LOGO_3 = '1')THEN
HOU_HIGH <= HOU_HIGH + “0001”;加一
END IF;
END IF;
END PROCESS SHIHIGH;
BEE_CLOCK:PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK = '1')THEN檢測時鐘上升沿
IF(SEC_HIGH = “0101” AND SEC_LOW = “1001”
AND MIN_HIGH = “0101” AND MIN_LOW = “1001”)THEN
BEE <= '1';
ELSE
BEE <= '0';
END IF;
END IF;
END PROCESS BEE_CLOCK;
HOU_1 <= HOU_HIGH;時十位放2
END behovior;
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clock1 IS PORT(EN
:IN STD_LOGIC;
CLK
:IN STD_LOGIC;
RST
:IN STD_LOGIC;SEC_1
:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
SEC_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);MIN_1
:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
MIN_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HOU_1
:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
HOU_01 :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
BEE
:OUT STD_LOGIC);END clock1;
ARCHITECTURE behovior OF clock1 IS SIGNAL SEC_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL SEC_LOW
:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL MIN_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL MIN_LOW:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL HOU_HIGH:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL HOU_LOW
:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL CY_MIN
:STD_LOGIC;
SIGNAL CY_HOU
:STD_LOGIC;SIGNAL LOGO_1
:STD_LOGIC;
SIGNAL LOGO_2
:STD_LOGIC;
SIGNAL LOGO_3
:STD_LOGIC;
BEGIN MIAOLOW:PROCESS(CLK,RST,EN)
BEGIN
IF(RST = '0')
THEN
SEC_LOW <= “1000”;
ELSIF(CLK'EVENT AND CLK = '1' AND EN = '1')THEN
IF(SEC_LOW = “1001”)THEN
SEC_LOW <= “0000”;
ELSE
SEC_LOW <= SEC_LOW + “0001”;
END IF;
END IF;
END PROCESS MIAOLOW;
LOGO_1 <= SEC_LOW(3)AND SEC_LOW(0);
SEC_01<= SEC_LOW;
MIAOHIGH:PROCESS(CLK,RST)
BEGIN
IF(RST = '0')
THEN
SEC_HIGH <= “0101”;
ELSIF(CLK'EVENT AND CLK = '1')THEN
IF(LOGO_1 = '1')THEN
IF(SEC_HIGH = “0101”)THEN
SEC_HIGH <= “0000”;
CY_MIN <= '1';
ELSE
SEC_HIGH <= SEC_HIGH + “0001”;
CY_MIN <= '0';
END IF;
END IF;
END IF;
END PROCESS MIAOHIGH;
SEC_1 <= SEC_HIGH;FENLOW:PROCESS(CY_MIN,RST,EN)
BEGIN
IF(RST = '0')
THEN
MIN_LOW <= “1000”;
ELSIF(CY_MIN'EVENT AND CY_MIN = '1' AND EN = '1')THEN
IF(MIN_LOW = “1001”)THEN
MIN_LOW <= “0000”;
ELSE
MIN_LOW <= MIN_LOW + “0001”;
END IF;
END IF;
END PROCESS FENLOW;
LOGO_2 <= MIN_LOW(3)AND MIN_LOW(0);
MIN_01 <= MIN_LOW;
FENHIGH:PROCESS(CY_MIN,RST)
BEGIN
IF(RST = '0')
THEN
MIN_HIGH <= “0101”;
ELSIF(Cy_MIN'EVENT AND CY_MIN = '1')THEN
IF(LOGO_2 = '1')THEN
IF(MIN_HIGH = “0101”)THEN
MIN_HIGH <= “0000”;
CY_HOU <= '1';
ELSE
MIN_HIGH <= MIN_HIGH + “0001”;
CY_HOU <= '0';
END IF;
END IF;
END IF;
END PROCESS FENHIGH;
MIN_1 <= MIN_HIGH;SHILOW:PROCESS(CY_HOU,RST,EN)
BEGIN
IF(RST = '0')
THEN
HOU_LOW <= “1001”;
ELSIF(CY_HOU'EVENT AND CY_HOU = '1' AND EN = '1')THEN
IF(HOU_LOW = “1001”)THEN
HOU_LOW <= “0000”;
ELSIF(HOU_HIGH = “0010” AND HOU_LOW = “0011”)THEN
HOU_LOW <= “0000”;
ELSE
HOU_LOW <= HOU_LOW + “0001”;
END IF;
END IF;
END PROCESS SHILOW;
LOGO_3 <= HOU_LOW(3)AND HOU_LOW(0);
HOU_01 <= HOU_LOW;
SHIHIGH:PROCESS(Cy_HOU,RST)
BEGIN
IF(RST = '0')
THEN
HOU_HIGH <= “0001”;
ELSIF(CY_HOU'EVENT AND CY_HOU = '1')THEN
IF(HOU_HIGH = “0010” AND HOU_LOW = “0011”)THEN
HOU_HIGH <= “0000”;
ELSIF(LOGO_3 = '1')THEN
HOU_HIGH <= HOU_HIGH + “0001”;
END IF;
END IF;
END PROCESS SHIHIGH;
BEE_CLOCK:PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK = '1')THEN
IF(SEC_HIGH = “0101” AND SEC_LOW = “1001”
AND MIN_HIGH = “0101” AND MIN_LOW = “1001”)THEN
BEE <= '1';
ELSE
BEE <= '0';
END IF;
END IF;
END PROCESS BEE_CLOCK;
HOU_1 <= HOU_HIGH;
END behovior;