wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4504|回復(fù): 0
收起左側(cè)

基于VHDL的具有自動(dòng)樂(lè)曲演奏功能的電子琴設(shè)計(jì)

[復(fù)制鏈接]
ID:467138 發(fā)表于 2019-1-12 20:44 | 顯示全部樓層 |閱讀模式
第一章  緒論
1.1 EDA簡(jiǎn)介            
EDA 技術(shù)就是依賴功能強(qiáng)大的計(jì)算機(jī),在EDA工具軟件平臺(tái)上,對(duì)以硬件描述語(yǔ)言HDL為系統(tǒng)邏輯描述手段完成的設(shè)計(jì)文件,自動(dòng)地完成邏輯編譯、化簡(jiǎn)、分割、綜合、布局布線以及邏輯優(yōu)化和仿真測(cè)試,直至實(shí)現(xiàn)既定的電子線路系統(tǒng)功能。EDA技術(shù)使得設(shè)計(jì)者的工作僅限于利用軟件的方式,即利用硬件描述語(yǔ)言和EDA軟件來(lái)完成對(duì)系統(tǒng)硬件功能的實(shí)現(xiàn),這是電子設(shè)計(jì)技術(shù)的一個(gè)巨大進(jìn)步。EDA技術(shù)在進(jìn)入21世紀(jì)后,得到了更大的發(fā)展。嵌入式處理器軟核的成熟,使得SOPC步入大規(guī)模應(yīng)用階段。電子技術(shù)領(lǐng)域全方位融入EDA技術(shù),除了日益成熟的數(shù)字技術(shù)外,傳統(tǒng)的電路系統(tǒng)設(shè)計(jì)建模理念發(fā)生了重大的變化。同時(shí),EDA使得電子領(lǐng)域各學(xué)科的界限更加模糊,更加互為包容。這些都利于設(shè)計(jì)人員利用EDA技術(shù)進(jìn)行電子系統(tǒng)設(shè)計(jì),如全定制或半定制ASIC設(shè)計(jì),FPGA/CPLD開(kāi)發(fā)應(yīng)用和印制電路板。從EDA技術(shù)的特點(diǎn)不難看出,相比于傳統(tǒng)的數(shù)字電子系統(tǒng)或IC設(shè)計(jì),EDA技術(shù)擁有獨(dú)特的優(yōu)勢(shì)。在傳統(tǒng)的數(shù)字電子系統(tǒng)或IC設(shè)計(jì)中,手工設(shè)計(jì)占了較大的比例。因此,也存在很多缺點(diǎn)。例如:復(fù)雜電路的設(shè)計(jì)、調(diào)試十分困難;由于無(wú)法進(jìn)行硬件系統(tǒng)仿真,如果某一過(guò)程存在錯(cuò)誤,查找和修改十分不便;設(shè)計(jì)過(guò)程中產(chǎn)生大量文檔,不易管理;可移植性差等。相比之下,EDA技術(shù)有很大不同。它運(yùn)用HDL對(duì)數(shù)字系統(tǒng)進(jìn)行抽象的行為與功能描述到具體的內(nèi)部線路結(jié)構(gòu)描述,從而可以在電子設(shè)計(jì)的各個(gè)階段、各個(gè)層次進(jìn)行計(jì)算機(jī)模擬驗(yàn)證,保證設(shè)計(jì)過(guò)程的正確性,可以大大降低設(shè)計(jì)成本,縮短設(shè)計(jì)周期。由于有各類庫(kù)的支持,能夠完成各種自動(dòng)設(shè)計(jì)過(guò)程。它極大地簡(jiǎn)化了設(shè)計(jì)文檔的管理,邏輯設(shè)計(jì)仿真測(cè)試技術(shù)也日益強(qiáng)大。VHDL在現(xiàn)在的EDA設(shè)計(jì)中使用最多,也擁有幾乎所有主流EDA工具的支持。
EDA技術(shù)在硬件實(shí)現(xiàn)方面融合了大規(guī)模集成電路制造技術(shù),IC版圖設(shè)計(jì),ASIC測(cè)試和封裝以及FPGA/CPLD編程下載和自動(dòng)測(cè)試等技術(shù);在計(jì)算機(jī)輔助工程方面融合了計(jì)算機(jī)輔助設(shè)計(jì)(CAD),計(jì)算機(jī)輔助制造(CAM),計(jì)算機(jī)輔助測(cè)試(CAT),計(jì)算機(jī)輔助工程(CAE)技術(shù)以及多種計(jì)算機(jī)語(yǔ)言的設(shè)計(jì)概念;
1.2芯片介紹
主流產(chǎn)品:ALTERA公司 、FLEX公司
產(chǎn)品類型:CPLD:EPROM類型,掉電后程序不丟失。
                                          FPGA:SRAM類型,掉電后程序丟失,必須重新編程。
工作電壓:5V/3.3V/2.5V/1.8V/1.5V
目前主要產(chǎn)品
MAX7000S/AE,MAX3000A系列、FLEX10KE/ACEX1K系列
APEX20K/20KE系列、APEXII系列、Stratix系列
Cyclone(颶風(fēng)) 系列、Excalibur系列
1.3 Cyclone(颶風(fēng))系列介紹
Altera最新一代SRAM工藝中等規(guī)模FPGA:
與Stratix結(jié)構(gòu)類似,是一種低成本FPGA系列:
是目前主流產(chǎn)品,其配置芯片業(yè)改用新的產(chǎn)品
可支持多種擴(kuò)展模塊
攝像頭模塊
VGA模塊
2.4寸彩屏
3.2寸彩屏
7寸高清大屏
以太網(wǎng)模塊
網(wǎng)口模塊
USB模塊
高速AD DA


第二章  模塊介紹
2.1設(shè)計(jì)分析
根據(jù)設(shè)計(jì)要求,由于樂(lè)曲自動(dòng)演奏機(jī)和硬件電子琴的設(shè)計(jì)已經(jīng)存在,我們對(duì)已有的設(shè)計(jì)進(jìn)行修改,形成兩個(gè)不同功能的模塊,然后采用元件例化,拼接兩個(gè)模塊,同時(shí)附加一個(gè)選擇功能模塊,以實(shí)現(xiàn)樂(lè)曲自動(dòng)演機(jī)和硬件電子琴兩個(gè)功能。
2.2硬件電子琴分析
對(duì)于硬件電子琴,參考了實(shí)驗(yàn)時(shí)使用的程序,已經(jīng)達(dá)到的要求有:
(1)按下key1~key7 分別表示中音的DO、 RE 、 ME、 FA、 SOL、 LA、 S;
(2)按下相應(yīng)的鍵有對(duì)應(yīng)LED燈指示。
2.3 樂(lè)曲自動(dòng)演奏機(jī)分析
對(duì)于樂(lè)曲自動(dòng)演奏機(jī),參考了實(shí)驗(yàn)時(shí)使用的程序,已經(jīng)達(dá)到的要求有:
(1)可以在電路上能自動(dòng)演奏樂(lè)曲,在這里我們采用的是貝多芬的《歡樂(lè)頌》
(2)有相應(yīng)的LED燈指示高低音。
而對(duì)于其他要求:
(1)晶振為12 MHz.
(2)采用CPLD 器件為ALTERA 的EPM7064SL-44。
我們?cè)趯?shí)驗(yàn)箱驗(yàn)證時(shí),先按照實(shí)驗(yàn)箱芯片和晶振進(jìn)行就修改,在實(shí)驗(yàn)箱上確認(rèn)實(shí)驗(yàn)相應(yīng)功能之后,我們?cè)趯?duì)應(yīng)模塊的頻率數(shù)值進(jìn)行修改,并在對(duì)管腳重新鎖定即可
2.4整體設(shè)計(jì)分析
整體設(shè)計(jì)要求:用key8實(shí)現(xiàn)兩個(gè)功能切換。添加一個(gè)選擇器,以實(shí)現(xiàn)兩個(gè)功能切換。當(dāng)key8鍵沒(méi)有按下時(shí),電路實(shí)現(xiàn)硬件電子琴功能,當(dāng)key8鍵按下之后,電路實(shí)現(xiàn)樂(lè)曲自動(dòng)演奏機(jī)。由于不存在現(xiàn)成可以借鑒的,于是,課程設(shè)計(jì)任務(wù)重心就放在了選擇器模塊的編寫以及整體電路的合成上。
頂層模塊輸入輸出:
圖2-1  頂層文件圖形
管腳說(shuō)明:輸入:時(shí)鐘信號(hào)——clk ,按鍵——[6:0]key ,功能切換鍵——key7
輸出:LED燈——[6:0]led ,蜂鳴器——beep;
Key0: DO  key1: RE   key2: ME  key3:FA   key4: SOL
key5: LA  key6: SI   key7:功能切換鍵
2.5 設(shè)計(jì)流程


第三章  功能分與模塊3.1自動(dòng)演奏模塊
自動(dòng)演奏模塊功能:在按下key7鍵后,實(shí)現(xiàn)可以自動(dòng)播放樂(lè)曲的功能。
3.2 自動(dòng)演奏設(shè)計(jì)方案
(1)根據(jù)樂(lè)曲自動(dòng)演奏的基本原理設(shè)計(jì)出適合EDA多功能試驗(yàn)箱的源程序,通過(guò)分頻模塊得到12MHZ的晶振;源程序編寫完成,編譯調(diào)試后,在實(shí)驗(yàn)箱上驗(yàn)證其功能;
(2)驗(yàn)證模塊是否能完成實(shí)踐要求的所有功能;然后去掉分頻模塊,將功能模塊做適當(dāng)?shù)男薷模幾g調(diào)試成功后,將其下載到CPLD實(shí)驗(yàn)板上。
方案設(shè)計(jì)步驟:
(1)在Quartus Ⅱ中建立一個(gè)工程項(xiàng)目文件song.qpf,并在該項(xiàng)目下新建Verilog HDL源程序文件song.v輸入程序代碼并保存。完整的Verilog HDL程序參考程序清單。
(2)然后在該工程選擇目標(biāo)器件并對(duì)相應(yīng)的引腳進(jìn)行鎖定,在這里所選擇器件為Alter公司的EPM7064SL-44芯片。
(3)對(duì)該工程文件進(jìn)行全程編譯處理,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出錯(cuò)誤并更正,直到編譯成功。
(4)最后拿出下載電纜,將此電纜的兩端分別接到PC機(jī)的打印機(jī)并口和核心板上的JTAG 接口上,打開(kāi)電源執(zhí)行下載命令,把程序下載到CPLD器件中。此時(shí)可以得到《歡樂(lè)頌》樂(lè)曲的演奏以及LED燈的明滅指示其高低音。
3.3硬件電子琴模塊
硬件電子琴模塊功能:在按下功能切換鍵key7后,可以實(shí)現(xiàn)電子琴功能,即按下key1 到key7的過(guò)程中發(fā)出相應(yīng)的高低音。
3.3.1硬件電子琴設(shè)計(jì)方案
(1)根據(jù)硬件電子琴演奏的基本原理設(shè)計(jì)出適合EDA多功能試驗(yàn)箱的源程序,通過(guò)分頻模塊得到12MHZ的晶振;源程序編寫完成,編譯調(diào)試后,在實(shí)驗(yàn)箱上驗(yàn)證其功能;
(2)驗(yàn)證模塊是否能完成實(shí)踐要求的所有功能;然后去掉分頻模塊,將功能模塊做適當(dāng)?shù)男薷暮螅幾g調(diào)試成功后,將其下載到CPLD實(shí)驗(yàn)板上。
3.3.2設(shè)計(jì)步驟
(1)在Quarters II中建立一個(gè)工程項(xiàng)目文件beep1.qpf。并在該項(xiàng)目下新建Verilog HDL源程序文件beep1.v,輸入程序代碼并保存,進(jìn)行綜合編譯,若在編譯中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直至編譯成功為止。
(2)選擇目標(biāo)器件并進(jìn)行引腳鎖定。將未使用的管腳設(shè)置為三態(tài)輸入。
(3)對(duì)該工程文件進(jìn)行全程編譯處理。若在編譯過(guò)程中發(fā)現(xiàn)錯(cuò)誤,則找出并更正錯(cuò)誤,直到編譯成功為止。
(4)將產(chǎn)生的beep1.sof輸出對(duì)FPGA進(jìn)行配置。按下按鍵KEY1~KEY8就可以開(kāi)始使用電子琴來(lái)演奏音樂(lè)了。

第四章  課程設(shè)計(jì)原理4.1硬件電子琴設(shè)計(jì)原理
樂(lè)曲演奏的原理是:由于組成樂(lè)曲的每個(gè)音符的頻率值(音調(diào))及其持續(xù)時(shí)間(音長(zhǎng))是樂(lè)曲演奏的2個(gè)基本數(shù)據(jù),因此需要控制輸出到揚(yáng)聲器的激勵(lì)信號(hào)的頻率高低和該頻率信號(hào)持續(xù)的時(shí)間。頻率的高低決定了音調(diào)的高低,而樂(lè)曲的簡(jiǎn)譜與各音名的頻率對(duì)應(yīng)關(guān)系在后面將給出。所有不同頻率的信號(hào)都是從一基準(zhǔn)頻率分頻而得來(lái)的,由于音階頻率多為非整數(shù),而分頻系數(shù)有不能為小數(shù),故必須將計(jì)算得到的分頻數(shù)進(jìn)行向下取整,基準(zhǔn)頻率和分頻系數(shù)應(yīng)綜合考慮加以選擇,從而保證音樂(lè)不會(huì)走調(diào)。如在48MHz 時(shí)鐘下,中音1(對(duì)應(yīng)的頻率值是523.3Hz)的分頻系數(shù)應(yīng)該為:48000000/(2*523.3)=45863,這樣只需對(duì)系統(tǒng)時(shí)鐘進(jìn)行45863次分頻即可得到所要的中音M1(分頻系數(shù)計(jì)算公式為D=F/2K,由于F/2K之后,會(huì)使分頻系數(shù)D變小,所以功能模塊中語(yǔ)句:beep_r<=!beep_r,使得輸出取反,K=F/2count_end,消除了前面除以2K的影響) 。
4.2樂(lè)曲自動(dòng)演奏設(shè)計(jì)原理
硬件電路和自動(dòng)演奏的原理同硬件電子琴實(shí)驗(yàn)原理類似。至于其他音符,同樣可由一式求出對(duì)應(yīng)的分頻系數(shù)。在程序中設(shè)置一個(gè)狀態(tài)機(jī),每250ms改變一個(gè)狀態(tài)(即一個(gè)節(jié)拍),組成樂(lè)曲的每個(gè)音符的頻率值(音調(diào))相對(duì)應(yīng)于狀態(tài)機(jī)的每一個(gè)狀態(tài)。只要讓狀態(tài)機(jī)的狀態(tài)按順序轉(zhuǎn)換,就可以自動(dòng)演奏播放音樂(lè)了。
《歡樂(lè)頌》樂(lè)曲的簡(jiǎn)譜如圖所示:
圖4-1《歡樂(lè)頌》簡(jiǎn)譜圖
4.3模塊的實(shí)現(xiàn)方法4.3.1選擇器模塊實(shí)現(xiàn)方法
我們可以對(duì)輸出進(jìn)行控制。即讓兩個(gè)模塊都工作,但是輸出的部分添加選擇器,有選擇輸出信號(hào)。當(dāng)KEY8沒(méi)有按下時(shí),硬件電子琴的模塊輸出接到蜂鳴器和LED燈;當(dāng)KEY8按下時(shí),樂(lè)曲自動(dòng)演奏模塊輸出接到蜂鳴器和LED燈。從輸出進(jìn)行控制,通過(guò)將蜂鳴和LED燈的輸入和兩個(gè)模塊的輸出有選擇的匹配進(jìn)行切換。通過(guò)編譯下載到實(shí)驗(yàn)箱驗(yàn)證可以實(shí)現(xiàn)功能,而且在兩種狀態(tài)的切換時(shí),不會(huì)出現(xiàn)無(wú)法控制的狀況。
4.3.2自動(dòng)演奏模塊實(shí)現(xiàn)方法
通過(guò)參照實(shí)驗(yàn)課本,我們根據(jù)相關(guān)實(shí)驗(yàn)對(duì)試驗(yàn)程序進(jìn)行了簡(jiǎn)單修改,得到了本次自動(dòng)演奏模塊的歌曲《歡樂(lè)頌》,實(shí)現(xiàn)其自動(dòng)演奏功能。
對(duì)于自動(dòng)演奏模塊而言,要實(shí)現(xiàn)其功能,只需要在頂層模塊中添加觸發(fā)自動(dòng)演奏模塊的觸發(fā)點(diǎn),在本程序中,即按下key8按鍵,屏蔽掉硬件電子琴的時(shí)鐘信號(hào),而使自動(dòng)演奏模塊的電子時(shí)鐘信號(hào)作為使能信號(hào)。
在自動(dòng)演奏模塊中,首先計(jì)算出各個(gè)音符所對(duì)應(yīng)的參數(shù),對(duì)參數(shù)進(jìn)行定義和設(shè)計(jì)。通過(guò)對(duì)晶振的控制實(shí)現(xiàn)每個(gè)音響應(yīng)時(shí)間的長(zhǎng)短并且可以修改相關(guān)參數(shù)實(shí)現(xiàn)音長(zhǎng)的改變。演奏過(guò)程中,設(shè)置循環(huán)體,即每次演奏結(jié)束,可以再?gòu)念^開(kāi)始演奏,從而實(shí)現(xiàn)自動(dòng)演奏的自動(dòng)功能。程序中可以設(shè)置每次循環(huán)時(shí)間,也可以設(shè)置循環(huán)中斷。每個(gè)音符都需要驅(qū)動(dòng)蜂鳴器實(shí)現(xiàn)其功能。
最后,自動(dòng)演奏模塊中,需要有LED燈的指示,對(duì)于這樣的要求,我們?cè)诔绦蜃詈筇砑恿薬ssign賦值語(yǔ)句。實(shí)現(xiàn)了每個(gè)音符響時(shí)對(duì)應(yīng)的LED燈點(diǎn)亮。對(duì)于在實(shí)驗(yàn)中沒(méi)有出現(xiàn)的音符所對(duì)應(yīng)的LED燈則設(shè)置為高阻態(tài),從而屏蔽LED燈點(diǎn)亮。
在程序中,通過(guò)控制TIME從而得到每個(gè)音階所響應(yīng)的時(shí)間,不同晶振所對(duì)應(yīng)的的時(shí)間為1s,對(duì)應(yīng)的時(shí)間可以控制振蕩次數(shù)實(shí)現(xiàn)控制時(shí)間的長(zhǎng)短。
if(state == 8'd125) state = 8'd0;語(yǔ)句實(shí)現(xiàn)的是自動(dòng)演奏循環(huán)和實(shí)現(xiàn)歌曲演奏長(zhǎng)短。通過(guò)系應(yīng)該參數(shù)從而使歌曲唱到想要唱到的部分。
4.3.3硬件電子琴模塊實(shí)現(xiàn)方法
在原理部分我們已經(jīng)知道了硬件電子琴和自動(dòng)演奏樂(lè)曲的原理是相同的,因此在知道了如何實(shí)現(xiàn)樂(lè)曲演奏模塊的方法后,對(duì)于硬件電子琴只需要實(shí)現(xiàn)同樣的方法,就可以實(shí)現(xiàn)其模塊功能,只不過(guò)在硬件電子琴模塊中,需要的是利用按鍵實(shí)現(xiàn)其功能。對(duì)于每一個(gè)按鍵,在程序中設(shè)置各按鍵所對(duì)應(yīng)的參數(shù)即可實(shí)現(xiàn)硬件電子琴的功能。
硬件電子琴的功能實(shí)現(xiàn)主要靠蜂鳴器和系數(shù)得到實(shí)現(xiàn)。在試驗(yàn)程序的基礎(chǔ)上進(jìn)行修改系數(shù)而得到。控制程序的循環(huán)體部分實(shí)現(xiàn)了計(jì)數(shù)和完成清零的操作。通過(guò)assign賦值語(yǔ)句實(shí)現(xiàn)LED燈的操作,在這里,我們添加了數(shù)碼管的功能,從而實(shí)現(xiàn)了再按下按鍵的同時(shí),實(shí)現(xiàn)數(shù)碼管顯示相對(duì)應(yīng)的音階大小。

第五章  實(shí)驗(yàn)箱設(shè)計(jì)
5.1硬件電子琴模塊程序
圖5-1  硬件電子琴模塊圖
module beep1(clk,key,beep,led);                            //模塊名稱beep            
input clk;                                                                                        //系統(tǒng)時(shí)鐘48MHz            
input[6:0]key;                                                                          //按鍵輸入
output beep;                                                                                    //蜂鳴器輸出端            
output[6:0]led;                                                                                    //LED輸出
reg beep_r;                                                                                                  //寄存器
reg[15:0]count,count_end;
reg[6:0]key_r;
reg [13:0]a;                                                                                                     //消抖寄存器
always@(posedge clk)
begin
              count <= count + 1'b1;                                                        //計(jì)數(shù)器加1
              if((count == count_end)&(!(count_end == 16'hffff)))
begin
                            count <= 16'h0;                                                                      //計(jì)數(shù)器清零
                            beep_r <= !beep_r;                                             //取反輸出信號(hào)
              end
end
always @(key)
begin
              a=2000;                      //消抖等待時(shí)間
              key_r = key;                                                                                    //取鍵值
              case(key_r)
              7'b1111110:begin
              while(a>0)
              begin
              a=a-1; end
              count_end = 16'hb327;
              while(a>0)
begin
              a=a-1;
              end
              end                           
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ù)值
7'b1111011:begin while(a>0)begin a=a-1 ;end count_end = 16'h8e32;while(a>0)begin a=a-1; end end                            //中音3的分頻系數(shù)值
              7'b1110111:begin while(a>0)begin a=a-1 ;end count_end16'h8637;while(a>0)begin a=a-1; end end//中音4的分頻系數(shù)值
              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ù)值
              7'b1011111:begin while(a>0)begin a=a-1 ;end count_end = 16'h6a88;while(a>0)begin a=a-1; end end                            //中音6的分頻系數(shù)值
              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ù)值
              default: begin while(a>0)begin a=a-1 ;end count_end = 16'hffff;while(a>0)begin a=a-1; end end            
              endcase
end
assign beep =beep_r;                                                                                                      //輸出音樂(lè)
assign led =key_r;                                                                                                         //輸出按鍵狀態(tài)
endmodule
  5.2樂(lè)曲自動(dòng)演奏機(jī)程序
圖5-2   樂(lè)曲自動(dòng)演奏模塊圖
module                 song(clk,beep,led);                                                        //模塊名稱               
input              clk;                                                                                                               //系統(tǒng)時(shí)鐘48Mhz
output              beep;                                                                                                 //蜂鳴器輸出端  
output[7:0] led;
reg              beep_r;                                                                                           //寄存器
reg[7:0] state;                                                                                                    //樂(lè)譜狀態(tài)機(jī)
reg[15:0]count,count_end;
reg[23:0]count1;
//樂(lè)譜參數(shù):D=F/2K  (D:參數(shù),F:時(shí)鐘頻率,K:音高頻率)   
//以下是12MHZ晶振狀態(tài)下的各音高對(duì)應(yīng)的參數(shù)     
/*parameter   L_5 = 16'h3bca,                            //低音5
                                          M_1 = 16'h2cc9,                                          //中音1
                                          M_2 = 16'h27f8,                                //中音2
                                          M_3 = 16'h238c,                                          //中音3
                                          M_4 = 16'h218d,                                          //中音4
                                          M_5 = 16'h1de5,                                          //中音5
                                          M_6 = 16'h1aa2;                                          //中音6
parameter              TIME = 3000000;                                          //控制每一個(gè)音的長(zhǎng)短(250ms)*/  
//樂(lè)譜參數(shù):D=F/2K  (D:參數(shù),F:時(shí)鐘頻率,K:音高頻率)   
parameter   L_5 = 16'd61224,                                          //低音5
                                          M_1 = 16'd45863,                            //中音1
                                          M_2 = 16'd40864,                            //中音2
                                          M_3 = 16'd36402,                            //中音3
                                          M_4 = 16'd34359,                            //中音4
                                          M_5 = 16'd30612;                            //中音5
                                                                     
parameter              TIME = 12000000;                                          //控制每一個(gè)音的長(zhǎng)短(250ms)  
assign beep = beep_r;                                                                      //輸出音樂(lè) ,蜂鳴器
always@(posedge clk)
begin
              count <= count + 1'b1;                                                        //計(jì)數(shù)器加1   
              if(count == count_end)
              begin
                            count <= 16'h0;                                                                      //計(jì)數(shù)器清零  
                            beep_r <= !beep_r;                                                        //輸出取反
              end
end
                            always @(posedge clk)
                            begin
                            if(count1 < TIME)                                                                      //一個(gè)節(jié)拍250mS
                                                        count1 = count1 + 1'b1;
                                          else
                                          begin
                                                        count1 = 24'd0;
                                          if(state == 8'd125)            //控制歌曲循環(huán)播放時(shí)間   
                                                                      state = 8'd0;          //循環(huán)從頭開(kāi)始
                                                        else
                                                                      state = state + 1'b1;     //循環(huán)結(jié)構(gòu)體
begin
              case(state)
8'd0,8'd1:                                                               count_end = M_3;//中音"3",持續(xù)2個(gè)節(jié)拍
8'd2,8'd3:                 count_end = M_3;//中音"3",持續(xù)2個(gè)節(jié)拍
8'd4,8'd5:                                                              count_end = M_4;//中音"4",持續(xù)2個(gè)節(jié)拍
8'd6,8'd7:                                                    count_end = M_5;            
8'd8,8'd9:                                                               count_end = M_5;            
8'd10,8'd11:                                                 count_end = M_4;
8'd12,8'd13:                                                 count_end = M_3;            
8'd14,8'd15:                                       count_end = M_2;
8'd16,8'd17:                                                 count_end = M_1;
8'd18,8'd19:                                                 count_end = M_1;
8'd20,8'd21:                                          count_end = M_2;
8'd22,8'd23:                                       count_end = M_3;
8'd24,8'd25,8'd26:                                   count_end = M_3;
8'd27:                                                                   count_end = M_2;
8'd28,8'd29,8'd30,8'd31:                               count_end = M_2;
8'd32,8'd33:                                               count_end = M_3;                           
8'd34,8'd35:                                                           count_end = M_3;                                       
8'd36,8'd37:                                                           count_end = M_4;
8'd38,8'd39:                                                            count_end = M_5;
8'd40,8'd41:                                                count_end = M_5;
8'd42,8'd43:                                                         count_end = M_4;
8'd44,8'd45:                                                         count_end = M_3;
8'd46,8'd47:                                                             count_end = M_2;
8'd48,8'd49:                                      count_end = M_1;                                                      
8'd50,8'd51:                                                         count_end = M_1;
8'd52,8'd53:                                                            count_end = M_2;                           
8'd54,8'd55:                                                         count_end = M_3;                                                      
8'd56,8'd57,8'd58:                                           count_end = M_2;            
8'd59:                                                                              count_end = M_1;            
8'd60,8'd61,8'd62,8'd63:                             count_end = M_1;
8'd64,8'd65:                                                         count_end = M_2;            
8'd66,8'd67:                                                         count_end = M_2;
8'd68,8'd69:                                                 count_end = M_3;
8'd70,8'd71:                                              count_end = M_1;                                                      
8'd72,8'd73:                                                         count_end = M_2;                           
8'd74:                                           count_end = M_3;
8'd75:                                                         count_end = M_4;                                         
8'd76,8'd77:                                                         count_end = M_3;
8'd78,8'd79:                                     count_end = M_1;
8'd80,8'd81:                                                            count_end = M_2;
8'd82:                                                                           count_end = M_3;            
8'd83:                                                        count_end = M_4;                                         
8'd84,8'd85:                                                         count_end = M_3;                                       
8'd86,8'd87:                                                         count_end = M_2;
8'd88,8'd89:                                                         count_end = M_1;            
8'd90,8'd91:                                     count_end = M_2;
//8'd92,8'd93:                                                         count_end = L_5;
8'd92,8'd93,8'd94,8'd95:                            count_end = L_5;
//8'd94,8'd95:                                                         count_end = M_3;
8'd96,8'd97:                                                         count_end = M_3;            
8'd98,8'd99:                                    count_end = M_3;
8'd100,8'd101:                                                         count_end = M_4;
8'd102,8'd103:                                                         count_end = M_5;
8'd104,8'd105:                                                         count_end = M_5;            
8'd106,8'd107:                                                         count_end = M_4;
8'd108:                                                                           count_end = M_3;                                                      
8'd109:                                                                           count_end = M_2;
8'd110,8'd111:                                                         count_end = M_1;            
8'd112,8'd113:                                     count_end = M_1;
8'd114,8'd115:                                                         count_end = M_2;
8'd116,8'd117:                                                         count_end = M_3;
8'd118,8'd119,8'd120:        count_end = M_2;
8'd121:                                                      count_end = M_1;
8'd122,8'd123,8'd124,8'd125:                             count_end = M_1;
default:count_end = 16'hffff;
                                                        endcase
                                            end
                               end
                            end
                           
assign led[0]=(count_end == M_1)?0:1;  //控制LED燈的語(yǔ)言
assign led[1]=(count_end == M_2)?0:1;
assign led[2]=(count_end == M_3)?0:1;
assign led[3]=(count_end == M_4)?0:1;
assign led[4]=(count_end == M_5)?0:1;
assign led[5]=(count_end == L_5)?0:1;
assign led[6]=1;
assign led[7]=1;
endmodule






5.3 選擇模塊程序
            
圖5-3選擇模塊圖

module select(key,beep1,beep2,led1,led2,beep,led);
input key,beep1,beep2;
input [6:0]led1;
input [6:0]led2;
output beep;
output [6:0]led;
reg key_r;
always @(negedge key)
begin
              key_r = ~key_r;                            //將琴鍵開(kāi)關(guān)轉(zhuǎn)換為乒乓開(kāi)關(guān)
end
assign beep=(key_r)?beep2:beep1;
assign led=(key_r)?led2:led1;            
endmodule
5.4頂層文件程序

圖5-4頂層文件圖
module dzq(key,key7,beep,led,clk);
input key7;
input [6:0]key;
input clk;
output [6:0]led;
output beep;
reg dout1;
reg dout2;
reg dout3;
reg led;
reg key_r;
wire a,b,key_l;
wire [6:0]c;
wire [6:0]d;
assign key_l = (dout1 | dout2 | dout3);              //按鍵消抖輸出
always @(posedge clk)
begin
              dout1 <= key7;
              dout2 <= dout1;
              dout3 <= dout2;            
end
              song     (.clk(clk),.beep(b),.led(c));
              beep1    (.clk(clk),.key(key),.beep(a),.led(d));
              select   (.key(key_l),.beep1(a),.beep2(b),.beep(beep),.led(led),.led1(d),.led2(c));
endmodule
第六章  實(shí)驗(yàn)圖形文件6.1管腳鎖定
引腳鎖定:選擇Assignments-pin planer

圖6-1管腳鎖定圖
RTL圖:選擇Tools—netlist viewers—RTL viewers
圖6-2 RTL圖
6.2DXP原理圖及封裝
DXP原理圖的設(shè)計(jì):
  • 執(zhí)行“文件”—“創(chuàng)建”—“項(xiàng)目”—“PCB項(xiàng)目”命令
  • projects面板上新建一個(gè)項(xiàng)目文件,默認(rèn)名為PCB_Projects.PrjPCB.
  • 執(zhí)行“文件”—“保存項(xiàng)目”命令
  • libiaries元件庫(kù)進(jìn)行原理圖繪制
圖6-3 dxp原理圖
DXP封裝設(shè)計(jì):
  • 執(zhí)行“文件”—“創(chuàng)建”—“PCB文件”命令,新建PCB設(shè)計(jì)文件并保存
  • 設(shè)置工作層:選擇機(jī)械層設(shè)置物理邊界,在禁止布線層設(shè)置電氣邊界。
  • 加載網(wǎng)絡(luò)表:執(zhí)行“設(shè)計(jì)”—Import Changes From DESIGN.PRJPCB命令,單擊“使變化生效”—“執(zhí)行變化”
  • 元件自動(dòng)布局:執(zhí)行“工具”—“放置元件”—“自動(dòng)布局”命令
  • 元件自動(dòng)布線:執(zhí)行“自動(dòng)布線”—“設(shè)定”—“全部對(duì)象”命令,選擇默認(rèn)設(shè)置,確認(rèn)布線即可

圖6-4封裝圖
6.3任務(wù)完成情況說(shuō)明                          
編號(hào)
功能
完成狀況
1
按下KEY1—KEY7 分別表示中音的DO、 RE 、 ME、 FA、 SOL、 LA、 SI;
達(dá)成
2
對(duì)于電子琴,按下相應(yīng)的鍵有對(duì)應(yīng)LED燈指示
達(dá)成
3
可以在電路上能自動(dòng)演奏樂(lè)曲。在這里我們采用的是貝多芬的《歡樂(lè)頌》,且有相應(yīng)的LED燈指示高低音;
達(dá)成
4
能實(shí)現(xiàn)電子琴和樂(lè)曲自動(dòng)演奏功能的切換
達(dá)成





                 表6-5 任務(wù)完成情況表:




6.4硬件連接圖
圖6-6按鍵電路圖                                                 圖6-6 LED燈電路圖
圖6-7 2X5下載插座             圖6-8 蜂鳴器電路圖
圖6-9 晶振電路圖                 圖6-10  電源電路圖

總結(jié)
    本次EDA課程設(shè)計(jì)進(jìn)一步加深了我們對(duì)實(shí)驗(yàn)課的認(rèn)識(shí)和對(duì)EDA的了解,對(duì)于Verilog HDL語(yǔ)言的運(yùn)用更加的熟練。同時(shí)對(duì)于課程設(shè)計(jì)過(guò)程中要進(jìn)行的調(diào)試和編寫程序有了一定的認(rèn)識(shí)。
電子琴使用按鍵的沖突,不得不消除原有模塊的高音階部分,而將其改造出現(xiàn)在的模塊和形式,對(duì)于硬件電子琴的改造,看似是對(duì)原功能塊的簡(jiǎn)單的改進(jìn),而實(shí)際上是需要重新構(gòu)造電路的,因?yàn)樵谘葑嗟倪^(guò)程中會(huì)有LED燈的使用沖突,如何調(diào)試和調(diào)用,才是本課程設(shè)計(jì)的重點(diǎn),因?yàn)轫攲游募男枰覀冃枰獙?duì)各自的程序進(jìn)行調(diào)整和修改。目的是為了能夠在最后的開(kāi)發(fā)平臺(tái)上得到我們想要的結(jié)果。
在這次的課程設(shè)計(jì)過(guò)程中,我們采取的分工合作的方式來(lái)進(jìn)行課程設(shè)計(jì)是一件很好的事情。大家各有側(cè)重點(diǎn)但是同時(shí)都為課程設(shè)計(jì)做出應(yīng)該做的努力,分工協(xié)作有時(shí)候不僅有利用于課程設(shè)計(jì)的快速進(jìn)行,而且也有利于個(gè)人和小組的交流和促進(jìn),在分工的時(shí)候,每個(gè)人都各盡所長(zhǎng),實(shí)現(xiàn)了又快又好的完成課程任務(wù)的目標(biāo)。最后,特別感謝本次課程設(shè)計(jì)給予我們指導(dǎo)的老師,在老師的知道和啟發(fā)下,我們才能正確的完成課程設(shè)計(jì)。


附錄:項(xiàng)目實(shí)物圖


全部資料51hei下載地址:
http://www.izizhuan.cn/bbs/dpj-148833-1.html

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
欧美性大战久久久久久久| 欧美日韩精品久久久免费观看| 性久久久久久久| 久久婷婷激情| 亚洲精品国产九九九| av在线免费观看网站| 成人亚洲精品777777ww| 中文在线观看av| 538国产视频| 亚洲精品少妇一区二区| 成人精品视频99在线观看免费| 亚洲欧美精品一区| 欧美午夜片在线免费观看| 成人av午夜影院| 亚洲黑丝一区二区| 日韩高清一级| 国产精品福利电影| 极品白嫩少妇无套内谢| 国产一级大片免费看| 亚洲综合视频1区| 久久99国产精品自在自在app| 91精品国产欧美一区二区18| 国产精品美女久久久久久| 蜜桃视频在线观看一区二区| 99精品视频在线观看播放| 国产精选久久| 这里有精品可以观看| 精品亚洲综合| 成人亚洲在线观看| 国产精品免费麻豆入口| 亚洲人成电影在在线观看网色 | 91香蕉视频污在线| 媚黑女一区二区| 成人一区不卡| 天堂综合网久久| 亚洲高清影院| 性欧美freesex顶级少妇| 国产黄色片在线观看| 国产一级电影网| 一级毛片免费播放| 欧美性xxxx交| 男人操女人免费网站| 国产精品久久久久久久免费看| 精品无码久久久久久久| 性欧美一区二区| 一边摸一边做爽的视频17国产| 性欧美1819| 91香蕉视频污版| 91蝌蚪视频在线观看| 男人添女荫道口图片| 伊人情人网综合| 日韩精品无码一区二区三区| 国产欧美一区二区三区另类精品| 国产精品视频自在线| 欧美有码在线视频| 久久免费视频网| 欧美激情亚洲视频| 久久97久久97精品免视看| 色视频www在线播放国产成人| 欧美日韩一区二区三区高清| 亚洲国产视频一区| 亚洲成人av免费| 日韩8x8x| 国内精品视频在线观看| 国产成人夜色高潮福利影视| 国产免费av高清在线| 国产欧美自拍一区| www成人在线观看| 17婷婷久久www| 国产精品99久久久精品无码| 国产农村妇女精品一二区| 宅男噜噜噜66国产精品免费| 久久青草免费| 婷婷丁香久久| 91麻豆精品国产91久久久久推荐资源| 91精品国产一区二区在线观看| av亚洲一区| 成人毛片免费| 一区二区视频| 青青草原在线亚洲| 免费电影一区二区三区| 色一区二区三区四区| 1024精品久久久久久久久| 狠狠综合久久| 日本麻豆一区二区三区视频| 美女性感视频久久| 国产精品香蕉一区二区三区| 91亚洲精品久久久蜜桃| 国产视频亚洲色图| 国产精品自拍网站| 国产午夜亚洲精品理论片色戒| 久久蜜臀精品av| 一区二区三区四区蜜桃| 欧美视频第一页| 欧美疯狂做受xxxx富婆| 欧美四级电影网| 精品久久久久久久久久久久久久久 | 偷拍精品精品一区二区三区| 成人黄色在线| 欧美久久精品| 婷婷综合五月| 亚洲欧美久久久| 韩国精品一区二区| 91在线精品一区二区| 国产精品国产三级国产aⅴ原创| 亚洲综合久久久| 亚洲aⅴ怡春院| 91精品欧美一区二区三区综合在| 日韩一级黄色片| 亚洲午夜性刺激影院| 日韩中文字幕免费视频| 日本欧美黄网站| 欧美国产视频在线观看| 人妻少妇被粗大爽9797pw| aaaaa黄色片| 成人免费黄色小视频| 久久久久久久亚洲| 最新版天堂中文在线官网| 俺去啦最新官网| 三区在线观看| 欧美成人福利| 一个色综合网| 成人免费视频视频在线观看免费 | 成人高h视频在线| 日本一区美女| 欧美精品www| 国产日产欧美a一级在线| 日本在线视频不卡| 校园春色 亚洲色图| 制服丨自拍丨欧美丨动漫丨| 91久久国语露脸精品国产高跟| 欧美日韩性视频一区二区三区| 色视频网站在线| 污污片在线免费视频| 红杏视频成人| 久久综合影音| 亚洲黄一区二区三区| 亚洲成人免费在线视频| 欧洲午夜精品久久久| 亚洲欧洲另类精品久久综合| 污视频在线观看免费网站| 久久精品一区二区三| 天堂在线观看视频| 最大av网站| 亚洲不卡系列| 99人久久精品视频最新地址| 国产欧美一区在线| 亚洲国产日韩精品在线| 国产精品丝袜一区二区三区| 免费高清一区二区三区| 人妻视频一区二区| 黄色福利在线观看| 九色在线网站| 视频欧美一区| 美日韩一区二区三区| 天天色天天操综合| 欧美人与物videos| 日本不卡久久| 醉酒壮男gay强迫野外xx| 国产一区二区三区成人| 成年人视频网站| 欧美久久久网站| 日本不卡123| 色呦呦网站一区| 久久久噜噜噜久久| 久久久99精品视频| 视频国产一区二区| 欧美另类videos粗暴黑人| 91ph在线| 亚洲91久久| 最新日韩在线视频| 精品国内自产拍在线观看| 神马影院我不卡午夜| 欧美亚一区二区三区| 亚洲精品一区二区三区区别| 在线观看h视频| 极品束缚调教一区二区网站| 成人一级视频在线观看| 精品99久久久久久| 狠狠干一区二区| 亚洲av无码国产精品久久| 亚洲精品久久久久久久久久| 欧美孕妇孕交| 日韩av久操| 一区二区三区在线观看网站| 欧美疯狂性受xxxxx另类| 成人午夜免费在线视频| 日韩欧美三级在线观看| xxx亚洲日本| 精品视频自拍| 中文字幕不卡三区| 久久99精品久久久久久青青91 | 欧美韩日一区| 亚洲天天做日日做天天谢日日欢| 久久精品一区中文字幕| 久久精品在线免费视频| 黄网在线观看视频| 有码av在线| 福利视频网址| 欧美videos粗暴| 国产91对白在线观看九色| 亚洲成人网在线| 日韩精品一区二区三区外面| 精品在线观看一区| chinesespank调教| 9l视频自拍蝌蚪9l视频成人| 久久久久久97三级| 欧美日韩第一页| www午夜视频| 亚洲图片小说综合| 国产乱码午夜在线视频| 另类综合日韩欧美亚洲| 日韩精品在线观看一区| 日韩一级特黄毛片| 在线观看毛片视频| 国产福利视频在线观看| 日韩黄色小视频| 日韩h在线观看| 日本精品久久久久久久久久| 真实新婚偷拍xxxxx| 国产黄色在线播放| 久久久亚洲一区| 日韩麻豆第一页| 国产婷婷一区二区三区| www日本视频| а√天堂中文在线资源8| 久久99蜜桃精品| 中文字幕精品久久| 国产三级三级三级看三级| 好男人官网在线观看| 亚洲成av在线| 国产精品婷婷午夜在线观看| 热re91久久精品国99热蜜臀| 91人人澡人人爽| 成年人影院在线观看| 希岛爱理av免费一区二区| 亚洲大片在线观看| 精品一区国产| 日韩黄色一级视频| 福利在线导航136| www.日韩大片| 国产精品白嫩美女在线观看| 亚洲精品乱码久久久久久蜜桃图片| 性生活视频网站| 欧美色网址大全| 欧美另类高清zo欧美| 中文字幕日韩一区二区三区 | av电影在线免费| 99久久精品免费看国产免费软件| 国色天香2019中文字幕在线观看| 美女扒开腿免费视频| 天天做天天爱天天爽| 91精品一区二区三区综合| 欧美成人a视频| 日本www在线视频| 午夜国产福利| 精品国内亚洲2022精品成人| 色综合久久久久久久| 亚洲一区影院| 香港一级纯黄大片| www.成人网| 精品视频免费在线| 91精品国产91久久久久麻豆 主演| 少妇人妻一区二区| 9国产精品午夜| 这里只有精品电影| 精品久久久久久久免费人妻| 国产男女猛烈无遮挡免费视频| 青青草久久爱| 精品成人一区二区| 天天爽天天爽夜夜爽| 再深点灬舒服灬太大了少妇| 91精品婷婷色在线观看| 国产午夜精品一区理论片飘花| 欧美日韩理论片| 69ww免费视频播放器| 免费在线视频欧美| 精品一区二区三区在线观看国产 | 丰乳肥臀在线| 国产精品女同互慰在线看| 国产欧美日本在线| 国产精品视频久久久久久| 人人鲁人人莫人人爱精品| 国产精品久久久久久亚洲毛片| 91精品视频观看| 国产又黄又猛又粗又爽| 亚洲精品日产| 无吗不卡中文字幕| 天堂а√在线中文在线| 蜜桃视频一日韩欧美专区| 北条麻妃一区二区三区在线观看| 欧美亚洲尤物久久| 99免费视频观看| 免费一级片网址| 亚洲综合二区| 欧美肥臀大乳一区二区免费视频| 永久免费看mv网站入口78| 国产三级视频在线播放线观看| 久久久综合激的五月天| 精品日本一区二区三区| 国产女18毛片多18精品| 欧美绝顶高潮抽搐喷水合集| 欧美mv和日韩mv国产网站| av漫画在线观看| 成人一区二区不卡免费| 国产精品国产三级国产普通话99| 国产福利片一区二区| 日本www视频在线观看| 蜜臀av性久久久久蜜臀av麻豆| 91精品久久久久久久久久 | www.欧美日本韩国| 亚洲精品中文字幕在线观看| 欧美日韩dvd| 成年网站免费入口在线观看| 久久午夜视频| 91精品免费视频| 亚洲电影先锋| 狠狠综合久久av一区二区老牛| 久久久午夜视频| 中文字幕激情视频| 成人黄色av| 97人人做人人爱| 国产一区二区三区中文字幕 | 不卡av免费观看| 在线视频国产一区| 国产大尺度视频| 欧美卡一卡二| 日本道色综合久久| 亚洲AV成人精品| 美女羞羞视频在线观看| 岛国视频午夜一区免费在线观看 | 国产麻豆精品一区二区| 牛人盗摄一区二区三区视频| 91看片免费版| 国产成人av在线影院| 日韩av不卡播放| 扒开腿狂躁女人爽出白浆2| 岛国av在线一区| 一区二区三区四区欧美日韩| 天天摸在线视频| 国产欧美综合在线| 日韩欧美在线免费观看视频| 大地资源中文在线观看免费版| 午夜精品视频一区| www.四虎精品| xxxxxx欧美| 亚洲欧美在线磁力| 国产精品免费精品一区| 欧美日韩国产在线观看网站| 欧美一级片久久久久久久| 国产91免费在线观看| 国产日韩欧美一区在线| 精品在线视频一区二区| www.香蕉视频在线观看| 国产亚洲精品精华液| 日韩一级免费在线观看| 黄色成人影院| 欧美一区二区三区四区视频| 波兰性xxxxx极品hd| 欧美男男freegayvideosroom| 久久久久这里只有精品| 欧美 日韩 国产 成人 在线 91| 亚洲欧美日韩国产一区二区| 欧美13一14另类| a天堂中文在线官网| 高跟丝袜欧美一区| 国产jjizz一区二区三区视频| 精品国产亚洲一区二区三区在线| 欧美乱妇40p| 天天爱天天干天天操| 狠狠色丁香久久婷婷综合丁香| 在线不卡视频一区二区| 青青色在线视频| 精品视频在线视频| 久久视频免费看| 婷婷亚洲图片| 国模精品娜娜一二三区| 男人免费av| 欧美午夜影院在线视频| 人与动物性xxxx| 精品久久影院| 成人免费在线一区二区三区| 一菊综合网成人综合网| 偷窥少妇高潮呻吟av久久免费| 高潮毛片无遮挡| 亚洲精品无吗| 5566中文字幕一区二区| 久久久久久77777| 欧美又粗又大又爽| 日韩三级小视频| 最新亚洲一区| 黄色网zhan| 影音先锋在线视频| 中文字幕视频一区二区在线有码| 亚洲第一精品网站| av一区二区久久| 欧洲熟妇的性久久久久久| 久久香蕉网站| 99re6热在线精品视频播放速度| 肥女人的一级毛片|