【正文】
閏年,ring=1,會(huì)提醒。(以上只是各個(gè)模塊的一小段VHDL程序,詳細(xì)的程序請看附錄。 end if。 else qh=hs。139。 定義13個(gè)輸入信號(hào)和一個(gè)輸出信號(hào)ring用于當(dāng)前時(shí)間與鬧鈴時(shí)間進(jìn)行比較,如果是閏年信號(hào)run就輸出ring=1,否則剩余的信號(hào)兩兩相等,則ring=1,既滿足了鬧鈴功能,也滿足了閏年提醒的功能。end if。else ring=39。elsif (s1a=s2a and mn1a=mn2a and h1a=h2a and d1a=d2a and m1a=m2a and y1a=y2a) then ring=39。Alarm_clock鬧鐘比較模塊:beginprocess(s2a,mn2a,h2a,d2a,m2a,y2a,s1a,mn1a,h1a,d1a,m1a,y1a ,run)beginif ( run rem 4 =0 ) then ring=39。當(dāng)上一個(gè)模塊的控制信號(hào)來臨時(shí),year模塊開始從0計(jì)數(shù)并一直計(jì)數(shù)下去,由于要求初始時(shí)間為2012,我們可以利用“signal q:integer:=2012。 end if。139。Years計(jì)時(shí)模塊:begin process(clk) beginif(clk39。end process。 end if。 clk3=39。139。) then if(q=12) then q=1。event and clk=39。如果要設(shè)置初值,則令setd=‘1’,然后再設(shè)置想要數(shù)值ds。 當(dāng)上一個(gè)模塊的時(shí)鐘信號(hào)來臨時(shí),如果是閏年,并且是1月,day模塊開始則從1計(jì)數(shù)到31,而如果是2月,則day模塊開始計(jì)時(shí)從1計(jì)數(shù)到29,如果其他月份時(shí),則計(jì)數(shù)從1到30,之后并輸出一個(gè)控制信號(hào)clk2控制month模塊,此時(shí)clk2=1 ,計(jì)數(shù)到最大值時(shí)都會(huì)回到1然后循環(huán)計(jì)數(shù),此時(shí)clk2=0。 end if。039。 elsif qd30 then qd=qd+1。 clk2=39。 end if。 clk2=39。139。 elsif monthin=2 then if(qd=28) then qd=1。039。 elsif qd31 then qd=qd+1。 clk2=39。 end if。039。 elsif qd30 then qd=qd+1。 clk2=39。 end if。 clk2=39。139。 elsif (monthin=2) then if(qd=29) then qd=1。039。 elsif qd31 then qd=qd+1。 clk2=39。139。 elsif (clkd39。 else qd=ds。139。”賦初始值,這樣計(jì)數(shù)器就會(huì)從14開始計(jì)數(shù)。當(dāng)clk上升沿來臨時(shí),hour模塊開始從0計(jì)數(shù)到23,并輸出一個(gè)控制信號(hào)clk1控制day模塊,此時(shí)clk1=1 ,并回到0然后循環(huán)計(jì)數(shù),此時(shí)clk1=0。end if。039。 elsif q23 then q=q+1。clk1=39。139。Hour計(jì)時(shí)模塊:begin process(clk) beginif(clk39。 當(dāng)clk上升沿來臨時(shí),minute模塊開始從0計(jì)數(shù)到59,并輸出一個(gè)控制信號(hào)clk1控制minute模塊,此時(shí)clk1=1 ,并回到0然后循環(huán)計(jì)數(shù),此時(shí)clk1=0。039。 elsif qmn59 then qmn=qmn+1。 clk2=39。139。elsif(clkmn39。 else qmn=mns。139。當(dāng)需要設(shè)置時(shí)間時(shí),即sets=‘1’,則把預(yù)定好的初值ss賦給輸出信號(hào)qs。end process。 end if。 clk1=39。139。) then if(qs=59) then qs=0。event and clks=39。 end if。 then if ss=0 then qs=qs。 設(shè)計(jì)方案 圖1 設(shè)計(jì)各個(gè)模塊的功能:1. second計(jì)時(shí)模塊:begin process(clks,sets,ss) begin if sets=39。按照設(shè)計(jì)內(nèi)容和要求以及所有的設(shè)計(jì)思路與原理,綜合考慮后,采用例化語句方法,設(shè)計(jì)模塊化的結(jié)構(gòu):頂層設(shè)計(jì)實(shí)體為electronic_clock(數(shù)字鐘)模塊,其下又分為:years(年)、month(月)、day(日)、hour(時(shí))、minute(分)、second(秒)、alarm_clock(鬧鐘)7個(gè)模塊??梢酝ㄟ^比較的方法設(shè)計(jì)鬧鈴及利用“set”控制信號(hào)設(shè)計(jì)時(shí)鐘校對。六、設(shè)計(jì)思想: 這次課題論文要求設(shè)計(jì)顯示年月日時(shí)分秒、陽歷轉(zhuǎn)陰歷的數(shù)字電子鐘,且能可隨時(shí)進(jìn)行時(shí)間校對和支持鬧鈴功能以及閏年提醒功能。五、技術(shù)指標(biāo):設(shè)計(jì)數(shù)字電子鐘的基本功能有:年、月、日、時(shí)、分、秒,其中,月日為陽歷顯示,時(shí)為24小時(shí)制顯示;可隨時(shí)進(jìn)行時(shí)間校對(60分);閏年提醒(10分)、支持鬧鈴功能(10分);陽歷轉(zhuǎn)陰歷與陰歷顯示(20分)。其代碼具有良好的可讀性和易理解性,源程序經(jīng)Altera公司的ModelSimSE 6.1軟件完成綜合、仿真,四、設(shè)計(jì)要求:采用自頂向下的設(shè)計(jì)思想。目前.電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展,以硬件描述語言和邏輯綜合為基礎(chǔ)的自頂向下的電路設(shè)計(jì)方法在業(yè)界得到迅猛發(fā)展,VHDL在這種形勢下顯示出了巨大的優(yōu)勢,展望將來VHDL在硬件設(shè)計(jì)領(lǐng)域的地位將與c語言和c++在軟件設(shè)計(jì)領(lǐng)域的地位一樣,在大規(guī)模數(shù)字系統(tǒng)的設(shè)計(jì)中,它將逐步取代傳統(tǒng)的邏輯狀態(tài)表和邏輯電路圖等硬件描述方法,而成為主要的硬件描述工具。突出了其作為硬件描述語言的良好的可讀性、可移植性和易理解等優(yōu)點(diǎn),并通過ModelSim SE 、仿真。集成電路軟件設(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ì)。設(shè)計(jì)中根據(jù)系統(tǒng)的功能要求合理劃分出層次,進(jìn)行分級(jí)設(shè)計(jì)和仿真驗(yàn)證,將較為復(fù)雜的數(shù)字系統(tǒng)邏輯簡化為基本的模型從而降低實(shí)現(xiàn)的難度。二、關(guān)鍵詞: Modelsim VHDL 硬件描述語言 設(shè)計(jì) 數(shù)字鐘 三、引言: 硬件描述語言HDL(Hardware Description Language)是一種用形式化方法來描述數(shù)字電路和系統(tǒng)的語言。本文提出了以VHDL語言為手段,設(shè)計(jì)了多功能數(shù)字鐘。使用本學(xué)期學(xué)習(xí)的設(shè)計(jì)語言VHDL和集成電路設(shè)計(jì)軟件實(shí)現(xiàn);最終以論文形式提交。備注:用硬件描述語言VHDL設(shè)計(jì)系統(tǒng),用Modelsim軟件仿真,用Design piler軟件或Synplify軟件綜合成電路網(wǎng)表。本次課題基于VHDL語言,并用采用自頂向下的設(shè)計(jì)思想,即層次化設(shè)計(jì)思想并使用例化語句編寫,很容易想到分模塊設(shè)計(jì),先寫second、minute、hour、day、month、year、clock模塊,然后將各個(gè)模塊用頂層模塊連接起來,再編寫testbench激勵(lì)信號(hào),然后仿真波形。七、設(shè)計(jì)原理: 本次實(shí)驗(yàn)的電子數(shù)字鐘的設(shè)計(jì)采用異步計(jì)時(shí)的方式,即各個(gè)時(shí)間模塊每一個(gè)輪回后,輸出一個(gè)高電平作為緊接下一個(gè)的時(shí)間模塊的時(shí)鐘信號(hào);校正設(shè)置時(shí)間是通過set端控制,即如果為高電平時(shí),就把預(yù)定好的時(shí)間參數(shù)(sset、mnset、hset、dset、mset、yset)作為要設(shè)置的時(shí)間,同時(shí)也通過此辦法來校正時(shí)間的參數(shù);鬧鈴時(shí)間控制是通過alarm端控制,即作為高電平時(shí),把預(yù)定好的時(shí)間參數(shù)(salarm、mnalarm、halarm、dalarm、malarm、yalarm)作為鬧鈴的時(shí)間參數(shù)預(yù)制;鬧鈴功能實(shí)現(xiàn)是通過一個(gè)比較器,即當(dāng)前的電子鐘時(shí)間和預(yù)定的時(shí)間是否一致,如果一致,鬧鈴ring輸出‘1’,否則為‘0’,同時(shí)也可以作為閏年的提醒功能。每個(gè)模塊主要使用VHDL語言輸入中常用的進(jìn)程語句、元件例化語句、if語句以及賦值語句來編寫VHDL代碼。139。 else qs=ss。elsif(clks39。139。 clk1=39。 elsif qs59 then qs=qs+1。039。 end if。當(dāng)clk上升沿來臨時(shí),second模塊開始從0計(jì)數(shù)到59,并輸出一個(gè)控制信號(hào)clk1控制minute模塊,此時(shí)clk1=1 ,并回到0然后循環(huán)計(jì)數(shù),此時(shí)clk1=0。 minute模塊begin process(clkmn,setmn,mns) begin if setmn=39。 then if mns=0 then qmn=qmn。 end if。event and clkmn=39。) then if(qmn=59) then qmn=0。139。 clk2=39。 end if。當(dāng)需要設(shè)置時(shí)間時(shí),即setmn=‘1’,則把預(yù)定好的初值ss賦給中間信號(hào)qmn。event and clk=39。) then if(q=23) then q=0。139。 clk1=39。 end if。end process。由于要求初始時(shí)間為14,我們可以利用“signal q:integer:=14。 Day計(jì)時(shí)模塊:if setd=39。 then if ds=0 then qd=qd。 end if。event and clkd=39。) 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。139。 clk2=39。 end if。 clk2=39。 elsif qd29 then qd=qd+1。039。 elsif ((monthin=4) or (monthin=6) or (monthin=9) or (monthin=11)) then if(qd=30) then qd=1。139。 clk2=39。 end if。 elsif ((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。139。 clk2=39。 end if。 clk2=39。 elsif qd28 then qd=qd+1。039。 elsif ((monthin=4) or (monthin=6) or (monthin=9) or (monthin=11)) then if(qd=30) then qd=1。139。 clk2=39。 end if。 end if。如果是非閏年,并且是1月,day模塊