第一篇:EDA課設(shè)電子琴設(shè)計(jì).
武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 課程設(shè)計(jì)任務(wù)書
學(xué)生姓名:-專業(yè)班級:電子科學(xué)與技術(shù)0903班 指導(dǎo)教師: 李成軍 工作單位: 信息工程學(xué)院 題 目: 簡易電子琴設(shè)計(jì) 初始條件:
QUARTUS 軟件,微機(jī),EDA-IV型實(shí)驗(yàn)箱。課題要求:
結(jié)合所學(xué)的知識,利用QUARTUS采用VHDL語言設(shè)計(jì)樂曲演奏電路,可以演奏8個(gè)音符:1、2、3、4、5、6、7、1。
課題內(nèi)容: 時(shí)間安排: 1、2011年6月11日集中,聽老師作課設(shè)安排與報(bào)告格式要求說明。2、2012年6月12日至6月16日,選好課題,學(xué)習(xí)相關(guān)資料,開始課 設(shè)。3、2012年6月17日至6月19日,進(jìn)行硬件調(diào)試。4、2012年6月20至6月21日,撰寫實(shí)驗(yàn)報(bào)告。5、2012年6月22日,檢查硬件,進(jìn)行答辯,提交設(shè)計(jì)報(bào)告。
設(shè)計(jì)一個(gè)簡易的八音符電子琴,可以通過按鍵輸入來控制蜂鳴器輸出不同音調(diào)。指導(dǎo)教師簽名: 2012年 月 日 系主任(或責(zé)任教師)簽名: 2012年 月 日 武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 目錄
摘要................................................................................................................................3 Abstract..........................................................................................................................4 緒論................................................................................................................................5 1設(shè)計(jì)簡介.....................................................................................................................6 1.1 課程設(shè)計(jì)的目的..............................................................................................6 1.2 課程設(shè)計(jì)的內(nèi)容..............................................................................................6 2.VHDL簡介.................................................................................................................7 2.1 VHDL的特點(diǎn)...................................................................................................7 2.2VHDL特點(diǎn)........................................................................................................8 2.3VHDL設(shè)計(jì)流程...............................................................................................8 3程序過程.....................................................................................................................9 3.1設(shè)計(jì)總體模塊...................................................................................................9 3.2模塊原理及程序...............................................................................................9
4波形仿真...................................................................................................................12 5總結(jié)體會...................................................................................................................13 參考文獻(xiàn)......................................................................................................................14 附錄 源程序................................................................................................................15 武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 摘要
隨著基于CPLD的EDA技術(shù)的發(fā)展和應(yīng)用領(lǐng)域的擴(kuò)大與深入,EDA技術(shù)在電子信息、通信、自動控制用計(jì)算機(jī)等領(lǐng)域的重要性日益突出。作為一個(gè)學(xué)電子信息專業(yè)的學(xué)生,我們必須不斷地了解更多的新產(chǎn)品信息,這就更加要求我們對EDA有個(gè)全面的認(rèn)識。本程序設(shè)計(jì)的是簡易電子琴的設(shè)計(jì)。采用EDA作為開發(fā)工具,VHDL語言為硬件描述語言,QUARTUS作為程序運(yùn)行平臺,所開發(fā)的程序通過調(diào)試運(yùn)行、波形仿真驗(yàn)證,初步實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)。本程序使用的硬件描述語言VHDL,可以大大降低了硬件數(shù)字系統(tǒng)設(shè)計(jì)的入門級別,讓人感覺就是C語言的近親。通過老師的指導(dǎo)和自己的學(xué)習(xí)完成了預(yù)想的功能。關(guān)鍵詞:電子琴 ;quartus;EDA;VHDL語言 武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì)
Abstract With the expansion and deepening of CPLD EDA technology development and applications, EDA technology in the electronic information, communication, automatic control computers and other areas of importance have become increasingly prominent.As an electronic information of professional students, we must continue to learn more about the new product information, it is even more we have a comprehensive understanding of EDA.The program design is the design of simple keyboard.Using EDA as a development tool, VHDL language for hardware description language, QUARTUS run as a program platform, the development of program debugging and running, the waveform simulation, the initial realization of the design goals.This program uses the hardware description language VHDL, can greatly reduce the entry level of the hardware design of digital systems, and close relatives of people feel is the C language.Through the guidance of their teachers and their own learning to complete the desired function.Keywords: electronic organ;the quartus;the EDA;VHDL language 武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì)
緒論
EDA是電子設(shè)計(jì)自動化(Electronic Design Automation)的縮寫。EDA技術(shù)就是依賴功能強(qiáng)大的計(jì)算機(jī),在EDA工具軟件平臺上,對以硬件描述語言
HDL(Hardware Description Language)為系統(tǒng)邏輯描述手段完成的設(shè)計(jì)文件,自動地完成邏輯編譯、化簡、分割、綜合、布局布線以及邏輯優(yōu)化和仿真測試,直至實(shí)現(xiàn)既定的電子線路系統(tǒng)功能。EDA技術(shù)使設(shè)計(jì)者的工作僅局限于利用軟件的方式來完成對系統(tǒng)硬件功能的實(shí)現(xiàn),可以說EDA技術(shù)的產(chǎn)生與發(fā)展是電子設(shè)計(jì)技術(shù)的一個(gè)巨大進(jìn)步。EDA技術(shù)融合了眾多電子設(shè)計(jì)技術(shù)和計(jì)算機(jī)輔助技術(shù),使得它在現(xiàn)代電子學(xué)方面的應(yīng)用越來越廣泛,也成為電子、電氣類大學(xué)生必須熟練掌握的一種設(shè)計(jì)工具。
硬件描述性語言HDL是EDA技術(shù)的重要組成部分,常見HDL的有VHDL、HDL、ABEL、Verilog、AHDL、SystemC等。其中VHDL、Verilog在現(xiàn)在的EDA設(shè)計(jì)中使用的最多,也擁有了幾乎所有主流EDA工具的支持,而相對于其他語言VHDL更加完善。VHDL是英文全名是VHSIC(Very High Speed Integrated Circuit)Hardware Description Language,是硬件描述語言的業(yè)界標(biāo)準(zhǔn)之一。它作為一個(gè)規(guī)范語言和建模語言,具有與具體硬件電路無關(guān)及設(shè)計(jì)平臺無關(guān)的特性,而且還有很強(qiáng)的電路行為描述和建模能力,能從多個(gè)層次的數(shù)字系統(tǒng)進(jìn)行建模和描述,從而大大簡化了硬件設(shè)計(jì)的任務(wù),提高了設(shè)計(jì)效率和可靠性。武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 1設(shè)計(jì)簡介
1.1 課程設(shè)計(jì)的目的
鞏固和運(yùn)用所學(xué)課程,理論聯(lián)系實(shí)際,提高分析、解決計(jì)算機(jī)技術(shù)實(shí)際問題的獨(dú)立工作能力,通過對一個(gè)簡易的八音符電子琴的設(shè)計(jì),進(jìn)一步加深對計(jì)算機(jī)原理以及數(shù)字電路應(yīng)用技術(shù)方面的了解與認(rèn)識,進(jìn)一步熟悉數(shù)字電路系統(tǒng)設(shè)計(jì)、制作與調(diào)試的方法和步驟。鞏固所學(xué)課堂知識,理論聯(lián)系實(shí)際,提高分析、解決計(jì)算機(jī)技術(shù)實(shí)際問題的獨(dú)立工作能力。為了進(jìn)一步了解計(jì)算機(jī)組成原理與系統(tǒng)結(jié)構(gòu),深入學(xué)習(xí)EDA技術(shù),用VHDL語言去控制將會使我們對本專業(yè)知識可以更好地掌握。
1.2 課程設(shè)計(jì)的內(nèi)容
設(shè)計(jì)一個(gè)簡易的八音符電子琴,它可通過按鍵輸入來控制音響。當(dāng)按下不同按鍵時(shí),蜂鳴器發(fā)出不同頻率聲響,來實(shí)現(xiàn)簡易電子琴功能。
武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 2.VHDL簡介 2.1 VHDL的特點(diǎn)
VHDL語言功能強(qiáng)大、設(shè)計(jì)靈活。VHDL語言可以用簡潔明確的源代碼來描述復(fù)雜的邏輯控制,它具有多層次的設(shè)計(jì)描述功能,層層細(xì)化,最后可直接生成電路級描述。VHDL支持同步電路、異步電路和隨機(jī)電路的設(shè)計(jì),這是其他硬件描述語言雖不能比擬的。VHDL還支持多種設(shè)計(jì)方法,既支持自底向上的設(shè)計(jì),又支
持自頂向下的設(shè)計(jì);既支持模塊化設(shè)計(jì),又支持層次化設(shè)計(jì)。由于VHDL已經(jīng)成為IEEE標(biāo)準(zhǔn)所規(guī)定的硬件描述性語言,目前大多數(shù)EDA工具幾乎都支持VHDL。因?yàn)閂HDL易讀和結(jié)構(gòu)化且易于修改設(shè)計(jì)所以在硬件電路設(shè)計(jì)過程中,VHDL語言得到廣泛應(yīng)用。
VHDL語言獨(dú)立于器件的設(shè)計(jì)與工藝無關(guān)。因而設(shè)計(jì)人員用VHDL進(jìn)行設(shè)計(jì)時(shí),不需要考慮選擇器件得問題,就可以集中精力進(jìn)行設(shè)計(jì)的優(yōu)化。當(dāng)設(shè)計(jì)描述完成后,可以用多種不同的器件結(jié)構(gòu)來實(shí)現(xiàn)其功能。
VHDL語言易于共享和復(fù)用。VHDL采用基于庫(Library)的設(shè)計(jì)方法,可以建立各種可再次利用的模塊。這些模塊可以預(yù)先設(shè)計(jì)或使用以前設(shè)計(jì)中的存檔模塊,將這些模塊存放到庫中,就可以在以后的設(shè)計(jì)中進(jìn)行復(fù)用,可以使設(shè)計(jì)成果在設(shè)計(jì)人員之間進(jìn)行交流和共享,減少硬件電路設(shè)計(jì)。VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早期就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對設(shè)計(jì)進(jìn)行仿真模擬。
VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了它具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。這個(gè)特點(diǎn)很好的符合了市場需求。對于用VHDL完成的一個(gè)確定的設(shè)計(jì),可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動的把VHDL描述的設(shè)計(jì)轉(zhuǎn)變成門級網(wǎng)表。
總之,由于VHDL語言有的這些優(yōu)良的特點(diǎn),它被廣泛的應(yīng)用在電子線路和電子系統(tǒng)的設(shè)計(jì)中。
武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 2.2VHDL優(yōu)點(diǎn)
(1)與其他的硬件描述語言相比,VHDL具有更強(qiáng)的行為描述能力,從而決定了他成為系統(tǒng)設(shè)計(jì)領(lǐng)域最佳的硬件描述語言。強(qiáng)大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)的重要保證。
(2)VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早期就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對設(shè)計(jì)進(jìn)行仿真模擬。
(3)VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。符合市場需求的大規(guī)模系統(tǒng)高效,高速的完成必須有多人甚至多個(gè)代發(fā)組共同并行工作才能實(shí)現(xiàn)。(4)對于用VHDL完成的一個(gè)確定的設(shè)計(jì),可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動的把VHDL描述設(shè)計(jì)轉(zhuǎn)變成門級網(wǎng)表。
(4)VHDL對設(shè)計(jì)的描述具有相對獨(dú)立性,設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)器件是什么,而進(jìn)行獨(dú)立的設(shè)計(jì)。
2.3VHDL設(shè)計(jì)流程
(1)設(shè)計(jì)輸入根據(jù)電路設(shè)計(jì)所提出的要求,將程序輸入到VHDL編輯器中去編輯。
(2)功能級模擬用VHDL,模擬器對編輯后的程序進(jìn)行模擬,如果達(dá)不到設(shè)計(jì)要求,則可以重新修改程序,直到通過功能模擬。
(3)邏輯綜合與優(yōu)化 將通過功能模擬的程序放到VHDL編譯器中,進(jìn)行邏輯綜合與優(yōu)化。
(4)門級模擬對電路用VHDL。仿真器仿真??蓪﹂T級電路的延時(shí)、定時(shí)狀態(tài)、驅(qū)動能力等進(jìn)行仿真。如不符合要求,可重復(fù)步驟(3),再門級模擬,直到符合要求止。
(5)版圖生成 用相應(yīng)的軟件處理后,就可以拿去制版。武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 3程序過程 3.1設(shè)計(jì)總體模塊
圖3-1電子琴總體模塊
Clk為實(shí)驗(yàn)板時(shí)鐘輸入,key[7..0]分別對應(yīng)八個(gè)按鍵輸入,buz為輸出端,連接蜂鳴器。
3.2模塊原理及程序 1、2、3、4、5、6、7、1分別對應(yīng)的頻率分別為2616HZ、2936HZ、3295HZ、3490HZ、3920HZ、4399HZ、4940HZ、5232HZ。在程序里可以對20M時(shí)鐘頻率進(jìn)行分頻來得到所需頻率而發(fā)出不同音調(diào)。
20M時(shí)鐘要得到上面所需頻率需要進(jìn)行分頻,分頻系數(shù)分別為3822、3405、3034、2865、2551、2273、2024、1911,可以令時(shí)鐘計(jì)數(shù)一定次數(shù)后反向從而達(dá)到分頻的效果得到所需不同音調(diào)對應(yīng)的頻率。程序中定義8個(gè)常數(shù)來作為計(jì)數(shù)對應(yīng)值:
constant duo : std_logic_vector(12 downto 0):=“0111011101110”;constant lai : std_logic_vector(12 downto 0):= “0110101001101”;constant mi : std_logic_vector(12 downto 0):= “0101111011010”;constant fa : std_logic_vector(12 downto 0):= “0101100110001”;constant suo : std_logic_vector(12
downto 0):= “0100111110111”;constant la : std_logic_vector(12 downto 0):= “0100011100001”;constant xi : std_logic_vector(12 downto 0):= “0011111101000”;武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì)
constant duo1 : std_logic_vector(12 downto 0):= “0011101110111”;8個(gè)按鍵分別對應(yīng)8個(gè)頻率的脈沖,當(dāng)一個(gè)按鍵按下去后此時(shí)該按鍵對應(yīng)引腳輸入高電平,故可利用“01000000”這種形式來表示哪個(gè)按鍵按下,而不同按鍵對應(yīng)不同頻率輸出。對應(yīng)關(guān)系分別為:
“10000000”對應(yīng)1的頻率; “01000000”對應(yīng)2的頻率; “00100000”對應(yīng)3的頻率;
“00010000”對應(yīng)4的頻率; “00001000”對應(yīng)5的頻率; “00000100”對應(yīng)6的頻率; “00000010”對應(yīng)7的頻率; “00000001”對應(yīng)1的頻率;
故可用以下程序來實(shí)現(xiàn)不同按鍵對應(yīng)不同頻率的要求:
when“10000000”=>if(clk1 /= duo)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;
(clk1 /= lai)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00100000”=>if(clk1 /= mi)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì)
when“00010000”=>if(clk1 /= fa)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00001000”=>if(clk1 /= suo)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00000100”=>if(clk1 /= la)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00000010”=>if(clk1 /= xi)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00000001”=>if(clk1 /= duo1)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when others=>null;武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 4波形仿真
圖4-1 波形仿真圖
由仿真波形可以看到,當(dāng)按鍵輸入不同值時(shí),蜂鳴器也將發(fā)出不同頻率聲響。武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì)
5總結(jié)體會
經(jīng)過努力,簡易電子琴的設(shè)計(jì)基本上完成了。在整個(gè)設(shè)計(jì)過程中,包括前期中期和后期,我都有著許多不同的體會:
1)這個(gè)設(shè)計(jì)的基本是接觸一門新的語言并加以應(yīng)用,對于我來說,沒有想到的是入手的速度比我的預(yù)料快,在以前編程的基礎(chǔ)上,從接觸到開始動手編程的時(shí)間得到了很大的縮短。知識的接收速度在很大的程度上決定了動手的時(shí)間。
2)VHDL的編程與C語言的編程有著本質(zhì)的不同,然而以往形成的舊編程習(xí)慣在VHDL編程中依然起著很大的作用。一通百通,不是沒有道理的。對于學(xué)習(xí)新的知識并予以應(yīng)用的信心,顯得更足了。
3)VHDL的設(shè)計(jì)關(guān)鍵是電路邏輯設(shè)計(jì),而一個(gè)程序的關(guān)鍵是總體設(shè)計(jì)。對于硬件設(shè)計(jì)接觸不多的我們清楚這一點(diǎn)也許不無好處。
4)通過這個(gè)程序設(shè)計(jì)讓我學(xué)會一種新的語言,對數(shù)字系統(tǒng)結(jié)構(gòu)也有了更進(jìn)一步的了解和認(rèn)識,對我以后的學(xué)習(xí)有很大的幫助。希望其他人在看再做類似設(shè)計(jì)時(shí)有所借鑒。
通過幾天的課程設(shè)計(jì),我對數(shù)據(jù)庫軟件EDA技術(shù)、VHDL、等系列知識都有了一定的了解。使用EDA技術(shù)開發(fā)頁面的能力也有了很大提高。武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì)
參考文獻(xiàn)
[1]潘松 黃繼業(yè).EDA技術(shù)與VHDL(第二版).北京:清華大學(xué)出版社,2005.7 [2]康華光.電子技術(shù)基礎(chǔ).北京:高等教育出版社.2006.1 [3]付家才.EDA工程實(shí)踐技術(shù).北京:化學(xué)工業(yè)出版社,2007.1 [4]漢澤西.EDA技術(shù)及其應(yīng)用.北京:北京航空航天大學(xué)出版社,2004.5 [5]趙剛.EDA技術(shù)簡明教程.成都:四川大學(xué)出版社,2004.6 [6]章彬宏 周正林.EDA應(yīng)用技術(shù).北京:北京理工大學(xué)出版社,2007.7 [7]劉艷萍 高振斌 李志平.EDA實(shí)用技術(shù)及應(yīng)用.北京:國防工業(yè)出版社,2006.1
武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 附錄 源程序
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity music is port(clk:in std_logic;key:in std_logic_vector(7 downto 0);buz:out std_logic);end music;architecture beh of music is signal clk1:std_logic_vector(12 downto 0);constant duo : std_logic_vector(12 downto 0):=“0000000001110”;constant lai : std_logic_vector(12 downto 0):= “0000000001101”;constant mi : std_logic_vector(12 downto 0):= “0000000011010”;constant fa : std_logic_vector(12 downto 0):= “0000000010011”;constant suo : std_logic_vector(12 downto 0):= “0000000010010”;constant la : std_logic_vector(12 downto 0):= “0000000010001”;constant xi : std_logic_vector(12 downto 0):= “0000000010000”;constant duo1 : std_logic_vector(12 downto 0):= “0000000001111”;signal buzz:std_logic;signal key_out:std_logic_vector(7 downto 0);begin buz<=buzz;key_out<=key;process(clk)begin if clk'event and clk='1' then case key_out is when“10000000”=>if(clk1 /= duo)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“01000000”=>if(clk1 /= lai)then clk1<=clk1+“0000000000001”;
else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00100000”=>if(clk1 /= mi)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) buzz<=not buzz;end if;when“00010000”=>if(clk1 /= fa)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00001000”=>if(clk1 /= suo)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00000100”=>if(clk1 /= la)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00000010”=>if(clk1 /= xi)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when“00000001”=>if(clk1 /= duo1)then clk1<=clk1+“0000000000001”;else clk1<=“0000000000000”;buzz<=not buzz;end if;when others=>null;end case;end if;end process;end beh;武漢理工大學(xué)《電子線路EDA》課程設(shè)計(jì) 本科生課程設(shè)計(jì)成績評定表
指導(dǎo)教師簽字: 年 月 日
第二篇:EDA課設(shè)
EDA課程設(shè)計(jì)報(bào)告
課題名稱:智力競賽搶答器
班級:11電科2班
姓名:代維寬
學(xué)號:201114580207
同組人:聞仔遜
指導(dǎo)老師:賈默伊
任務(wù)書
一、用VHDL運(yùn)用層次化設(shè)計(jì)方法設(shè)計(jì)一個(gè)小型數(shù)字系統(tǒng)
題目:智力競賽搶答器
二、說明書內(nèi)容:
1.系統(tǒng)設(shè)計(jì)要求(功能)2.系統(tǒng)設(shè)計(jì)方案(包括頂層電路圖)3.VHDL源程序及仿真波形圖 4.課程設(shè)計(jì)注釋 5.設(shè)計(jì)解釋、說明 6.獨(dú)特之處
三、成績評定
1.設(shè)計(jì)內(nèi)容及掌握情況
2.說明書。包括電子檔(各類文件的可執(zhí)行性及說明書)和紙質(zhì)
3.答辯情況
目錄
第一章:系統(tǒng)設(shè)計(jì)
1系統(tǒng)設(shè)計(jì)要求???????????????????1 2系統(tǒng)設(shè)計(jì)方案???????????????????2 第二章:VHDL原程序及仿真波形圖
1、搶答啟動模塊??????????????????3(1)按鍵識別子模塊?????????????????3(2)倒計(jì)時(shí)子模塊??????????????????5
2、選手搶答模塊??????????????????7(1)單個(gè)選手按鍵子模塊???????????????7(2)判斷搶答選手子模塊???????????????9
3、加減分模塊???????????????????11(1)組別判斷子模塊?????????????????11(2)加減及寄存器子模塊???????????????12(3)分?jǐn)?shù)選擇輸出模塊????????????????15
4、顯示模塊????????????????????16
5、蜂鳴器模塊???????????????????18
第三章設(shè)計(jì)心得及總結(jié)
智力競賽搶答器
1系統(tǒng)設(shè)計(jì)要求
1.設(shè)計(jì)一智力競賽搶答器,可同時(shí)供8名選手參加比賽。2.給節(jié)目主持人設(shè)置一個(gè)控制開關(guān),控制系統(tǒng)清零和搶答開始。
3.搶答器具有鎖存功能和顯示功能。搶答開始后,若有選手按動搶答按鈕,編號立即鎖存,并在LED數(shù)碼管上顯示選手編號,同時(shí)揚(yáng)聲器響,禁止其他選手搶答。
4.搶答器具有搶答定時(shí)功能,時(shí)間由主持人確定。5.參賽選手在設(shè)定的時(shí)間內(nèi)搶答有效,定時(shí)器停止工作。
6.如果定時(shí)時(shí)間到,無人搶答,本次搶答無效,系統(tǒng)報(bào)警,并封鎖輸入電路,禁止超時(shí)搶答,定時(shí)器顯示00。
7.為每組設(shè)計(jì)一個(gè)計(jì)分電路,0~999分,可加分,也可減分。
對于一個(gè)搶答器系統(tǒng),可將其分為五個(gè)模塊:選手搶答模塊、搶答啟動模塊、加減分模塊、顯示模塊、蜂鳴器控制模塊。整體框圖如下:
圖一 總體框圖
其中搶答啟動模塊具有啟動搶答及啟動定時(shí)功能,輸出使能信號給選手識別模塊,以及搶答剩余時(shí)間給顯示模塊;選手識別模塊完成鎖存搶答信號的功能,并輸出選手號給顯示模塊;蜂鳴器對搶答成功以及超時(shí)鳴聲報(bào)警;顯示模塊對輸入的數(shù)據(jù)進(jìn)行顯示。
2系統(tǒng)設(shè)計(jì)方案
智力競賽搶答器擬由單片CPLDFPGA來實(shí)現(xiàn),經(jīng)分析設(shè)計(jì)要求,擬定整個(gè)系統(tǒng)由五個(gè)單元組成,原理圖如下所示:
主要VHDL源程序
1、搶答啟動模塊
啟動模塊除了有啟動的功能外,還有啟動定時(shí)的功能。定時(shí)時(shí)間分為5秒和20秒兩種,使用兩個(gè)按鍵對應(yīng)兩種限時(shí)搶答。
將本模塊再劃分為2個(gè)子模:一個(gè)模塊完成按鍵識別的功能,另一模塊完成倒計(jì)時(shí)功能。
1)按鍵識別子模塊
按鍵的識別即對輸入信號進(jìn)行電平變化檢測,電平發(fā)生跳變就認(rèn)為是鍵被按下。但VHDL程序中一個(gè)結(jié)構(gòu)體內(nèi)不能同時(shí)對兩個(gè)信號進(jìn)行電平跳變的檢測,所以對本模塊的程序設(shè)計(jì)采用狀態(tài)機(jī)來實(shí)現(xiàn),并使用統(tǒng)一的時(shí)鐘信號來掃描按鍵的電平狀態(tài)。模塊圖如下:
圖2 按鍵識別子模塊
對START5和START20兩個(gè)按鍵定義三種狀態(tài),START5按下為ST1狀態(tài),此時(shí)兩個(gè)按鍵“START5&START20”輸入電平為“01”;START20按下為ST2狀態(tài),此時(shí)電平為“10”;兩個(gè)都沒按下為ST0狀態(tài),此時(shí)電平為“11”。
本模塊程序?yàn)椋?/p>
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY START_5_20 IS PORT(CLK1,RST,START5,START20:IN STD_LOGIC;
B,A:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--輸出定時(shí)初值
S_FLAG:OUT STD_LOGIC);
--置數(shù)信號
END ENTITY;ARCHITECTURE ONE OF START_5_20 IS SIGNAL DATAIN:STD_LOGIC_VECTOR(1 DOWNTO 0);TYPE ST_TYPE IS(ST0,ST1,ST2);
--定義狀態(tài)
SIGNAL C_ST:ST_TYPE;BEGIN
DATAIN<=START5&START20;
--兩個(gè)輸入信號放在一起判斷 BEGIN
IF RST='0' THEN
--復(fù)位 B<=“0000”;A<=“0000”;C_ST<=ST0;S_FLAG<='0';ELSIF CLK1'EVENT AND CLK1='1' THEN CASE C_ST IS WHEN ST0=> IF DATAIN=“01” THEN
C_ST<=ST1;
--輸入信號為01,轉(zhuǎn)ST1狀態(tài) S_FLAG<='1';
--置數(shù)信號有效 B<=“0000”;A<=“0101”;
--定時(shí)初值“05” ELSIF DATAIN=“10” THEN
C_ST<=ST2;
--輸入信號為10,轉(zhuǎn)ST1狀態(tài)
S_FLAG<='1';
--置數(shù)信號有效 B<=“0010”;A<=“0000”;
--定時(shí)初值“20”
ELSE C_ST<=ST0;--輸入信號為11,保持ST0狀態(tài)
END IF;
C_ST<=ST0;--防按鍵抖動,為11時(shí)才轉(zhuǎn)ST0狀態(tài) S_FLAG<='0';
--置數(shù)信號無效
ELSE C_ST<=ST1;
--按鍵沒彈起,繼續(xù)等待
END IF;
ELSE C_ST<=ST2;END IF;PROCESS(RST,CLK1)WHEN ST1=>IF DATAIN=“11” THEN WHEN ST2=>IF DATAIN=“11” THEN C_ST<=ST0;S_FLAG<='0';WHEN OTHERS=>C_ST<=ST0;B<=“0000”;A<=“0000”;END CASE;END IF;END PROCESS;END ARCHITECTURE;本模塊仿真波形如圖所示。
圖3 按鍵識別模塊仿真波形
2)倒計(jì)時(shí)子模塊
倒計(jì)時(shí)需要1Hz的脈沖輸入,每來一個(gè)上升沿,進(jìn)行一次減一運(yùn)算,將結(jié)果輸出到TIMEB、TIMEA;置數(shù)信號LOAD輸入有效,讀入B、A端口的數(shù)據(jù);輸入L_CR信號與選手識別模塊連接,當(dāng)選手搶答成功后,L_CR信號為0,將倒計(jì)時(shí)清0.;若倒計(jì)時(shí)到,沒有選手搶答,則在SR1輸出1使揚(yáng)聲器發(fā)聲。同時(shí)輸出信號給選手搶答模塊,禁止選手搶答。
圖4倒計(jì)時(shí)模塊
本模塊程序?yàn)椋?/p>
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DE_COUNT IS PORT(CLK2,LOAD,L_CR,RST:IN STD_LOGIC;
B,A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE TWO OF DE_COUNT IS BEGIN
PROCESS(LOAD,L_CR,RST,CLK2)VARIABLE P1,P0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
IF LOAD='1' THEN P1:=B;P0:=A;
--指數(shù)信號有效,將B、A值讀入P1、P0 ELSIF L_CR='0' THEN
--有選手搶答成功,L_CR輸入為0,定時(shí)時(shí)間清0 P1:=“0000”;P0:=“0000”;TIMEOUT<='0';SR1<='1';ELSIF RST='0' THEN P1:=“0000”;P0:=“0000”;TIMEOUT<='0';SR1<='0';
ELSIF(CLK2'EVENT AND CLK2='1')THEN
IF P0=“0000” THEN
IF P1>0 THEN P1:=P1-1;P0:=“1001”;
--若個(gè)位為0,十位減1,個(gè)位賦為9 END IF;ELSE P0:=P0-1;
--若個(gè)位不為0,個(gè)位直接減一
IF P0=“0000” AND P1=“0000” THEN TIMEOUT<='0';SR1<='1';
--若時(shí)間到,輸出鎖存信號 END IF;END IF;
END IF;TIMEB<=P1;TIMEA<=P0;END PROCESS;END ARCHITECTURE;
程序中,因?yàn)槊看螠p一后的時(shí)間值需要保存,用于下次繼續(xù)減一,所以程序中使用了不完整的IF語句引入寄存器,用于保存每次減一后的時(shí)間值。P1、P0定義為變量而不是信號的原因是,變量的賦值是即時(shí)的,減一后可以馬上進(jìn)行判斷;若定義為信號,不能即時(shí)進(jìn)行判斷,并且減一操作后的賦值要經(jīng)過一個(gè)δ延時(shí),程序不好控制。
本模塊仿真波形如圖所示:
圖5 倒計(jì)時(shí)模塊仿真波形
用元件例化語句將以上兩個(gè)子模塊組合,得到整個(gè)搶答啟動模塊。如下圖所示:
圖6 由兩個(gè)子模塊組成搶答啟動模塊
兩個(gè)子模塊組合的程序?yàn)椋?/p>
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY STARTER IS PORT(CLK1,CLK2,L_CR,RST,START5,START20:IN STD_LOGIC;
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE THREE OF STARTER IS
COMPONENT START_5_20 IS
--調(diào)用元件START_5_20聲明
PORT(CLK1,RST,START5,START20:IN STD_LOGIC;
B,A:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
S_FLAG:OUT STD_LOGIC);END COMPONENT;COMPONENT DE_COUNT IS
--調(diào)用元件DE_COUNT聲明
PORT(CLK2,LOAD,L_CR,RST:IN STD_LOGIC;
B,A:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEB,TIMEA:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
TIMEOUT,SR1:OUT STD_LOGIC);END COMPONENT;SIGNAL m,n:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL p:STD_LOGIC;
--對應(yīng)圖7中的中間信號 BEGIN
--按照圖7將兩個(gè)元件連接起來
U1:START_5_20 PORT MAP(CLK1=>CLK1,START5=>START5,START20=>START20,RST=>RST,B=>m,A=>n,S_FLAG=>p);U2:DE_COUNT PORT MAP(CLK2=>CLK2,B=>m,A=>n,LOAD=>p,RST=>RST,L_CR=>L_CR,TIMEB=>TIMEB,TIMEA=>TIMEA, TIMEOUT=>TIMEOUT,SR1=>SR1);END ARCHITECTURE;
2、選手搶答模塊
在一個(gè)結(jié)構(gòu)體中用8個(gè)進(jìn)程同時(shí)對8個(gè)選手按鍵電平變化的監(jiān)測是不可實(shí)現(xiàn)的,所以將本模塊劃分為兩個(gè)子模塊:單個(gè)選手按鍵模塊和判斷搶答選手模塊。最后將8個(gè)選手按鍵模塊和1個(gè)判斷搶答選手模塊連接起來,得到整個(gè)選手搶答模塊。
1)單個(gè)選手按鍵子模塊
按鍵輸入相當(dāng)于該實(shí)體的時(shí)鐘信號,鍵被按下,等于來一個(gè)脈沖,輸出信號給判斷模塊進(jìn)行選手號的判斷。只要有選手搶答成功,相關(guān)模塊會輸出信號使8個(gè)按鍵模塊的LOCK信號有效,禁止其他選手搶答。如圖所示。
圖7 單個(gè)選手按鍵模
本模塊程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BUTTON1 IS PORT(LOCK , BUTTON , RST :IN STD_LOGIC;PRESSED:OUT STD_LOGIC);END ENTITY;ARCHITECTURE B1 OF BUTTON1 IS BEGIN
PROCESS(RST , BUTTON)
--使用進(jìn)程時(shí)刻監(jiān)測RST、BUTTON信號 BEGIN
IF RST='0' THEN
PRESSED<='0';
--復(fù)位
IF LOCK='1' THEN
--鍵被按下并且LOCK信號無效 PRESSED<='1';
--則輸出信號給判斷模塊 END IF;ELSIF BUTTON'EVENT AND BUTTON='0' THEN END IF;END PROCESS;END ARCHITECTURE;
圖8 倒計(jì)時(shí)模塊仿真波形
2)判斷搶答選手子模塊
本子模塊接收8個(gè)按鍵子模塊的輸出信號,如收到1號子模塊輸出的高電平,則輸出選手號“0001”;并發(fā)出信號使揚(yáng)聲器發(fā)聲并控制8個(gè)按鍵子模塊使它們的LOCK信號有效,禁止其他選手搶答。本子模塊端口設(shè)置如圖所示。
圖9判斷選手模塊
本子模塊程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY IDENTIFIER IS
PORT(PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);LOCK,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF IDENTIFIER IS
SIGNAL P:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN
P<=PP8&PP7&PP6&PP5&PP4&PP3&PP2&PP1;
--8個(gè)輸入放在一起判斷 BEGIN
CASE P IS
WHEN “00000001”=>P_NUM<=“0001”;LOCK<='0';SR1<='1';--1號選手 WHEN “00000010”=>P_NUM<=“0010”;LOCK<='0';SR1<='1';--2號選手 WHEN “00000100”=>P_NUM<=“0011”;LOCK<='0';SR1<='1';--3號選手 WHEN “00001000”=>P_NUM<=“0100”;LOCK<='0';SR1<='1';--4號選手 WHEN “00010000”=>P_NUM<=“0101”;LOCK<='0';SR1<='1';--5號選手 WHEN “00100000”=>P_NUM<=“0110”;LOCK<='0';SR1<='1';--6號選手 WHEN “01000000”=>P_NUM<=“0111”;LOCK<='0';SR1<='1';--7號選手 WHEN “10000000”=>P_NUM<=“1000”;LOCK<='0';SR1<='1';--8號選手 WHEN OTHERS=>P_NUM<=“0000”;LOCK<='1';SR1<='0';PRO1:PROCESS(P)
--輸入若發(fā)生變化,馬上啟動進(jìn)程進(jìn)行判斷
END CASE;END PROCESS;END ARCHITECTURE;9
圖10 判斷搶答選手模塊仿真波形
所以將以上兩個(gè)子模塊用元件例化語句連接起來,組成整個(gè)選手搶答模塊,如下圖所示
圖11 選手搶答模塊
實(shí)現(xiàn)程序?yàn)椋?/p>
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY BUTTON IS
PORT(P1,P2,P3,P4,P5,P6,P7,P8,RST,LOCK:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);LOCK_S,SR1:OUT STD_LOGIC);END ENTITY;ARCHITECTURE BB1 OF BUTTON IS COMPONENT BUTTON1 IS
--調(diào)用元件BUTTON1聲明
PORT(LOCK,B,RST:IN STD_LOGIC;PRESSED:OUT STD_LOGIC);END COMPONENT;COMPONENT IDENTIFIER IS
--調(diào)用元件IDENTIFIER聲明
PORT(PP1,PP2,PP3,PP4,PP5,PP6,PP7,PP8:IN STD_LOGIC;P_NUM:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);10 LOCK,SR1:OUT STD_LOGIC);END COMPONENT;SIGNAL a1,a2,a3,a4,a5,a6,a7,a8:STD_LOGIC;
--定義圖12中的中間信號 BEGIN
--按照圖12將兩個(gè)元件連接起來
U1:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P1,RST=>RST,PRESSED=>a1);U2:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P2,RST=>RST,PRESSED=>a2);U3:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P3,RST=>RST,PRESSED=>a3);U4:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P4,RST=>RST,PRESSED=>a4);U5:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P5,RST=>RST,PRESSED=>a5);U6:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P6,RST=>RST,PRESSED=>a6);U7:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P7,RST=>RST,PRESSED=>a7);U8:BUTTON1 PORT MAP(LOCK=>LOCK,B=>P8,RST=>RST,PRESSED=>a8);U9:IDENTIFIER PORT MAP(PP1=>a1,PP2=>a2,PP3=>a3,PP4=>a4,PP5=>a5,PP6=>a6,PP7=>a7,PP8=>a8,P_NUM=>P_NUM,LOCK=>LOCK_S,SR1=>SR1);END ARCHITECTURE;
3、加減分模塊
加減分模塊要識別按下的按鍵:加5分按鍵及減5分按鍵。所以采用狀態(tài)機(jī)的方法來識別。將本模塊劃分為三個(gè)子模塊:組別判斷子模塊,加減及寄存器子模塊,分?jǐn)?shù)選擇輸出子模塊。
1)組別判斷子模塊
該模塊要實(shí)現(xiàn)的功能是根據(jù)搶答成功的選手編號,判斷出該選手屬于哪組,并輸出使能信號允許該組的分?jǐn)?shù)寄存器進(jìn)行加減操作。如圖所示。
圖12 組別判斷模塊
實(shí)現(xiàn)程序?yàn)椋?/p>
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DECODE IS PORT(CLK:IN STD_LOGIC;P_NUM:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
EN1,EN2,EN3,EN4:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF DECODE IS
SIGNAL E:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
PROCESS(CLK)
--引入時(shí)鐘信號,協(xié)調(diào)各部分電路的工作
BEGIN IF CLK'EVENT AND CLK='1' THEN
CASE P_NUM IS WHEN “0001”=>E<=“0001”;WHEN “0010”=>E<=“0001”;--
1、2號選手屬第一組
WHEN “0011”=>E<=“0010”;WHEN “0100”=>E<=“0010”;--
3、4號選手屬第二組 WHEN “0101”=>E<=“0100”;WHEN “0110”=>E<=“0100”;--
5、6號選手屬第三組 WHEN “0111”=>E<=“1000”;WHEN “1000”=>E<=“1000”;--
7、8號選手屬第四組 WHEN OTHERS=>E<=“0000”;
--其他情況則四個(gè)分?jǐn)?shù)鎖存器都不工作
END CASE;END IF;
END PROCESS;
EN4<=E(3);EN3<=E(2);EN2<=E(1);EN1<=E(0);END ARCHITECTURE;程序仿真波形如圖所示:
圖13 組別判斷模塊仿真波形
2)加減及寄存器子模塊
本模塊的狀態(tài)機(jī)轉(zhuǎn)換過程為:將ADD和SUB信號并置,并檢測其電平變化。當(dāng)ADD按下時(shí),“ADD&SUB”的電平為“01”,彈起時(shí)恢復(fù)為“11”。當(dāng)SUB按下時(shí),“ADD&SUB”的電平為“10”,彈起時(shí)恢復(fù)為“11”。本模塊另外還需實(shí)現(xiàn)的功能是寄存功能。如下圖所示:
圖14 加減及寄存器模塊
實(shí)現(xiàn)程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY COUNTER1 IS PORT(CLK,EN:IN STD_LOGIC;
ADD,SUB:IN STD_LOGIC;
AA2,AA1,AA0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY;ARCHITECTURE ONE OF COUNTER1 IS SIGNAL A:STD_LOGIC_VECTOR(1 DOWNTO 0);TYPE ST_TYPE IS(ST0,ST1,ST2);SIGNAL C_ST:ST_TYPE;BEGIN A<=ADD&SUB;
--將ADD信號和SUB信號并置在一起判斷
PROCESS(CLK)VARIABLE P2,P1,P0:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN
IF EN='1' THEN
--使能端有效,才對該分?jǐn)?shù)寄存器進(jìn)行操作
IF CLK'EVENT AND CLK='1' THEN
CASE C_ST IS
WHEN ST0=>IF A=“01” THEN--A為“01”,說明ADD按下
C_ST<=ST1;
--下一狀態(tài)轉(zhuǎn)ST1,以等待按鍵彈起
IF P0=“1001” THEN--個(gè)位為9,進(jìn)1為0,再向十位進(jìn)1
P0:=“0000”;
IF P1=“1001” THEN
--十位為9,進(jìn)一為0
P1:=“0000”;
IF P2=“1001” THEN
--百位為9,進(jìn)一為0
P2:=“0000”;
ELSE P2:=P2+1;
--百位不為9,百位加1
END IF;
ELSE P1:=P1+1;
--十位不為9,加一
END IF;
ELSE P0:=P0+1;
--個(gè)位不為9,加一
END IF;
ELSIF A=“10” THEN
--A為“10”,說明SUB按下
C_ST<=ST2;--下一狀態(tài)轉(zhuǎn)ST2,以等待按鍵彈起
IF(P2/=0 OR P1/=0 OR P0/=0)THEN
IF P0=“0000” THEN P0:=“1001”;
P1:=P1-1;--個(gè)位向十位借1 P2:=P2-1;--十位向百位借1
IF P1=“0000” THEN
ELSE P1:=P1-1;--十位不為0,直接減1
END IF;
P1:=“1001”;
ELSE P0:=P0-1;--個(gè)位不為0,直接減1
END IF;
END IF;
ELSE C_ST<=ST0;
END IF;WHEN ST1=>IF A=“11” THEN
--A為“11”,說明按鍵彈起
C_ST<=ST0;
--回到ST0繼續(xù)監(jiān)視按鍵
ELSE C_ST<=ST1;--否則等待按鍵彈起
END IF;
C_ST<=ST0;WHEN ST2=>IF A=“11” THEN
ELSE C_ST<=ST2;
END IF;WHEN OTHERS=>C_ST<=ST0;END CASE;END IF;END IF;
AA2<=P2;AA1<=P1;AA0<=P0;
--操作后的分?jǐn)?shù)輸出 END PROCESS;END ARCHITECTURE;
加減及寄存器模塊仿真波形圖如下:
圖15 加減及寄存器模塊仿真波形
圖中,加分按鍵ADD按下,輸出“010”;減分按鍵SUB按下,輸出回到“000”;又來兩個(gè)加分按鍵,輸出“020”。當(dāng)EN信號無效時(shí),有按鍵按下輸出不變。
3)分?jǐn)?shù)選擇輸出模塊
四組分?jǐn)?shù)要顯示出來,需要12個(gè)7段數(shù)碼管。若只顯示當(dāng)前搶答成功選手的分?jǐn)?shù),則只需3個(gè)數(shù)碼管。所以設(shè)置一個(gè)分?jǐn)?shù)選擇器,根據(jù)搶答成功的選手編號,選擇其分?jǐn)?shù)輸出給顯示模塊顯示。
程序?yàn)椋?/p>
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY MUXX IS PORT(P_NUM,AA2,AA1,AA0,BB2,BB1,BB0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
CC2,CC1,CC0,DD2,DD1,DD0:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
D2,D1,D0:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ENTITY;ARCHITECTURE ONE OF MUXX IS BEGIN
PROCESS(P_NUM)
--P_NUM為選手編號
BEGIN
CASE P_NUM IS
WHEN “0001”=>D2<=AA2;D1<=AA1;D0<=AA0;WHEN “0010”=>D2<=AA2;D1<=AA1;D0<=AA0;--1號和2號選手為一組 WHEN “0011”=>D2<=BB2;D1<=BB1;D0<=BB0;WHEN “0100”=>D2<=BB2;D1<=BB1;D0<=BB0;--3號和4號選手為一組 WHEN “0101”=>D2<=CC2;D1<=CC1;D0<=CC0;WHEN “0110”=>D2<=CC2;D1<=CC1;D0<=CC0;--5號和6號選手為一組 WHEN “0111”=>D2<=DD2;D1<=DD1;D0<=DD0;WHEN “1000”=>D2<=DD2;D1<=DD1;D0<=DD0;--7號和8號選手為一組 WHEN OTHERS=>D2<=“0000”;D1<=“0000”;D0<=“0000”;
END CASE;
END PROCESS;END ARCHITECTURE;仿真波形如圖所示。
圖16分?jǐn)?shù)選擇輸出模塊仿真波形
4、顯示模塊
本模塊根據(jù)送來的數(shù)據(jù):搶答成功選手號,選手分?jǐn)?shù)、倒計(jì)時(shí)時(shí)間,將相應(yīng)的字形碼送數(shù)碼管顯示。端口設(shè)置如圖所示。
圖17顯示模塊
圖18數(shù)碼管分配
顯示0,“00111111”;3F;顯示1,“00000110”;06;顯示2,“01011011”;5B;顯示3,“01001111”;4F;顯示4,“01100110”;66;顯示5,“01101101”;6D;顯示6,“01111101”;7D;顯示7,“00000111”;07;顯示8,“01111111”;7F;顯示9,“01101111”;6F;顯示10,“00000000”;00;
17圖中,BT為數(shù)碼管的位選信號,SG為數(shù)碼管的段選信號。另外圖18為數(shù)碼管的分配。左起第一位為選手編號,第3、4位為該選手的分?jǐn)?shù),最后兩位為倒計(jì)時(shí)。程序如下:
LIBRARY IEEE;16
USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY DISPLAY IS
PORT(CLK:IN STD_LOGIC;SCORE2,SCORE1,SCORE0,P_NUMBER,TIMEB,TIMEA:IN BT,SG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
STD_LOGIC_VECTOR(3 DOWNTO 0);END ENTITY;ARCHITECTURE ONE OF DISPLAY IS SIGNAL CNT8:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL A:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN P1:PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN
--時(shí)鐘信號一來,顯示下一位 CNT8<=CNT8+1;END IF;END PROCESS;BEGIN
CASE CNT8 IS
WHEN “000”=>BT<=“10000000”;A<=P_NUMBER;--第一位顯示選手號
WHEN “001”=>BT<=“01000000”;A<=“1010”;
--第二位不用,滅
WHEN “010”=>BT<=“00100000”;A<=SCORE2;
--第三位顯示分?jǐn)?shù)百位
WHEN “011”=>BT<=“00010000”;A<=SCORE1;
--第四位顯示分?jǐn)?shù)十位
WHEN “100”=>BT<=“00001000”;A<=SCORE0;
--第五位顯示分?jǐn)?shù)個(gè)位
WHEN “101”=>BT<=“00000100”;A<=“1010”;
--第六位不用,滅
WHEN “110”=>BT<=“00000010”;A<=TIMEB;
--第七位顯示倒計(jì)時(shí)十位
WHEN “111”=>BT<=“00000001”;A<=TIMEA;
--第八位顯示倒計(jì)時(shí)個(gè)位 END CASE;P2:PROCESS(CNT8)
END PROCESS;BEGIN
CASE A IS
--根據(jù)數(shù)據(jù)選擇相應(yīng)的字形碼送數(shù)碼管顯示
WHEN “0000”=>SG<=“00111111”;WHEN “0001”=>SG<=“00000110”;
WHEN “0010”=>SG<=“01011011”;WHEN “0011”=>SG<=“01001111”;
WHEN “0100”=>SG<=“01100110”;WHEN “0101”=>SG<=“01101101”;
WHEN “0110”=>SG<=“01111101”;WHEN “0111”=>SG<=“00000111”;
WHEN “1000”=>SG<=“01111111”;WHEN “1001”=>SG<=“01101111”;
WHEN “1010”=>SG<=“00000000”;WHEN OTHERS=>NULL;END CASE;P3:PROCESS(A)END PROCESS;END ARCHITECTURE;本模塊仿真波形如圖所示。
圖19顯示模塊仿真波形
5、蜂鳴器模塊
當(dāng)SR1鳴聲信號來時(shí),輸出CLK2(2KHz)驅(qū)動蜂鳴器發(fā)聲。CLK1用于掃描SR1的電平變化,SR1上升沿來到,允許CLK2輸出,并持續(xù)一段時(shí)間。模塊圖如下:
圖20蜂鳴器模塊
本模塊程序如下:
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY SPEAKER IS PORT(CLK1,SR1,CLK2:IN STD_LOGIC;
S:OUT STD_LOGIC);END ENTITY;ARCHITECTURE ONE OF SPEAKER IS TYPE ST_TYPE IS(ST0,ST1);SIGNAL C_ST:ST_TYPE;SIGNAL A:STD_LOGIC;BEGIN PROCESS(CLK1)
VARIABLE P:STD_LOGIC_VECTOR(7 DOWNTO 0);--P用于定時(shí),使蜂鳴器發(fā)聲持續(xù)
BEGIN
IF CLK1'EVENT AND CLK1='1' THEN
CASE C_ST IS WHEN ST0=>IF SR1='1' THEN
--SR1信號有上升沿
P:=“00111111”;18
C_ST<=ST1;A<='1';--蜂鳴器發(fā)聲,開始定時(shí)
ELSE C_ST<=ST0;A<='0';--否則等待
END IF;
P:=P-1;C_ST<=ST1;
A<='0';--定時(shí)到,蜂鳴器停止發(fā)聲 IF SR1='1' THEN
C_ST<=ST1;--等待系統(tǒng)復(fù)位 END IF;WHEN ST1=>IF P/=0 THEN
--定時(shí)還沒到,等待
ELSE
ELSE C_ST<=ST0;--復(fù)位
END IF;WHEN OTHERS=>C_ST<=ST0;A<='0';END CASE;END IF;S<=CLK2 AND A;
--只有A為1時(shí),蜂鳴器才發(fā)聲 END PROCESS;END ARCHITECTURE;本模塊的仿真波形如圖所示。
圖21 蜂鳴器模塊仿真波形
3設(shè)計(jì)心得及總結(jié)
剛開始確定這個(gè)課題時(shí),我首先確定了要用到哪些知識,主要是VHDL程序的設(shè)計(jì),軟件的仿真。首先我查閱課本質(zhì)料,找了不少關(guān)于這方面的程序,盡量的把它們都弄懂了。然后我確定了總體方案,把整體方案劃分成了幾個(gè)模塊,形成了一個(gè)整體的框架,然后各個(gè)擊破。有了總體的思路做指導(dǎo)我很快我就仿真調(diào)試好了搶答啟動模塊選手搶答模塊,這樣一來就增加了我的信心,一鼓作氣拿下了以后的模塊。當(dāng)然任何事情都不會一帆風(fēng)順,也遇到許多難題,不懂的地方我就請叫老師和同學(xué),最后所有的模塊都被我一個(gè)一個(gè)的做出來了,我很高興,覺得我這兩天來的努力沒有白費(fèi)。
此次課程設(shè)計(jì)不僅加強(qiáng)了我對專業(yè)知識的學(xué)習(xí)與了解,更有許多的感慨,主要有以下幾點(diǎn):
(1)加強(qiáng)了我們動手、思考和解決問題的能力。我們很少能有這種機(jī)會來鍛煉自己,通過這次課程設(shè)計(jì),起到了很好的鍛煉效果。
(2)我在做課程設(shè)計(jì)同時(shí)也是對課本知識的鞏固和加強(qiáng),課本 的知識太多,平時(shí)課間的學(xué)習(xí)并不能很好的理解程序的功能,所以在這次課程設(shè)計(jì)過程中,我們了解了很多程序的功能,并且對于其在實(shí)際中的使用有了更多的認(rèn)識。
(3)我們兩人一組相互合作,共同解決問題也認(rèn)識到了團(tuán)隊(duì)精神的重要性
最后,我要感謝老師和同學(xué)們給我的幫助,沒有你們的幫助,我是不能完成此次課程設(shè)計(jì)的,真的很感謝你們!
第三篇:EDA課程設(shè)計(jì) 電子琴
簡易電子琴的設(shè)計(jì)和實(shí)現(xiàn)
----結(jié)題報(bào)告
學(xué)號:110342241
姓名:章譯文
一.設(shè)計(jì)要求
1.能發(fā)出1234567基本音。
2.能自動播放《偶像萬萬歲》和《梁?!?。3.能在數(shù)碼管上顯示彈奏時(shí)的音名。
二.設(shè)計(jì)原理分析
1.音階的獲得
系統(tǒng)要求要求用7個(gè)按鍵控制發(fā)聲,我們用7個(gè)鍵盤來控制產(chǎn)生低音(或中音)段的7個(gè)音階頻率。所有的音名頻率都是通過一個(gè)基準(zhǔn)頻率經(jīng)過分頻得到的。但部分分頻過大的音頻直接輸出給揚(yáng)聲器,頻率信號脈沖的占空比會非常窄,不能驅(qū)動揚(yáng)聲器工作。于是,我們設(shè)計(jì)了一個(gè)“帶有預(yù)置數(shù)的計(jì)數(shù)器”來簡化整個(gè)設(shè)計(jì)過程。將原頻率分頻成期望值的2倍頻率信號。再通過二分頻,驅(qū)動揚(yáng)聲器工作。
簡易電子琴控制流程圖
2.MUSICAL_NOTE內(nèi)部電路
MUSICAL_NOTE內(nèi)部電路
使用MUSICAL_NOTE電路,實(shí)現(xiàn)初值可變的計(jì)數(shù)器,并對音階實(shí)現(xiàn)二分頻,使電子琴實(shí)現(xiàn)正常發(fā)音。
按鍵播放部分電路
3.自動播放功能的實(shí)現(xiàn)
自動播放部分電路
Hebing.mif文件(偶像萬萬歲&梁祝)
歌曲長度為352位,利用三個(gè)74261設(shè)計(jì)0~352的計(jì)數(shù)器,自動尋址,將音頻導(dǎo)入lpm_rom,與MUSICAL_NOTE相互作用,實(shí)現(xiàn)自動播放。
按鍵除顫電路原理圖
作為機(jī)械開關(guān)的鍵盤,在按鍵操作時(shí),機(jī)械觸點(diǎn)的彈性及電壓跳動等原因,再觸點(diǎn)閉合或者開啟的瞬間會出現(xiàn)電壓的抖動,如果不進(jìn)行處理就會造成誤操作。按鍵去抖動的關(guān)鍵在于提取穩(wěn)定的低電平狀態(tài),濾去前沿后沿的抖動毛刺。4.在數(shù)碼管上顯示彈奏時(shí)的音名
顯示部分電路圖
Display內(nèi)部電路
電路中的74161是16進(jìn)制的計(jì)數(shù)器,它的低三位接到3—8譯碼器模塊74138的地址輸入端,這樣就可以實(shí)現(xiàn)74138的8個(gè)輸出端輪流輸出低電平,恰好用來控制“位碼”DIG7~DIG0。LPM_MUX是QuartusⅡ中的宏模塊,用來實(shí)現(xiàn)多位的“多選一”,它的數(shù)據(jù)位數(shù)可以以及數(shù)據(jù)的數(shù)量可以任意設(shè)定。
電路中使用了與非門,實(shí)現(xiàn)發(fā)音與現(xiàn)實(shí)同時(shí)實(shí)現(xiàn),在此要注意的是,因?yàn)槭褂昧伺c非門,靜態(tài)字符現(xiàn)實(shí)數(shù)碼管管腳的設(shè)定值應(yīng)該與原值相反。
三.設(shè)計(jì)原理圖
簡易電子琴原理圖
根據(jù)以上分析,將三個(gè)模塊組合,便得到了簡易電子琴的整體設(shè)計(jì)。在整體設(shè)計(jì)的過程中,要注意三個(gè)模塊之間的關(guān)系,使其能夠相互作用,正常發(fā)音和顯示。
四.實(shí)驗(yàn)總結(jié) 在這三天的實(shí)驗(yàn)過程中,通過對于實(shí)驗(yàn)?zāi)康牡姆治觯心繕?biāo)的查找資料,研讀教材,在分清楚模塊的基礎(chǔ)上,寫下了實(shí)驗(yàn)計(jì)劃,規(guī)劃好時(shí)間,確定每天要做的事。在實(shí)驗(yàn)的第一天,實(shí)現(xiàn)了按鍵發(fā)音,同時(shí),也基本弄清楚了自動播放的原理,有了設(shè)計(jì)思路,第二天上午,完成了自動循環(huán)播放的功能,下午在同學(xué)的幫助下,確定了數(shù)碼管顯示的基本思路,通過對于以前知識的復(fù)習(xí)和查找,成功實(shí)現(xiàn)了數(shù)碼管的顯示功能。
在實(shí)驗(yàn)的過程中,也遇到很多的困難。在自動播放的時(shí)候,由于沒有修改hebing.mif的進(jìn)制,音樂總不能正常播放。還有就是在數(shù)碼管顯示的時(shí)候,一開始沒有弄清與非門的作用,顯示的數(shù)字總是反著的。后來經(jīng)過冷靜的分析,在老師和同學(xué)的幫助下,成功完成了電子琴的設(shè)計(jì),實(shí)現(xiàn)了所有的功能。當(dāng)然,設(shè)計(jì)也還有很多可以完善和改進(jìn)的地方,在以后的學(xué)習(xí)過程中,我會更加用心,多做,多思考。
這次課程設(shè)計(jì),我受益匪淺,這種認(rèn)真研讀,查找資料,動手操作的學(xué)習(xí)方式,應(yīng)該貫徹到每一門課程的學(xué)習(xí),也應(yīng)該貫徹到我們的生活中。一直保持這樣的方式,不管做什么事,都會取得很好的結(jié)果。
第四篇:EDA簡易數(shù)字頻率計(jì)~課設(shè)報(bào)告
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
《EDA技術(shù)》課程設(shè)計(jì)報(bào)告
題目:簡易數(shù)字頻率計(jì)
專業(yè):
本組成員:
簡述
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
隨著數(shù)字電子技術(shù)的發(fā)展,頻率測量成為一項(xiàng)越來越普遍的工作,因此測頻計(jì)常受到人們的青睞。目前許多高精度的數(shù)字頻率計(jì)都采用單片機(jī)加上外部的高速計(jì)數(shù)器來實(shí)現(xiàn),然而單片機(jī)的時(shí)鐘頻率不高導(dǎo)致測頻速度比較慢,并且在這種設(shè)計(jì)中,由于PCB版的集成度不高,導(dǎo)致PCB板走線長,因此難以提高計(jì)數(shù)器的工作頻率。為了克服這種缺點(diǎn),大大提高測量精度和速度,我們可以設(shè)計(jì)一種可編程邏輯器件來實(shí)現(xiàn)數(shù)字頻率計(jì)。
EDA技術(shù)是以大規(guī)模可編程邏輯器件為設(shè)計(jì)載體,以硬件語言為系統(tǒng)邏輯描述的主要方式,以計(jì)算機(jī)、大規(guī)??删幊踢壿嬈骷拈_發(fā)軟件及實(shí)驗(yàn)開發(fā)系統(tǒng)為設(shè)計(jì)工具,通過有關(guān)的開發(fā)軟件,自動完成用軟件設(shè)計(jì)的電子系統(tǒng)到硬件系統(tǒng)的設(shè)計(jì),最終形成集成電子系統(tǒng)或?qū)S眉尚酒囊婚T新技術(shù)。其設(shè)計(jì)的靈活性使得EDA技術(shù)得以快速發(fā)展和廣泛應(yīng)用。以QUARTUSII軟件為設(shè)計(jì)平臺,采用VHDL語言實(shí)現(xiàn)數(shù)字頻率計(jì)的整體設(shè)計(jì)。
EDA技術(shù)已經(jīng)廣泛應(yīng)用于模擬與數(shù)字電路系統(tǒng)等許多領(lǐng)域。電子設(shè)計(jì)自動化是一種實(shí)現(xiàn)電子系統(tǒng)或電子產(chǎn)品自動化設(shè)計(jì)的技術(shù),它與電子技術(shù),微電子技術(shù)的發(fā)展密切相關(guān),它吸收了計(jì)算機(jī)科學(xué)領(lǐng)域的大多數(shù)最新研究成果,以高性能的計(jì)算機(jī)作為工作平臺,促進(jìn)了工程發(fā)展。EDA的一個(gè)重要特征就是使用硬件描述語言(HDL)來完成的設(shè)計(jì)文件,VHDL語言是經(jīng)IEEE確認(rèn)的標(biāo)準(zhǔn)硬件語言,在電子設(shè)計(jì)領(lǐng)域受到了廣泛的接受。
1.設(shè)計(jì)概述
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
1.1設(shè)計(jì)原理
在電子技術(shù)中,頻率是最基本的參數(shù)之一,并且與許多電參量的測量方案、測量結(jié)果都有十分密切的關(guān)系,因此,頻率的測量就顯得更為重要。測量頻率的方法有多種,其中電子計(jì)數(shù)器測量頻率具有精度高、使用方便、測量迅速,以及便于實(shí)現(xiàn)測量過程自動化等優(yōu)點(diǎn),是頻率測量的重要手段之一。
數(shù)字式頻率計(jì)的測量原理有兩類:一是直接測頻法,即在一定閘門時(shí)間內(nèi)測量被測信號的脈沖個(gè)數(shù);二是間接測頻法即測周期法,如周期測頻法。直接測頻法適用于高頻信號的頻率測量,通常采用計(jì)數(shù)器、數(shù)據(jù)鎖存器及控制電路實(shí)現(xiàn),并通過改變計(jì)數(shù)器閥門的時(shí)間長短在達(dá)到不同的測量精度;間接測頻法適用于低頻信號的頻率測量。
本設(shè)計(jì)中使用的就是直接測頻法,即用計(jì)數(shù)器在計(jì)算1s內(nèi)輸入信號周期的個(gè)數(shù),其測頻范圍為1Hz~9999Hz。
1.2原理框圖
1.3 系統(tǒng)原理圖
系統(tǒng)原理圖仿真
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
分析說明:clk為1HZ,待測信號sig為10HZ 1.5 引腳圖
2.設(shè)計(jì)思路
頻率測量的基本原理是計(jì)算每秒鐘內(nèi)待測信號的脈沖個(gè)數(shù)。這就要求測頻控制信號發(fā)生器testpl的計(jì)數(shù)使能信號tsten能產(chǎn)生一個(gè)1秒脈寬的周期信號,并對頻率計(jì)的每一計(jì)數(shù)器cnt10的使能端en進(jìn)行同步控制。當(dāng)tsten為高電平“1”時(shí),允許計(jì)數(shù);為低電平“0”時(shí)停止計(jì)數(shù),并保持其計(jì)數(shù)結(jié)果。在停止計(jì)數(shù)期間,首先需要一個(gè)鎖存信號load的上跳沿將計(jì)數(shù)器在前1 秒種的計(jì)數(shù)值鎖存進(jìn)16位鎖存器reg16b中。鎖存信號之后,必須有一個(gè)清零信號clr_cnt對計(jì)數(shù)器進(jìn)行清零,為下1 秒的計(jì)數(shù)操作做準(zhǔn)備。,然后由外部數(shù)碼管控制器ledcom控制的7段譯碼器ymq譯出,并穩(wěn)定顯示。
3.模塊劃分
3.1 測頻控制信號發(fā)生器testpl模塊:
輸入端clk收到1Hz信號后,其輸出端testen控制各個(gè)cnt10的使能,clr_cnt控制各個(gè)cnt10的清零,load控制鎖存器內(nèi)數(shù)據(jù)的輸出。
仿真圖如下:
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
3.2 十進(jìn)制計(jì)數(shù)器cnt10模塊:
有一時(shí)鐘使能輸入端en,用于鎖定計(jì)數(shù)值。當(dāng)高電平“1”時(shí)計(jì)數(shù)允許計(jì)數(shù),低電平“0”時(shí)禁止計(jì)數(shù)。多位十進(jìn)制計(jì)數(shù)器時(shí),最低位的計(jì)數(shù)器的clk端輸入被測信號,各計(jì)數(shù)器的進(jìn)位輸出端c10將信號輸?shù)较乱晃皇M(jìn)制計(jì)數(shù)器cnt10的輸入端clk,最高位十進(jìn)制計(jì)數(shù)器cnt10的進(jìn)位輸出端c10不處理。
仿真圖如下:
3.3 16位鎖存器reg16b模塊:將已有16 位bcd碼存在于此模塊的輸入口din[15..0],在信號load的上升沿后即被鎖存到寄存器reg16b的內(nèi)部,并由reg16b的輸出端dout[15..0]輸出,設(shè)置鎖存器的好處是,數(shù)碼管上顯示的數(shù)據(jù)穩(wěn)定,不會由于周期性的清零信號而不斷閃爍。
仿真圖如下:
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
3.4 數(shù)碼管控制器ledcom模塊:兩個(gè)輸入端一個(gè)為datain[15..0],另一個(gè)為數(shù)碼管顯示選擇的掃描頻率輸入端clk,輸出端為數(shù)碼管選擇信號com[3..0]和對應(yīng)顯示的數(shù)碼管的BCD碼信號端dataout[3..0],數(shù)碼管顯示選擇隨掃描頻率clk循環(huán)變化,實(shí)現(xiàn)穩(wěn)定顯示。
仿真圖如下:
3.5
譯碼器ymq模塊:輸入端d_in[3..0]將接收BCD碼信號,譯碼后輸出端d_out[7..0]輸出8為7段數(shù)碼管信號,其中輸出的第8位均為高電平“1”可以使四個(gè)數(shù)碼管的小數(shù)點(diǎn)不顯示。經(jīng)譯碼器的處理輸出后數(shù)碼管顯示相應(yīng)的數(shù)值。
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
4.VHDL頂層文件:
library ieee;use ieee.std_logic_1164.all;entity lx is port(clk: in std_logic;led: out std_logic_vector(7 downto 0);ledc: out std_logic_vector(2 downto 0));end lx;architecture art of lx is--十進(jìn)制計(jì)數(shù)器
component cnt10--待調(diào)用的有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器端口定義
port(clk,clr,en: in std_logic;q: out std_logic_vector(3 downto 0);c10: out std_logic);end component;--16位鎖存器
component reg16b--待調(diào)用的32位鎖存器端口定義 port(load: in std_logic;din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end component;--測頻控制器
component testpl--待調(diào)用的測頻控制信號發(fā)生器端口定義 port(clk:in std_logic;
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
tsten:out std_logic;clr_cnt:out std_logic;load:out std_logic);end component;--數(shù)碼管選擇器
component ledcom--待調(diào)用的數(shù)碼管選擇器端口定義 port(clk:in std_logic;datain: in std_logic_vector(15 downto 0);dataout: out std_logic_vector(3 downto 0);sel: out std_logic_vector(2 downto 0));end component;--譯碼器
component ymq--待調(diào)用的譯碼器端口定義 port(d_in: in std_logic_vector(3 downto 0);d_out: out std_logic_vector(7 downto 0));end component;signal clk1,clk2,clk3: std_logic;--clk1為1Hz信號,clk2為被測信號,clk3為數(shù)碼管掃描信號
signal tsten,clr,load: std_logic;signal c1,c2,c3,c4: std_logic;signal qout,rout: std_logic_vector(15 downto 0);signal datao: std_logic_vector(3 downto 0);begin u0:testpl port map(clk1,tsten,clr,load);u1:cnt10 port map(clk2,clr,tsten,qout(3 downto 0),c1);u2:cnt10 port map(c1,clr,tsten,qout(7 downto 4),c2);u3:cnt10 port map(c2,clr,tsten,qout(11 downto 8),c3);u4:cnt10 port map(c3,clr,tsten,qout(15 downto 12),c4);u5:reg16b port map(load,qout(15 downto 0),rout);u6:ledcom port map(clk3,rout,datao,ledc);u8:ymq port map(datao,led);end art;
5.心得體會
這次課程設(shè)計(jì)中,我不僅復(fù)習(xí)鞏固了課堂所學(xué)的理論知識,提高
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
了對所學(xué)知識的綜合應(yīng)用能力,并從根本上了解了VHDL語言的一些基本用法,應(yīng)用了原來不會或者不熟練的句型,如if句,case句等,也學(xué)會了一些基本功能的實(shí)現(xiàn)方法,如分頻,狀態(tài)控制等等,從另外一個(gè)角度重新審視了上學(xué)期完全從硬件角度出發(fā)的電路設(shè)計(jì),明白了軟硬件之間的交互。通過這個(gè)課題,對系統(tǒng)框圖、邏輯流程圖、狀態(tài)轉(zhuǎn)移圖的設(shè)計(jì)有了一定的了解。也懂得了系統(tǒng)的前期設(shè)計(jì)對于后續(xù)的編程和調(diào)試的重要性。
本課題采用了自下而上的設(shè)計(jì)方法,根據(jù)系統(tǒng)對硬件的要求,畫出系統(tǒng)控制流程圖;然后根據(jù)控制流程圖,分化模塊,利用模塊實(shí)現(xiàn)功能;最后進(jìn)行仿真和調(diào)試。
每個(gè)成功的背后都要面對無數(shù)次的失敗,這次課設(shè)也不例外。雖然遇到不少問題與困難,但通過老師以及同學(xué)的幫助,都一一得到順利地解決。我想這必定會為將來的實(shí)踐積累寶貴的經(jīng)驗(yàn)和教訓(xùn)??傊?,這次課設(shè)我們都受益匪淺。整個(gè)過程氛圍濃厚,本人也態(tài)度十分認(rèn)真,積極向老師和同學(xué)求教并在此過程中收獲良多,能夠進(jìn)一步了解和使用一門與硬件直接打交道的基本語言對我們將來的學(xué)習(xí)和工作都會十分有益。
6.五個(gè)模塊的程序源代碼
6.1 測頻控制信號發(fā)生器
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity testpl is port(clk:in std_logic;--1Hz信號
tsten:out std_logic;--計(jì)數(shù)器使能信號 clr_cnt:out std_logic;--計(jì)數(shù)器清零信號 load:out std_logic);--鎖存器輸出控制信號 end testpl;architecture art of testpl is signal div2clk:std_logic;begin process(clk)begin if clk'event and clk='1'then div2clk<=not div2clk;--div2clk為2Hz end if;end process;process(clk ,div2clk)begin if(clk='0'and div2clk='0')then clr_cnt<='1';--當(dāng)div2clk與clk同時(shí)為零時(shí)計(jì)數(shù)器清零 else clr_cnt<='0';--當(dāng)div2clk處于的高電平時(shí)計(jì)數(shù)器計(jì)數(shù) end if;end process;load<=not div2clk;--鎖存器輸出與計(jì)數(shù)器使能信號反相 tsten<=div2clk;end art;
有時(shí)鐘使能的十進(jìn)制計(jì)數(shù)器
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 is port(clk,clr,en: in std_logic;--clk:計(jì)數(shù)器時(shí)鐘,clr:清零信號,en:計(jì)數(shù)使能信號
q: out std_logic_vector(3 downto 0);--q:4位計(jì)數(shù)結(jié)果輸出
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
c10: out std_logic);--計(jì)數(shù)進(jìn)位
end cnt10;architecture art of cnt10 is signal cqi: std_logic_vector(3 downto 0);begin process(clk,clr)begin if clr='1' then cqi<=“0000”;--當(dāng)輸入的clr_cnt為低電平0時(shí)清零
elsif clk'event and clk='1' then if en='1' then--當(dāng)輸入的tesen為高電平1時(shí)允許計(jì)數(shù)
if(cqi<9)then cqi<=cqi+1;else cqi<=“0000”;--等于9則計(jì)數(shù)器清零
end if;--當(dāng)輸入的tesen為低電平0時(shí)禁止計(jì)數(shù),鎖定計(jì)數(shù)值 end if;end if;end process;--產(chǎn)生進(jìn)位 process(cqi)begin if cqi=“1001” then c10<='1';--當(dāng)加的9時(shí)產(chǎn)生進(jìn)位輸出 else c10<='0';end if;end process;q<=cqi;end art;
16位鎖存器
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b is port(load: in std_logic;--輸出鎖存控制信號 din: in std_logic_vector(15 downto 0);dout: out std_logic_vector(15 downto 0));end reg16b;
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
architecture art of reg16b is begin process(load,din)begin if load'event and load='1'then--load為高電平時(shí)teten為低電平,計(jì)數(shù)器禁止
dout<=din;--鎖存輸入的數(shù)據(jù) end if;end process;end art;
6.4 數(shù)碼管控制器
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ledcom is port(clk:in std_logic;--數(shù)碼管掃描頻率
datain: in std_logic_vector(15 downto 0);--鎖存器輸入的16位信號 dataout: out std_logic_vector(3 downto 0);--輸出至譯碼器的4位信號
sel: buffer std_logic_vector(2 downto 0));--輸出數(shù)碼管選擇信號 end ledcom;architecture art of ledcom is begin--sel同掃描頻率clk循環(huán)變化 process(clk)begin if rising_edge(clk)then if sel>=7 then
sel <=“000”;
else sel<=sel+1;end if;end if;
end process;--數(shù)碼管選擇 process(sel,datain)
begin case sel is when “000”=> dataout<=datain(3 downto 0);
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
when “001”=> dataout<=datain(7 downto 4);when “010”=> dataout<=datain(11 downto 8);when “011”=> dataout<=datain(15 downto 12);when others =>NULL;end case;end process;end art;
七段數(shù)碼管的譯碼器
library IEEE;use IEEE.std_logic_1164.all;entity ymq is port(d_in: in std_logic_vector(3 downto 0);--數(shù)碼管控制器輸入四位信號
d_out: out std_logic_vector(6 downto 0));--輸出8位信號
end ymq;--第8位d_out[7]為逗號 architecture art of ymq is begin process(d_in)begin case d_in is--第8位為1高電平逗號不顯示 when “0000” => d_out<=“1111110”;--0 when “0001” => d_out<=“0110000”;--1 when “0010” => d_out<=“1101101”;--2 when “0011” => d_out<=“1111001”;--3 when “0100” => d_out<=“0110010”;--4 when “0101” => d_out<=“1011011”;--5 when “0110” => d_out<=“1011111”;--6 when “0111” => d_out<=“1110000”;--7 when “1000” => d_out<=“1111111”;--8 when “1001” => d_out<=“1111011”;--9 when others =>NULL;end case;end process;end art;7.參考文獻(xiàn)
1、王小軍 主編.《VHDL簡明教程》.清華大學(xué)出版社,1997
EDA課程設(shè)計(jì)~簡易數(shù)字頻率計(jì)
2、潘松、王國棟 主編.《VHDL應(yīng)用教程》電子科技大學(xué)出版社,2000
3、甘歷 主編.《VHDL應(yīng)用于開發(fā)實(shí)踐》科學(xué)出版社,2003
4、劉愛榮 主編.《EDA技術(shù)與CPLD/FPGA開發(fā)應(yīng)用簡明教程》.清華大學(xué)出版社,2007
第五篇:可控脈沖發(fā)生器的設(shè)計(jì)EDA課設(shè)報(bào)告資料
可控脈沖發(fā)生器的設(shè)計(jì)
一、設(shè)計(jì)目的
1.了解可控脈沖發(fā)生器的實(shí)現(xiàn)機(jī)理。2.學(xué)會用示波器觀察FPGA產(chǎn)生的信號。3.學(xué)習(xí)用VHDL編寫復(fù)雜功能的代碼。
二、設(shè)計(jì)原理
1.EDA是電子設(shè)計(jì)自動化(Electronic Design Automation)的縮寫。EDA技術(shù)就是依賴功能強(qiáng)大的計(jì)算機(jī),在EDA工具軟件平臺上,對以硬件描述語言HDL(Hardware Description Language)為系統(tǒng)邏輯描述手段完成的設(shè)計(jì)文件,自動地完成邏輯編譯、化簡、分割、綜合、布局布線以及邏輯優(yōu)化和仿真測試,直至實(shí)現(xiàn)既定的電子線路系統(tǒng)功能。EDA技術(shù)使設(shè)計(jì)者的工作僅局限于利用軟件的方式來完成對系統(tǒng)硬件功能的實(shí)現(xiàn),可以說EDA技術(shù)的產(chǎn)生與發(fā)展是電子設(shè)計(jì)技術(shù)的一個(gè)巨大進(jìn)步。EDA技術(shù)融合了眾多電子設(shè)計(jì)技術(shù)和計(jì)算機(jī)輔助技術(shù),使得它在現(xiàn)代電子學(xué)方面的應(yīng)用越來越廣泛,也成為電子、電氣類大學(xué)生必須熟練掌握的一種設(shè)計(jì)工具。
2.VHDL是英文全名是VHSIC(Very High Speed Integrated Circuit)Hardware Description Language,是硬件描述語言的業(yè)界標(biāo)準(zhǔn)之一。VHDL語言功能強(qiáng)大、設(shè)計(jì)靈活。VHDL語言可以用簡潔明確的源代碼來描述復(fù)雜的邏輯控制,它具有多層次的設(shè)計(jì)描述功能,層層細(xì)化,最后可直接生成電路級描述。
VHDL支持同步電路、異步電路和隨機(jī)電路的設(shè)計(jì),這是其他硬件描述語言雖不能比擬的。VHDL還支持多種設(shè)計(jì)方法,既支持自底向上的設(shè)計(jì),又支持自頂向下的設(shè)計(jì);既支持模塊化設(shè)計(jì),又支持層次化設(shè)計(jì)。
由于VHDL已經(jīng)成為IEEE標(biāo)準(zhǔn)所規(guī)定的硬件描述性語言,目前大多數(shù)EDA工具幾乎都支持VHDL。因?yàn)閂HDL易讀和結(jié)構(gòu)化且易于修改設(shè)計(jì)所以在硬件電路設(shè)計(jì)過程中,VHDL語言得到廣泛應(yīng)用。
VHDL語言易于共享和復(fù)用。VHDL采用基于庫(Library)的設(shè)計(jì)方法,可以建立各種可再次利用的模塊。這些模塊可以預(yù)先設(shè)計(jì)或使用以前設(shè)計(jì)中的存檔模塊,將這些模塊存放到庫中,就可以在以后的設(shè)計(jì)中進(jìn)行復(fù)用,可以使設(shè)計(jì)成果在設(shè)計(jì)人員之間進(jìn)行交流和共享,減少硬件電路設(shè)計(jì)。
VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計(jì)早期就能查驗(yàn)設(shè)計(jì)系統(tǒng)的功能可行性,隨時(shí)可對設(shè)計(jì)進(jìn)行仿真模擬。VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了它具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)的再利用功能。這個(gè)特點(diǎn)很好的符合了市場需求。對于用VHDL完成的一個(gè)確定的設(shè)計(jì),可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動的把VHDL描述的設(shè)計(jì)轉(zhuǎn)變成門級網(wǎng)表??傊?,由于VHDL語言有的這些優(yōu)良的特點(diǎn),它被廣泛的應(yīng)用在電子線路和電子系統(tǒng)的設(shè)計(jì)中。
3.Quartus II是Altera公司的綜合性PLD/FPGA開發(fā)軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。
Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三方EDA工具。
此外,Quartus II通過和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級設(shè)計(jì)、嵌入式軟件開發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開發(fā)平臺。
4.脈沖發(fā)生器就是要產(chǎn)生一個(gè)脈沖波形,而可控脈沖發(fā)生器則是要產(chǎn)生一個(gè)周期和占空比可變的脈沖波形??煽孛}沖發(fā)生器的實(shí)現(xiàn)原理比較簡單,可以簡單的理解為一個(gè)計(jì)數(shù)器對輸入的時(shí)鐘信號進(jìn)行分頻的過程。通過改變計(jì)數(shù)器的上限值來達(dá)到改變周期的目的,通過改變電平翻轉(zhuǎn)的閾值來達(dá)到改變占空比的目的。下面舉個(gè)簡單的例子來說明其工作原理。
假如有一個(gè)計(jì)數(shù)器T對時(shí)鐘分頻,其計(jì)數(shù)的范圍是從0~N,另取一個(gè)M(0≤M≤N),若輸出為Q,那么Q只要滿足條件
時(shí),通過改變N值,即可改變輸出的脈沖波的周期;改變M值,即可改變脈沖波的占空比。這樣輸出的脈沖波的周期和占空比分別為:
?1Q???00?T?MM?T?N周期?(N?1)TCLOCKM占空比??100%N?
1三、設(shè)計(jì)內(nèi)容
編寫實(shí)現(xiàn)可控脈沖發(fā)生器程序,通過脈沖周期和占空比改變實(shí)現(xiàn)不同脈沖的輸出。用QuartusII軟件對設(shè)計(jì)進(jìn)行編譯、綜合、仿真,給出相應(yīng)的時(shí)序仿真波形和硬件電路圖。
四、設(shè)計(jì)流程 1.程序
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CC IS
PORT(CLK: IN STD_LOGIC;
--時(shí)鐘輸入
RST : IN STD_LOGIC;
--復(fù)位輸入
NU,ND : IN STD_LOGIC;
--輸入:控制頻率的改變
MU,MD : IN STD_LOGIC;
--輸入:控制占空比的改變
FOUT : OUT STD_LOGIC
--波形輸出);
END CC;ARCHITECTURE BEHAVE OF CC IS SIGNAL N_BUFFER,M_BUFFER:STD_LOGIC_VECTOR(10 DOWNTO 0);SIGNAL N_COUNT :STD_LOGIC_VECTOR(10 DOWNTO 0);SIGNAL CLKIN : STD_LOGIC;SIGNAL CLK_COUNT : STD_LOGIC_VECTOR(12 DOWNTO 0);--產(chǎn)生一個(gè)低速時(shí)鐘,用于按鍵判斷
BEGIN
PROCESS(CLK)
--計(jì)數(shù)器累加
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(N_COUNT=N_BUFFER)THEN
N_COUNT<=“00000000000”;
ELSE
N_COUNT<=N_COUNT+1;
END IF;
END IF;
END PROCESS;
PROCESS(CLK)
--波形判斷
BEGIN
IF(CLK'EVENT AND CLK='1')THEN
IF(N_COUNT FOUT<='1';ELSIF(N_COUNT>M_BUFFER AND N_COUNT THEN 6 FOUT<='0'; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLK'EVENT AND CLKIN='1')THEN CLK_COUNT<=CLK_COUNT+1; END IF; CLKIN<=CLK_COUNT(12); END PROCESS; PROCESS(CLKIN) --頻率及占空比的改變1 BEGIN IF(CLK'EVENT AND CLKIN='0')THEN IF(RST='0')THEN M_BUFFER<=“01000000000”; N_BUFFER<=“10000000000”; ELSIF(NU='0')THEN 7 N_BUFFER<=N_BUFFER+1; ELSIF(ND='0')THEN N_BUFFER<=N_BUFFER-1; ELSIF(MU='0')THEN M_BUFFER<=M_BUFFER+1; ELSIF(MD='0')THEN M_BUFFER<=M_BUFFER-1; END IF; END IF; END PROCESS;END BEHAVE; 2.管腳分配: 3.時(shí)序仿真圖: 4.硬件電路圖: 5.現(xiàn)象: 五、心得體會 通過這次EDA課程設(shè)計(jì),我對課堂上所學(xué)到的理論知識的理解加深了許多,自己動腦、動手設(shè)計(jì)的能力也得到了較大提高。 在這次課程設(shè)計(jì)的過程中,我對VHDL語言有了更深的認(rèn)識。通過查閱相關(guān)資料和動手設(shè)計(jì)我發(fā)現(xiàn)我以前對VHDL語言的認(rèn)識太過膚淺,認(rèn)為VHDL語言只能用于設(shè)計(jì)小型的電路系統(tǒng)。但有了更深刻的認(rèn)識之后我發(fā)現(xiàn)學(xué)好VHDL語言可以設(shè)計(jì)出大規(guī)模的、功能復(fù)雜的電路系統(tǒng)。以前之所以會有錯(cuò)誤的認(rèn)識是因?yàn)樽约簩HDL語言的了解和掌握還不夠?,F(xiàn)在仔細(xì)想想,這次課程設(shè)計(jì)使得我對VHDL語言的理解與應(yīng)用能力得到了較大的提升,也讓我認(rèn)識到只要升入學(xué)習(xí),提升的空間永遠(yuǎn)的存在的。 另一方面我也發(fā)現(xiàn)了動手實(shí)踐的重要性。動手實(shí)踐是理論知識得以靈活運(yùn)用的必要前提,也是今后今后走上工作崗位之后能夠很好的完成設(shè)計(jì)工作的技術(shù)保證。只有遇到實(shí)際問題并根據(jù)自己對課堂上獲得的專業(yè)知識的理解來解決它才能真正的提高自己的能力。這也提醒我在平時(shí)的學(xué)習(xí)生活中不能一味埋頭于課本知識,當(dāng)今社會競爭越來越激烈,社會對人才的要求越來越全面,只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,必須靠動手能力做支撐。因此在學(xué)習(xí)之余我們應(yīng)該積極參加各種與專業(yè)知識有關(guān)的實(shí)踐活動和知識競賽,鞏固所學(xué)的理論知識,多注重培養(yǎng)實(shí)際動手能力和專業(yè)技術(shù)能力,這樣才能在以后的工作崗位上有所作為。 數(shù)字秒表設(shè)計(jì) 一、設(shè)計(jì)目的 本設(shè)計(jì)的任務(wù)就是設(shè)計(jì)一個(gè)數(shù)字鐘,要求顯示格式為小時(shí)-分鐘-秒鐘。系統(tǒng)時(shí)鐘選擇時(shí)鐘模塊的50MHz,要得到1Hz時(shí)鐘信號,必須對系統(tǒng)時(shí)鐘進(jìn)行50000000次分頻。用S1按鍵作為系統(tǒng)時(shí)鐘復(fù)位,復(fù)位后全部顯示00-00-00。 二、設(shè)計(jì)原理 數(shù)碼管的八個(gè)段a,b,c,d,e,f,g,h(h是小數(shù)點(diǎn))都分別連接到SEG0~SEG7,8個(gè)數(shù)碼管分別由八個(gè)選通信號DIG0~DIG7來選擇,被選通的數(shù)碼管顯示數(shù)據(jù),其余關(guān)閉。如果希望8個(gè)數(shù)碼管顯示希望的數(shù)據(jù),就必須使得8個(gè)選通信號DIG0~DIG7分別被單獨(dú)選通,并在此同時(shí),在段信號輸入口SEG0~SEG7加上該對應(yīng)數(shù)碼管上顯示的數(shù)據(jù),于是隨著選通信號的掃描就能實(shí)現(xiàn)動態(tài)掃描顯示的目的。雖然每次只有1個(gè)數(shù)碼管顯示,但只要掃描顯示速率足夠快,利用人眼的視覺余輝效應(yīng),我們?nèi)詴杏X所有的數(shù)碼管都在同時(shí)顯示。 三、設(shè)計(jì)主要內(nèi)容 本設(shè)計(jì)要求掌握使用QuartusII設(shè)計(jì)數(shù)字系統(tǒng)的設(shè)計(jì)思路和設(shè)計(jì)方法。學(xué)習(xí)VHDL基本邏輯電路的綜合設(shè)計(jì)應(yīng)用。掌握VHDL語言的語法規(guī)范,掌握時(shí)序電路描述方法。掌握多個(gè)數(shù)碼管動態(tài)掃描顯示的原理及設(shè)計(jì)方法。 設(shè)計(jì)一個(gè)由共陰八位數(shù)碼管作為顯示、按鍵作為控制系統(tǒng)的數(shù)字鐘電路,要求利用實(shí)驗(yàn)室設(shè)備完成系統(tǒng)設(shè)計(jì)并運(yùn)行調(diào)試。 四、設(shè)計(jì)流程 1.程序: library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity stopwatch is port(Clk : in std_logic; --時(shí)鐘輸入 reset : in std_logic; --復(fù)位輸入 start,over : in std_logic; --秒表控制輸入 ledag : out std_logic_vector(6 downto 0);--七段碼管顯示輸出 SEL : buffer std_logic_vector(2 downto 0)--七段碼管掃描驅(qū)動); end stopwatch;architecture behave of stopwatch is signal Disp_Temp : integer range 0 to 15; signal Disp_Decode : std_logic_vector(6 downto 0); signal mSEC1,mSEC10 : integer range 0 to 9; signal SEC1,SEC10 : integer range 0 to 9; signal MIN1,MIN10 : integer range 0 to 9; signal HOUR1,HOUR10 : integer range 0 to 9; signal Clk1kHz : std_logic; signal Clk100Hz : std_logic; signal Start_Flag : std_logic; signal Music_Count : std_logic_vector(2 downto 0); begin PROCESS(clk)--generate 100hz clock signal variable cnt : INTEGER RANGE 0 TO 499999;--產(chǎn)生100Hz時(shí)鐘的分頻計(jì)數(shù)器 BEGIN IF clk='1' AND clk'event THEN IF cnt=499999 THEN cnt:=0; ELSE IF cnt<250000 THEN clk100hz<='1'; ELSE clk100hz<='0'; END IF; cnt:=cnt+1; END IF; END IF; END PROCESS; PROCESS(clk)--generate 1khz clock signal variable cnt1 : INTEGER RANGE 0 TO 49999;--產(chǎn)生1kHz時(shí)鐘的分頻計(jì)數(shù)器 BEGIN IF clk='1' AND clk'event THEN IF cnt1=49999 THEN cnt1:=0; ELSE IF cnt1<25000 THEN clk1khz<='1'; ELSE clk1khz<='0'; END IF; cnt1:=cnt1+1; END IF; END IF; END PROCESS; process(Clk100Hz) begin if(reset='0')then --系統(tǒng)復(fù)位 mSEC1<=0; mSEC10<=0; SEC1<=0; SEC10<=0; MIN1<=0; MIN10<=0; HOUR1<=0; HOUR10<=0; Start_Flag<='0'; elsif(start='0' and Start_Flag='0')then Start_Flag<='1'; elsif(over='0' and Start_Flag='1')then Start_Flag<='0'; elsif(Clk100Hz'event and Clk100Hz='1')then --正常運(yùn)行 if(Start_Flag='1')then if(mSEC1=9)then mSEC1<=0; if(mSEC10=9)then mSEC10<=0; if(SEC1=9)then SEC1<=0; if(SEC10=5)then SEC10<=0; if(MIN1=9)then MIN1<=0; if(MIN10=5)then MIN10<=0; if(HOUR1=9)then HOUR1<=0; if(HOUR10=9)then HOUR10<=0; else HOUR10<=HOUR10+1; end if; else HOUR1<=HOUR1+1; end if; else MIN10<=MIN10+1; end if; else MIN1<=MIN1+1; end if; else SEC10<=SEC10+1; end if; else SEC1<=SEC1+1; end if; else mSEC10<=mSEC10+1; end if; else mSEC1<=mSEC1+1; end if; end if; end if; end process; process(SEL) begin if(HOUR1=0)then case(SEL+1)is when “111”=>Disp_Temp<=mSEC1; when “110”=>Disp_Temp<=mSEC10; when “101”=>Disp_Temp<=10; when “100”=>Disp_Temp<=SEC1; when “011”=>Disp_Temp<=SEC10; when “010”=>Disp_Temp<=10; when “001”=>Disp_Temp<=MIN1; when “000”=>Disp_Temp<=MIN10; end case; else case(SEL+1)is when “111”=>Disp_Temp<=SEC1; when “110”=>Disp_Temp<=SEC10; when “101”=>Disp_Temp<=10; when “100”=>Disp_Temp<=MIN1; when “011”=>Disp_Temp<=MIN10; when “010”=>Disp_Temp<=10; when “001”=>Disp_Temp<=HOUR1; when “000”=>Disp_Temp<=HOUR10; end case; end if; end process;process(Clk1khz) begin if(Clk1khz'event and Clk1khz='1')then --掃描累加 SEL<=SEL+1; ledag<=Disp_Decode; end if; end process; process(Disp_Temp) --顯示轉(zhuǎn)換 begin case Disp_Temp is when 0=>Disp_Decode<= “0111111”; --0 when 1=>Disp_Decode<= “0000110”; --1 when 2=>Disp_Decode<= “1011011”; --2 when 3=>Disp_Decode<= “1001111”; --3 when 4=>Disp_Decode<= “1100110”; --4 when 5=>Disp_Decode<= “1101101”; --5 when 6=>Disp_Decode<= “1111101”; --6 when 7=>Disp_Decode<= “0000111”; --7 when 8=>Disp_Decode<= “1111111”; --8 when 9=>Disp_Decode<= “1101111”; --9 when 10=>Disp_Decode<= “1000000”; --- when others=>Disp_Decode<=“0000000”; --全滅 end case; end process; end behave; 2.管腳分配: 2.時(shí)序仿真圖: 4.硬件電路圖: 5.現(xiàn)象: 五、設(shè)計(jì)總結(jié) 通過本次的課程設(shè)計(jì),我初步了解了VHDL語言的編程思想,以及利用EDA軟件進(jìn)行電子電路設(shè)計(jì)的方法,通過對一個(gè)課題的分析,將實(shí)驗(yàn)的內(nèi)容進(jìn)行分塊解讀,具體到每一個(gè)模塊的具體作用,然后將各個(gè)功能的模塊通過連線進(jìn)行總體的電路實(shí)現(xiàn),也可以通過VHDL語言對各個(gè)模塊進(jìn)行組合,然后需要在程序編譯成功的基礎(chǔ)上,安裝硬件,將程序下載到具體的芯片上進(jìn)行硬件的實(shí)現(xiàn)。通過整個(gè)實(shí)驗(yàn)的完成,我從老師和同學(xué)那里學(xué)到了更多關(guān)于VHDL編程,仿真以及硬件實(shí)現(xiàn)的知識,自己以前模糊不清的地方也通過此次的課程設(shè)計(jì)了解清楚了,并且通過這次課程設(shè)計(jì),我也鍛煉了獨(dú)立思考,獨(dú)立操作的能力,雖然對于VHDL語言的應(yīng)用我還很生疏,但是此次的課程設(shè)計(jì)卻讓我學(xué)到了很多,也對這門語言有了更深的理解,對EDA軟件的使用有了更多的體會。