第一篇:燕山大學(xué)EDA課程設(shè)計(jì)數(shù)字跑表
一、設(shè)計(jì)題目及要求 設(shè)計(jì)題目:數(shù)字跑表
要求:1 具有暫停,啟動(dòng)功能;
具有重新開始功能; 用六個(gè)數(shù)碼管分別顯示百分秒,秒和分鐘。
二、設(shè)計(jì)過程及內(nèi)容 總體設(shè)計(jì):
第一,對(duì)于要實(shí)現(xiàn)的暫停、啟動(dòng)和重新開始功能,需要有一個(gè)控制模塊完成相關(guān)控制。第二由題意可知需要一個(gè)分頻模塊,將實(shí)驗(yàn)箱提供的頻率轉(zhuǎn)換為100HZ即數(shù)字跑表百分秒的頻率。第三是計(jì)時(shí)模塊,完成跑表的百分秒、秒和分鐘的計(jì)時(shí)功能。第四由于實(shí)驗(yàn)箱提供的數(shù)碼顯示是掃描顯示,這就需要一個(gè)選時(shí)模塊。第五部分則是顯示模塊。詳細(xì)設(shè)計(jì)過程:
根據(jù)要求,將設(shè)計(jì)分成五個(gè)模塊:
1、控制模塊:使跑表具有啟動(dòng)、暫停及重新開始的功能;
2、分頻模塊:將實(shí)驗(yàn)箱所提供的頻率轉(zhuǎn)換為設(shè)計(jì)題目所需要的100HZ的時(shí)鐘脈沖;
3、計(jì)時(shí)模塊:進(jìn)行百分秒、秒、分的計(jì)時(shí),并且將當(dāng)前時(shí)間輸出給選時(shí)模塊;
4、選時(shí)模塊:從計(jì)時(shí)器得到當(dāng)前時(shí)間輸出給顯示模塊;
5、顯示模塊:通過數(shù)碼管顯示時(shí)間。
總圖如下:
仿真波形:
第一個(gè)模塊:控制模塊
控制模塊主要運(yùn)用了兩個(gè)D觸發(fā)器,輸入到觸發(fā)器的時(shí)鐘信號(hào)CLK1頻率為2.86Hz,對(duì)電路起到了防抖的功能。
START/STOP為啟動(dòng)暫停按鈕,當(dāng)跑表為START狀態(tài)時(shí)CLK端為高電平,Q為1,時(shí)鐘信號(hào)輸出,當(dāng)跑表為STOP狀態(tài)時(shí)CLK端為低電平,Q為0,時(shí)鐘信號(hào)不輸出,從而實(shí)現(xiàn)開始和暫停的功能。與門可控制時(shí)鐘信號(hào)是否被輸出到下一級(jí)。
RESET端為全局清零按鈕,接到控制模塊和計(jì)時(shí)模塊的清零端,負(fù)責(zé)將計(jì)數(shù)器清零。當(dāng)RESET為低電平時(shí),控制模塊和總計(jì)數(shù)器模塊清零,跑表重新開始工作。電路圖如下:
仿真波形:
第二個(gè)模塊:分頻模塊
為了將實(shí)驗(yàn)箱提供的1465HZ轉(zhuǎn)換成實(shí)驗(yàn)需要的100HZ,我將74161接成15進(jìn)制計(jì)數(shù)器,實(shí)現(xiàn)分頻的功能,轉(zhuǎn)換為100HZ的近似時(shí)鐘信號(hào)。然后將輸出的時(shí)鐘接入到計(jì)時(shí)模塊。電路圖如下: 3
仿真波形:
第三個(gè)模塊:計(jì)時(shí)模塊
計(jì)時(shí)模塊由一個(gè)100進(jìn)制計(jì)數(shù)器和兩個(gè)60進(jìn)制計(jì)數(shù)器構(gòu)成,從而實(shí)現(xiàn)百分秒向秒、秒向分的計(jì)數(shù)功能需求。100進(jìn)制計(jì)數(shù)器和60進(jìn)制計(jì)數(shù)器均采用兩個(gè)74160,100進(jìn)制采用并行進(jìn)位方式,60進(jìn)制采用整體置數(shù)方式。從100進(jìn)制計(jì)數(shù)器和60進(jìn)制計(jì)數(shù)器這三個(gè)輸出端分別接出八個(gè)端口(百分秒、秒、分的個(gè)位及十位分別由四個(gè)二進(jìn)制代碼表示),將當(dāng)前時(shí)間代碼輸送給選時(shí)模塊,以實(shí)現(xiàn)時(shí)間的選擇和顯示。(百分秒個(gè)位:H0A,H0B,H0C,H0D;百分秒十位:H1A,H1B,H1C,H1D;秒個(gè)位:S0A,S0B,S0C,S0D;秒十位:S1A,S1B,S1C,S1D;分個(gè)位:M0A,M0B,M0C,M0D;分十位:M1A,M1B,M1C,M1D.)電路圖如下:
仿真波形:
100進(jìn)制計(jì)數(shù)器(count100): 仿真波形:
60進(jìn)制計(jì)數(shù)器(count60):
仿真波形:
第四個(gè)模塊:選時(shí)模塊
選時(shí)模塊由四個(gè)八選一數(shù)據(jù)選擇器74LS151和一個(gè)地址選擇器74LS161構(gòu)成。
地址選擇器74LS161接入一個(gè)1465 HZ的時(shí)鐘信號(hào),使能端和清零端接高電平,使其循環(huán)工作,產(chǎn)生的一組循環(huán)地址碼接入到四個(gè)八選一數(shù)據(jù)選擇器74LS151上,使其對(duì)地址相同的一組數(shù)據(jù)進(jìn)行選擇,產(chǎn)生四個(gè)二進(jìn)制數(shù)CA,CB,CC,CD,即為數(shù)碼管所要顯示的數(shù)字的編碼。同時(shí),地址選擇器74LS161產(chǎn)生一組循環(huán)地址碼a、b、c,接到數(shù)碼管的地址端,使其循環(huán)顯示數(shù)字。
第一個(gè)74LS151上的輸入端為百分秒、秒、分個(gè)位及十位的四位二進(jìn)制的最低位(H0A, H1A ,S0A,S1A, M0A, M1A), 第二個(gè)74LS151上的輸入端為百分秒、秒、分個(gè)位及十位的四位二進(jìn)制的次低位(H0B,H1B ,S0B,S1B,M0B,M1B), 第三個(gè)74LS151上的輸入端為百分秒、秒、分個(gè)位及十位的四位二進(jìn)制的第二位(H0C,H1C ,S0C,S1C,M0C,M1C), 第四個(gè)74LS151上的輸入端為百分秒、秒、分個(gè)位及十位的四位二進(jìn)制的第一位(H0D,H1D ,S0D,S1D,M0D,M1D),通過這四個(gè)八位二進(jìn)制數(shù)比較器74LS151選出同一組數(shù)(百分秒個(gè)位:H0A,H0B,H0C,H0D;百分秒十位:H1A,H1B,H1C,H1D;秒個(gè)位:S0A,S0B,S0C,S0D;秒十位:S1A,S1B,S1C,S1D;分個(gè)位:M0A,M0B,M0C,M0D;分十位:M1A,M1B,M1C,M1D)作為輸出CA,CB,CC,CD,接到顯示模塊輸入端。電路圖如下:
仿真波形:
第五個(gè)模塊:顯示模塊
顯示模塊采用BCD—七段顯示譯碼器7448對(duì)實(shí)驗(yàn)板上數(shù)碼管進(jìn)行驅(qū) 動(dòng)。由選時(shí)模塊輸出的顯示數(shù)字編碼CA,CB,CC,CD接至輸入端A,B,C,D,使輸出端產(chǎn)生七位譯碼連接到實(shí)驗(yàn)箱公共數(shù)據(jù)輸入端ABCDEDG,從而顯示出數(shù)據(jù)。電路圖如下:
仿真波形:
三、設(shè)計(jì)結(jié)論
兩周的課程設(shè)計(jì)很快就結(jié)束了,雖然時(shí)間很短,但是收獲頗豐。通過這次課程設(shè)計(jì),我學(xué)到了許多關(guān)于EDA的知識(shí),學(xué)習(xí)到了很多EDA的實(shí)用功能,更重要的是鍛煉了我的實(shí)踐動(dòng)手能力,使我深刻地認(rèn)識(shí)到僅僅學(xué)習(xí)課本上的知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,要多思考,多實(shí)踐,才能真正把學(xué)到的知識(shí)用到實(shí)際中,而且我也深刻認(rèn)識(shí)到通信專業(yè)在各個(gè)領(lǐng)域是多么有用武之地,更加使我有了學(xué)習(xí)深造的動(dòng)力。
在設(shè)計(jì)的過程中遇到諸多問題,一個(gè)接一個(gè),總結(jié)下來還是軟件沒有學(xué)深刻,出了問題也不知道如何排查,波形圖一直找不到自己想看到的,后來經(jīng)過問同學(xué)和自己的總結(jié)才知道這個(gè)仿真的時(shí)間要足夠長,才能看到自己所需要的部分。讓我知道做一件事之前的準(zhǔn)備工作是多么重要,同時(shí)在設(shè)計(jì)的過程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過的知識(shí)理解得不夠深刻,掌握得不夠牢固。遇到問題才去翻書查資料,這些都是我以后要改進(jìn)的地方。
這次的EDA課程設(shè)計(jì)給了我一次非常重要也非常難得的實(shí)踐機(jī)會(huì),使我可以將平時(shí)課本上學(xué)習(xí)的理論知識(shí)應(yīng)用于實(shí)際操作。設(shè)計(jì)過程多于我這個(gè)專業(yè)知識(shí)還不牢固的很困難,先前兩天看了課本學(xué)習(xí)了軟件,每個(gè)子模塊和波形圖出來的都比較順利,但當(dāng)做到總圖的時(shí)候遇到了很多困難,經(jīng)過詢問老師后也都解決了。實(shí)驗(yàn)箱的部分比較順利,由于粗心連錯(cuò)了線,頻率也沒選對(duì),總之過程很艱難,但最終還是做出來了。最后感謝老師給與我這次寶貴的實(shí)踐機(jī)會(huì)!
第二篇:數(shù)字電路EDA課程設(shè)計(jì)數(shù)字跑表
EDA課程設(shè)計(jì)報(bào)告書
題目: 數(shù)字跑表
姓名: 班級(jí): 學(xué)號(hào): 成績:
一、設(shè)計(jì)題目及要求 設(shè)計(jì)題目:數(shù)字跑表
要求:1 具有暫停,啟動(dòng)功能。
具有重新開始功能。用六個(gè)數(shù)碼管分別顯示百分秒,秒和分鐘。
二、設(shè)計(jì)過程及內(nèi)容
拿到題目后,我在圖書館進(jìn)行了相關(guān)書籍的查閱,首先明確了題目中設(shè)計(jì)項(xiàng)目要實(shí)現(xiàn)的功能,再進(jìn)一步確定實(shí)現(xiàn)其功能的組成部分和使用器件,對(duì)于本次設(shè)計(jì)的總體思路,首先是設(shè)計(jì)一個(gè)控制模塊,可以使跑表具有啟動(dòng)、暫停及重新開始的功能;然后,利用一個(gè)分頻模塊即15進(jìn)制計(jì)數(shù)器得到100HZ的時(shí)鐘脈沖,接入到一個(gè)100*60*60三個(gè)計(jì)數(shù)器的模塊中,完成對(duì)時(shí)間的計(jì)時(shí)工作和對(duì)選時(shí)模塊的輸出工作,使選時(shí)模塊得到對(duì)應(yīng)的時(shí)間,其次將選時(shí)模塊與顯示模塊連接,使數(shù)碼管顯示選中的當(dāng)前時(shí)間,從而完成了這次課程設(shè)計(jì)的設(shè)計(jì)工作,進(jìn)入到實(shí)現(xiàn)過程中去。
根據(jù)課程設(shè)計(jì)要求將設(shè)計(jì)分為5個(gè)模塊:
1、控制模塊,使跑表具有啟動(dòng)、暫停及重新開始的功能;
2、分頻模塊,用于得到頻率為100HZ的時(shí)鐘脈沖;
3、計(jì)時(shí)模塊,進(jìn)行時(shí)間的計(jì)時(shí),同時(shí)將當(dāng)前時(shí)間輸出給選時(shí)模塊;
4、選時(shí)模塊,從計(jì)時(shí)器得到當(dāng)前時(shí)間輸出給顯示模塊;
5、顯示模塊,進(jìn)行時(shí)間的顯示??倛D如下: 第一個(gè)模塊:控制器模塊
與門可控制時(shí)鐘信號(hào)的輸出與否,當(dāng)跑表為START狀態(tài)時(shí)CLK端為高電平,QA為1,時(shí)鐘信號(hào)輸出,當(dāng)跑表為STOP狀態(tài)時(shí)CLK端為低電平,QA為0,時(shí)鐘信號(hào)不輸出,從而實(shí)現(xiàn)開始和暫停的功能。REST是清零按鈕,REST接到控制模塊和總計(jì)時(shí)器模塊的清零端,當(dāng)REST為高電平時(shí),控制模塊和總計(jì)數(shù)器模塊清零,跑表重新開始工作。
第二個(gè)模塊:分頻器模塊
將74161接成15進(jìn)制計(jì)數(shù)器,將1465HZ的時(shí)鐘頻率轉(zhuǎn)換成近似于100HZ的時(shí)鐘信號(hào)即所需的輸入時(shí)鐘信號(hào),從而實(shí)現(xiàn)分頻功能。將得到的時(shí)鐘信號(hào)輸入到總計(jì)數(shù)器模塊中去。第三個(gè)模塊:計(jì)時(shí)模塊
計(jì)時(shí)模塊
本模塊由兩個(gè)60進(jìn)制計(jì)數(shù)器和一個(gè)100進(jìn)制計(jì)數(shù)器構(gòu)成,從而實(shí)現(xiàn)百分秒向秒、秒向分的計(jì)數(shù)功能需求。60進(jìn)制計(jì)數(shù)器及100進(jìn)制計(jì)數(shù)器均采用兩個(gè)74LS160,采用整體置數(shù)方式接成。從60進(jìn)制計(jì)數(shù)器和100進(jìn)制計(jì)數(shù)器這三個(gè)輸出端分別印出八個(gè)端口(秒、分、時(shí)的個(gè)位及十位分別由四個(gè)二進(jìn)制代碼表示),將當(dāng)前時(shí)間編碼傳送給選時(shí)模塊,實(shí)現(xiàn)時(shí)間的選擇和顯示。(秒個(gè)位:S0A,S0B,S0C,S0D;秒十位:S1A,S1B,S1C,S1D;分個(gè)位:M0A,M0B,M0C,M0D;分十位:M1A,M1B,M1C,M1D;百分秒個(gè)位:H0A,H0B,H0C,H0D;百分秒十位:H1A,H1B,H1C,H1D.)
100進(jìn)制計(jì)數(shù)器
60進(jìn)制計(jì)數(shù)器
第四個(gè)模塊:選時(shí)模塊
本模塊由四個(gè)八選一數(shù)據(jù)選擇器74LS151和地址選擇器74LS161構(gòu)成。
地址選擇器74LS161接入一個(gè)1465 HZ的時(shí)鐘信號(hào),使能端和清零端接高電平,使其循環(huán)工作,產(chǎn)生一組循環(huán)地址碼A、B、C,接到數(shù)碼管的地址端,使其循環(huán)顯示數(shù)字。同時(shí),地址選擇器74LS161產(chǎn)生的一組循環(huán)地址碼接入到四個(gè)八選一數(shù)據(jù)選擇器74LS151上,使其對(duì)地址相同的一組數(shù)據(jù)進(jìn)行選擇,產(chǎn)生四個(gè)二進(jìn)制數(shù)A0,A1,A2,A3,即為數(shù)碼管所要顯示的數(shù)字的編碼。
第一個(gè)74LS151上的輸入端為秒、分、百分秒個(gè)位及十位的四位二進(jìn)制的最低位(S0A,S1A, M0A, M1A, H0A, H1A), 第二個(gè)74LS151上的輸入端為秒、分、百分秒個(gè)位及十位的四位二進(jìn)制的次低位(S0B,S1B,M0B,M1B,H0B,H1B), 第三個(gè)74LS151上的輸入端為秒、分、百分秒個(gè)位及十位的四位二進(jìn)制的第二位(S0C,S1C,M0C,M1C,H0C,H1C), 第四個(gè)74LS151上的輸入端為秒、分、百分秒個(gè)位及十位的四位二進(jìn)制的第一位(S0D,S1D,M0D,M1D,H0D,H1D),通過這四個(gè)八位二進(jìn)制數(shù)比較器74LS151選出同一組數(shù)(秒個(gè)位:S0A,S0B,S0C,S0D;秒十位:S1A,S1B,S1C,S1D;分個(gè)位:M0A,M0B,M0C,M0D;分十位:M1A,M1B,M1C,M1D;百分秒個(gè)位:H0A,H0B,H0C,H0D;百分秒十位:H1A,H1B,H1C,H1D.)作為輸出A0,A1,A2,A3,接到顯示模塊輸入端。
選時(shí)模塊
第五個(gè)模塊:顯示模塊
本模塊采用BCD—七段顯示譯碼器7448對(duì)實(shí)驗(yàn)板上數(shù)碼管進(jìn)行驅(qū)動(dòng)。由選時(shí)模塊輸出的顯示數(shù)字編碼A0,A1,A2,A3接至輸入端A,B,C,D,使輸出端產(chǎn)生七位譯碼連接到實(shí)驗(yàn)箱公共數(shù)據(jù)輸入端ABCDEDG,從而進(jìn)行數(shù)據(jù)的顯示。
顯示模塊
三、設(shè)計(jì)結(jié)論
兩周的課程設(shè)計(jì)很快就結(jié)束了,雖然時(shí)間很短,但是收獲頗豐。通過這次課程設(shè)計(jì),我學(xué)到了許多關(guān)于EDA的知識(shí),認(rèn)識(shí)到了EDA的強(qiáng)大功能,更重要的是增強(qiáng)了我的實(shí)踐動(dòng)手能力,使我深刻地認(rèn)識(shí)到僅僅學(xué)習(xí)課本上的知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,必須要多多動(dòng)手,多多實(shí)踐,才能真正理解并掌握所學(xué)的知識(shí),達(dá)到學(xué)以致用的目的。同時(shí)我也深深地感受到嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)于科學(xué)研究的重要性。由于在設(shè)計(jì)的過程中,一點(diǎn)點(diǎn)的馬虎都可能造成整個(gè)系統(tǒng)的癱瘓,所以每一個(gè)細(xì)節(jié)都要認(rèn)真思考,認(rèn)真操作,不能有絲 百分的大意。這使我認(rèn)識(shí)到要想做一個(gè)科研工作者是多么的不易!自己身上的缺點(diǎn)還有很多,要靠以后艱苦的努力來克服!
這次的EDA課程設(shè)計(jì)給了我一次非常重要也非常難得的實(shí)踐機(jī)會(huì),使我可以將平時(shí)課本上學(xué)習(xí)的理論知識(shí)應(yīng)用于實(shí)際操作。設(shè)計(jì)的過程是十分艱苦的,由于從未接觸過類似的領(lǐng)域,所以剛開始的時(shí)候一片茫然,不知道該干些什么。隨著研究的逐漸深入,自己漸漸的摸出頭緒,掌握了一些規(guī)律和方法,設(shè)計(jì)的成果也逐步成型,最終按照要求完成了設(shè)計(jì)。在實(shí)際操作的過程中,碰到了許多的困難,但最終在老師的耐心指導(dǎo)和同學(xué)的熱情幫助下,按時(shí)完成了任務(wù)。在此對(duì)老師和同學(xué)們表示衷心的感謝!
最后感謝老師給與我這次寶貴的實(shí)踐機(jī)會(huì)!
第三篇:燕山大學(xué)EDA課程設(shè)計(jì)電子日歷
燕 山 大 學(xué) EDA課程設(shè)計(jì)報(bào)告書
姓名: 班級(jí): 學(xué)號(hào): 日期:
一、設(shè)計(jì)題目:電子日歷
二、設(shè)計(jì)要求
1.能顯示年、月、日、星期,如01.11.08 6,星期日顯示8 2.年、月、日、星期可調(diào) 3.不考慮閏年
三、設(shè)計(jì)思路
為實(shí)現(xiàn)本電路要求,采取模塊電路設(shè)計(jì)方法。本電路系統(tǒng)主要 包括以下三大模塊:
1.計(jì)數(shù)模塊 2.控制模塊 3.譯碼器顯示模塊
四、設(shè)計(jì)過程
1.計(jì)數(shù)模塊 1)星期計(jì)數(shù)模塊
由于星期日要顯示8,一般芯片難以實(shí)現(xiàn),可通過四個(gè)JKFF觸發(fā)器設(shè)計(jì)而成。電路圖如下:
波形仿真圖如下:
2)天計(jì)數(shù)模塊
通過兩個(gè)74160芯片作計(jì)數(shù)電路和DFF作去毛刺電路設(shè)計(jì)而成,若沒有去毛刺電路,在硬件仿真時(shí),月計(jì)數(shù)會(huì)出現(xiàn)連續(xù)計(jì)兩次的情況。由于不同月份有不同天數(shù)(31、30、28),故需要三個(gè)輸入端(C31、C30、C28)選擇計(jì)數(shù)的進(jìn)制,同一時(shí)刻只能有一個(gè)有效(輸入高電平)。電路圖如下:
C30端有效時(shí)的波形仿真圖如下:
3)月計(jì)數(shù)模塊
通過兩個(gè)74160芯片設(shè)計(jì)而成,電路圖如下:
波形仿真圖如下:
4)月計(jì)數(shù)對(duì)天計(jì)數(shù)的反饋模塊
通過畫真值表列出邏輯表達(dá)式,從而設(shè)計(jì)出如下電路:
波形仿真圖如下:
5)年計(jì)數(shù)模塊
通過兩個(gè)74160芯片設(shè)計(jì)而成,為了實(shí)現(xiàn)可調(diào),將年個(gè)位對(duì)十位的進(jìn)位輸出端C先到控制模塊上。電路圖如下:
波形仿真圖如下:
2.控制模塊
時(shí)鐘脈沖經(jīng)CP端輸入,K、Kweek、Kday、Kmonth、Kyear1、Kyear2為手動(dòng)控制端。K端輸入高電平時(shí)為調(diào)節(jié)狀態(tài),輸入低電平時(shí)為自動(dòng)計(jì)數(shù)狀態(tài)。電路圖如下:
3.譯碼器顯示模塊
該模塊由一個(gè)74160芯片、四個(gè)數(shù)據(jù)選擇74151和譯碼驅(qū)動(dòng)器7449組成。電路圖如下:
4.總圖
連接控制模塊和計(jì)數(shù)模塊。電路圖如下:
該部分波形仿真圖如下:
在其中可以發(fā)現(xiàn),月比天滯后1.5個(gè)時(shí)鐘周期(其中1個(gè)時(shí)鐘周期是由于天計(jì)數(shù)模塊的去毛刺電路產(chǎn)生的),年個(gè)位比月滯后0.5個(gè)時(shí)鐘周期,年十位比年個(gè)位滯后0.5個(gè)時(shí)鐘周期。由于時(shí)間有限,知識(shí)經(jīng)驗(yàn)不足等限制,在答辯前仍未解決該問題。
再連接譯碼器顯示模塊。電路圖如下:
接通電源時(shí),K端要先輸入高電平,把月調(diào)到非0,才能在K端輸入低電平后正常計(jì)數(shù)。
五、總結(jié)
第四篇:EDA課程設(shè)計(jì)——數(shù)字時(shí)鐘
Hefei University
EDA課程綜述
論文題目: EDA課程綜述
專 業(yè): 09通信(2)班
姓 名: 唐吉祥
學(xué) 號(hào): 0905072035 指導(dǎo)老師: 查長軍
前
言
隨著基于PLD的EDA技術(shù)的發(fā)展和應(yīng)用領(lǐng)域的擴(kuò)大和深入,EDA技術(shù)在電子信息、通信、自動(dòng)控制及計(jì)算機(jī)應(yīng)用領(lǐng)域的重要性日益提高。
作為現(xiàn)在的大學(xué)生應(yīng)熟練掌握這門技術(shù),為以后的發(fā)展打下良好的基礎(chǔ),本實(shí)驗(yàn)設(shè)計(jì)是應(yīng)用QuartusII環(huán)境及VHDL語言設(shè)計(jì)一個(gè)時(shí)間可調(diào)的數(shù)字時(shí)鐘。使自己熟練使用QuartusII環(huán)境來進(jìn)行設(shè)計(jì),掌握VHDL語言的設(shè)計(jì)方法。要注重理論與實(shí)踐之間的不同,培養(yǎng)自己的實(shí)踐能力!
目錄
一、課程設(shè)計(jì)任務(wù)及要求............................................................................................3
1.1實(shí)驗(yàn)?zāi)康?.........................................................................................................3 1.2功能設(shè)計(jì)..........................................................................................................3
二、整體設(shè)計(jì)思想........................................................................................................3
2.1性能指標(biāo)及功能設(shè)計(jì)......................................................................................3 2.2總體方框圖......................................................................................................4
三、詳細(xì)設(shè)計(jì)................................................................................................................4
3.1數(shù)字鐘的基本工作原理:..............................................................................4
3.1.1時(shí)基T 產(chǎn)生電路..................................................................................4 3.1.2調(diào)時(shí)、調(diào)分信號(hào)的產(chǎn)生......................................................................4 3.1.3計(jì)數(shù)顯示電路.......................................................................................5 3.2設(shè)計(jì)思路..........................................................................................................5 3.3設(shè)計(jì)步驟..........................................................................................................6
3.3.1工程建立及存盤...................................................................................6 3.3.2工程項(xiàng)目的編譯...................................................................................7 3.3.3目標(biāo)芯片的選擇...................................................................................7 3.3.4時(shí)序仿真...............................................................................................8 3.3.5引腳鎖定.............................................................................................10 3.3.6硬件測試.............................................................................................11 3.3.7實(shí)驗(yàn)結(jié)果.............................................................................................11
四、設(shè)計(jì)總結(jié)..............................................................................................................12
五、附錄......................................................................................................................12
5.1 VHDL源程序..................................................................................................12 5.2配置符號(hào)圖....................................................................................................17
一、課程設(shè)計(jì)任務(wù)及要求
1.1實(shí)驗(yàn)?zāi)康?/p>
1)掌握VHDL語言的基本運(yùn)用
2)掌握QuartusII的簡單操作并會(huì)使用EDA實(shí)驗(yàn)箱 3)掌握一個(gè)基本EDA課程設(shè)計(jì)的操作
1.2功能設(shè)計(jì)
1)有時(shí)、分、秒計(jì)數(shù)顯示功能,小時(shí)為24進(jìn)制,分鐘和秒為60進(jìn)制以24小時(shí)循環(huán)計(jì)時(shí)
2)設(shè)置復(fù)位、清零等功能
3)有校時(shí)功能,可以分別對(duì)時(shí)及分進(jìn)行單獨(dú)校時(shí),使其校正到標(biāo)準(zhǔn)時(shí)間 4)時(shí)鐘計(jì)數(shù)顯示時(shí)有LED燈顯示
二、整體設(shè)計(jì)思想
2.1性能指標(biāo)及功能設(shè)計(jì)
1)時(shí)、分、秒計(jì)時(shí)器
時(shí)計(jì)時(shí)器為一個(gè)24進(jìn)制計(jì)數(shù)器,分、秒計(jì)時(shí)器均為60進(jìn)制計(jì)數(shù)器。當(dāng)秒計(jì)時(shí)器接受到一個(gè)秒脈沖時(shí),秒計(jì)數(shù)器開始從1計(jì)數(shù)到60,此時(shí)秒顯示器將顯示00、01、02、...、59、00;每當(dāng)秒計(jì)數(shù)器數(shù)到00時(shí),就會(huì)產(chǎn)生一個(gè)脈沖輸出送至分計(jì)時(shí)器,此時(shí)分計(jì)數(shù)器數(shù)值在原有基礎(chǔ)上加1,其顯示器將顯示00、01、02、...、59、00;每當(dāng)分計(jì)數(shù)器數(shù)到00時(shí),就會(huì)產(chǎn)生一個(gè)脈沖輸出送至?xí)r計(jì)時(shí)器,此時(shí)時(shí)計(jì)數(shù)器數(shù)值在原有基礎(chǔ)上加1,其顯示器將顯示00、01、02、...、23、00。即當(dāng)數(shù)字鐘運(yùn)行到23點(diǎn)59分59秒時(shí),當(dāng)秒計(jì)時(shí)器在接受一個(gè)秒脈沖,數(shù)字鐘將自動(dòng)顯示00點(diǎn)00分00秒。2)校時(shí)電路
當(dāng)開關(guān)撥至校時(shí)檔時(shí),電子鐘秒計(jì)時(shí)工作,通過時(shí)、分校時(shí)開關(guān)分別對(duì)時(shí)、分進(jìn)行校對(duì),開關(guān)每按1次,與開關(guān)對(duì)應(yīng)的時(shí)或分計(jì)數(shù)器加1,當(dāng)調(diào)至需要的時(shí)與分時(shí),撥動(dòng)reset開關(guān),電子鐘從設(shè)置的時(shí)間開始往后計(jì)時(shí)。2.2總體方框圖
三、詳細(xì)設(shè)計(jì)
3.1數(shù)字鐘的基本工作原理:
3.1.1時(shí)基T 產(chǎn)生電路
數(shù)字鐘以其顯示時(shí)間的直觀性、走時(shí)準(zhǔn)確性作為一種計(jì)時(shí)工具,數(shù)字鐘的基本組成部分離不開計(jì)數(shù)器,在控制邏輯電路的控制下完成預(yù)定的各項(xiàng)功能。
由晶振產(chǎn)生的頻率非常穩(wěn)定的脈沖,經(jīng)整形、穩(wěn)定電路后,產(chǎn)生一個(gè)頻率為1Hz的、非常穩(wěn)定的計(jì)數(shù)時(shí)鐘脈沖。
3.1.2調(diào)時(shí)、調(diào)分信號(hào)的產(chǎn)生
由計(jì)數(shù)器的計(jì)數(shù)過程可知,正常計(jì)數(shù)時(shí),當(dāng)秒計(jì)數(shù)器(60進(jìn)制)計(jì)數(shù)到59 時(shí),再來一個(gè)脈沖,則秒計(jì)數(shù)器清零,重新開始新一輪的計(jì)數(shù),而進(jìn)位則作為分計(jì)數(shù)器的計(jì)數(shù)脈沖,使分計(jì)數(shù)器計(jì)數(shù)加1?,F(xiàn)在我們把電路稍做變動(dòng):把秒計(jì)數(shù)器的進(jìn)位脈沖和一個(gè)頻率為2Hz的脈沖信號(hào)同時(shí)接到一個(gè)2選1數(shù)據(jù)選擇器的兩個(gè)數(shù)據(jù)輸入端,而位選信號(hào)則接一個(gè)脈沖按鍵開關(guān),當(dāng)按鍵開關(guān)不按下去時(shí)(即為0),則數(shù)據(jù)選擇器將秒計(jì)數(shù)器的進(jìn)位脈沖送到分計(jì)數(shù)器,此時(shí),數(shù)字鐘正常工作;當(dāng)按鍵開關(guān)按下去時(shí)(即為1),則數(shù)據(jù)選擇器將另外一個(gè)2Hz 的信號(hào)作為分計(jì)數(shù) 器的計(jì)數(shù)脈沖,使其計(jì)數(shù)頻率加快,當(dāng)達(dá)到正確時(shí)間時(shí),松開按鍵開關(guān),從而達(dá)到調(diào)時(shí)的目的。調(diào)節(jié)小時(shí)的時(shí)間也一樣的實(shí)現(xiàn)。
3.1.3計(jì)數(shù)顯示電路
由計(jì)數(shù)部分、數(shù)據(jù)選擇器、譯碼器組成,是時(shí)鐘的關(guān)鍵部分。
1、計(jì)數(shù)部分:由兩個(gè)60進(jìn)制計(jì)數(shù)器和一個(gè)24 進(jìn)制計(jì)數(shù)器組成,其中60 進(jìn)制計(jì)數(shù)器可用6 進(jìn)制計(jì)數(shù)器和10 進(jìn)制計(jì)數(shù)器構(gòu)成;24 進(jìn)制的小時(shí)計(jì)數(shù)同樣可用6 進(jìn)制計(jì)數(shù)器和10 進(jìn)制計(jì)數(shù)器得到:當(dāng)計(jì)數(shù)器計(jì)數(shù)到24 時(shí),“2”和“4”同時(shí)進(jìn)行清零,則可實(shí)現(xiàn)24 進(jìn)制計(jì)數(shù)。
2、數(shù)據(jù)選擇器:84 輸入14 輸出的多路數(shù)據(jù)選擇器,因?yàn)楸緦?shí)驗(yàn)用到了8個(gè)數(shù)碼管(有兩個(gè)用來產(chǎn)生隔離符號(hào)‘—’)。
3、譯碼器:七段譯碼器。譯碼器必須能譯出‘—’,由實(shí)驗(yàn)二中譯碼器真值表可得:字母F 的8421BCD 碼為“1111”,譯碼后為“1000111”,現(xiàn)在如果只譯出‘—’,即字母F的中間一橫,則譯碼后應(yīng)為“0000001”,這樣,在數(shù)碼管上顯示的就為‘—’。
3.2設(shè)計(jì)思路
根據(jù)系統(tǒng)設(shè)計(jì)要求,系統(tǒng)設(shè)計(jì)采用自頂向下設(shè)計(jì)方法,由時(shí)鐘分頻部分、計(jì)時(shí)部分、按鍵部分調(diào)時(shí)部分和顯示部分五個(gè)部分組成。這些模塊都放在一個(gè)頂層文件中。
1)時(shí)鐘計(jì)數(shù):
首先下載程序進(jìn)行復(fù)位清零操作,電子鐘從00:00:00計(jì)時(shí)開始。sethour可以調(diào)整時(shí)鐘的小時(shí)部分, setmin可以調(diào)整分鐘,步進(jìn)為1。
由于電子鐘的最小計(jì)時(shí)單位是1s,因此提供給系統(tǒng)的內(nèi)部的時(shí)鐘頻率應(yīng)該大于1Hz,這里取100Hz。CLK端連接外部10Hz的時(shí)鐘輸入信號(hào)clk。對(duì)clk進(jìn)行計(jì)數(shù),當(dāng)clk=10時(shí),秒加1,當(dāng)秒加到60時(shí),分加1;當(dāng)分加到60時(shí),時(shí)加1;當(dāng)時(shí)加到24時(shí),全部清0,從新計(jì)時(shí)。
用6位數(shù)碼管分別顯示“時(shí)”、“分”、“秒”,通過OUTPUT(6 DOWNTO 0)上的信號(hào)來點(diǎn)亮指定的LED七段顯示數(shù)碼管。
2)時(shí)間設(shè)置:
手動(dòng)調(diào)節(jié)分鐘、小時(shí),可以對(duì)所設(shè)計(jì)的時(shí)鐘任意調(diào)時(shí)間,這樣使數(shù)字鐘真正具有使用功能。我們可以通過實(shí)驗(yàn)板上的鍵7和鍵4進(jìn)行任意的調(diào)整,因?yàn)槲覀冇玫臅r(shí)鐘信號(hào)均是1HZ的,所以每LED燈變化一次就來一個(gè)脈沖,即計(jì)數(shù)一次。3)清零功能: reset為復(fù)位鍵,低電平時(shí)實(shí)現(xiàn)清零功能,高電平時(shí)正常計(jì)數(shù)??梢愿鶕?jù)我們自己任意時(shí)間的復(fù)位。
3.3設(shè)計(jì)步驟
3.3.1工程建立及存盤
1.打開 QuartusⅡ,單擊“File”菜單,選擇 File→New Project Wizard,對(duì)話框如下:分別輸入項(xiàng)目的工作路徑、項(xiàng)目名和實(shí)體名,單擊Finish。
2.單擊“File”菜單,選擇New,彈出小對(duì)話框,雙擊“VHDL File“,即選中了文本編輯方式。在出現(xiàn)的“Vhdl1.vhd”文本編輯窗中鍵入VHDL程序,輸入完畢后,選擇File→Save As,即出現(xiàn)“Save As”對(duì)話框。選擇自己建立好的存放本文件的目錄,然后在文件名框中鍵入文件名,按“Save”按鈕。
3.建立工程項(xiàng)目,在保存VHDL文件時(shí)會(huì)彈出是否建立項(xiàng)目的小窗口,點(diǎn)擊“Yes”確定。即出現(xiàn)建立工程項(xiàng)目的導(dǎo)航窗口,點(diǎn)擊“Next”,最后在出現(xiàn)的屏幕中分別鍵入新項(xiàng)目的工作路徑、項(xiàng)目名和實(shí)體名。注意,原理圖輸入設(shè)計(jì)方法中,存盤的原理圖文件名可以是任意的,但VHDL程序文本存盤的文件名必須與文件的實(shí)體名一致,輸入后,單擊“Finish”按鈕。3.3.2工程項(xiàng)目的編譯
單擊工具條上的編譯符號(hào)開始編譯,并隨著進(jìn)度不斷變化屏幕,編譯完成后的屏幕如圖所示:
3.3.3目標(biāo)芯片的選擇
選擇菜單 Assignments 選項(xiàng)的下拉菜單中選擇器件 Device ?,如圖所示: 在彈出的對(duì)話框中的 Family(器件序列欄)對(duì)應(yīng)的序列名,EP1C3 對(duì)應(yīng)的是 Cyclone 系列。在 Available Devices里選擇 EP1C3T144-C8(有時(shí)需要把 Show advanced devices的勾消去,以便顯示出所有速度級(jí)別的器件)。注意:所選器件必須與目標(biāo)板的器件型號(hào)完全一致。
在圖中,單擊“Device and Pin Options?”,在彈出的“Device and Pin Options?”窗口中,單擊“Unused Pins”標(biāo)簽。選擇“As output driving an unspecified signal ”(由于學(xué)習(xí)機(jī)的“FPGA”具有很多功能,為了避免使用引腳對(duì)其它器件造成影響,保證本系統(tǒng)可靠工作,將未使用引腳設(shè)定為輸出不定狀態(tài))后,單擊確定后,無誤后單擊“OK”。
3.3.4時(shí)序仿真
建立波形文件:選擇 File→New,在New窗中選中“Other File”標(biāo)簽。在出現(xiàn)的屏幕中選擇“Vector Waveform File”項(xiàng)出現(xiàn)一新的屏幕。在出現(xiàn)的新屏幕中,雙擊“Name”下方的空白處,彈出“Insert Nod or Bus”對(duì)話框,單擊該對(duì)話框的“Node Finder??”。在屏幕中的 Filter 中選擇 Pins,單擊“List”。而后,單擊“>>”,所有輸入/輸出都被拷貝到右邊的一側(cè),這些正是我們希望的各個(gè)引腳,也可以只選其中的的一部分,根據(jù)實(shí)際情況決定。然后單擊屏幕右上腳的 “OK”。在出現(xiàn)的小屏幕上單擊“OK”。
設(shè)定仿真時(shí)間寬度。選擇 Edit → End time?選項(xiàng),在End time選擇窗中選擇適當(dāng)?shù)姆抡鏁r(shí)間域,以便有足夠長的觀察時(shí)間。
波形文件存盤。選擇File→Save as 選項(xiàng),直接存盤即可。運(yùn)行仿真器。在菜單中選擇項(xiàng),直到出現(xiàn),仿真結(jié)束。
未曾編輯的仿真波形
仿真波形 3.3.5引腳鎖定
將設(shè)計(jì)編程下載進(jìn)選定的目標(biāo)器件中,如EPF10K10,作進(jìn)一步的硬件測試,將設(shè)計(jì)的所有輸入輸出引腳分別與目標(biāo)器件的EPF10K10的部分引腳相接,操作如下:
1.選擇 Assignments → Assignments Editor ,即進(jìn)入 Assignments Editor編輯器。在Category 欄選擇 Pin,或直接單擊右上側(cè)的 Pin 按鈕。
2.雙擊 TO 欄的《new》,在出現(xiàn)的的下拉欄中選擇對(duì)應(yīng)的端口信號(hào)名(如 D[0]);然后雙擊對(duì)應(yīng)的欄的《new》,在出現(xiàn)的下拉欄中選擇對(duì)應(yīng)的端口信號(hào)名的期間引腳號(hào)。
3.最后存儲(chǔ)這些引腳鎖定信息后,必須再編譯(啟動(dòng))一次,才能將引腳鎖定信息編譯進(jìn)編程下載文件中。此后就可以準(zhǔn)備將編譯好的 SOF 文件下載到試驗(yàn)系統(tǒng)的FPGA中去了。
引腳鎖定 3.3.6硬件測試
1.首先將下載線把計(jì)算機(jī)的打印機(jī)口與目標(biāo)板(如開發(fā)板或?qū)嶒?yàn)板)連接好,打開電源,選擇模式7。
2.打開編輯窗和配置文件。選擇,彈出一個(gè)編輯窗。在Mode欄中選擇JTAG,并在選項(xiàng)下的小方框打勾。注意核對(duì)下載文件路徑與文件名。如果文件沒有出現(xiàn)或者出錯(cuò),單擊左Add file側(cè)按鈕,手動(dòng)選擇配置文件 clock.sof。
3.最后單擊下載標(biāo)符Start,即進(jìn)入對(duì)目標(biāo)器件 FPGA 的配置下載操作。當(dāng) Progress 顯示100%,以及在底部的處理欄中出現(xiàn) Configuration Succeeded 時(shí),表示編程成功,如圖所示。注意,如果必要時(shí),可再次單擊 Start,直至編程成功。
4.下載完成后,通過硬件測試進(jìn)一步確定設(shè)計(jì)是否達(dá)到所有的技術(shù)指標(biāo),如未達(dá)到,可逐步檢查,哪部分出現(xiàn)問題。如果是代碼出現(xiàn)問題,須修改代碼;若是時(shí)序波形圖有問題,須重新設(shè)置。
3.3.7實(shí)驗(yàn)結(jié)果
實(shí)驗(yàn)箱使用模式7,鍵8為復(fù)位按鍵,鍵8為1時(shí)正常工作。鍵4設(shè)置小時(shí),鍵7設(shè)置分鐘。
下載成功后,按下鍵8,及使六個(gè)LED復(fù)位清零,顯示數(shù)秒的自動(dòng)計(jì)時(shí),可以通過4鍵設(shè)置小時(shí)數(shù),7鍵設(shè)置分鐘數(shù)。當(dāng)秒數(shù)滿60則進(jìn)一位,分鐘數(shù)滿60進(jìn)一位,當(dāng)顯示為23:59:59時(shí),秒數(shù)在加一則顯示00:00:00,之后從新計(jì)時(shí)。
四、設(shè)計(jì)總結(jié)
通過這次課程設(shè)計(jì),我進(jìn)一步加深了對(duì)電子設(shè)計(jì)自動(dòng)化的了解。并進(jìn)一步熟練了對(duì)QuartusII軟件的操作。在編寫程序的過程中,遇到了很多問題,使我發(fā)現(xiàn)自己以前學(xué)習(xí)上存在的不足。通過與同學(xué)探討和請(qǐng)教老師,終于把問題都解決了,并加深了對(duì)數(shù)字時(shí)鐘原理和設(shè)計(jì)思路的了解。
同時(shí)也掌握了做課程設(shè)計(jì)的一般流程,為以后的設(shè)計(jì)積累了一定的經(jīng)驗(yàn)。做課程設(shè)計(jì)時(shí),先查閱相關(guān)知識(shí),把原理吃透,確定一個(gè)大的設(shè)計(jì)方向,在按照這個(gè)方向分模塊的把要實(shí)現(xiàn)的功能用流程圖的形式展示。最后參照每個(gè)模塊把輸入和輸出引腳設(shè)定,運(yùn)用我們所學(xué)的VHDL語言進(jìn)行編程??傊ㄟ^這次的設(shè)計(jì),進(jìn)一步了解了EDA技術(shù),收獲很大,對(duì)軟件編程、排錯(cuò)調(diào)試、相關(guān)儀器設(shè)備的使用技能等方面得到較全面的鍛煉和提高。
在此,也感謝康老師的悉心指導(dǎo),使自己學(xué)到了很多東西!
五、附錄
5.1 VHDL源程序
Alert模塊
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY alert IS
PORT(clk:IN STD_LOGIC;
dain:IN STD_LOGIC_VECTOR(6 DOWNTO 0);
speak:OUT STD_LOGIC;
lamp:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END alert;ARCHITECTURE fun OF alert IS
SIGNAL count:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL count1:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN speaker:PROCESS(clk)
BEGIN
--speak<=count1(1);
IF(clk'event and clk='1')THEN
IF(dain=”0000000“)THEN
speak<=count1(1);
IF(count1>=”10“)THEN
count1<=”00“;--count1為三進(jìn)制加法計(jì)數(shù)器
ELSE
count1<=count1+1;--speak<=count1(0);
END IF;
END IF;
END IF;
END PROCESS speaker;lamper:PROCESS(clk)
BEGIN
IF(rising_edge(clk))THEN
IF(count<=”10“)THEN
IF(count=”00“)THEN
lamp<=”001“;--循環(huán)點(diǎn)亮三只燈
ELSIF(count=”01“)THEN
lamp<=”010“;
ELSIF(count=”10“)THEN
lamp<=”100“;
END IF;
count<=count+1;
ELSE
count<=”00“;
END IF;
END IF;
END PROCESS lamper;END fun;Hour模塊
LIBRARY IEEE;use IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY hour IS
PORT(clk,reset:IN STD_LOGIC;
daout:out STD_LOGIC_VECTOR(5 DOWNTO 0));END ENTITY hour;ARCHITECTURE fun OF hour IS SIGNAL count:STD_LOGIC_VECTOR(5 DOWNTO 0);
BEGIN
daout<=count;
PROCESS(clk,reset)
BEGIN
IF(reset='0')THEN count<=”000000“;--若reset=0,則異步清零
ELSIF(clk'event and clk='1')THEN
--否則,若clk上升沿到
IF(count(3 DOWNTO 0)=”1001“)THEN--若個(gè)位計(jì)時(shí)恰好到”1001“即9
IF(count<16#23#)THEN
--23進(jìn)制
count<=count+7;
--若到23D則
else
count<=”000000“;
--復(fù)0
END IF;
ELSIF(count<16#23#)THEN
--若未到23D,則count進(jìn)1
count<=count+1;
ELSE
--否則清零
count<=”000000“;
END IF;
--END IF(count(3 DOWNTO 0)=”1001“)
END IF;
--END IF(reset='0')
END PROCESS;END fun;Minute模塊
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY minute IS
PORT(clk,clk1,reset,sethour:IN STD_LOGIC;
enhour:OUT STD_LOGIC;
daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY minute;ARCHITECTURE fun OF minute IS SIGNAL count :STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enhour_1, enhour_2: STD_LOGIC;--enmin_1為59分時(shí)的進(jìn)位信號(hào) BEGIN
--enmin_2由clk調(diào)制后的手動(dòng)調(diào)時(shí)脈沖信號(hào)串
daout<=count;
enhour_2<=(sethour and clk1);--sethour為手動(dòng)調(diào)時(shí)控制信號(hào),高電平有效
enhour<=(enhour_1 or enhour_2);PROCESS(clk,reset,sethour)
BEGIN
IF(reset='0')THEN--若reset為0,則異步清零
count<=”0000000“;
ELSIF(clk'event and clk='1')THEN--否則,若clk上升沿到
IF(count(3 DOWNTO 0)=”1001“)THEN--若個(gè)位計(jì)時(shí)恰好到”1001“即9
IF(count <16#60#)THEN--又若count小于16#60#,即60
IF(count=”1011001“)THEN--又若已到59D
enhour_1<='1';--則置進(jìn)位為1
count<=”0000000“;--count復(fù)0
ELSE
count<=count+7;--若count未到59D,則加7,即作”加6校正“
END IF;--使前面的16#60#的個(gè)位轉(zhuǎn)變?yōu)?421BCD的容量
ELSE
count<=”0000000“;--count復(fù)0(有此句,則對(duì)無效狀態(tài)電路可自啟動(dòng))
END IF;
--END IF(count<16#60#)
ELSIF(count <16#60#)THEN
count<=count+1;--若count<16#60#則count加1
enhour_1<='0' after 100 ns;--沒有發(fā)生進(jìn)位
ELSE
count<=”0000000“;--否則,若count不小于16#60# count復(fù)0
END IF;--END IF(count(3 DOWNTO 0)=”1001“)
END IF;--END IF(reset='0')
END process;END fun;Second模塊
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY second IS PORT(clk,reset,setmin:STD_LOGIC;
enmin:OUT STD_LOGIC;
daout:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END ENTITY second;ARCHITECTURE fun OF second IS SIGNAL count:STD_LOGIC_VECTOR(6 DOWNTO 0);SIGNAL enmin_1,enmin_2:STD_LOGIC;
--enmin_1為59秒時(shí)的進(jìn)位信號(hào)
BEGIN
--enmin_2由clk調(diào)制后的手動(dòng)調(diào)分脈沖信號(hào)串
daout<=count;
enmin_2<=(setmin and clk);--setmin為手動(dòng)調(diào)分控制信號(hào),高電平有效
enmin<=(enmin_1 or enmin_2);--enmin為向分進(jìn)位信號(hào)
PROCESS(clk,reset,setmin)
BEGIN
IF(reset='0')THEN count<=”0000000“;--若reset為0,則異步清零
ELSIF(clk 'event and clk='1')then--否則,若clk上升沿到
IF(count(3 downto 0)=”1001“)then
--若個(gè)位計(jì)時(shí)恰好到”1001“即9
IF(count<16#60#)then--又若count小于16#60#,即60H IF(count=”1011001“)then
--又若已到59D
enmin_1<='1';count<=”0000000“;--則置進(jìn)位為1及count復(fù)0
ELSE
--未到59D
count<=count+7;--則加7,而+7=+1+6,即作”加6校正“
END IF;
ELSE
--若count不小于16#60#(即count等于或大于16#60#)
count<=”0000000“;
--count復(fù)0
END IF;
--END IF(count<16#60#)
ELSIF(count<16#60#)then--若個(gè)位計(jì)數(shù)未到”1001“則轉(zhuǎn)此句再判
count<=count+1;
--若count<16#60#則count加1
enmin_1<='0'after 100 ns;--沒有發(fā)生進(jìn)位
ELSE
--否則,若count不小于16#60#
count<=”0000000“;
--則count復(fù)0
END IF;
--END IF(count(3 DOWNTO 0)=”1001")
END IF;
--END IF(reset='0')END PROCESS;END fun;5.2配置符號(hào)圖
第五篇:EDA課程設(shè)計(jì) 數(shù)字時(shí)鐘
EDA
課程設(shè)計(jì)報(bào)告
一·設(shè)計(jì)任務(wù)
使用硬件描述語言,在CPLD/FPGA上實(shí)現(xiàn)一個(gè)多功能數(shù)字鐘。
二·設(shè)計(jì)要求
除按鍵、LED、揚(yáng)聲器、時(shí)鐘信號(hào)外,整個(gè)數(shù)字鐘的功能要求在一塊芯片上實(shí)現(xiàn)。
a)具有時(shí),分,秒,計(jì)數(shù)顯示功能,以24小時(shí)循環(huán)計(jì)時(shí); b)具有時(shí)間清零功能;
c)具有小時(shí)、分鐘和秒鐘調(diào)整功能(個(gè)位和十位分開調(diào)或合起來調(diào))。
d)具有鬧鐘功能,能預(yù)設(shè)鬧鐘時(shí)間,精確到秒。
整個(gè)數(shù)字鐘只設(shè)一個(gè)時(shí)鐘輸入端口,所需不同頻率信
號(hào)在內(nèi)部分頻實(shí)現(xiàn)。(LED掃描頻率設(shè)為50Hz以上)。
三·設(shè)計(jì)方案
設(shè)計(jì)采用模塊方式,分別為分頻模塊:產(chǎn)生1Hz的脈沖作為秒的輸入,和產(chǎn)生1kHz的脈沖作為數(shù)碼管顯示的動(dòng)態(tài)掃描。計(jì)時(shí)模塊:秒模塊,分模塊,時(shí)模塊。鬧鐘模塊,顯示模塊,控制模塊。
四·模塊端口設(shè)置
1.分頻模塊
輸入:clkin :
本實(shí)驗(yàn)輸入為50MHz晶振
輸出:clk : 為顯示模塊及始終調(diào)節(jié)提供1KHz脈沖
clkt: 為計(jì)數(shù)器模塊提供1Hz脈沖
2.計(jì)時(shí)模塊
m 是模式按鍵,當(dāng)m=0 時(shí),進(jìn)入計(jì)時(shí)模式,在計(jì)時(shí)模式下可以進(jìn)行時(shí)間調(diào)整。num3,num4 產(chǎn)生加速調(diào)整時(shí)間,當(dāng)其值為1 時(shí),可以快速調(diào)整時(shí)間,該調(diào)整時(shí)間的頻率由clk 提
供。counta,count1 是手動(dòng)調(diào)節(jié)時(shí)間。Turn 接按鍵,可以改變當(dāng)前調(diào)節(jié)的是小時(shí)還是分鐘,長按turn 鍵還可以使秒鐘信號(hào)清零。sec1,min1,hour1 輸出的是計(jì)時(shí)的秒,分,時(shí)。
3.鬧鐘模塊
原理:num1,num2 產(chǎn)生加速調(diào)整時(shí)間,當(dāng)其值為1 時(shí),可以快速調(diào)整時(shí)間,該調(diào)整時(shí)間的
頻率由clk 提供。countb,count2 是手動(dòng)調(diào)節(jié)鬧鐘時(shí)間。amin,ahour 是輸出的鬧鐘的分鐘和 小時(shí) 4.控制模塊
m 是模式按鍵,當(dāng)m=0 時(shí),指當(dāng)前輸出的是計(jì)時(shí)功能;當(dāng)m=1 時(shí),指當(dāng)前調(diào)整的是
鬧鐘時(shí)間;當(dāng)m=2 時(shí),指當(dāng)前調(diào)整的是計(jì)時(shí)時(shí)間;當(dāng)m=3 時(shí),此時(shí)turn 按鍵可用于跑表的
暫停與開始。change 接按鍵,手動(dòng)調(diào)整時(shí),每按一次,計(jì)數(shù)器加1;如果長按,則連續(xù)快
速加1,用于快速調(diào)時(shí)和定時(shí);turn 接按鍵,在手動(dòng)校時(shí)功能時(shí),選擇是調(diào)整小時(shí),還是分
鐘;若長時(shí)間按住該鍵,還可使秒信號(hào)清零,用于精確調(diào)時(shí)。count1,count2,counta,countb 分
別是用來調(diào)節(jié)計(jì)時(shí)時(shí)間和鬧鐘時(shí)間。LD_min,LD_hour,指示當(dāng)前調(diào)節(jié)的是分鐘還是小時(shí)。5 顯示模塊
輸入:clk--1kHz時(shí)鐘,提供高頻掃描
in0、in1…in5--分別為時(shí)、分、秒的個(gè)位與十位信號(hào)
輸出:a、b…g--數(shù)碼管輸入
d0、d1…d5--數(shù)碼管選通
五.程序。
分頻模塊
module fenpin(clk,clkt,clkin);input clkin;output clk,clkt;reg clk,clkt;reg [31:0]out,t1;
initial t1<=0;initial out<=0;initial clk<=0;initial clkt<=0;
always@(posedge clkin)begin
out<=out+1;
if(out==20000)
begin
out<=0;
clk<=!clk;
end end
always@(posedge clk)
begin
t1<=t1+1;
if(t1==1000)
begin
clkt<=1;
t1<=0;
end
else
clkt<=0;end endmodule
計(jì)時(shí)模塊 module jishi(clk,clk_1Hz, turn,mode,count1,counta,sec1,min1,hour1,num3,num4);input clk,clkt,turn,num3,num4;input mode;input count1,counta;output [7:0] sec1,min1;output [7:0] hour1;wire clkt,ct1,cta,turn,num3,num4;reg [7:0] sec1=0,min1=0;reg [7:0] hour1=0;reg [1:0] m;wire count1,counta;reg minclk,hclk;always @(posedge mode)//mode 信號(hào)控制系統(tǒng)在三種功能間轉(zhuǎn)換 begin if(m==4)m<=0;else m<=m+1;end /////秒鐘計(jì)時(shí)模塊////// always @(posedge clkt)
if((sec1==8'h59)|turn&(!m))///////若長時(shí)間按住該鍵,還可使秒信號(hào)清零,用于精確調(diào)時(shí)。begin sec1<=0;//按住“turn”按鍵一段時(shí)間,秒信號(hào)可清零,該功能用于手動(dòng)精確調(diào)時(shí)
if(!(turn&(!m)))minclk<=1;///產(chǎn)生進(jìn)位 end else begin if(sec1[3:0]==4'b1001)begin sec1[3:0]<=4'b0000;sec1[7:4]<=sec1[7:4]+1;end else sec1[3:0]<=sec1[3:0]+1;minclk<=0;end ////////分鐘計(jì)時(shí)模?/// assign m_clk=minclk||count1;/////m_clk 產(chǎn)生進(jìn)位或校正改變 assign ct1=(num3&clk)|(!num3&m_clk);//ct1 用于計(jì)時(shí)、校時(shí)中的分鐘計(jì)數(shù)
always @(posedge ct1)begin if(min1==8'h59)begin min1<=0;hclk<=1;end else begin if(min1[3:0]==9)
begin min1[3:0]<=0;min1[7:4]<=min1[7:4]+1;end else min1[3:0]<=min1[3:0]+1;hclk<=0;end end ////////小時(shí)計(jì)時(shí)模塊/// assign h_clk=hclk||counta;//////h_clk 產(chǎn)生進(jìn)位或校正改變 assign cta=(num4&clk)|(!num4&h_clk);//cta 用于計(jì)時(shí)、校時(shí)中的小時(shí)計(jì)數(shù)
always @(posedge cta)if(hour1==8'h23)hour1<=0;else if(hour1[3:0]==9)begin hour1[7:4]<=hour1[7:4]+1;hour1[3:0]<=0;end else hour1[3:0]<=hour1[3:0]+1;Endmodule
鬧鐘模塊
module alarm(clk,amin,ahour,num1,num2,count2,countb,LD_alert);input clk,num1,num2,count2,countb;output [7:0] amin;
output [7:0] ahour;output LD_alert;wire LD_alert;reg [7:0] amin=0;reg [7:0] ahour=0;assign ct2=(num1&clk)|(!num1&count2);//ct2 用于定時(shí)狀態(tài)下調(diào)整分鐘信號(hào)
assign LD_alert=(ahour|amin)?1:0;//指示是否進(jìn)行了鬧鈴定時(shí) always @(posedge ct2)if(amin==8'h59)amin<=0;else if(amin[3:0]==9)begin amin[3:0]<=0;amin[7:4]<=amin[7:4]+1;end else amin[3:0]<=amin[3:0]+1;assign ctb=(num2&clk)|(!num2&countb);////ctb 用于定時(shí)狀態(tài)調(diào)節(jié)小時(shí)信號(hào) always @(posedge ctb)if(ahour==8'h23)ahour<=0;else if(ahour[3:0]==9)begin ahour[3:0]<=0;ahour[7:4]<=ahour[7:4]+1;end else ahour[3:0]<=ahour[3:0]+1;Endmodule 控制模塊
module ctrol(change,turn,count1,count2,counta,countb,pause,LD_min,LD_hour,mode);input change,mode,turn;output count1,count2,counta,countb,pause,LD_min,LD_hour;reg [1:0] m;reg fm=0,count1=0,count2=0,counta=0,countb=0,pause=0,LD_min=0,LD_hour=0;wire mode,turn,change;always @(posedge mode)//mode 信號(hào)控制系統(tǒng)在三種功能間轉(zhuǎn)換 begin if(m==4)m<=0;else m<=m+1;end always @(posedge turn)//////////接按鍵,在手動(dòng)校時(shí)功能時(shí),選擇是調(diào)整小時(shí),還是分鐘; begin fm<=~fm;end
always @(m or fm or change)begin case(m)2: begin ////////2:調(diào)節(jié)時(shí)間功能; if(fm)begin count1<=change;{LD_min,LD_hour}<=2;end//////指示當(dāng)前調(diào)整的是分鐘
Else
begin counta<=change;{LD_min,LD_hour}<=1;end/////指示當(dāng)前調(diào)整的是小時(shí) {count2,countb}<=0;end 1: begin //////1:調(diào)節(jié)鬧鐘功能 if(fm)begin count2<=change;{LD_min,LD_hour}<=2;end/////指示當(dāng)前調(diào)整的是分 else begin countb<=change;{LD_min,LD_hour}<=1;end/////指示當(dāng)前調(diào)整的是小時(shí) {count1,counta}<=0;end
0: begin {count1,count2,counta,countb,LD_min,LD_hour}<=0;end ////0:計(jì)時(shí)功能 endcase end endmodule 顯示模塊
module show(min1,sec1,amin,hour1,ahour,MSH,MSL,SH,SL,MH,ML,min,sec,hour,mode);input [7:0] min1,sec1,amin;input [7:0] hour1,ahour;input[3:0] MSH,MSL,SH,SL,MH,ML;input mode;output [7:0] min,sec;output [7:0] hour;reg [7:0] min,sec;reg [7:0] hour;reg [1:0] m;always @(posedge mode)//mode 信號(hào)控制系統(tǒng)在三種功能間轉(zhuǎn)換
begin if(m==4)m<=0;else m<=m+1;end always @(min1 or sec1 or amin or hour1 or ahour or m)begin case(m)0: begin hour<=hour1;min<=min1;sec<=sec1;end 1: begin hour<=ahour;min<=amin;sec<=8'hzz;end 2: begin hour<=hour1;min<=min1;sec<=8'hzz;end 3: begin
hour<={SH,SL};
min<={MSH,MSL};sec<={MH,ML};end endcase end Endmodule
六
實(shí)驗(yàn)分析 七
實(shí)驗(yàn)總結(jié)
八、參考資料
1、《EDA技術(shù)實(shí)用教程》
2、實(shí)驗(yàn)箱使用說明;