用VHDL語言實現(xiàn)數(shù)字電子鐘的設(shè)計(EDA課程設(shè)計報告含源程序)_第1頁
用VHDL語言實現(xiàn)數(shù)字電子鐘的設(shè)計(EDA課程設(shè)計報告含源程序)_第2頁
用VHDL語言實現(xiàn)數(shù)字電子鐘的設(shè)計(EDA課程設(shè)計報告含源程序)_第3頁
用VHDL語言實現(xiàn)數(shù)字電子鐘的設(shè)計(EDA課程設(shè)計報告含源程序)_第4頁
用VHDL語言實現(xiàn)數(shù)字電子鐘的設(shè)計(EDA課程設(shè)計報告含源程序)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課 程 設(shè) 計 報 告設(shè)計題目:用VHDL語言實現(xiàn)數(shù)字鐘的設(shè)計班 級:電子 0901學(xué) 號: XXXXXXXX姓 名:XXXXXXXXX 指導(dǎo)教師:XXXXXXXXX設(shè)計時間:2011年12月摘要現(xiàn)代電子設(shè)計技術(shù)的核心已轉(zhuǎn)向基于計算機的電子設(shè)計自動化技術(shù),即EDA(Electronic Design Automation)技術(shù)。EDA技術(shù)就是依賴計算機,在EDA工具軟件平臺上,對以硬件描述語言HDL(Hardware Description Language)為系統(tǒng)邏輯描述手段完成的設(shè)計文件,自動地完成邏輯編譯、化簡、分割、綜合、布局布線以及邏輯優(yōu)化和仿真測試,直至實現(xiàn)既定的電子線路系統(tǒng)功能。

2、EDA技術(shù)使得設(shè)計者的工作僅限于利用軟件的方式,即利用硬件描述語言和EDA軟件來完成對系統(tǒng)硬件功能的實現(xiàn)。硬件描述語言是EDA技術(shù)的重要組成部分,常見的HDL語言有VHDL、Verilog、HDL、ABLE、AHDL、System Verilog和System C。其中VHDL、Verilog在現(xiàn)在的EDA設(shè)計中使用最多,也擁有幾乎所有主流EDA工具的支持。VHDL語言具有很強的電路描述和建模能力,能從多個層次對數(shù)字系統(tǒng)進行建模和描述,從而大大簡化硬件設(shè)計任務(wù),提高了設(shè)計效率和可靠性。在這次設(shè)計中,主要使用VHDL語言輸入。此次設(shè)計很好地完成了數(shù)字鐘的定時、切換顯示年月日和時分秒的功能,完成了

3、小型FPGA的設(shè)計開發(fā),鍛煉了動手實踐能力,達到了課程設(shè)計的目的。關(guān)鍵詞:EDA技術(shù) 硬件描述語言 VHDL 設(shè)計 數(shù)字電子鐘目錄摘要21、課程設(shè)計目的42、課程設(shè)計內(nèi)容及要求42.1 設(shè)計內(nèi)容42.2 設(shè)計要求43、VHDL程序設(shè)計53.1 方案論證53.2 設(shè)計思路與方法63.2.1 設(shè)計思路 63.2.2 設(shè)計方法 74、仿真與分析75、器件編程下載及設(shè)計結(jié)果 96、課程設(shè)計總結(jié) 107、參考文獻 108、程序清單 118.1 頂層模塊 118.2 秒脈沖模塊 138.3 數(shù)碼管顯示模塊 148.4 時分秒模塊 158.4.1 分秒模塊168.4.2 小時模塊188.5 年月日模塊 19

4、8.5.1 日期模塊218.5.2 月份模塊248.5.3 年份模塊251、課程設(shè)計目的EDA技術(shù)課程設(shè)計在課程結(jié)束以后進行,在實踐中驗證理論知識,不僅是為了鞏固課堂上所學(xué)知識,更是為了加深我們對EDA技術(shù)和VHDL語言的理解;為了讓我們自己動手完成從設(shè)計輸入、邏輯綜合、功能仿真、設(shè)計實現(xiàn)到實現(xiàn)編程、時序仿真,一直到器件的下載測試的整個過程,真切感受利用EDA技術(shù)對FPGA進行設(shè)計開發(fā)的過程,鍛煉和提高我們對器件的編程調(diào)試能力。2、課程設(shè)計內(nèi)容及要求2.1 設(shè)計內(nèi)容(1)VHDL程序設(shè)計、輸入在ise平臺上用VHDL描述系統(tǒng)的功能(建立工程文件,添加VHDL文件,輸入源程序);(2)邏輯綜合將

5、源程序編譯調(diào)試無誤后,為設(shè)計系統(tǒng)選擇一個電路實現(xiàn)方案,按照這個方案進行邏輯綜合和優(yōu)化,生成1個電路網(wǎng)表文件;(3)功能仿真添加波形文件,設(shè)計輸入,觀察輸出,檢查自己的設(shè)計是否達到和完成要求的邏輯功能;(4)設(shè)計實現(xiàn)布局、布線及配置,最后生成可以寫到芯片中的目標(biāo)文件;(5)時序仿真是適配到選定的芯片后進行的仿真,它模擬芯片的實際動作,仿真時間模型嚴(yán)格將門級延時計算在內(nèi),可以分析出競爭與冒險,時序仿真驗證過的電路與實際電路基本上一致;(6)器件編程對器件編程下載目標(biāo)文件;(7)測試驗證設(shè)計項目在目標(biāo)系統(tǒng)上的實際工作情況,以便排除不完善的地方,改進設(shè)計。2.2 設(shè)計要求利用VHDL語言在EDA工具軟

6、件平臺上設(shè)計實現(xiàn)一個具有帶預(yù)置數(shù)的數(shù)字電子鐘,使其具有切換顯示年月日、時分秒的功能。顯示時,用6個數(shù)碼管顯示時分秒,set(設(shè)置)按鈕產(chǎn)生第一個脈沖時,顯示切換年月日,第2個脈沖到來時可預(yù)置年份,第3個脈沖到來時可預(yù)置月份,第4,個脈沖到來時可預(yù)置日期,依次第5、6、7個脈沖到來時分別可預(yù)置、時、分、秒,第 8個脈沖到來后預(yù)置結(jié)束,數(shù)字電子鐘正常工作,6個數(shù)碼管顯示的是時分秒。另外,up按鈕為高電平時,且此時upclk有脈沖到達時,當(dāng)前預(yù)置位加1;up按鈕為低高電平時,且此時upclk有脈沖到達時,當(dāng)前的預(yù)置位減1。還可以在此基礎(chǔ)上增加數(shù)字電子鐘的其它功能。3、VHDL程序設(shè)計3.1 方案論證

7、設(shè)計中使用的時元件例化和進程結(jié)合的方案。每個元件主要采用進程語句實現(xiàn),在每個進程主要使用了if_else、if_eslif_elsif_-_else 、case以及賦值語句,實現(xiàn)了模塊化設(shè)計,使得整個程序一目了然。整個電子鐘的頂層設(shè)計實體為clock(時鐘)模塊,其下又分為:second_wave(秒脈沖)、shi_fen_miao(時分秒)、nian_yue_ri(年月日)和led_disp(數(shù)碼管顯示)四個模塊,數(shù)字電子鐘結(jié)構(gòu)圖如圖1所示。其中,時分秒模塊下又分為3個小模塊shi(時)、fen(分)和miao(秒),如圖2所示;年月日模塊分為year(年)、month(月)和date(日期

8、)三個模塊,如圖3所示。經(jīng)過功能仿真和器件下載測試驗證知,使用此方案可以簡單快速的實現(xiàn)數(shù)字電子鐘的設(shè)計。圖1 數(shù)字電子鐘頂層實體clock模塊結(jié)構(gòu)圖圖2 數(shù)字電子鐘nian_yue_ri(年月日)模塊結(jié)構(gòu)圖圖3 數(shù)字電子鐘shi_fen_miao(時分秒)模塊結(jié)構(gòu)圖3.2 設(shè)計方法3.2.1 設(shè)計思路課程設(shè)計要求我們設(shè)計的數(shù)字電子鐘具有切換顯示年月日和時分秒的功能,且能根據(jù)set(設(shè)置)按鈕按動的次數(shù)進行相應(yīng)的切換顯示和年月日時分秒的預(yù)置,很容易想到led_disp(數(shù)碼管顯示)模塊,即對set脈沖進行計數(shù),然后根據(jù)計得的數(shù)值進行相應(yīng)的操作年月日時分秒的計時以及根據(jù)up和upclk的變化來進行

9、各個位的設(shè)置??梢园涯暝氯?、時分秒分別放在一個模塊,兩個模塊再分別劃分為年、月、日和時、分、秒模塊,各模塊間設(shè)置進位信號進行連接。3.2.2 設(shè)計方法按照設(shè)計內(nèi)容和要求以及所有的設(shè)計思路,綜合考慮后,采用元件例化和進程相結(jié)合的方法,設(shè)計模塊化的結(jié)構(gòu):頂層設(shè)計實體為clock(時鐘)模塊,其下又分為:second_wave(秒脈沖)、shi_fen_miao(時分秒)、nian_yue_ri(年月日)和led_disp(數(shù)碼管顯示)四個模塊。其中,時分秒模塊下又分為3個小模塊shi(時)、fen(分)和miao(秒);年月日模塊分為year(年)、month(月)和date(日期)三個模塊。每個

10、模塊主要使用VHDL語言輸入中常用的進程語句、元件例化語句、case語句、if語句以及賦值語句。需要注意的是,在年月日模塊中的日期模塊對于2月份要按照平年閏年的情況分別處理。4、仿真與分析圖4 頂層模塊圖clock功能仿真分析:圖4中,set脈沖來之前,顯示的是時分秒23:59:59;第一個set脈沖來之后切換顯示年月日11年01月28號;set第二個脈沖來:設(shè)置年份,up先高后低再高,在upclk上升沿來時,年份依次變?yōu)?1121312111213,;set第三個脈沖來:設(shè)置月份,up先高后低再高,upclk上升沿來時,年份依次變?yōu)?10201120102;等等,以此類推,最后設(shè)置成的數(shù)字鐘

11、顯示狀態(tài)為13年03月29號01點00分01秒,之后在clk時鐘輸入下開始正常計時顯示。由于程序中增加了1000分頻模塊,在仿真時間有限的情況下,看不出時分秒計時的增加。為了驗證所設(shè)計的能正常計時,又分別進行了年月日和時分秒模塊的功能仿真。圖5 nian_yue_ri(年月日)模塊功能仿真圖分析:初始化的年月日顯示為11年01月28號,在lock為0時,即正常顯示時,日期按照clk0的輸入正常增加,11年01月29號;lock為2時,即set的第2個脈沖來時,設(shè)置年份,up先高后低再高,在選擇的clk1的上升沿到時,年份變化為:1112131413131516;lock為3時,即set的第3個

12、脈沖來時,設(shè)置月份,根據(jù)up的變化以及clk1的輸入,月份依次變化為:01020304030405060706050403;以此類推,之后設(shè)置日期,最后設(shè)置完畢后,年月日為16年03月31號,在clk0上升沿來時,依次為16年04月01號16年04月2號16年04月03號。即,年月日模塊可以正常計時,能完成加減的預(yù)置功能。圖6 shi_fen_miao(時分秒)模塊功能仿真分析同年月日模塊。由圖可知,時分秒模塊也可以正常計時,能完成加減的預(yù)置功能。綜合分析圖4至圖6可知,按所選用方案所設(shè)計的電子鐘可以完成加減的預(yù)置、切換顯示和正常計時功能。5、器件編程下載及設(shè)計結(jié)果(一)管腳鎖定如圖7所示:圖

13、7 管腳鎖定圖(二)設(shè)計結(jié)果分析此次數(shù)字電子鐘設(shè)計中,使得數(shù)字電子鐘具有切換顯示年月日、時分秒的功能,并且能夠根據(jù)設(shè)置按鈕進行相應(yīng)的設(shè)置。設(shè)計過程中對clock模塊和shi_fen_miao模塊以及nian_yue_ri模塊進行了功能仿真,達到了預(yù)期效果。經(jīng)過器件編程下載驗證知,達到了設(shè)計所要求的切換顯示和設(shè)置功能,完成了設(shè)計要求。6、課程設(shè)計總結(jié)實際上,課程設(shè)計中嘗試了兩種設(shè)計方案,一種就是現(xiàn)在的元件例化與進程相結(jié)合的方法;另一種是多進程的方法,把各功能模塊使用進程語句全部包含在一個結(jié)構(gòu)體中,卻出現(xiàn)了預(yù)料之外的錯誤把各個進程拿出來放到新建的文件里調(diào)試,顯示無誤,都放在一起后卻總出現(xiàn)代號為41

14、5的綜合錯誤,先是在李世平老師的提點下改正了多個進程控制一個輸出端的錯誤,改正之后還是無法綜合成功,反復(fù)檢查多次仍發(fā)現(xiàn)無處下手之后決定轉(zhuǎn)為元件例化與進程結(jié)合的方案,采用模塊化鮮明的設(shè)計結(jié)構(gòu)。由于大多采用的是元件例化語句,只要保證各個模塊設(shè)計無誤,最后頂層設(shè)計中對各元件進行位置映射時夠細心基本上不出處錯誤。設(shè)計中覺得最難的模塊是date模塊,因為需考慮閏年和平年的情況下2月的天數(shù),以及大小月的天數(shù),if語句嵌套較多,失之毫厘謬以千里,一個不小心錯了一句時設(shè)計結(jié)果也就無處談及,所以更需加倍細心的處理各個if語句嵌套。課程設(shè)計中最大的收獲是獨立自主的完成了設(shè)計任務(wù),使得自己有一種成就感,增強了我對利

15、用VHDL語言進行FPGA設(shè)計開發(fā)的興趣,更鍛煉了我動手調(diào)試程序的能力,考驗了我在編寫程序時的細心和耐心程度。做過課程設(shè)計后的建議就是希望學(xué)院能把實驗設(shè)備規(guī)整好,讓下一屆的做課設(shè)時不再像我們一樣好幾個人同時等一個實驗箱。7、參考文獻(1)可編程邏輯器件與EDA技術(shù)李景華 杜玉遠 主編 東北大學(xué)出版社(2)EDA與VHDL(第二版) 潘松 黃繼業(yè) 編著 清華大學(xué)出版社(3)EDA技術(shù)劉江海 主編 華中科技大學(xué)出版社(4)EDA基礎(chǔ)與應(yīng)用(第1版) 于潤偉 編著 機械工業(yè)出版社8、程序清單8.1 頂層模塊:clocklibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;

16、use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity clock is port(clk: in std_logic; -時鐘輸入 set: in std_logic; -設(shè)置按鈕up: in std_logic; -增減控制端upclk: in std_logic; -預(yù)置時鐘輸入en: in std_logic;-使能端clr: in std_logic;-清零端q5:buffer std_logic_vector(3 downto 0);-輸出q4:buffer std_logic_vector(3 dow

17、nto 0);q3:buffer std_logic_vector(3 downto 0);q2:buffer std_logic_vector(3 downto 0);q1:buffer std_logic_vector(3 downto 0);q0:buffer std_logic_vector(3 downto 0);end clock;architecture Behav of clock iscomponent second_wave is -秒脈沖例化port(clk: in std_logic; second_wave: buffer std_logic);end compone

18、nt;component shi_fen_miao is-時分秒例化port(clk0: in std_logic;clk1: in std_logic;clr: in std_logic;en: in std_logic;up: in std_logic; lock: in std_logic_vector(2 downto 0); sec0: buffer std_logic_vector(3 downto 0);sec1: buffer std_logic_vector(3 downto 0);min0: buffer std_logic_vector(3 downto 0);min1:

19、 buffer std_logic_vector(3 downto 0);hour0:buffer std_logic_vector(3 downto 0);hour1:buffer std_logic_vector(3 downto 0);co: out std_logic);end component;component nian_yue_ri is-年月日例化port(clk0: in std_logic;clk1: in std_logic;clr: in std_logic;en: in std_logic;up: in std_logic; lock: in std_logic_v

20、ector(2 downto 0); date0:buffer std_logic_vector(3 downto 0);date1:buffer std_logic_vector(3 downto 0);month0:buffer std_logic_vector(3 downto 0);month1:buffer std_logic_vector(3 downto 0);year0:buffer std_logic_vector(3 downto 0);year1:buffer std_logic_vector(3 downto 0);end component;component led

21、_disp is-數(shù)碼管顯示例化Port(lock: in std_logic_vector(2 downto 0); sec0: in std_logic_vector(3 downto 0);sec1: in std_logic_vector(3 downto 0);min0: in std_logic_vector(3 downto 0);min1: in std_logic_vector(3 downto 0);hour0:in std_logic_vector(3 downto 0);hour1:in std_logic_vector(3 downto 0); date0:in st

22、d_logic_vector(3 downto 0);date1:in std_logic_vector(3 downto 0);month0:in std_logic_vector(3 downto 0);month1:in std_logic_vector(3 downto 0);year0: in std_logic_vector(3 downto 0);year1: in std_logic_vector(3 downto 0); q0:buffer std_logic_vector(3 downto 0);q1:buffer std_logic_vector(3 downto 0);

23、q2:buffer std_logic_vector(3 downto 0);q3:buffer std_logic_vector(3 downto 0);q4:buffer std_logic_vector(3 downto 0);q5 :buffer std_logic_vector(3 downto 0);end component;-各個連接信號定義-signal tlock:std_logic_vector(2 downto 0):=000;-lock賦初值,顯示時分秒signal tsecond_wave:std_logic;signal tcoday: std_logic;sig

24、nal sec0:std_logic_vector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal min0:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal hour0:std_logic_vector(3 downto 0);signal hour1:std_logic_vector(3 downto 0);signal date0:std_logic_vector(3 downto 0);signal date1:

25、std_logic_vector(3 downto 0);signal month0:std_logic_vector(3 downto 0);signal month1:std_logic_vector(3 downto 0);signal year0:std_logic_vector(3 downto 0);signal year1:std_logic_vector(3 downto 0);beginprocess(set)beginif(setevent and set=1)then-設(shè)置按鈕set 脈沖計數(shù) tlock=tlock+1;end if;end process; -對各元件

26、進行位置映射-u1:second_wave port map(clk,tsecond_wave);u2:shi_fen_miaoport map(tsecond_wave,upclk,clr,en,up,tlock, sec0,sec1,min0,min1,hour0,hour1,tcoday);u3:nian_yue_ri port map(tcoday,upclk,clr,en,up,tlock,date0, date1,month0,month1,year0,year1);u4:led_disp port map(tlock,sec0,sec1,min0,min1,hour0,hour1

27、,date0, date1,month0,month1,year0,year1,q0,q1,q2,q3,q4,q5);end Behav;8.2秒脈沖模塊second_wavelibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity second_wave isport(clk:in std_logic; second_wave:buffer std_logic);end second_wave;architecture Behavio

28、ral of second_wave issignal cnt:std_logic_vector(8 downto 0);beginprocess(clk,cnt)beginif(clkevent and clk=1)then-即對總時鐘進行分頻 if(cnt=)then cnt=;second_wave=not second_wave; else cnt=cnt+1; end if;end if;end process;end Behavioral;8.3顯示模塊led_disp:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LO

29、GIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity led_disp isPort(lock:in std_logic_vector(2 downto 0); sec0: in std_logic_vector(3 downto 0);sec1: in std_logic_vector(3 downto 0);min0: in std_logic_vector(3 downto 0);min1: in std_logic_vector(3 downto 0);hour0:in std_logic_vector(3 downto 0);hou

30、r1:in std_logic_vector(3 downto 0); date0:in std_logic_vector(3 downto 0);date1:in std_logic_vector(3 downto 0);month0:in std_logic_vector(3 downto 0);month1:in std_logic_vector(3 downto 0);year0: in std_logic_vector(3 downto 0);year1: in std_logic_vector(3 downto 0); q0:buffer std_logic_vector(3 do

31、wnto 0);q1:buffer std_logic_vector(3 downto 0);q2:buffer std_logic_vector(3 downto 0);q3:buffer std_logic_vector(3 downto 0);q4:buffer std_logic_vector(3 downto 0);q5: buffer std_logic_vector(3 downto 0);end led_disp; architecture Behavioral of led_disp isbeginprocess(lock,sec0,sec1,min0,min1,hour0,

32、hour1,date0,date1,month0,month1,year0,year1)begin if(lock=000)then-計數(shù),顯示時分秒 q0=sec0;q1=sec1;q2=min0;q3=min1;q4=hour0;q5=hour1; end if; if(lock=001)then-計數(shù),顯示年月日 q0=date0;q1=date1;q2=month0;q3=month1;q4=year0;q5=year1; end if; if(lock=010)then-預(yù)置年份 q0=1111;q1=1111;q2=1111;q3=1111;q4=year0;q5=year1; e

33、nd if; if(lock=011)then-預(yù)置月份 q0=1111;q1=1111;q2=month0;q3=month1;q4=1111;q5=1111; end if; if(lock=100)then-預(yù)置日期 q0=date0;q1=date1;q2=1111;q3=1111;q4=1111;q5=1111; end if; if(lock=101)then-預(yù)置小時 q0=1111;q1=1111;q2=1111;q3=1111;q4=hour0;q5=hour1; end if; if(lock=110)then-預(yù)置分鐘 q0=1111;q1=1111;q2=min0;q3

34、=min1;q4=1111;q5=1111; end if; if(lock=111)then-預(yù)置秒 q0=sec0;q1=sec1;q2=1111;q3=1111;q4=1111;q5=1111; end if;end process; end Behavioral;8.4時分秒模塊shi_fen_miaolibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity shi_fen_miao isport(clk0:in std_log

35、ic;clk1:in std_logic;clr: in std_logic;en: in std_logic;up: in std_logic; lock:in std_logic_vector(2 downto 0); co: out std_logic; sec0:buffer std_logic_vector(3 downto 0);sec1:buffer std_logic_vector(3 downto 0);min0:buffer std_logic_vector(3 downto 0);min1:buffer std_logic_vector(3 downto 0);hour0

36、:buffer std_logic_vector(3 downto 0);hour1:buffer std_logic_vector(3 downto 0);end shi_fen_miao;architecture Behavioral of shi_fen_miao issignal temp1: std_logic;signal temp2: std_logic;component fen_miao isport(clk0: in std_logic;clk1: in std_logic;clr: in std_logic;en: in std_logic;up: in std_logi

37、c;lock: in std_logic_vector(2 downto 0);a0: buffer std_logic_vector(3 downto 0);b0: buffer std_logic_vector(3 downto 0); co: out std_logic);end component;component shi isport(clk0,clk1,clr,en,up:in std_logic;lock:in std_logic_vector(2 downto 0); a1,b1:buffer std_logic_vector(3 downto 0);co:out std_l

38、ogic);end component;beginu1:fen_miao port map(clk0,clk1,clr,en,up,lock,sec0,sec1,temp1);u2:fen_miao port map(temp1,clk1,clr,en,up,lock,min0,min1,temp2);u3:shi port map(temp2,clk1,clr,en,up,lock,hour0,hour1,co);end Behavioral;8.4.1分秒模塊fen_miaolibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGI

39、C_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity fen_miao is Port ( lock: in std_logic_vector(2 downto 0); clk0: in std_logic; clk1: in std_logic; clr: in std_logic; en: in std_logic; up: in std_logic; co : out std_logic; a0 : buffer std_logic_vector(3 downto 0); b0 : buffer std_logic_vector(3 dow

40、nto 0);end fen_miao;architecture Behavioral of fen_miao issignal clk:std_logic;beginp0:process(lock,clk0,clk1)beginif(lock=000or lock=001)thenclk=clk0;else clk=clk1;end if;end process p0;p1:process(lock,clr,clk,en)beginif(clr=0) then a0=1001;b0=0101;co=0;elsif(clkevent and clk=1)then if en=1then if(

41、lock=000)or(lock=001)or(lock=110and up=1)or(lock=111and up=1)then if (b0=0101and a0=1001)then a0=0000;b0=0000;co=1; elsif (a0=1001) then a0=0000;b0=b0+1;co=0; else a0=a0+1;co=0; end if; elsif (lock=111and up=0) or(lock=110and up=1)then if(b0=0000and a0=0000)then a0=1001;b0=0101; elsif (a0=0000) then

42、 a0=1001;b0=b0-1;co=0; else a0=a0-1;co=0; end if; end if; end if;end if;end process p1;end Behavioral;8.4.2小時模塊shilibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity shi isPort(clk0:in std_logic;clk1: in std_logic; en: in std_logic;clr: in std

43、_logic;lock: in std_logic_vector(2 downto 0);up: in std_logic;a1 : buffer std_logic_vector(3 downto 0); b1 : buffer std_logic_vector(3 downto 0); co : out std_logic);end shi;architecture Behavioral of shi issignal clk:std_logic;beginchoose_clk:process(lock,clk0,clk1) -時鐘選擇beginif(lock=000or lock=001

44、)thenclk=clk0;else clk=clk1;end if;end process choose_clk;p1:process(lock,clk,clr,en)beginif(clr=0)then -清零端工作時,小時賦值為23點b1=0010;a1=0011;co=0;elsif(clkevent and clk=1)then if(en=1)then if(lock=000)or(lock=001)or(lock=101and up=1)then -輸出顯示時分秒、年月日或者進行加的小時設(shè)置時 if(a1=0011and b1=0010)then -23點時再來一個脈沖則清零,溢

45、出位置1a1=0000;b1=0000;co=1; elsif(a1=1001)then -不是23點時,個位為9時,個位清零;a1=0000;b1=b1+1;co=0;-十位加1 else a1=a1+1;co=0;-否則小時個位加1 end if; elsif(lock=101and up=0)then -減的設(shè)置 if(a1=0000and b1=0000)then a1=0011;b1=0010; elsif(a1=0000)then a1=1001;b1=b1-1; else a1=a1-1; end if; end if; end if;end if;end process p1;

46、end Behavioral;8.5年月日模塊nian_yue_rilibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity nian_yue_ri isport(clk0: in std_logic;clk1: in std_logic;clr: in std_logic;en: in std_logic;up: in std_logic; lock: in std_logic_vector(2 downto 0); date0:bu

47、ffer std_logic_vector(3 downto 0);date1:buffer std_logic_vector(3 downto 0);month0:buffer std_logic_vector(3 downto 0);month1:buffer std_logic_vector(3 downto 0);year0:buffer std_logic_vector(3 downto 0);year1:buffer std_logic_vector(3 downto 0);end nian_yue_ri;architecture Behavioral of nian_yue_ri

48、 issignal temp1,temp2: std_logic;component dateisport(clk0:in std_logic;clk1:in std_logic;clr: in std_logic;en: in std_logic;up: in std_logic;lock:in std_logic_vector(2 downto 0);month0:in std_logic_vector(3 downto 0);month1:in std_logic_vector(3 downto 0);year0:in std_logic_vector(3 downto 0);year1

49、:in std_logic_vector(3 downto 0);date0:buffer std_logic_vector(3 downto 0);date1:buffer std_logic_vector(3 downto 0);co:out std_logic);end component;component monthPort(clk0:in std_logic;clk1:in std_logic;clr:in std_logic;en:in std_logic;up:in std_logic; lock:in std_logic_vector(2 downto 0);a0 : buffer std_logic_vector(3 downto 0); b0 : buffer std_logic_vector(3 downto 0); co : out std_logic);end component;component year isPort(clk0:in std_logic;clk1:in std_logic;clr: in std_logic;en:

溫馨提示

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

評論

0/150

提交評論