eda課程設(shè)計硬件電子琴及自動演奏_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  《EDA技術(shù)及應(yīng)用》</p><p><b>  課程設(shè)計報告</b></p><p>  2011 屆 通信工程 專業(yè) 1113071 班級</p><p>  題 目: 電子琴與自動演奏 </p><p><b>  學(xué) 號: </b>

2、;</p><p><b>  姓 名: </b></p><p><b>  同 組 人: </b></p><p>  2013年07月07日</p><p><b>  1 課程設(shè)計要求</b></p><p>  1.1 硬件電子琴設(shè)

3、計</p><p><b>  設(shè)計要求:</b></p><p> ?。?)按下KEY1~KEY7 分別表示中音的DO、 RE 、 ME、 FA、 SOL、 LA、 SI.</p><p>  (2)按住KEY8同時按KEY1~KEY7 分別表示高音的DO、 RE 、 ME、 FA、 SOL、 LA、 SI;</p><p

4、> ?。?)按下相應(yīng)的鍵有對應(yīng)LED燈指示;</p><p><b>  其他要求:</b></p><p>  (1)晶振為12 MHz.,采用CPLD 器件為ALTERA 的EPM7064AEL144-7N。</p><p>  1.2 樂曲自動演奏機</p><p><b>  設(shè)計要求:<

5、/b></p><p> ?。?)可以在電路上能自動演奏樂曲,在這里我們采用的是貝多芬的《歡樂頌》;</p><p> ?。?)有相應(yīng)的LED燈指示高低音;</p><p><b>  其他要求:</b></p><p>  (1)晶振為12 MHz;</p><p>  (2) 采用CPL

6、D 器件,為ALTERA 的EPM7064AEL144-7N。</p><p>  1.3 硬件電子琴設(shè)計+樂曲自動演奏機</p><p>  最初我們選擇的設(shè)計是電子琴,但是由于電子琴的設(shè)計較為基礎(chǔ),因此我們對電子琴的設(shè)計進行了改進,將其與樂曲自動演奏相結(jié)合,要求如下:</p><p><b>  設(shè)計要求:</b></p>

7、<p>  (1)按下KEY1—KEY7 分別表示中音的DO、 RE 、 ME、 FA、 SOL、 LA、 SI;</p><p> ?。?)對于電子琴,按下相應(yīng)的鍵有對應(yīng)LED燈指示;</p><p>  (3)可以在電路上能自動演奏樂曲,在這里我們采用的是貝多芬的《歡樂頌》,且有相應(yīng)的LED燈指示高低音;</p><p> ?。?)能實現(xiàn)電子琴和樂曲

8、自動演奏功能的切換。</p><p><b>  其他要求:</b></p><p> ?。?)晶振為12 MHz;</p><p> ?。?)采用CPLD 器件為ALTERA 的EPM7064AEL144-7N。</p><p><b>  2 整體規(guī)劃</b></p><p

9、><b>  2.1 設(shè)計分析</b></p><p>  根據(jù)設(shè)計要求,由于樂曲自動演奏機和硬件電子琴的設(shè)計已經(jīng)存在,我們對已有的設(shè)計進行修改,形成兩個不同功能的模塊,然后采用元件例化,拼接兩個模塊,同時附加一個選擇功能模塊,以實現(xiàn)樂曲自動演機和硬件電子琴兩個功能。</p><p>  2.1.1 硬件電子琴分析</p><p> 

10、 對于硬件電子琴,參考了實驗時使用的程序,已經(jīng)達(dá)到的要求有:</p><p> ?。?)按下key1~key7 分別表示中音的DO、 RE 、 ME、 FA、 SOL、 LA、 S;</p><p> ?。?)按下相應(yīng)的鍵有對應(yīng)LED燈指示。</p><p>  2.1.2 樂曲自動演奏機分析</p><p>  對于樂曲自動演奏機,參考了

11、實驗時使用的程序,已經(jīng)達(dá)到的要求有:</p><p> ?。?)可以在電路上能自動演奏樂曲,在這里我們采用的是貝多芬的《歡樂頌》</p><p>  (2)有相應(yīng)的LED燈指示高低音。</p><p><b>  而對于其他要求:</b></p><p> ?。?)晶振為12 MHz.;</p><p

12、>  (2)采用CPLD 器件為ALTERA 的EPM7064SL-44。</p><p>  我們在實驗箱驗證時,先按照實驗箱芯片和晶振進行就修改,在實驗箱上確認(rèn)實驗相應(yīng)功能之后,我們在對應(yīng)模塊的頻率數(shù)值進行修改,并在對管腳重新鎖定即可。</p><p>  2.1.3 整體設(shè)計分析</p><p>  整體設(shè)計要求:用key8實現(xiàn)兩個功能切換。添加一個選

13、擇器,以實現(xiàn)兩個功能切換。當(dāng)key8鍵沒有按下時,電路實現(xiàn)硬件電子琴功能,當(dāng)key8鍵按下之后,電路實現(xiàn)樂曲自動演奏機。由于不存在現(xiàn)成可以借鑒的,于是,課程設(shè)計任務(wù)重心就放在了選擇器模塊的編寫以及整體電路的合成上。</p><p>  2.2 頂層模塊輸入輸出</p><p>  圖2-1 頂層文件圖形</p><p><b>  管腳說明:</

14、b></p><p>  輸入:時鐘信號——clk ,按鍵——[6:0]key ,功能切換鍵——key7</p><p>  輸出:LED燈——[6:0]led ,蜂鳴器——beep;</p><p>  Key0: DO key1: RE key2: ME key3:FA key4: SOL</p><p>  key5:

15、 LA key6: SI key7:功能切換鍵</p><p><b>  2.3 設(shè)計流程</b></p><p>  圖2-1 設(shè)計流程圖</p><p><b>  2.4 設(shè)計分工</b></p><p>  孫干:負(fù)責(zé)修改硬件電子琴以及樂曲自動演奏模塊。</p>

16、<p>  周龍杰:負(fù)責(zé)編寫選擇器以及設(shè)計頂層文件。</p><p>  朱真:負(fù)責(zé)綜合測試電路是否達(dá)到要求,并進行修改。</p><p>  3 功能劃分與模塊化分</p><p>  3.1 自動演奏模塊</p><p>  自動演奏模塊功能:在按下key7鍵后,實現(xiàn)可以自動播放樂曲的功能。</p><p

17、>  3.1.1 自動演奏設(shè)計方案</p><p> ?。?)根據(jù)樂曲自動演奏的基本原理設(shè)計出適合EDA多功能試驗箱的源程序,通過分頻模塊得到12MHZ的晶振;源程序編寫完成,編譯調(diào)試后,在實驗箱上驗證其功能;</p><p> ?。?)驗證模塊是否能完成實踐要求的所有功能;然后去掉分頻模塊,將功能模塊做適當(dāng)?shù)男薷?,編譯調(diào)試成功后,將其下載到CPLD實驗板上。</p>

18、<p>  3.1.2 設(shè)計步驟</p><p>  (1)在Quartus Ⅱ中建立一個工程項目文件song.qpf,并在該項目下新建Verilog HDL源程序文件song.v輸入程序代碼并保存。完整的Verilog HDL程序參考程序清單。</p><p> ?。?)然后在該工程選擇目標(biāo)器件并對相應(yīng)的引腳進行鎖定,在這里所選擇器件為Alter公司的EPM7064SL-

19、44芯片。</p><p> ?。?)對該工程文件進行全程編譯處理,若在編譯中發(fā)現(xiàn)錯誤,則找出錯誤并更正,直到編譯成功。</p><p> ?。?)最后拿出下載電纜,將此電纜的兩端分別接到PC機的打印機并口和核心板上的JTAG 接口上,打開電源執(zhí)行下載命令,把程序下載到CPLD器件中。此時可以得到《歡樂頌》樂曲的演奏以及LED燈的明滅指示其高低音。</p><p>

20、  3.2 硬件電子琴模塊</p><p>  硬件電子琴模塊功能:在按下功能切換鍵key7后,可以實現(xiàn)電子琴功能,即按下key1 到key7的過程中發(fā)出相應(yīng)的高低音。</p><p>  3.2.1 硬件電子琴設(shè)計方案</p><p>  (1)根據(jù)硬件電子琴演奏的基本原理設(shè)計出適合EDA多功能試驗箱的源程序,通過分頻模塊得到12MHZ的晶振;源程序編

21、寫完成,編譯調(diào)試后,在實驗箱上驗證其功能;</p><p> ?。?)驗證模塊是否能完成實踐要求的所有功能;然后去掉分頻模塊,將功能模塊做適當(dāng)?shù)男薷暮?,編譯調(diào)試成功后,將其下載到CPLD實驗板上。</p><p>  3.2.2 設(shè)計步驟</p><p> ?。?)在Quarters II中建立一個工程項目文件beep1.qpf。并在該項目下新建Verilog H

22、DL源程序文件beep1.v,輸入程序代碼并保存,進行綜合編譯,若在編譯中發(fā)現(xiàn)錯誤,則找出并更正錯誤,直至編譯成功為止。</p><p>  (2)選擇目標(biāo)器件并進行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。</p><p> ?。?)對該工程文件進行全程編譯處理。若在編譯過程中發(fā)現(xiàn)錯誤,則找出并更正錯誤,直到編譯成功為止。</p><p> ?。?)將產(chǎn)生的beep

23、1.sof輸出對FPGA進行配置。按下按鍵KEY1~KEY8就可以開始使用電子琴來演奏音樂了。</p><p><b>  4 課程設(shè)計原理</b></p><p>  4.1 硬件電子琴設(shè)計原理</p><p>  樂曲演奏的原理是:由于組成樂曲的每個音符的頻率值(音調(diào))及其持續(xù)時間(音長)是樂曲演奏的2個基本數(shù)據(jù),因此需要控制輸出到揚聲

24、器的激勵信號的頻率高低和該頻率信號持續(xù)的時間。頻率的高低決定了音調(diào)的高低,而樂曲的簡譜與各音名的頻率對應(yīng)關(guān)系在后面將給出。所有不同頻率的信號都是從一基準(zhǔn)頻率分頻而得來的,由于音階頻率多為非整數(shù),而分頻系數(shù)有不能為小數(shù),故必須將計算得到的分頻數(shù)進行向下取整,基準(zhǔn)頻率和分頻系數(shù)應(yīng)綜合考慮加以選擇,從而保證音樂不會走調(diào)。如在48MHz 時鐘下,中音1(對應(yīng)的頻率值是523.3Hz)的分頻系數(shù)應(yīng)該為:48000000/(2*523.3)=458

25、63,這樣只需對系統(tǒng)時鐘進行45863次分頻即可得到所要的中音M1(分頻系數(shù)計算公式為D=F/2K,由于F/2K之后,會使分頻系數(shù)D變小,所以功能模塊中語句:beep_r<=!beep_r,使得輸出取反,K=F/2count_end,消除了前面除以2K的影響) 。 </p><p>  4.2 樂曲自動演奏設(shè)計原理</p><p>  硬件電路和自動演奏的原理同硬件電子琴實驗原

26、理類似。至于其他音符,同樣可由一式求出對應(yīng)的分頻系數(shù)。在程序中設(shè)置一個狀態(tài)機,每250ms改變一個狀態(tài)(即一個節(jié)拍),組成樂曲的每個音符的頻率值(音調(diào))相對應(yīng)于狀態(tài)機的每一個狀態(tài)。只要讓狀態(tài)機的狀態(tài)按順序轉(zhuǎn)換,就可以自動演奏播放音樂了。《歡樂頌》樂曲的簡譜如圖所示:</p><p>  圖4-1 《歡樂頌》簡譜圖</p><p>  4.3 消抖原理</p><

27、;p>  作為機械開關(guān)的鍵盤,在按鍵操作時,由于機械觸點的彈性及電壓突跳等原因,在觸點閉合或開啟的瞬間會出現(xiàn)電壓抖動,實際應(yīng)用中如果不進行處理將會造成誤觸發(fā)。</p><p>  由于這里是低電平表示按鍵按下,所以按鍵去抖動的關(guān)鍵在于提取穩(wěn)定的低電平狀態(tài),慮除前沿、后沿抖動毛刺。對于一個按鍵信號,可以用一個脈沖對他進行取樣,如果連續(xù)三次取樣為低電平,可以認(rèn)為信號已經(jīng)處于鍵穩(wěn)定狀態(tài),這時輸出一個低電平按鍵信號

28、。繼續(xù)取樣的過程中如果不能滿足連續(xù)三次取樣為低,則認(rèn)為鍵穩(wěn)定狀態(tài)結(jié)束,這時輸出變?yōu)楦唠娖健?lt;/p><p>  5 各模塊的實現(xiàn)方法</p><p>  5.1 選擇器模塊實現(xiàn)方法</p><p>  經(jīng)過小組討論和老師的指導(dǎo),我們確定以下三種方案以實現(xiàn)功能切換。</p><p><b>  方案A</b></

29、p><p>  添加使能端控制兩個模塊工作狀態(tài)。即當(dāng)KEY8沒有按下時,硬件電子琴模塊工作,樂曲自動演奏模塊不工作;當(dāng)KEY8按下時,硬件電子琴不工作,樂曲自動演奏模塊工作。于是,需要給兩個模塊分別添加使能控制端,以控制其工作狀態(tài),而選擇器就負(fù)責(zé)檢測KEY8按鍵的狀態(tài),同時給出相應(yīng)的使能信號輸出指示。</p><p><b>  方案B</b></p>&l

30、t;p>  通過控制時鐘信號輸入與否來控制兩個模塊工作狀態(tài)。即當(dāng)KEY8沒有按下時,給硬件電子琴模塊時鐘信號,使其工作,將樂曲自動演奏模塊的時鐘信號屏蔽,使其不工作;當(dāng)KEY8按下時,將硬件電子琴時鐘信號屏蔽,使其不工作,給樂曲自動演奏模塊時鐘信號,使其工作。于是,需要讓選擇器實現(xiàn)時鐘信號的選擇輸出,以分別給兩個模塊時鐘信號。</p><p><b>  方案C</b></p&g

31、t;<p>  方案A、B都是對輸入進行控制,換一個思路,我們可以對輸出進行控制。即讓兩個模塊都工作,但是輸出的部分添加選擇器,有選擇輸出信號。當(dāng)KEY8沒有按下時,硬件電子琴的模塊輸出接到蜂鳴器和LED燈;當(dāng)KEY8按下時,樂曲自動演奏模塊輸出接到蜂鳴器和LED燈。</p><p>  由于三種方式實現(xiàn)的手段都不相同,逐一嘗試后再進行取舍。</p><p>  對于方案A,

32、經(jīng)過編譯下載到試驗箱之后,雖然添加使能端可以達(dá)到切換功能,但是由于存在時鐘信號與使能不同步的原因,在實驗箱上就會出現(xiàn)按下按鍵后不能完全切換,需要等待對應(yīng)的時鐘信號出現(xiàn)后才能將功能切換過去。</p><p>  對于方案B,經(jīng)過編譯下載到實驗箱之后,我們發(fā)現(xiàn)由于時鐘信號有高低變化的電平出現(xiàn),在切換的過程中,考慮到器件的延時,會出現(xiàn)無法考慮到的情況,對于兩個模塊很難達(dá)到切換。</p><p>

33、  于是,我們改變了思路,采用方案C,從輸出進行控制,通過將蜂鳴和LED燈的輸入和兩個模塊的輸出有選擇的匹配進行切換。通過編譯下載到實驗箱驗證可以實現(xiàn)功能,而且在兩種狀態(tài)的切換時,不會出現(xiàn)無法控制的狀況。</p><p>  5.2 自動演奏模塊實現(xiàn)方法</p><p>  通過參照實驗課本,我們根據(jù)相關(guān)實驗對試驗程序進行了簡單修改,得到了本次自動演奏模塊的歌曲《歡樂頌》,實現(xiàn)其自動演

34、奏功能。</p><p>  對于自動演奏模塊而言,要實現(xiàn)其功能,只需要在頂層模塊中添加觸發(fā)自動演奏模塊的觸發(fā)點,在本程序中,即按下key8按鍵,屏蔽掉硬件電子琴的時鐘信號,而使自動演奏模塊的電子時鐘信號作為使能信號。</p><p>  在自動演奏模塊中,首先計算出各個音符所對應(yīng)的參數(shù),對參數(shù)進行定義和設(shè)計。通過對晶振的控制實現(xiàn)每個音響應(yīng)時間的長短并且可以修改相關(guān)參數(shù)實現(xiàn)音長的改變。演奏

35、過程中,設(shè)置循環(huán)體,即每次演奏結(jié)束,可以再從頭開始演奏,從而實現(xiàn)自動演奏的自動功能。程序中可以設(shè)置每次循環(huán)時間,也可以設(shè)置循環(huán)中斷。每個音符都需要驅(qū)動蜂鳴器實現(xiàn)其功能。</p><p>  最后,自動演奏模塊中,需要有LED燈的指示,對于這樣的要求,我們在程序最后添加了assign賦值語句。實現(xiàn)了每個音符響時對應(yīng)的LED燈點亮。對于在實驗中沒有出現(xiàn)的音符所對應(yīng)的LED燈則設(shè)置為高阻態(tài),從而屏蔽LED燈點亮。<

36、;/p><p>  在程序中,通過控制TIME從而得到每個音階所響應(yīng)的時間,不同晶振所對應(yīng)的的時間為1s,對應(yīng)的時間可以控制振蕩次數(shù)實現(xiàn)控制時間的長短。</p><p>  if(state == 8'd125) state = 8'd0;語句實現(xiàn)的是自動演奏循環(huán)和實現(xiàn)歌曲演奏長短。通過系應(yīng)該參數(shù)從而使歌曲唱到想要唱到的部分。</p><p>  5.3

37、 硬件電子琴模塊實現(xiàn)方法</p><p>  在原理部分我們已經(jīng)知道了硬件電子琴和自動演奏樂曲的原理是相同的,因此在知道了如何實現(xiàn)樂曲演奏模塊的方法后,對于硬件電子琴只需要實現(xiàn)同樣的方法,就可以實現(xiàn)其模塊功能,只不過在硬件電子琴模塊中,需要的是利用按鍵實現(xiàn)其功能。對于每一個按鍵,在程序中設(shè)置各按鍵所對應(yīng)的參數(shù)即可實現(xiàn)硬件電子琴的功能。</p><p>  程序的關(guān)鍵點為在于各個系數(shù)的計算

38、,這個問題在原理部分通過清單已經(jīng)詳細(xì)解決,在這里對程序進行簡單的解讀:</p><p>  硬件電子琴的功能實現(xiàn)主要靠蜂鳴器和系數(shù)得到實現(xiàn)。在試驗程序的基礎(chǔ)上進行修改系數(shù)而得到。控制程序的循環(huán)體部分實現(xiàn)了計數(shù)和完成清零的操作。通過assign賦值語句實現(xiàn)LED燈的操作,在這里,我們添加了數(shù)碼管的功能,從而實現(xiàn)了再按下按鍵的同時,實現(xiàn)數(shù)碼管顯示相對應(yīng)的音階大小。</p><p>  6

39、實驗箱上完整設(shè)計</p><p>  6.1硬件電子琴模塊程序</p><p>  圖6-1 硬件電子琴模塊圖</p><p>  module beep1(clk,key,beep,led);//模塊名稱beep</p><p>  input clk;//系統(tǒng)時鐘48MHz</p><p>

40、  input[6:0]key;//按鍵輸入</p><p>  output beep;//蜂鳴器輸出端</p><p>  output[6:0]led;//LED輸出</p><p>  reg beep_r;//寄存器</p><p>  reg[15:0]count,count_

41、end;</p><p>  reg[6:0]key_r;</p><p>  reg [13:0]a; //消抖寄存器</p><p>  always@(posedge clk)</p><p><b>  begin</b></p><p>  count <

42、= count + 1'b1;//計數(shù)器加1</p><p>  if((count == count_end)&(!(count_end == 16'hffff)))</p><p><b>  begin</b></p><p>  count <= 16'h0;//計數(shù)器清零<

43、;/p><p>  beep_r <= !beep_r; //取反輸出信號</p><p><b>  end</b></p><p><b>  end</b></p><p>  always @(key)</p><p><b>  begi

44、n</b></p><p>  a=2000; //消抖等待時間</p><p>  key_r = key;//取鍵值</p><p>  case(key_r)</p><p>  7'b1111110:begin </

45、p><p>  while(a>0)</p><p><b>  begin </b></p><p><b>  a=a-1; </b></p><p><b>  end </b></p><p>  count_end = 16'hb32

46、7;</p><p>  while(a>0)</p><p><b>  begin </b></p><p><b>  a=a-1; </b></p><p><b>  end </b></p><p><b>  end&l

47、t;/b></p><p>  7'b1111101:begin while(a>0)begin a=a-1 ;end count_end = 16'h9fa0;while(a>0)begin a=a-1; end end//中音2的分頻系數(shù)值</p><p>  7'b1111011:begin while(a>0)begin a=a-

48、1 ;end count_end = 16'h8e32;while(a>0)begin a=a-1; end end//中音3的分頻系數(shù)值</p><p>  7'b1110111:begin while(a>0)begin a=a-1 ;end count_end = 16'h8637;while(a>0)begin a=a-1; end end//中音4的分頻

49、系數(shù)值</p><p>  7'b1101111:begin while(a>0)begin a=a-1 ;end count_end = 16'h7794;while(a>0)begin a=a-1; end end//中音5的分頻系數(shù)值</p><p>  7'b1011111:begin while(a>0)begin a=a-1 ;en

50、d count_end = 16'h6a88;while(a>0)begin a=a-1; end end//中音6的分頻系數(shù)值</p><p>  7'b0111111:begin while(a>0)begin a=a-1 ;end count_end = 16'h5ee8;while(a>0)begin a=a-1; end end//中音7的分頻系數(shù)值&l

51、t;/p><p>  default: begin while(a>0)begin a=a-1 ;end count_end = 16'hffff;while(a>0)begin a=a-1; end end</p><p><b>  endcase</b></p><p><b>  end</b>&

52、lt;/p><p>  assign beep =beep_r;//輸出音樂</p><p>  assign led =key_r;//輸出按鍵狀態(tài)</p><p><b>  endmodule</b></p><p>  6.2 樂曲自動演奏機程序</p><p>

53、;  圖6-2 樂曲自動演奏模塊圖</p><p>  module song(clk,beep,led);//模塊名稱 </p><p>  inputclk;//系統(tǒng)時鐘48Mhz</p><p>  outputbeep;//蜂鳴器輸出端 </p><p>  output

54、[7:0] led;</p><p>  regbeep_r;//寄存器 </p><p>  reg[7:0] state;//樂譜狀態(tài)機</p><p>  reg[15:0]count,count_end;</p><p>  reg[23:0]count1;</p><p>  /

55、/樂譜參數(shù):D=F/2K (D:參數(shù),F:時鐘頻率,K:音高頻率) </p><p>  //以下是12MHZ晶振狀態(tài)下的各音高對應(yīng)的參數(shù) </p><p>  /*parameter L_5 = 16'h3bca,//低音5 </p><p>  M_1 = 16'h2cc9,//中音1 </p>

56、<p>  M_2 = 16'h27f8,//中音2 </p><p>  M_3 = 16'h238c,//中音3 </p><p>  M_4 = 16'h218d,//中音4 </p><p>  M_5 = 16'h1de5,//中音5 </p><p>  M_6

57、= 16'h1aa2;//中音6 </p><p>  parameterTIME = 3000000;//控制每一個音的長短(250ms)*/ </p><p>  //樂譜參數(shù):D=F/2K (D:參數(shù),F:時鐘頻率,K:音高頻率) </p><p>  parameter L_5 = 16'd61224,//

58、低音5 </p><p>  M_1 = 16'd45863,//中音1 </p><p>  M_2 = 16'd40864,//中音2 </p><p>  M_3 = 16'd36402,//中音3 </p><p>  M_4 = 16'd34359,//中音4 </p&g

59、t;<p>  M_5 = 16'd30612; //中音5 </p><p>  parameterTIME = 12000000;//控制每一個音的長短(250ms) </p><p>  assign beep = beep_r;//輸出音樂 ,蜂鳴器 </p><p>  always@(posedge

60、 clk)</p><p><b>  begin</b></p><p>  count <= count + 1'b1;//計數(shù)器加1 </p><p>  if(count == count_end)</p><p><b>  begin</b></p>

61、;<p>  count <= 16'h0;//計數(shù)器清零 </p><p>  beep_r <= !beep_r;//輸出取反 </p><p><b>  end</b></p><p><b>  end</b></p><p>  

62、always @(posedge clk)</p><p><b>  begin</b></p><p>  if(count1 < TIME)//一個節(jié)拍250mS </p><p>  count1 = count1 + 1'b1;</p><p><b>  else</

63、b></p><p><b>  begin</b></p><p>  count1 = 24'd0;</p><p>  if(state == 8'd125) //控制歌曲循環(huán)播放時間 </p><p>  state = 8'd0;

64、 //循環(huán)從頭開始 </p><p><b>  else</b></p><p>  state = state + 1'b1; //循環(huán)結(jié)構(gòu)體 </p><p><b>  begin</b></p><p>  case(state)</p><p>

65、;  8'd0,8'd1: count_end = M_3;//中音"3",持續(xù)2個節(jié)拍 </p><p>  8'd2,8'd3: count_end = M_3;//中音"3",持續(xù)2個節(jié)拍 </p><p>  8'd4

66、,8'd5:count_end = M_4;//中音"4",持續(xù)2個節(jié)拍 </p><p>  8'd6,8'd7: count_end = M_5;</p><p>  8'd8,8'd9: count_end = M_5;</p><p>  8&

67、#39;d10,8'd11: count_end = M_4;</p><p>  8'd12,8'd13: count_end = M_3;</p><p>  8'd14,8'd15: count_end = M_2;</p><p>  8&#

68、39;d16,8'd17: count_end = M_1;</p><p>  8'd18,8'd19: count_end = M_1;</p><p>  8'd20,8'd21: count_end = M_2;</p><p>  8'd22

69、,8'd23: count_end = M_3;</p><p>  8'd24,8'd25,8'd26: count_end = M_3;</p><p>  8'd27: count_end = M_2;</p><p>  8'd2

70、8,8'd29,8'd30,8'd31: count_end = M_2;</p><p>  8'd32,8'd33: count_end = M_3;</p><p>  8'd34,8'd35: count_end = M_3;</p><

71、;p>  8'd36,8'd37: count_end = M_4;</p><p>  8'd38,8'd39: count_end = M_5;</p><p>  8'd40,8'd41: count_end = M_5;</p><p>  8&

72、#39;d42,8'd43: count_end = M_4;</p><p>  8'd44,8'd45: count_end = M_3;</p><p>  8'd46,8'd47: count_end = M_2;</p><p>  8'd48,8'd49:

73、 count_end = M_1;</p><p>  8'd50,8'd51: count_end = M_1;</p><p>  8'd52,8'd53: count_end = M_2;</p><p>  8'd54,8'd55: count

74、_end = M_3;</p><p>  8'd56,8'd57,8'd58: count_end = M_2;</p><p>  8'd59: count_end = M_1;</p><p>  8'd60,8'd61,8'd62,8'd63: c

75、ount_end = M_1;</p><p>  8'd64,8'd65: count_end = M_2;</p><p>  8'd66,8'd67: count_end = M_2;</p><p>  8'd68,8'd69: count_end = M_3;

76、</p><p>  8'd70,8'd71: count_end = M_1;</p><p>  8'd72,8'd73: count_end = M_2;</p><p>  8'd74: count_end = M_3

77、;</p><p>  8'd75: count_end = M_4;</p><p>  8'd76,8'd77: count_end = M_3;</p><p>  8'd78,8'd79: count_end = M_1;<

78、/p><p>  8'd80,8'd81: count_end = M_2;</p><p>  8'd82: count_end = M_3;</p><p>  8'd83: count_end = M_4;</p><p>  8'

79、d84,8'd85: count_end = M_3;</p><p>  8'd86,8'd87: count_end = M_2;</p><p>  8'd88,8'd89: count_end = M_1;</p><p>  8'd90,8'd91:

80、 count_end = M_2;</p><p>  //8'd92,8'd93: count_end = L_5;</p><p>  8'd92,8'd93,8'd94,8'd95:count_end = L_5;</p><p>  //8'd94,8'd95:

81、count_end = M_3;</p><p>  8'd96,8'd97: count_end = M_3;</p><p>  8'd98,8'd99: count_end = M_3;</p><p>  8'd100,8'd101: count_end

82、= M_4;</p><p>  8'd102,8'd103: count_end = M_5;</p><p>  8'd104,8'd105: count_end = M_5;</p><p>  8'd106,8'd107: count_end = M_4;</p><

83、;p>  8'd108: count_end = M_3;</p><p>  8'd109: count_end = M_2;</p><p>  8'd110,8'd111: count_end = M_1;</p><p>  8'd112,8'd113:

84、 count_end = M_1;</p><p>  8'd114,8'd115: count_end = M_2;</p><p>  8'd116,8'd117: count_end = M_3;</p><p>  8'd118,8'd119,8'd120:

85、count_end = M_2;</p><p>  8'd121: count_end = M_1;</p><p>  8'd122,8'd123,8'd124,8'd125: count_end = M_1;</p><p>  default:count_end = 16'

86、;hffff;</p><p><b>  endcase</b></p><p><b>  end</b></p><p><b>  end</b></p><p><b>  end</b></p><p>  assign

87、 led[0]=(count_end == M_1)?0:1; //控制LED燈的語言 </p><p>  assign led[1]=(count_end == M_2)?0:1;</p><p>  assign led[2]=(count_end == M_3)?0:1;</p><p>  assign led[3]=(count_end == M_4

88、)?0:1;</p><p>  assign led[4]=(count_end == M_5)?0:1;</p><p>  assign led[5]=(count_end == L_5)?0:1;</p><p>  assign led[6]=1;</p><p>  assign led[7]=1;</p><

89、p>  endmodule </p><p>  6.3 選擇模塊程序</p><p>  圖6-3 選擇模塊圖</p><p>  module select(key,beep1,beep2,led1,led2,beep,led);</p><p>  input key,beep1,beep2;</p&g

90、t;<p>  input [6:0]led1;</p><p>  input [6:0]led2;</p><p>  output beep;</p><p>  output [6:0]led;</p><p>  reg key_r;</p><p>  always @(negedge key

91、)</p><p><b>  begin</b></p><p>  key_r = ~key_r;//將琴鍵開關(guān)轉(zhuǎn)換為乒乓開關(guān)</p><p><b>  end</b></p><p>  assign beep=(key_r)?beep2:beep1;</p><p&

92、gt;  assign led=(key_r)?led2:led1;</p><p><b>  endmodule</b></p><p><b>  6.4頂層文件程序</b></p><p>  圖6-4 頂層文件圖</p><p>  module dzq(key,key7,beep,l

93、ed,clk);</p><p>  input key7;</p><p>  input [6:0]key;</p><p>  input clk;</p><p>  output [6:0]led;</p><p>  output beep;</p><p>  reg dout1;

94、</p><p>  reg dout2;</p><p>  reg dout3;</p><p><b>  reg led;</b></p><p>  reg key_r;</p><p>  wire a,b,key_l;</p><p>  wire [6:0]

95、c;</p><p>  wire [6:0]d;</p><p>  assign key_l = (dout1 | dout2 | dout3);//按鍵消抖輸出</p><p>  always @(posedge clk)</p><p><b>  begin</b></p><p>

96、  dout1 <= key7;</p><p>  dout2 <= dout1;</p><p>  dout3 <= dout2;</p><p><b>  end</b></p><p>  song (.clk(clk),.beep(b),.led(c));</p>

97、<p>  beep1 (.clk(clk),.key(key),.beep(a),.led(d));</p><p>  select (.key(key_l),.beep1(a),.beep2(b),.beep(beep),.led(led),.led1(d),.led2(c));</p><p><b>  endmodule</b><

98、/p><p><b>  6.5實驗圖形文件</b></p><p>  表6-1 硬件電子琴模塊+自動演奏模塊管腳鎖定表</p><p>  圖6-5 RTL Viewer文件圖</p><p><b>  7 優(yōu)化改進</b></p><p>  7.1.1 消

99、抖原理1(取值消抖)</p><p>  作為機械開關(guān)的鍵盤,在按鍵操作時,由于機械觸點的彈性及電壓突跳等原因,在觸點閉合或開啟的瞬間會出現(xiàn)電壓抖動,實際應(yīng)用中如果不進行處理將會造成誤觸發(fā)。</p><p>  由于這里是低電平表示按鍵按下,所以按鍵去抖動的關(guān)鍵在于提取穩(wěn)定的低電平狀態(tài),慮除前沿、后沿抖動毛刺。對于一個按鍵信號,可以用一個脈沖對他進行取樣,如果連續(xù)三次取樣為低電平,可以認(rèn)為

100、信號已經(jīng)處于鍵穩(wěn)定狀態(tài),這時輸出一個低電平按鍵信號。繼續(xù)取樣的過程中如果不能滿足連續(xù)三次取樣為低,則認(rèn)為鍵穩(wěn)定狀態(tài)結(jié)束,這時輸出變?yōu)楦唠娖?。一通道的消抖電路原理圖如下:</p><p>  圖7-1 按鍵電平抖動示意圖</p><p>  圖7-2 按鍵消抖動硬件原理圖</p><p>  7.1.2 消抖原理2(延時消抖)</p><p

101、>  同樣在進行按鍵操作的時候會因為有機械觸點的彈性及電壓突跳等原因,會出現(xiàn)電壓抖動現(xiàn)象。在實際應(yīng)用中為了避免誤觸發(fā)的發(fā)生幾率,除了用進行三次取值作為最終取值,還有延時消抖這樣一種方法進行消抖。所謂延時消抖,就是在進行按鍵操作之后,觸發(fā)器出發(fā)瞬間及產(chǎn)生的電壓抖動時間,不對其進行取值,讓其取值操作進行延時,設(shè)定延時時間,當(dāng)延時時間大于電壓抖動時間,在對其狀態(tài)進行取值操作,這樣取到的狀態(tài)值是穩(wěn)定的而且是正確的,因此延時消抖也是消抖的一

102、種方法。</p><p>  本課程設(shè)計也用到了這兩種的消抖方法,在硬件電子琴模塊中采用的是延時消抖方式,在自動演奏模塊中采用的是取值消抖方式。</p><p>  7.2 乒乓操作</p><p>  由于在切換功能時,需要長期按鍵才能進行切換,于是我們對選擇器添加了乒乓操作。功能圖,如圖7-3所示。</p><p>  圖7-3 乒

103、乓操作按鍵示意圖</p><p>  當(dāng)開關(guān)鍵輸入低電平時,輸出由高電平變?yōu)榈碗娖?,并且保持;?dāng)再次開關(guān)鍵輸入低電平時,輸出由低電平變?yōu)楦唠娖?,并且保持。從而有了鎖定的功能,實現(xiàn)了功能的完整切換。</p><p><b>  程序如下</b></p><p>  always @(negedge key)</p><p>

104、;<b>  begin</b></p><p>  keyout = ~keyout;//將琴鍵開關(guān)轉(zhuǎn)換為乒乓開關(guān)</p><p><b>  end</b></p><p>  8 任務(wù)完成情況說明</p><p>  表8-1 任務(wù)完成情況一覽表</p><p

105、>  額外實現(xiàn)功能:硬件電子琴在原有的設(shè)計要求的基礎(chǔ)上有了數(shù)碼管顯示功能頂層文件原理圖,如圖8-1所示。</p><p>  圖8-1 帶數(shù)碼管顯示功能硬件電子琴圖</p><p>  9 課程設(shè)計體會與總結(jié)</p><p>  本次EDA課程設(shè)計,持續(xù)了10天的時間,在這十天的時間里,雖然說時間不是連續(xù)的,但是學(xué)習(xí)的過程卻是連續(xù)的。在剛開始做實驗的時候我

106、們就開始著手準(zhǔn)備做課程設(shè)計。這次的課程設(shè)計,進一步加深了我對實驗課的認(rèn)識和對EDA的了解,對于Verilog HDL語言的運用更加的熟練。同時對于課程設(shè)計過程中要進行的調(diào)試和編寫程序有了一定的認(rèn)識。個人認(rèn)為不是做出了實驗板塊覺得很成功,而是調(diào)試成功的那時刻很有成就感。對于在課程設(shè)計中的出現(xiàn)的失誤和不足,是成功前的最大的困難和挑戰(zhàn),最后在隊員和老師的幫助下,所有的問題基本都得到了解決,而且也明白了其中的道理和原理。</p>

107、<p>  剛開始的時候我們覺得做出一個簡單的硬件電子琴是一件很簡單的事情,甚至想在同時做出硬件電子琴的同時把自動演奏模塊添加進去,但是在實際操作中才發(fā)現(xiàn),由于使用按鍵的沖突,所有不得不消除原有模塊的高音階部分,而將其改造出現(xiàn)在的模塊和形式,對于硬件電子琴的改造,看似是對原功能塊的簡單的改進,而實際上是需要重新構(gòu)造電路的,因為在演奏的過程中會有LED燈的使用沖突,如何調(diào)試和調(diào)用,才是本課程設(shè)計的重點,各個模塊的簡單的使用是很簡

108、單的,但是在綜合之后就需要不斷地修改和測試才能達(dá)到課程設(shè)計的要求。</p><p>  在本次課程設(shè)計中,剛開始的時候我做音階的時候和做自動演奏模塊時候,在第一次調(diào)試時候出現(xiàn)了19個錯誤,而且是沒有緣由的錯誤,讓我很是失望,經(jīng)過了一個也夜晚的調(diào)試,終于把自動演奏模塊做成功了。第二天因為頂層文件的需要,我們需要對各自的程序進行調(diào)整和修改。目的是為了能夠在最后的開發(fā)平臺上得到我們想要的結(jié)果。</p>&

109、lt;p>  在這次的課程設(shè)計過程中,我們采取的分工合作的方式來進行課程設(shè)計,我個人覺得是一件很好的事情。大家各有側(cè)重點但是同時都為課程設(shè)計做出應(yīng)該做的努力,分工協(xié)作有時候不僅有利用于課程設(shè)計的快速進行,而且也有利于個人和小組的交流和促進,在分工的時候,每個人都各盡所長,實現(xiàn)了又快又好的完成課程任務(wù)的目標(biāo)。最后,特別感謝本次課程設(shè)計給予我們指導(dǎo)的老師,在老師的知道和啟發(fā)下,我們才能正確的完成課程設(shè)計。在已經(jīng)結(jié)束課程的時間里,老師們

110、仍然在實驗室和我們在一起為我們的課程設(shè)計作指導(dǎo)。</p><p><b>  主要參考文獻</b></p><p>  1潘松,黃繼業(yè).2009.EDA技術(shù)使用教程第4版. 北京:科學(xué)出版社 </p><p>  2潘松,黃繼業(yè),陳龍.2009.EDA技術(shù)與Verilog HDL.北京:清華大學(xué)出版社</p><

111、p>  3王金明,楊吉斌.2002.數(shù)字系統(tǒng)設(shè)計與Verilog HDL.北京:電子工業(yè)出版社</p><p>  附錄1 </p><p><b>  實驗電路圖</b></p><p>  圖F1-1 PCB版圖</p><p>  圖F1-2 EPM706AEL144-7N芯片圖</p

112、><p>  圖F1-3 焊接實物圖</p><p>  圖F1-4 數(shù)碼管電路圖</p><p>  圖F1-5 按鍵電路圖 圖F1-6 LED燈電路圖</p><p>  圖F1-7 2X5下載插座 圖F1-8 蜂鳴器電路圖</p>

113、;<p>  圖F1-9 晶振電路圖 圖F1-10 電源電路圖</p><p><b>  附錄2</b></p><p>  表F2-1 簡譜中的音名與頻率的關(guān)系</p><p>  表F2-2 簡譜中的音名與參數(shù)的關(guān)系(12Mhz)

114、</p><p><b>  PCB板下載程序</b></p><p>  module beep2(clk,key,beep,led);</p><p>  input clk,[3:0]key;</p><p>  output beep, [3:0] led;</p><p>  reg

115、beep_r;</p><p>  reg [15:0]count,count_end;</p><p>  reg [3:0]key_r;</p><p>  always @(posedge clk)</p><p>  begin count<=count+1'b1;</p><p>  if

116、((count==count_end)&(!(count_end==16'hffff)))</p><p><b>  begin</b></p><p>  count<=16'h0;</p><p>  beep_r<=!beep_r;</p><p><b>  end

117、</b></p><p><b>  end</b></p><p>  always @(key)</p><p>  begin key_r=key;</p><p>  case(key_r)</p><p>  4'b1110:count_end=16'h

118、2cc9;</p><p>  4'b1101:count_end=16'h27e8;</p><p>  4'b1011:count_end=16'h238c;</p><p>  4'b0111:count_end=16'h218d;</p><p>  4'b0011:count_

119、end=16'h1de5;</p><p>  4'b0101:count_end=16'h1aa2;</p><p>  4'b0110:count_end=16'h17ba;</p><p>  4'b1001:count_end=16'h166a;</p><p>  4'

120、b1010:count_end=16'h13f3;</p><p>  4'b1100:count_end=16'h11c6;</p><p>  4'b0001:count_end=16'h10c7;</p><p>  4'b0010:count_end=16'h0ef2;</p><p

121、>  4'b1000:count_end=16'h0d51;</p><p>  4'b0000:count_end=16'h0bdd;</p><p>  default:count_end=16'hffff; </p><p><b>  endcase </b></p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論