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