【正文】
設(shè)計(jì)各個(gè)模塊的功能:1. second計(jì)時(shí)模塊:begin process(clks,sets,ss) begin if sets=39。集成電路軟件設(shè)計(jì)基于VHDL的數(shù)字電子鐘系統(tǒng)設(shè)計(jì)學(xué) 院 信息工程學(xué)院 班 級(jí) 電科1112 姓 名 閉應(yīng)明 學(xué) 號(hào) 2011850057 成 績 指導(dǎo)老師 衛(wèi)雅芬 2013 年 12 月 10 日49 / 52目錄一、摘要 1二、關(guān)鍵詞 1三、引言 1四、設(shè)計(jì)要求 1五、技術(shù)指標(biāo) 1六、設(shè)計(jì)思想 1七、設(shè)計(jì)原理 2八、設(shè)計(jì)方案 2九、設(shè)計(jì)各個(gè)模塊的功能 3十、各個(gè)模塊的波形仿真結(jié)果 1十一、各個(gè)電路模塊的DV綜合的網(wǎng)標(biāo)和電路模型.................................................12十二、設(shè)計(jì)結(jié)果分析 19十三、論文結(jié)論 20十四、參考文獻(xiàn) 20十五、附錄 21十六、致謝 50一、摘要: 本設(shè)計(jì)采用層次化設(shè)計(jì)方法,自頂向下進(jìn)行設(shè)計(jì)。每個(gè)模塊主要使用VHDL語言輸入中常用的進(jìn)程語句、元件例化語句、if語句以及賦值語句來編寫VHDL代碼。 end if。 clk2=39。end process。 clk2=39。 end if。 elsif ((monthin=4) or (monthin=6) or (monthin=9) or (monthin=11)) then if(qd=30) then qd=1。 clk3=39?!辟x初始值,這樣計(jì)數(shù)器就會(huì)從2012開始計(jì)數(shù)?!癶s”即為你要設(shè)置的時(shí)間,當(dāng)set=1時(shí) 就把“hs”上的值賦給“h”,然后“h”就從你設(shè)置的時(shí)間開始計(jì)時(shí),就實(shí)現(xiàn)了時(shí)間設(shè)置功能。自頂向下的設(shè)計(jì)思想在設(shè)計(jì)數(shù)字電子系統(tǒng)時(shí)非常實(shí)用,可以將較為復(fù)雜的問題化簡為一個(gè)個(gè)小問題,這樣設(shè)計(jì)人員的思路會(huì)變得很清晰。鬧鈴制定時(shí)間 sy: out integer range 0 to 59) 。039。architecture one of test issignal clks : std_logic:=39。 sa : in integer range 0 to 59。139。use 。 else qmn=mns。 then mnx=mna。 signal mna : integer :=30。 clk2 : out std_logic。039。 seth: in std_logic。event and clkh=39。qth=qh。 signal clk3 : std_logic。 end ponent。139。 作為判斷閏年信號(hào),定義最大年份到2099年 monthin:in integer range 1 to 12。139。 clk2=39。139。 end process。139。 yearin: in integer :=2013。 end process。ds=1。 my: out integer range 1 to 12) 。039。entity test is end test。139。 wait for clk_period/2。mts=0。 yx: out integer range 2013 to 2099。139。signal alarmy : std_logic:=39。 ya : in integer:=2013。139。use 。end alarm_clock。signal mn1a: integer:=30 。 s1a:in integer:=0 。 Begin DUT:alarm_clock port map(run,s1a,mn1a,h1a,d1a,m1a,y1a,s2a,mn2a,h2a,d2a,m2a,y2a,ring)。m1a=12。cmp2:processbeginmn2a=20。h1a=12。 ring: out std_logic:=39。039。use 。 d2a: in integer。wait。039。 sety : in std_logic:=39。architecture one of test issignal clky : std_logic:=39。 end if。 ya: in integer range 2013 to 2099。139。 end ponent。 signal mx : integer :=12。end yue。 clk4=39。 qtm1: out integer range 1 to 12。monthin=12。 wait for clk_period/2。 setd : in std_logic:=39。039。 end if。039。 clk2=39。 else qd=ds。entity day isport ( clkd: in std_logic。seth = 39。 qth : out integer:=0。139。139。then 高電平調(diào)制 if hs=0 then qh=qh 。 Hour模塊:library ieee。 Stimulus process stim_proc: process begin setmn=39。139。signal setmn : std_logic:=39。 end if。architecture fen of minute issignal qmn:integer range 0 to 59。 wait。039。 constant clk_period : time := 1ms。秒testbenchlibrary ieee。 clk1=39。鬧鈴預(yù)置時(shí)間參數(shù) ss: in integer range 0 to 59。在這整個(gè)設(shè)計(jì)過程中,當(dāng)每一步的設(shè)計(jì)提示錯(cuò)誤,在通過修改編譯正確后,都讓我感到一種成就感,讓我感到我在這個(gè)過程中,我學(xué)到了知識(shí),并且學(xué)會(huì)了應(yīng)用,比如進(jìn)一步加深了對(duì)VHDL代碼編寫的了解,讓我對(duì)它有了更加濃厚的興趣,鞏固了層次化的設(shè)計(jì)方法,從設(shè)計(jì)到模塊到具體的編程一步步走下去,最終在先前設(shè)計(jì)好的框架下完成了設(shè)計(jì)。then if hs=0 then qh=qh 。) then q=q+1。Month計(jì)時(shí)模塊:begin process(clk) beginif(clk39。 elsif qd28 then qd=qd+1。139。) then if ( yearin rem 4 =0) then if ((monthin=1) or (monthin=3) or (monthin=5) or (monthin=7) or (monthin=8) or (monthin=10) or (monthin=12)) then???? if(qd=31) then qd=1。 clk1=39。) then if(qmn=59) then qmn=0。 elsif qs59 then qs=qs+1。本次課題基于VHDL語言,并用采用自頂向下的設(shè)計(jì)思想,即層次化設(shè)計(jì)思想并使用例化語句編寫,很容易想到分模塊設(shè)計(jì),先寫second、minute、hour、day、month、year、clock模塊,然后將各個(gè)模塊用頂層模塊連接起來,再編寫testbench激勵(lì)信號(hào),然后仿真波形。目前.電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展,以硬件描述語言和邏輯綜合為基礎(chǔ)的自頂向下的電路設(shè)計(jì)方法在業(yè)界得到迅猛發(fā)展,VHDL在這種形勢(shì)下顯示出了巨大的優(yōu)勢(shì),展望將來VHDL在硬件設(shè)計(jì)領(lǐng)域的地位將與c語言和c++在軟件設(shè)計(jì)領(lǐng)域的地位一樣,在大規(guī)模數(shù)字系統(tǒng)的設(shè)計(jì)中,它將逐步取代傳統(tǒng)的邏輯狀態(tài)表和邏輯電路圖等硬件描述方法,而成為主要的硬件描述工具。 end if。139。Hour計(jì)時(shí)模塊:begin process(clk) beginif(clk39。139。139。 elsif qd31 then qd=qd+1。039。 end if。else ring=39。 鬧鈴提醒數(shù)字鐘計(jì)時(shí)校對(duì)鬧鐘總模塊:從下圖可以很清楚的看出數(shù)字鐘的計(jì)時(shí)校對(duì)鬧鐘這些基本功能已經(jīng)實(shí)現(xiàn)。 十四、參考文獻(xiàn):閻石, 數(shù)字電子技術(shù)基礎(chǔ)[M ]1 北京: 高等教育出版社,2000.潘松,王國棟,VHDL實(shí)用教程〔M〕.成都:電子科技大學(xué)出版社,2000.崔建明主編,電工電子EDA仿真技術(shù) 北京:高等教育出版社,2004十五、附錄:各個(gè)模塊的VHDL代碼、底層文件代VHDL碼及testbench代碼: Second 模塊library ieee。 then 調(diào)制時(shí)間使能信號(hào) if ss=0 then qs=qs。139。139。 sy : out integer range 0 to 59)。 alarms=39。 mna: in integer range 0 to 59。) then if(qmn=59) then qmn=0。end fen。 signal mny : integer :=0。 clk_process :process begin clkmn = 39。mna=0。輸出當(dāng)前小時(shí)時(shí)間 clk3: out std_logic 。 elsif qh23 then qh=qh+1。use 。139。 clkh = 39。wait for clk_period*100。 dx: out integer。 clk2=39。 end if。 elsif ((monthin=4) or (monthin=6) or (monthin=9) or (monthin=11)) then非閏年中月30天 if(qd=30) then qd=1。end process。 signal qtd : integer :=1。 clk2:out std_logic。039。Month模塊:library ieee。 then if mts=0 then qm=qm。139。signal alarmm : std_logic:=39。 ma : in integer:=12。stim_proc: processbegin setm=39。Years模塊:library ieee。139。qty2=qy。 signal qty2 : integer :=2013。 yy : out integer:=2013)。alarmy=39。 h1a: in integer range 0 to 23。時(shí)間比較一致(這里只設(shè)計(jì)時(shí)分作為鬧鐘,如果要設(shè)置年月日時(shí)分秒的鬧鐘,可以添加各個(gè)對(duì)應(yīng)時(shí)間的比較),提醒else ring=39。signal s2a: integer:=0 。 y1a: in integer:=2013 。run=2013。wait for clk_period*10。wait for clk_period*10。 end process。 mn2a:in integer:=20 。signal h2a: integer:=10 。end if。