在日常學習、工作或生活中,大家總少不了接觸作文或者范文吧,通過文章可以把我們那些零零散散的思想,聚集在一塊。那么我們該如何寫一篇較為完美的范文呢?下面我給大家整理了一些優(yōu)秀范文,希望能夠幫助到大家,我們一起來看一看吧。
eda課程設計題目 eda課程設計數(shù)字時鐘篇一
學 院: 機電工程學院
題 目: 數(shù)字時鐘電路設計 課 程: 《電子系統(tǒng)設計自動化》課程設計 專業(yè)班級: 電信10級2 班 學生姓名: 劉星 秦玉杰 王艷艷 學 號: 1004101035 1004101036 1004101038
完成日期:2013年 12 月 27 日
摘要:
eda(electronic design automation)電子設計自動化,就是以大規(guī)??删幊唐骷樵O計載體,以硬件描述語言為系統(tǒng)邏輯描述的主要表達方式,通過相關的軟件,自動完成用軟件方式設計的電子系統(tǒng)到硬件系統(tǒng),最終形成集成電子系統(tǒng)或專用集成芯片。本次實習利用quartusii為設計軟件、vhdl為硬件描述語言,結合所學的數(shù)字電路的知識設計一個24時多功能數(shù)字鐘,具有正常時、分、秒計時,動態(tài)顯示,清零、快速校時校分、整點報時、花樣顯示等功能。利用硬件描述語言vhdl對設計系統(tǒng)的各個子模塊進行邏輯描述,采用模塊化的設計思想完成頂層模塊的設計,通過軟件編譯、邏輯化簡、邏輯分割、邏輯綜合優(yōu)化、邏輯布線、邏輯仿真,最終將設計的軟件系統(tǒng)下載設計實驗系統(tǒng),對設計的系統(tǒng)進行硬件測試。
一、課程設計基本要求和任務
《eda課程設計》是繼《模擬電子技術基礎》、《數(shù)字電子技術基礎》課程后,電信專業(yè)學生在電子技術實驗技能方面綜合性質的實驗訓練課程,是電子技術基礎的一個部分。1.1 目的和任務
(1)通過課程設計使學生能熟練掌握一種eda軟件(quartusii)的使用方法,能熟練進行設計輸入、編譯、管腳分配、下載等過程,為以后進行工程實際問題的研究打下設計基礎。
(2)通過課程設計使學生能利用eda軟件(quartusii)進行至少一 個電子技術綜合問題的設計,設計輸入可采用圖形輸入法或vhdl硬件描述語言輸入法。(3)通過課程設計使學生初步具有分析、尋找和排除電子電路中常見 故障的能力。
(4)通過課程設計使學生能獨立寫出嚴謹?shù)?、有理論根?jù)的、實事求是的、文理通順的字跡端正的課程設計報告。1.2 功能要求:
(1)具有時、分、秒計數(shù)顯示功能,以24小時循環(huán)計時。(2)時鐘計數(shù)顯示時有l(wèi)ed燈的花樣顯示。(3)具有調節(jié)小時、分鐘、秒及清零的功能。(4)具有整點報時功能。
1.3 總體方框圖:
本系統(tǒng)可以由秒計數(shù)器、分鐘計數(shù)器、小時計數(shù)器、整點報時、分的調整以及小時的調整和一個頂層文件構成。采用自頂向下的設計方法,子模塊利用vhdl語言設計,頂層文件用原理圖的設計方法。顯示:小時采用24進制,而分鐘均是采用6進制和10進制的組合。1.4 設計原理:
數(shù)字鐘電路設計要求所設計電路就有以下功能:時、分、秒計時顯示,清零,時、分調節(jié),整點報時及花樣顯示。分、秒計時原理相似,可以采用60進制bcd碼計數(shù)器進計時;小時采用24進制bcd碼進行計時;在設計時采用試驗電路箱上的模式7電路,不需要進行譯碼電路的設計;所設計電路具有驅動揚聲器和花樣顯示的led燈信號產(chǎn)生。試驗箱模式7的電路如圖一所示:圖一模式七實驗電路圖
1.5 性能指標及功能設計:
(1)時鐘計數(shù):完成時、分、秒的正確計時并且顯示所計的數(shù)字;對秒、分——60進制計數(shù),即從0到59循環(huán)計數(shù),時鐘——24進制計數(shù),即從0到23循環(huán)計數(shù),并且在數(shù)碼管上顯示數(shù)值。
2.2 模塊劃分自頂向下分解
2.3 模塊描述
時鐘計時模塊完成時、分、秒計數(shù),及清零、調節(jié)時和分鐘的功能。時、分、秒計數(shù)的原理相同,均為bcd碼輸出的計數(shù)器,其中分和秒均為六十進制bcd碼計數(shù)器,小時為二十四進制bcd碼計數(shù)器。設計一個具有異步清零和設置輸出功能的六十進制bcd碼計數(shù)器,再設計一個具有異步清零和設置輸出功能的二十四進制計數(shù)器,然后將它們通過一定的組合構成時鐘計時模塊。各個輸入/輸出端口的作用為:
(1)clk為計時時鐘信號,reset為異步清零信號;
(2)sethour為小時設置信號,setmin為分鐘設置信號;(3)daout[5?0]為小時的bcd碼輸出, daout[6...0]為秒和分鐘的bcd碼輸出,enmin和enhour為使能輸出信號。
(4)在時鐘整點的時候產(chǎn)生揚聲器驅動信號和花樣顯示信號。由時鐘計時模塊中分鐘的進行信號進行控制。當contr_en為高電平時,將輸入信號clk送到輸出端speak用于驅動揚聲器,同時在clk的控制下,輸出端lamp[2..0]進行循環(huán)移位,從而控制led燈進行花樣顯示。輸出控制模塊有揚聲器控制器和花樣顯示控制器兩個子模塊組成 2.4 頂層電路圖
頂層文件是由四個模塊組成,分別是時、分、秒計數(shù)器和報警的vhdl語言封裝而成。經(jīng)過鎖定引腳再重新編譯獲得如下頂層原理電路圖:
三、方案實現(xiàn)
3.1 各模塊仿真及描述
(1)秒計數(shù)器模塊仿真圖:將標準秒信號送入”秒計數(shù)器”,秒計數(shù)器采用60進制計數(shù)器,每累計60秒發(fā)出一個分脈沖信號,該信號將作為分計數(shù)器的時鐘脈沖,daout代表秒輸出。
(2)分計數(shù)器電路仿真圖:也采用60進制計數(shù)器,每累計60分鐘,發(fā)出一個時脈沖信號,該信號將被送到時計數(shù)器,daout端口代表分鐘輸出
(3)小時計數(shù)器電路仿真圖:時計數(shù)器采用12進制計時器,可實現(xiàn)對24小時累 計。每累計12小時,發(fā)出一個脈沖信號。
引腳配置完成后再進行一次全程編譯,無誤則可以下載到試驗箱上進行硬件測試。硬件驗證的方法如下:選擇實驗模式7;時鐘脈沖clk與clock0(1024hz)信號相連;鍵8和鍵5均為低電平,時鐘正常計時,數(shù)碼管1和2顯示秒,數(shù)碼管4和5顯示分鐘,數(shù)碼管7和8顯示小時;鍵8為高電平時,時鐘清零;鍵5為高電平時,按下鍵7和鍵4進行調時調分操作;當時鐘為整點的時候,三個發(fā)光二極管進行循環(huán)移位操作,同時揚聲器發(fā)聲。
五、心得體會
經(jīng)過源程序的編輯、邏輯綜合、邏輯適配、編程下載成功后,在eda實驗開發(fā)系統(tǒng)進行硬件驗證時卻發(fā)現(xiàn)實驗結果不正確,揚聲器無法發(fā)聲。經(jīng)檢查,自己設計的管腳文件有錯。將管腳鎖定文件修改后,重新進行邏輯適配、編程下載成功后,實驗結果仍然不正確,百思不得其解。無奈之下,決定重頭開始排查每一步的細節(jié),確定各個模塊的功能完全實現(xiàn)并且頂層模塊功能正確。修改之后,重新進行邏輯適配、編程下載驗證,實驗結果完全正確。
這次eda課程設計歷時兩個星期,在整整兩個星期的日子里,不僅鞏固了以前所學過的知識,而且學到了很多書本上學不到的知識,同時鍛煉了自己的能力,使自己對以后的路有了更加清楚的認識,對未來有了更多的信心。這次課程設計,進一步加深了我對eda的了解,使我對quartusii的基本操作有所了解,使我對應用軟件的方法設計硬件系統(tǒng)有了更加濃厚的興趣。通過這次課程設計,我懂得了理論與實際相結合的重要性,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合,從實踐中得出結論,才能真正提高自己的實際動手能力和獨立思考的能力。在設計的過程中,我遇到許多問題,畢竟是第一次應用vhdl進行硬件電路系統(tǒng)的設計,許多eda的知識還沒有充分的掌握,遇到困難也是在所難免的,同時發(fā)現(xiàn)了自己的不足之處:學習知識表面化,沒有深入了解它們的原理??偟膩碚f,這次設計的數(shù)字時鐘電路還是比較成功的,盡管在設計中遇到了很多問題,最后在老師的辛勤指導、同學的幫助和自己不斷思考下,終于迎刃而解,有點小小的成就感,覺得平時所學的知識有了實用的價值,達到了理論與實際相結合的目的。最后,對給過我?guī)椭乃型瑢W和指導老師再次表示忠心的感謝!
參考文獻
[1] 崔健明.《電子電工eda仿真技術》 高等教育出版社 2000年 [2] 盧杰,賴毅.《vhdl與數(shù)字電路設計》 科學出版社 2001年 [3] 潘松,黃繼業(yè).《eda技術實用教程》 科學出版社 2002年 [4] 朱運利.《eda技術應用》 電子工業(yè)出版社 2004年 [5] 張明.《vhdl實用教程》 電子科技大學出版社 1999年
[6] 彭介華.《電子技術課程設計與指導》 高等教育出版 1997年
library ieee;
use ;use ;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#的個位轉變?yōu)?421bcd的容量 else count<=“0000000”;--count復0(有此句,則對無效狀態(tài)電路可自啟動)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ā)生進位 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;
3、時計數(shù)器模塊的vhdl語言:
library ieee;use ;use ;
if(clk'event and clk='1')then if(dain=“0000000”)then speak<=count1(1);if(count1>=“10”)then count1<=“00”;--count1為三進制加法計數(shù)器 else count1<=count1+1;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;
循環(huán)點亮三只燈
eda課程設計題目 eda課程設計數(shù)字時鐘篇二
課 程 設 計 報 告
設計題目:用vhdl語言實現(xiàn)數(shù)字鐘的設計
班 級:電子1002班 學 號:20102625 姓 名:于曉 指導教師:李世平、李寧 設計時間:2012年12月
摘要
數(shù)字鐘是一種用數(shù)字電路技術實現(xiàn)時、分、秒計時的鐘表。本設計主要是實現(xiàn)數(shù)字鐘的功能,程序用vhdl語言編寫,整體采用top-to-down設計思路,具有基本的顯示年月日時分秒和星期的功能,此外還有整點報時功能。該數(shù)字鐘的實現(xiàn)程序分為頂層模塊、年月模塊、日模塊、時分秒定時模塊、數(shù)碼管顯示模塊、分頻模塊、星期模塊,此外還有一個庫。該程序主要是用了元件例化的方法,此外還有進程等重要語句。
沒有脈沖時,顯示時分秒,set按鈕產(chǎn)生第一個脈沖時,顯示年月日,第2個脈沖到來時可預置年份,第3個脈沖到來時可預置月份,依次第4、5、6、7、8個脈沖到來時分別可預置日期、時、分、秒、星期,第 9個脈沖到來時設置星期后預置結束,正常工作,顯示的是時分秒和星期。調整設置通過up來控制,up為高電平,upclk有脈沖到達時,預置位加1,否則減1。當整點到達時,報時器會鳴響,然后手動按鍵停止報時。
關鍵詞:數(shù)字鐘,vhdl,元件例化,數(shù)碼管
1、課程設計目的
掌握利用可編程邏輯器件和eda設計工具進行電子系統(tǒng)設計的方法
2、課程設計內容及要求
設計實現(xiàn)一個具有帶預置數(shù)的數(shù)字鐘,具有顯示年月日時分秒的功能。用6個數(shù)碼管顯示時分秒,set按鈕產(chǎn)生第一個脈沖時,顯示切換年月日,第2個脈沖到來時可預置年份,第3個脈沖到來時可預置月份,依次第4、5、6、7個脈沖到來時分別可預置日期、時、分、秒,第 8個脈沖到來后預置結束,正常工作,顯示的是時分秒。up為高電平時,upclk有脈沖到達時,預置位加1.否則減1,還可以在此基礎上增加其它功能。
3、vhdl程序設計
3.1整體設計思路
本設計采用top-down 模式設計,分模塊進行,各功能都使用元件例化方式設計,主要有l(wèi)ed顯示模塊、時分秒定時模塊、日期模塊、年月模塊、分頻模塊、星期模塊,此外還創(chuàng)建了一個程序包,用來實現(xiàn)年月日、時分秒的加減調整。主要運用了過程語句、元件例化語句、信號賦值語句、和順序語句
圖3-1-1 整體結構圖
圖3-1-2 頂層模塊引腳圖
3.2各模塊設計思路
3.2.1 普通計數(shù)器(時、分、秒、月、年計數(shù)器)設計
時鐘模塊通過調用程序包的時分秒加減過程語句實現(xiàn)兩個六十進制,一個二十四進制,秒的進位信號作為分的計數(shù)時鐘信號,分的進位信號作為時的時鐘信號。時的進位信號通過管腳映射到日期模塊的計數(shù)時鐘信號。
定時功能在時分秒模塊中,是由分計數(shù)器在到達59時產(chǎn)生一個脈沖,讓speaker產(chǎn)生高電位鳴響。
年月模塊主要實現(xiàn)月份的十二進制計數(shù)器,和100進制的年份計數(shù)器。月份的計數(shù)信號由日期模塊的進位信號傳遞過來,年份的時鐘信號由月份的進位信號產(chǎn)生。
圖3-2-1 時分秒引腳圖 圖3-2-2 年月引腳圖 3.2.2 可變進制計數(shù)器(天計數(shù)器)模塊設計
不同月中的天的數(shù)量是不同的,例如“大月”就有31“天”,“小月”有30“天”,平年“二月”有28“天”,而閏年“二月”有29“天”。所以天計數(shù)器應該具備進制可變的性能。日期模塊主要分為三個部分,預置日期加,預置日期減和產(chǎn)生進位信號,使月份增加。平閏年的判斷是通過年月模塊傳輸過來年份信號(兩個4位的bcd碼),如果高位的信號為“xxx0”且低位的信號為“xx00”(如20,84等),或高位為“xxx1”且低位為“xx10”(如32等)則判斷為閏年。這種方法的包含了一百年中的所有閏年的情況。然后判斷大月小月可以判斷月份來確定30進制還是31進制。進位信號也是分為大月、小月、平年閏年來確定是否產(chǎn)生。
圖3-2-3 日模塊引腳圖
3.2.3 led顯示模塊
主要通過接受setpin的控制信號來選擇顯示的內容,把不同的信號賦給輸出的端口,從而實現(xiàn)時分秒,年月日的切換。3.2.4 星期模塊
通過七進制計數(shù)器實現(xiàn),同時帶有預置的功能,不能同年月調整聯(lián)動,但是能單獨調整。
圖3-2-4 星期模塊引腳圖
4、仿真與分析
4.1 日模塊
4.1.1 年份為2000年,月份為2月,有29天,初值設為2000年2月28日,仿真中日為:28、29、1、2、?
4.1.2 年份為1999年,月份為2月,有28天,初值設為1999年2月28日,仿真中日為:28、1、2、?
4.1.3 年份為2000年,月份為3月,有31天,初值設為2000年3月30日,仿真中日為:30、31、1、2、?
4.1.4 年份為2000年,月份為4月,有30天,初值設為2000年4月30日,仿真中日為:30、1、2、?
4.2 年月模塊
初值設為1999年12月,lock為1時,顯示年月,lock為3時,預置月,lock為2時,預置年
4.3 時分秒定時模塊
lock為0時,顯示時分秒,lock為5時,預置時,lock為6時,預置分,lock為7時,預置秒。當分到達59時,整點報時器響,speaker高電位,隨著手動清零,恢復原位。
4.4 星期模塊
初值設為星期1,仿真中顯示為:1、2、3、4、5、6、7、1、?
4.5 分頻模塊
4.6 頂層設計模塊
5、課程設計總結
本次課程設計歷時兩天半,經(jīng)過自己不斷的努力完成了數(shù)字鐘的設計,程序代碼的編寫調試及仿真。以前只是看書或者編一些很小的程序用來仿真,覺得沒怎么難,但當進行此次課程設計真正處理一個較大程序時,問題便都顯現(xiàn)出來。雖然在這個過程中遇到了很多的問題,但是最終都得到了很好的解決。
我此次設計的程序是在課本原有數(shù)字鐘程序的基礎上進行添加更改得來的,最初在運行原有程序時很順利,但是隨著加的東西越來越多,程序中出現(xiàn)的問題也就越來越多。很多同學都覺得在已有程序上再添加東西看似簡單,實則很容易混亂,理不清頭緒,而且這個原有程序是用進程所寫,比較麻煩。雖然這樣容易出現(xiàn)問題,不過我覺得這是一個鍛煉的好機會。、在處理分頻模塊時,最開始按照老師的要求設置了頻率,但是當運行時,發(fā)現(xiàn)根本出不來,后來與同學討論后,發(fā)現(xiàn)頻率過大,后來改為八分頻,使得分頻
模塊能夠使用。在一開始加星期模塊時,沒怎么考慮,可是當加進去后才發(fā)現(xiàn),星期模塊不能與其他模塊很好的相連,不能很好的做到與“日模塊”相合,后來雖有改動,但最終沒能改成功。在加定時器功能時,一開始單獨為定時器列了一個模塊,所寫的程序也很復雜,錯誤百出,最后程序改好后,仿真卻出不來。后來經(jīng)過同學的提點,就把程序改簡單了,單純的來個脈沖就出現(xiàn)高電平,但后來仿真發(fā)現(xiàn)高電平一直在高位,沒法給脈沖,最后沒辦法便手動脈沖。與頂層模塊連接后,又發(fā)現(xiàn)分滿59的脈沖沒給,因為我的時分秒全都放在了一起,只能將定時模塊挪到時分秒模塊中,這樣反而使得整個工程簡單了一些。
在各個模塊都能仿真成功后,頂層模塊的程序與仿真卻出現(xiàn)了很多問題。首先是頂層模塊程序有很多警告,例如“second_waver”沒有用到之類的,后來在改動的過程中,便把內變量換為了外變量,但是有些原來的警告沒有了,但是新的警告又出現(xiàn)了,原本能夠連好的u3與u4 模塊均不能正常連接,后來與同學自習查找,才終于將錯誤找出,由于粗心大意誤動了一些元件例化時的變量,使得時間拜拜浪費。最后在仿真的時候,仿真結果出不來,經(jīng)過與同學商量在每個程序中都給年月日等變量均付了初值,才讓仿真出來。
此次課程設計雖然只有短短的兩天半的時間,但是經(jīng)過前期的查找資料,后來的實驗室實際操作,再到現(xiàn)在的報告總結,我收獲了很多。其實完成一個設計,編程只是很小的一部分,最主要的在于查找資料以及調試程序,此次設計我在查找資料方面做的不是很充分,以至于設計的面很小,而且在遇到問題后不能很快的找出,以后一定要做好準備工作。此次課程設計中遇到的問題看似不大,但都是很好的問題,對我以后的設計有很大的幫助,一定會牢牢記住。
最后,此次課程設計的完成很大程度上取決于老師和同學對我的指導與幫助,這更能說明,一個較大設計的完成及實現(xiàn),不是僅限于自身,我們要學會與別人交流溝通,才能做到更好。
6、參考文獻
[1]李景華,杜玉遠.可編程邏輯器件與eda技術.沈陽:東北大學出版社,2000 [2] 姜如東,vhdl語言程序設計及應用,北京郵電大學出版社
[3] 康華光.電子技術基礎(數(shù)字部分)[m].北 京:高等教育出版社,2001.
[4] [5]
eda課程設計題目 eda課程設計數(shù)字時鐘篇三
數(shù)字鐘
一、設計要求
設計一個數(shù)字鐘,具體要求如下:
1、具有時、分、秒計數(shù)顯示功能,以24小時循環(huán)計時。
2、具有清零、校時、校分功能。
3、具有整點蜂鳴器報時以及l(fā)ed花樣顯示功能。
二、設計方案
根據(jù)設計要求,數(shù)字鐘的結構如圖8-3所示,包括:時hour、分minute、秒second計數(shù)模塊,顯示控制模塊sel_clock,七段譯碼模塊deled,報時模塊alert。
三、vhdl程序
library ieee;use ;use ;use ;
----uncomment the following library declaration if instantiating----any xilinx primitives in this code.--library unisim;
--use ;
entityddz is port(rst,clk: in std_logic;hour_h: out std_logic_vector(6 downto 0);hour_l: out std_logic_vector(6 downto 0);min_h: out std_logic_vector(6 downto 0);
min_l: out std_logic_vector(6 downto 0);
sec_h: out std_logic_vector(6 downto 0);
sec_l: out std_logic_vector(6 downto 0));endddz;
architecture behavioral of ddz is signalcnt: std_logic_vector(15 downto 0);signalsec_h_in: std_logic_vector(3 downto 0);signalsec_l_in: std_logic_vector(3 downto 0);signalmin_h_in: std_logic_vector(3 downto 0);signalmin_l_in: std_logic_vector(3 downto 0);signalhour_h_in: std_logic_vector(3 downto 0);signalhour_l_in: std_logic_vector(3 downto 0);
signalclk_s,clk_m,clk_h: std_logic;begin process(rst,clk)begin if rst='0' then
sec_h_in<=(others=>'0');
sec_l_in<=(others=>'0');
clk_m<='1';elsifclk'event and clk='1' then ifsec_l_in=9 then
sec_l_in<=“0000”;
ifsec_h_in=5 then
sec_h_in<=“0000”;
clk_m<='0';
else
sec_h_in<=sec_h_in+1;
clk_m<='1';
end if;else sec_l_in<=sec_l_in+1;
clk_m<='1';
end if;end if;end process;
process(rst,clk_m)begin if rst='0' then
--min_h_in<=(others=>'0');
min_l_in<=(others=>'0');--clk_h<='1';elsifclk_m'event and clk_m='1' then ifmin_l_in=9 then
min_l_in<=“0000”;ifmin_h_in=5 then
min_h_in<=“0000”;else min_h_in<=min_h_in+1;
clk_m<='1';
end if;else min_l_in<=min_l_in+1;
end if;end if;end process;
process(rst,clk_n)begin if rst='0' then
--hour_h_in<=(others=>'0');
hour_l_in<=(others=>'0');--clk_h<='1';elsifclk_m'event and clk_n='1' then ifhour_l_in=3 then
hour_l_in<=“0000”;ifmin_h_in=2 then
hour_h_in<=“0000”;else hour_h_in<=hour_h_in+1;
clk_n<='1';
end if;else hour_l_in<=hour_l_in+1;
end if;end if;end process;
process(sec_l_in)begin casesec_l_in is
when “0000” =>sec_l<=“0000001”;when “0001” =>sec_l<=“1001111”;when “0010” =>sec_l<=“0010010”;when “0011” =>sec_l<=“0000110”;when “0100” =>sec_l<=“1001100”;when “0101” =>sec_l<=“0100100”;when “0110” =>sec_l<=“0100000”;when “0111” =>sec_l<=“0001111”;when “1000” =>sec_l<=“0000000”;when “1001” =>sec_l<=“0000100”;when others =>sec_l<=“1111111”;end case;end process;
process(sec_h_in)begin casesec_h_in is
when “0000” =>sec_h<=“0000001”;when “0001” =>sec_h<=“1001111”;when “0010” =>sec_h<=“0010010”;when “0011” =>sec_h<=“0000110”;when “0100” =>sec_h<=“1001100”;when “0101” =>sec_h<=“0100100”;when “0110” =>sec_h<=“0100000”;when “0111” =>sec_h<=“0001111”;when “1000” =>sec_h<=“0000000”;when “1001” =>sec_h<=“0000100”;when others =>sec_h<=“1111111”;end case;end process;
process(min_l_in)begin casemin_l_in is
when “0000” =>min_l<=“0000001”;when “0001” =>min_l<=“1001111”;when “0010” =>min_l<=“0010010”;
when “0011” =>min_l<=“0000110”;when “0100” =>min_l<=“1001100”;when “0101” =>min_l<=“0100100”;when “0110” =>min_l<=“0100000”;when “0111” =>min_l<=“0001111”;when “1000” =>min_l<=“0000000”;when “1001” =>min_l<=“0000100”;when others =>min_l<=“1111111”;end case;end process;
process(min_h_in)begin casemin_h_in is
when “0000” =>min_h<=“0000001”;when “0001” =>min _h<=“1001111”;when “0010” => min _h<=“0010010”;when “0011” =>min _h<=“0000110”;when “0100” =>min _h<=“1001100”;when “0101” => min _h<=“0100100”;when “0110” =>min _h<=“0100000”;when “0111” =>min _h<=“0001111”;when “1000” =>min _h<=“0000000”;when “1001” =>min _h<=“0000100”;when others =>min _h<=“1111111”;
end case;end process;
process(hour_l_in)begin casehour_l_in is
when “0000” =>hour_l<=“0000001”;when “0001” =>hour_l<=“1001111”;when “0010” =>hour_l<=“0010010”;when “0011” =>hour_l<=“0000110”;when “0100” =>hour_l<=“1001100”;when “0101” =>hour_l<=“0100100”;when “0110” =>hour_l<=“0100000”;when “0111” =>hour_l<=“0001111”;when “1000” =>hour_l<=“0000000”;when “1001” =>hour_l<=“0000100”;when others =>hour_l<=“1111111”;end case;end process;
process(hour_h_in)begin casehour_h_in is
when “0000” =>hour_h<=“0000001”;when “0001” =>hour_h<=“1001111”;when “0010” =>hour_h<=“0010010”;when “0011” =>hour_h<=“0000110”;when “0100” => hour _h<=“1001100”;when “0101” => hour _h<=“0100100”;when “0110” => hour _h<=“0100000”;when “0111” => hour _h<=“0001111”;when “1000” => hour _h<=“0000000”;when “1001” =>hour_h<=“0000100”;when others => hour _h<=“1111111”;end case;end process;end behavioral;
四、vhdl仿真結果
五、課程設計心得
通過這次課程設計,有效得鞏固了課本所學的知識,而且通過上機仿真不斷發(fā)現(xiàn)問題并及時改正,加深了我們對該課程設計的印象。這次課程設計,進一步加深了我對eda的了解,使我對isp有了更深的了解,使我對應用軟件的方法設計硬件系統(tǒng)有了更加濃厚的興趣。除此之外,我懂得了理論與實際相結合的重要性,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合,從實踐中得出結論,才能真正提高自己的實際動手能力和獨立思考的能力。
總之,這次課程設計讓我學會了很多,對今后的生活工作用處也頗深。
eda課程設計題目 eda課程設計數(shù)字時鐘篇四
《eda課程設計》
課程設計題目:
基于單片機的溫濕度采集系統(tǒng)
姓
名:
xxx
學
班
時
地
號:
xxxx
級:
xxxx
間:
2014.4.21~ 2013.5.5
點:
xxxxx
指 導
老
師:
xxxxx
目錄
一、電路原理圖..................................................................................2
二、電路pcb圖(或實物圖).........................................................2
三、電路效果圖..................................................................................3
四、設計總結......................................................................................3 附錄(單片機源代碼)......................................................................4
一、電路原理圖
二、電路pcb圖(或實物圖)
三、電路效果圖
四、設計總結
eda的實驗還是挺有趣的,比較講究動手能力,當然也不能忽略團體合作??偟膩碚f本次實驗還是成功了,雖然每個環(huán)節(jié)都遇到了困難。在生成原理圖的過程中,就曾把導線畫成了placeline而不是placewire,還有芯片的引腳應該用net符號而不是用文本符號,所以這些錯誤都導致我花在原理圖上的時間多了點。而在生成pcb電路圖的過程中遇到的困難則是自動布線之后,還有電源的幾個腳需要手動布線,所以各個元件之間的位置要布置好,以免發(fā)生短路。腐蝕的時候,由于腐蝕的時間太長了,有些碳都化開了,導致里面的銅被腐蝕掉了,所以又為我的工作增加了困難。在焊接的時候,要注意元件的正負極,還要檢測錫是否都與那些銅連接上了。最終把led和 dht11的程序燒進去就行了。
本次實驗我還是能多多少少學到點什么的,總的來說還是希望能有多一點這樣的實習。
附錄(單片機源代碼)
//51單片機控制溫濕度傳感器dht11
lcd1602上顯示當前機最小系統(tǒng)。//lcd 讀進去 寫出來 #include
//此聲明一個布爾型變量即真或假// uchar data_byte,num,i;uchar rh,rl,th,tl,flag;uchar shuzi[4];unsigned char code num1[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
sbit dht=p2^4;
//dht11data端接單片機的p2^4口//
//***************
延
時
函
數(shù)************************************* void delay(uchar ms)//延時模塊//延時1毫秒
{
}
void delay1()
//一個for循環(huán)大概需要8個多機器周期
//一個機器周期為1us晶振為12mhz也就是說本函數(shù)延時8us{
} uchar i;
while(ms--)
for(i=0;i<110;i++);
uchar i;
for(i=0;i<1;i++);void display(void){ // if(flag==0)// {
p2=0x07;
p0=num1[shuzi[2]];delay(1);// }
// if(flag==1)// {
p2=0x0b;
p0=num1[shuzi[3]];delay(1);// } // if(flag==2)// {
p2=0x0d;
p0=num1[shuzi[0]];delay(1);// } // if(flag==3)// {
p2=0x0e;p0=num1[shuzi[1]];delay(1);// } }
//**************************dht11
測
試
某
塊*************************************// void start()//開始信號
{
dht=1;
delay1();
//主機發(fā)出8us高電平,開始信號開始發(fā)出 dht=0;
delay(25);
// 主機把總線拉低必須大于18ms
dht11能檢測到起始信號
dht=1;
//delay1();
//以下三個延時函數(shù)差不多為24usdelay1();delay1();
20-40us
}
uchar receive_byte()
//接收一個字節(jié) 8位// {
uchar i,temp;
for(i=0;i<8;i++)//接收8bit的數(shù)據(jù)
{
while(!dht);
//等待40-50us的低電平開始信號結束
delay1();
//開始信號結束之后延時26us-28us
delay1();delay1();
temp=0;
//時間為26us-28usif(dht==1)
temp=1;
//如果26us-28us
'0'
數(shù)據(jù)為'1'
while(dht);
//
'0'為26us-28us
'1'為70us
} data_byte<<=1;
//data_byte|=temp;
//接收每一位的數(shù)據(jù),相或保存數(shù)據(jù)
return data_byte;}
void receive()//接收數(shù)據(jù)// {
uchar t_h,t_l,r_h,r_l,check,num_check,i;start();
//開始信號//調用開始信號子函數(shù)
dht=1;
//主機設為輸入判斷從機dht11響應信號
if(!dht)
//判斷從機是否有低電平響應信號// {
while(!dht);//判斷從機發(fā)出 40us 的低電平響應信號是否結束//
while(dht);
//判斷從機發(fā)出 40us 的高電平是否結束 如結束則從機進入發(fā)送數(shù)據(jù)狀態(tài),主機進入數(shù)據(jù)接收狀態(tài)
數(shù)
//兩個while語句加起來就是dht11的響應信號
r_h=receive_byte();//濕度高位
調用接受一個字節(jié)的子函
r_l=receive_byte();//濕度低位
t_h=receive_byte();//溫度高位
t_l=receive_byte();//溫度低位
check=receive_byte();//校驗位
//結束信號
dht=0;
//當最后一bit數(shù)據(jù)接完畢后主機拉低電平50us// for(i=0;i<7;i++)//差不多8us的延時
delay1();
dht=1;
//總線由上拉電阻拉高進入空閑狀態(tài)
num_check=r_h+r_l+t_h+t_l;
if(num_check==check)//判斷讀到的四個數(shù)據(jù)之和是否與校驗位相同
{
rh=r_h;
rl=r_l;
th=t_h;
tl=t_l;
check=num_check;}
shuzi[0]=rh/10;shuzi[1]=rh%10;shuzi[2]=th/10;shuzi[3]=th%10;
} }
void main()//主函數(shù)模塊// { while(1)
//進入死循環(huán)
{
receive();
//接收數(shù)據(jù)
display();
} }
eda課程設計題目 eda課程設計數(shù)字時鐘篇五
考試序號:28
自動打鈴系統(tǒng)設計說明書
學 生 姓 名:周文江
學
號:14112502521
專 業(yè) 班 級:1102
報告提交日期:2013.11.26
湖 南 理 工 學 院 物 電 學 院
目錄
一、題目及要求簡介……………3 1.設計題目…………………3 2.總體要求簡介……………3
二、設計方案說明……………3
三、系統(tǒng)采用器件以及模塊說明………3 1.系統(tǒng)框圖…………4 2.選擇的fpga芯片及配置………4 3.系統(tǒng)端口和模塊說明…………5
四、各部分仿真結果………5
五、調試及總結………6
六、參考文獻……7
七、附錄………7
一、題目及要求簡介
1、設計題目
設計一個多功能自動打鈴系統(tǒng)
2、總體要求簡介
① 基本計時和顯示功能(24小時制顯示),包括:
1.24小時制顯示 2.動態(tài)掃描顯示; 3.顯示格式:88-88-88 ② 能設置當前時間(含時、分)③ 能實現(xiàn)基本打鈴功能,規(guī)定:
06:00起床鈴,打鈴5s
二、設計方案說明
本次設計主要采用verilog hdl硬件描述性語言、分模塊法設計的自動打鈴系統(tǒng)。由于這次用的開發(fā)板提供的是50m晶振。首先要對時鐘進行分頻,當計時到2fa_f07f時完成1s分頻,通過計時到60s產(chǎn)生分鐘進位信號,再通過60分鐘產(chǎn)生時鐘進位信號。最后通過6個寄存器對時分秒進行鎖存最終輸出到8個數(shù)碼管上完成顯示。當顯示時鐘和默認鬧鐘時鐘相等時,驅動打鈴模塊。通過key_mode,key_turn,key_change查看鬧鐘,時鐘顯示,調整時鐘。
三、系統(tǒng)采用器件以及模塊說明
1.系統(tǒng)框圖如下:
:下如圖框統(tǒng)系
2.選擇的fpga芯片及配置:本次系統(tǒng)設計采用的fpga芯片是alter公司生產(chǎn)的cyclone ii ep2c8q208c8。該芯片是208個管腳,138個io,并且具有兩個內部pll,而且內嵌乘法器,8k的邏輯門,資源相當豐富。完成這次自動打鈴系統(tǒng)的設計總共消耗250個le單元,22個io口,131個寄存器。經(jīng)過綜合后,本系統(tǒng)最高能實現(xiàn)145m的運行速度。通過quartus ii 軟件觀察到內部的rtl圖如下
3.系統(tǒng)端口和模塊說明
(1)分頻部分
分頻器的作用是對50mhz的系統(tǒng)時鐘信號進行分頻,得到頻率為1hz的信號,即為1s的計時信號。
(2)按鍵部分
按鍵key_mode--0為顯示計時,1為鬧鐘顯示,2為調整時間。按鍵key_turn—0為調整小時,1為調整分鐘。按鍵key_change—每按一次加1(3)計時部分
通過sec_l,sec_h,min_l,min_h,hour_l,hour_h 6個寄存器對時分秒進行鎖存然后送入數(shù)碼管顯示
(4)鬧鐘模塊
當設定的鬧鐘時間和數(shù)碼管上顯示的時間相等時驅動鬧鐘,完成打鈴,持續(xù)時間5s。
(5)數(shù)碼管顯示模塊
顯示模塊是由8個位選8個段選構成的顯示模塊,利用人眼的余暉效果完成動態(tài)掃描,顯示時間。
四、各部分仿真結果
測試文件如下:
module clock_tb;reg sysclk,rst_b;reg key_mode,key_turn,key_change;wire buzzer;
wire [7:0] led_sel,led_data;clock i_clock(.sysclk(sysclk),.rst_b(rst_b),.key_mode(key_mode),.key_change(key_change),.key_turn(key_turn),.buzzer(buzzer),.led_sel(led_sel),.led_data(led_data));initial begin sysclk = 1'b1;rst_b = 1'b0;//復位信號
#30 rst_b = 1'b1;end always #10 sysclk = ~sysclk;//輸入的系統(tǒng)時鐘,20ns的周期 endmodule
五、調試及總結
本次課程設計總共花費了四天左右的時間,設計了自動打鈴系統(tǒng)。通過這次的設計更加熟悉了對eda技術的了解和認識,在中也發(fā)現(xiàn)許多不足的地方。使用了自頂而下的設計方法,使得設計更加的簡單和明了。在調試過程中,有些代碼的設計不規(guī)范性,導致時序相當緩慢,甚至編譯綜合都會報錯。在不斷的修改下,發(fā)現(xiàn)時序電路和組合邏輯最好分開寫,這樣便于查錯,和修改代碼。畢竟verilog hdl語言不同于c語言,不能以軟件的思想來設計,而是要利用電路的思想來編程,這樣可以更好的節(jié)省資源,使得時序也比較的簡單明了。在以后的學習及程序設計當中,我們一定要倍加小心,在程序出現(xiàn)不正常運行的情況下要耐心調試,盡量做到精益求精。
最后通過這次eda方面的課程設計,提高了我們對eda領域及通信電路設計領域的認識,有利于培養(yǎng)我們在通信電路eda方面的設計能力。有利于鍛煉我們獨立分析問題和解決問題的能力。
六、文獻參考
[1].王金明、左自強 編,《eda技術與verilog設計》科學出版社
2008.8 [2].杜慧敏、李宥謀、趙全良 編,《基于verilog的fpga設計基礎》 西安電子科技大學出版社 2006.2 [3].韓彬 編,《從零開始走進fpga世界》杭州無線電愛好者協(xié)會出版社 2011.8.20
七、附錄(實物圖及源碼)
module clock(//input
sysclk,rst_b,key_mode,key_change,key_turn,//output
buzzer,led_sel,led_data);
input sysclk,rst_b;//sysclk--global system clock,rst_b--global reset signal input key_mode;//mode choose.0--timing function.1--alarm clock function.2--adjust function input key_turn;//choose adjust minute or hour input key_change;//count add 1 output buzzer;//device buzzer output [7:0] led_sel;//led tube bit choose
output [7:0] led_data;//led_tube 8 bit data choose
parameter init_hour = 8'h12;parameter init_min = 8'h59;parameter init_sec = 8'h50;//initial time :12:59:50 parameter init_alarm_hour = 8'h06;parameter init_alarm_min = 8'h30;//initial alarm time : 06:30:0 parameter count_1s = 28'h2fa_f07f;//count time 1s;
reg [7:0] sec;reg [7:0] min;reg [7:0] hour;reg [3:0] min_l;//minute low 4 bit reg [3:0] min_h;//minute high 4 bit reg [3:0] hour_l;//hour low 4 bit reg [3:0] hour_h;//hour high 4 bit reg [23:0] key_time;//press key away shake reg key_mode_n;//press key_mode next state reg key_change_n;//press key_change next state reg key_turn_n;//press key_turn next state wire key_mode_press;//sure button press key_mode wire key_turn_press;//sure button press key_turn wire key_change_press;//sure button press key_change
always @(posedge sysclk)key_mode_n <= key_mode;assign key_mode_press =(!key_mode)&&(key_mode_n);always @(posedge sysclk)key_turn_n <= key_turn;assign key_turn_press =(!key_turn)&&(key_turn_n);always @(posedge sysclk)key_change_n <= key_change;assign key_change_press =(!key_change)&&(key_change_n);
always @(posedge sysclk or negedge rst_b)begin if(!rst_b)key_time <= 24'h0;else if(key_time!= 24'h0)
key_time <= key_time + 24'h1;else if((key_time == 24'h0)&&(key_mode_press || key_change_press || key_turn_press))key_time <= key_time + 24'h1;
end
reg [1:0] mode_num;//key mode..0--timing function.1--alarm clock function.2--adjust function always @(posedge sysclk or negedge rst_b)begin if(!rst_b)mode_num <= 2'b00;else if(mode_num == 2'h3)mode_num <= 2'h0;else if(key_mode_press &&(key_time == 24'h0))
mode_num <= mode_num + 2'h1;end
always @(*)begin if(mode_num == 2'h1)begin
min = init_alarm_min;hour = init_alarm_hour;end else begin
min = {min_h,min_l};hour = {hour_h,hour_l};end end
reg fm;//choose turn hour or minute always @(posedge sysclk or negedge rst_b)begin if(!rst_b)fm <= 1'b0;else if(key_turn_press &&(mode_num == 2'h2)&&(key_time == 24'h0))
fm <= ~fm;end
reg [27:0] time_cnt;///count time reg [27:0] time_cnt_n;//count time next state always @(posedge sysclk or negedge rst_b)begin if(!rst_b)time_cnt <= 28'h0;else time_cnt <= time_cnt_n;end
always @(*)begin if(time_cnt == count_1s)time_cnt_n <= 28'h0;else if(mode_num!= 2'h0)time_cnt_n <= time_cnt;else time_cnt_n <= time_cnt + 28'h1;end
reg [3:0] sec_l;//second low 4 bit reg [3:0] sec_h;//second high 4 bit wire sec_cb;//second carry bit signal assign sec_cb =(sec_l == 4'h9)&&(sec_h == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
sec_l <= init_sec[3:0];sec_h <= init_sec[7:4];end else if((sec_l == 4'h9)&&(sec_h!= 4'h5)&&(time_cnt == count_1s))begin
sec_l <= 4'h0;sec_h <= sec_h + 4'h1;end else if(sec_cb &&(time_cnt == count_1s))begin
sec_l <= 4'h0;sec_h <= 4'h0;end else if(time_cnt == count_1s)
sec_l <= sec_l + 4'h1;end
wire min_cb;//minute carry bit signal assign min_cb =(min_l == 4'h9)&&(min_h == 4'h5);always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
min_l <= init_min[3:0];min_h <= init_min[7:4];end else if((sec_cb)&&(min_l!=4'h9)&&(time_cnt == count_1s))
min_l <= min_l + 4'h1;else if((sec_cb)&&(min_l == 4'h9)&&(min_h!= 4'h5)&&(time_cnt == count_1s))begin
min_l <= 4'h0;min_h <= min_h + 4'h1;end else if((sec_cb)&&(min_cb)&&(time_cnt == count_1s))begin
min_l <= 4'h0;min_h <= 4'h0;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_l!= 4'h9))
min_l = min_l + 4'h1;else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==
24'h0)&&(min_l == 4'h9)&&(min_h!=4'h5))begin
min_l = 4'h0;min_h = min_h + 4'h1;end else if((fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(min_l == 4'h9)&&(min_h ==4'h5))begin
min_l = 4'h0;min_h = 4'h0;end end
always @(posedge sysclk or negedge rst_b)begin if(!rst_b)begin
hour_l <= init_hour[3:0];hour_h <= init_hour[7:4];end else if((sec_cb)&&(min_cb)&&(hour_l!= 4'h9)&&(hour_h!= 4'h2)&&(time_cnt == count_1s))
hour_l <= hour_l + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_l!= 4'h3)&&(hour_h == 4'h2)&&(time_cnt == count_1s))
hour_l <= hour_l + 4'h1;else if((sec_cb)&&(min_cb)&&(hour_l == 4'h9)&&(hour_h!= 4'h2)&&(time_cnt == count_1s))begin
hour_l <= 4'h0;hour_h <= hour_h + 4'h1;end else if((sec_cb)&&(min_cb)&&(hour_l == 4'h3)&&(hour_h == 4'h2)&&(time_cnt == count_1s))begin
hour_l <= 4'h0;hour_h <= 4'h0;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l!= 4'h9)&&(hour_h!=4'h2))
hour_l <= hour_l + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l!= 4'h3)&&(hour_h ==4'h2))
hour_l <= hour_l + 4'h1;else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time == 24'h0)&&(hour_l == 4'h9)&&(hour_h!=4'h2))begin
hour_l <= 4'h0;hour_h <= hour_h + 4'h1;end else if((!fm)&&(mode_num == 2'h2)&&(key_change_press)&&(key_time ==
24'h0)&&(hour_l == 4'h3)&&(hour_h ==4'h2))begin
hour_l <= 4'h0;hour_h <= 4'h0;end end
wire buzzer_en;assign buzzer_en =(init_alarm_min == {min_h,min_l})&&(init_alarm_hour == {hour_h,hour_l});
led_tube i_led_tube(.sysclk(sysclk),.rst_b(rst_b),.scan_time(24'h1f090),.data0({1'h1,sec_l}),.data1({1'h1,sec_h}),.data2({1'h1,4'ha}),.data3({1'h1,min[3:0]}),.data4({1'h1,min[7:4]}),.data5({1'h1,4'ha}),.data6({1'h1,hour[3:0]}),.data7({1'h1,hour[7:4]}),.led_data(led_data),.led_sel(led_sel));buzzer i_buzzer(.sysclk(sysclk),.rst_b(rst_b),.buzzer_en(buzzer_en),.buzzer(buzzer));endmodule