【正文】
Day計(jì)時(shí)模塊:if setd=39。end process。 clk1=39。) then if(q=23) then q=0。當(dāng)需要設(shè)置時(shí)間時(shí),即setmn=‘1’,則把預(yù)定好的初值ss賦給中間信號(hào)qmn。 clk2=39。) then if(qmn=59) then qmn=0。 end if。 minute模塊begin process(clkmn,setmn,mns) begin if setmn=39。 end if。 elsif qs59 then qs=qs+1。139。 else qs=ss。每個(gè)模塊主要使用VHDL語(yǔ)言輸入中常用的進(jìn)程語(yǔ)句、元件例化語(yǔ)句、if語(yǔ)句以及賦值語(yǔ)句來編寫VHDL代碼。本次課題基于VHDL語(yǔ)言,并用采用自頂向下的設(shè)計(jì)思想,即層次化設(shè)計(jì)思想并使用例化語(yǔ)句編寫,很容易想到分模塊設(shè)計(jì),先寫second、minute、hour、day、month、year、clock模塊,然后將各個(gè)模塊用頂層模塊連接起來,再編寫testbench激勵(lì)信號(hào),然后仿真波形。使用本學(xué)期學(xué)習(xí)的設(shè)計(jì)語(yǔ)言VHDL和集成電路設(shè)計(jì)軟件實(shí)現(xiàn);最終以論文形式提交。二、關(guān)鍵詞: Modelsim VHDL 硬件描述語(yǔ)言 設(shè)計(jì) 數(shù)字鐘 三、引言: 硬件描述語(yǔ)言HDL(Hardware Description Language)是一種用形式化方法來描述數(shù)字電路和系統(tǒng)的語(yǔ)言。集成電路軟件設(shè)計(jì)基于VHDL的數(shù)字電子鐘系統(tǒng)設(shè)計(jì)學(xué) 院 信息工程學(xué)院 班 級(jí) 電科1112 姓 名 閉應(yīng)明 學(xué) 號(hào) 2011850057 成 績(jī) 指導(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ì)。目前.電子系統(tǒng)向集成化、大規(guī)模和高速度等方向發(fā)展,以硬件描述語(yǔ)言和邏輯綜合為基礎(chǔ)的自頂向下的電路設(shè)計(jì)方法在業(yè)界得到迅猛發(fā)展,VHDL在這種形勢(shì)下顯示出了巨大的優(yōu)勢(shì),展望將來VHDL在硬件設(shè)計(jì)領(lǐng)域的地位將與c語(yǔ)言和c++在軟件設(shè)計(jì)領(lǐng)域的地位一樣,在大規(guī)模數(shù)字系統(tǒng)的設(shè)計(jì)中,它將逐步取代傳統(tǒng)的邏輯狀態(tài)表和邏輯電路圖等硬件描述方法,而成為主要的硬件描述工具。五、技術(shù)指標(biāo):設(shè)計(jì)數(shù)字電子鐘的基本功能有:年、月、日、時(shí)、分、秒,其中,月日為陽(yáng)歷顯示,時(shí)為24小時(shí)制顯示;可隨時(shí)進(jìn)行時(shí)間校對(duì)(60分);閏年提醒(10分)、支持鬧鈴功能(10分);陽(yáng)歷轉(zhuǎn)陰歷與陰歷顯示(20分)??梢酝ㄟ^比較的方法設(shè)計(jì)鬧鈴及利用“set”控制信號(hào)設(shè)計(jì)時(shí)鐘校對(duì)。 設(shè)計(jì)方案 圖1 設(shè)計(jì)各個(gè)模塊的功能:1. second計(jì)時(shí)模塊:begin process(clks,sets,ss) begin if sets=39。 end if。) then if(qs=59) then qs=0。 clk1=39。end process。139。elsif(clkmn39。 clk2=39。039。Hour計(jì)時(shí)模塊:begin process(clk) beginif(clk39。clk1=39。039。當(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。139。 elsif (clkd39。 clk2=39。039。139。 end if。 elsif qd30 then qd=qd+1。 end if。 elsif qd31 then qd=qd+1。 elsif monthin=2 then if(qd=28) then qd=1。 clk2=39。 clk2=39。039。 當(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。event and clk=39。139。 end if。Years計(jì)時(shí)模塊:begin process(clk) beginif(clk39。 end if。Alarm_clock鬧鐘比較模塊:beginprocess(s2a,mn2a,h2a,d2a,m2a,y2a,s1a,mn1a,h1a,d1a,m1a,y1a ,run)beginif ( run rem 4 =0 ) then ring=39。else ring=39。 定義13個(gè)輸入信號(hào)和一個(gè)輸出信號(hào)ring用于當(dāng)前時(shí)間與鬧鈴時(shí)間進(jìn)行比較,如果是閏年信號(hào)run就輸出ring=1,否則剩余的信號(hào)兩兩相等,則ring=1,既滿足了鬧鈴功能,也滿足了閏年提醒的功能。 else qh=hs。(以上只是各個(gè)模塊的一小段VHDL程序,詳細(xì)的程序請(qǐng)看附錄。 鬧鈴提醒數(shù)字鐘計(jì)時(shí)校對(duì)鬧鐘總模塊:從下圖可以很清楚的看出數(shù)字鐘的計(jì)時(shí)校對(duì)鬧鐘這些基本功能已經(jīng)實(shí)現(xiàn)。十三、論文結(jié)論: 這次設(shè)計(jì),讓我遇到了許多的問題,同時(shí)也加深了我對(duì)集成電路軟件應(yīng)用的了解和掌握,在設(shè)計(jì)這個(gè)程序的過程中,讓我最感到困難的是編寫好一個(gè)程序后,如何修改編譯提示的錯(cuò)誤,尤其是當(dāng)我設(shè)計(jì)day模塊時(shí),對(duì)應(yīng)不同年份,不同的月份,需要分多種情況,所以在這設(shè)計(jì)過程中用到了很多if語(yǔ)句,當(dāng)編譯時(shí)總會(huì)提示出有錯(cuò)誤,后來經(jīng)過不斷編譯不斷修改提示錯(cuò)誤后最終完成了day模塊的設(shè)計(jì)。其次,本次設(shè)計(jì)中我更加深入的掌握了VHDL程序設(shè)計(jì)語(yǔ)言,了解到很多語(yǔ)法只能用在仿真設(shè)計(jì)并不能綜合成實(shí)際的電路。為了確保整個(gè)系統(tǒng)的正確運(yùn)行,每個(gè)底層的實(shí)體在寫好之后我都把它們進(jìn)行了仿真,確保仿真結(jié)果正確性。 十四、參考文獻(xiàn):閻石, 數(shù)字電子技術(shù)基礎(chǔ)[M ]1 北京: 高等教育出版社,2000.潘松,王國(guó)棟,VHDL實(shí)用教程〔M〕.成都:電子科技大學(xué)出版社,2000.崔建明主編,電工電子EDA仿真技術(shù) 北京:高等教育出版社,2004十五、附錄:各個(gè)模塊的VHDL代碼、底層文件代VHDL碼及testbench代碼: Second 模塊library ieee。 sets: in std_logic。隨時(shí)設(shè)置時(shí)間參數(shù) qts: out integer range 0 to 59。 輸出當(dāng)前時(shí)間(作為與制定鬧鈴時(shí)間比較)end second。 then 調(diào)制時(shí)間使能信號(hào) if ss=0 then qs=qs。event and clks=39。139。秒計(jì)數(shù) end if。139。qts=qs。use 。139。139。 signal clk1 : std_logic。 ponent second port( clks : in std_logic。 ss : in integer range 0 to 59。 sy : out integer range 0 to 59)。139。 wait for clk_period/2。 wait for clk_period*10。 alarms=39。 wait。 end process。use 。 mna: in integer range 0 to 59。 mnx: out integer range 0 to 59 。begin process(clkmn,setmn,mns) begin if setmn=39。 end if。) then if(qmn=59) then qmn=0。 clk2=39。end process。end if。end fen。entity test is end test。039。 signal mns : integer :=12。 signal mny : integer :=0。 setmn : in std_logic:=39。 mna : in integer:=0。 mnx : out integer:=0。 clk_process :process begin clkmn = 39。039。139。wait for clk_period*100。mna=0。wait。use 。小時(shí)調(diào)制時(shí)間信號(hào) alarmh: in std_logic。輸出當(dāng)前小時(shí)時(shí)間 clk3: out std_logic 。architecture shi of hour issignal qh:integer range 0 to 23。 else qh=hs。139。 elsif qh23 then qh=qh+1。 end if。 then hx=ha。 hy=qh。use 。signal seth : std_logic:=39。 signal ha : integer :=12。 signal hx : integer :=0。139。139。 clk3 : out std_logic。 begin DUT :hour port map(clkh,seth,alarmh,ha,hs,qth,clk3,hx,hy)。 clkh = 39。 Stimulus process stim_proc: process begin seth=39。039。wait for clk_period*100。wait for clk_period*100。 Day模塊:library ieee。 setd: in std_logic。 作為判斷月份信號(hào) da: in integer。 dx: out integer。begin process(clkd,setd,ds,yearin,monthin) begin if setd=39。 end if。) then if ( yearin rem 4 =0) then 當(dāng)前為閏年 if ((monthin=1) or (monthin=3) or (monthin=5) or (monthin=7) or (monthin=8) or (monthin=10) or (monthin=12)) then當(dāng)前為大月31天 if(qd=31) then qd=1。 clk2=39。 clk2=39。039。139。 end if。139。 end if。 elsif qd28 then qd=qd+1。 elsif ((monthin=4) or (monthin=6) or (monthin=9) or (monthin=11)) then非閏年中月30天 if(qd=30) then qd=1。 clk2=39。 end if。 process(alarmd,da)beg