資源描述:
《北郵數(shù)電實(shí)驗(yàn)電子琴.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、VHDL硬件描述語言程序設(shè)計(jì)簡易電子琴演奏器姓名:chi23目錄一、設(shè)計(jì)課題的任務(wù)要求3二、系統(tǒng)設(shè)計(jì)3三、仿真波形及波形分析11四、源程序12五、功能說明41六、元器件清單及資源利用情況41七、故障及問題分析43八、總結(jié)和結(jié)論4423一、設(shè)計(jì)課題的任務(wù)要求基本要求:1、用8×8點(diǎn)陣顯示“1234567”七個(gè)音符構(gòu)成的電子琴鍵盤。其中點(diǎn)陣的第一列用一個(gè)LED點(diǎn)亮表示音符“1”,第二列用二個(gè)LED點(diǎn)亮表示音符“2”,依此類推,如下圖所示。1234567圖1點(diǎn)陣顯示的電子琴鍵盤2、用BTN1~BTN7七個(gè)按鍵模擬電子琴手動(dòng)演奏時(shí)的“1234567”七個(gè)音符。當(dāng)某個(gè)按鍵按下時(shí),數(shù)碼管
2、顯示相應(yīng)的音符,點(diǎn)陣上與之對(duì)應(yīng)的音符顯示列全滅,同時(shí)蜂鳴器演奏相應(yīng)的聲音;當(dāng)按鍵彈開時(shí)數(shù)碼管顯示的音符滅掉,點(diǎn)陣顯示恢復(fù),蜂鳴器停止聲音的輸出。下圖所示為按下BTN3按鍵時(shí)點(diǎn)陣的顯示情況。1234567圖2按鍵按下后的點(diǎn)陣顯示3、由撥碼開關(guān)切換選擇高、中、低音,并用數(shù)碼管進(jìn)行相應(yīng)的顯示。4、通過按鍵BTN0進(jìn)行復(fù)位,控制點(diǎn)陣顯示圖1的初始狀態(tài)。提高要求:1、可通過一個(gè)撥碼開關(guān)進(jìn)行手動(dòng)/自動(dòng)演奏的切換,并與點(diǎn)陣顯示配合增加自動(dòng)演奏樂曲的功能。2、增加手動(dòng)演奏的音符存儲(chǔ)、播放功能。23一、系統(tǒng)設(shè)計(jì)1.設(shè)計(jì)思路簡易電子琴的制作主要是利用不同頻率的波來驅(qū)動(dòng)蜂鳴器發(fā)出聲響。通過輸入不同
3、的音符來設(shè)置不同的分頻系數(shù),使得50MHz的主頻分頻出不同頻率的波。同時(shí),演奏的音符還可以通過數(shù)碼管和8*8點(diǎn)陣來動(dòng)態(tài)顯示。根據(jù)系統(tǒng)設(shè)計(jì)要求,該電子琴設(shè)計(jì)采用自頂向下的設(shè)計(jì)方法。整體的功能通過不同的底層模塊配合來完成電子琴的功能。底層模塊主要包括樂曲自動(dòng)演奏模塊、分頻預(yù)置值產(chǎn)生模塊和數(shù)控分頻模塊,數(shù)碼管顯示模塊,8*8點(diǎn)陣顯示模塊五部分組成。用這種設(shè)計(jì)思路把整個(gè)系統(tǒng)分為了若干個(gè)模塊,然后再在頂層文件中將各個(gè)模塊組合在一起,從而體現(xiàn)出超、高速硬件描述語言VHDL的優(yōu)勢,關(guān)于提高要求中通過一個(gè)撥碼開關(guān)進(jìn)行手動(dòng)/自動(dòng)演奏的切換,并與點(diǎn)陣顯示配合增加自動(dòng)演奏樂曲的功能,我打算將一首曲
4、子的音符儲(chǔ)存在自動(dòng)播放的數(shù)組里面,然后通過計(jì)數(shù)器來順序播放儲(chǔ)存的音符。關(guān)于提高要求中的手動(dòng)演奏的音符存儲(chǔ)、播放功能,我打算通過編程實(shí)現(xiàn)類似數(shù)據(jù)結(jié)構(gòu)中隊(duì)列的模塊,來儲(chǔ)存手動(dòng)輸入的音符,然后在要播放的時(shí)候,隊(duì)列里面的音符依次出隊(duì),從而實(shí)現(xiàn)音符儲(chǔ)存播放的功能。2.總體框圖數(shù)碼管顯示8*8點(diǎn)陣顯示蜂鳴器輸出音符輸入高低音,自動(dòng)手動(dòng)圖3簡易電子琴總體結(jié)構(gòu)框圖23是否自動(dòng)播放查找對(duì)應(yīng)的頻率值結(jié)束開始輸入按鍵點(diǎn)陣顯示蜂鳴器輸出數(shù)碼管顯示選擇高低音是否圖4簡易電子琴邏輯流程圖23圖5簡易電子琴VHDL電路原理圖1.分塊設(shè)計(jì)(1)分頻模塊div0由于實(shí)驗(yàn)電路板的主頻是50Mhz,為了數(shù)碼管和點(diǎn)
5、陣的刷新顯示,我們必須將50Mhz的頻率進(jìn)行分頻。分頻的程序來自電路中心的網(wǎng)站上面。在這個(gè)模塊里,我設(shè)置分頻系數(shù)為cnt=2499。從實(shí)驗(yàn)結(jié)果看,這個(gè)分頻對(duì)數(shù)碼管和點(diǎn)陣的顯示有很好的效果(2)數(shù)碼管顯示模塊shuma我使用了2個(gè)數(shù)碼管,第一個(gè)數(shù)碼管顯示1~7的音符,第二個(gè)數(shù)碼管顯示相關(guān)的信息,比如高音用H表示,低音用L表示,自動(dòng)播放用A表示。兩個(gè)數(shù)碼管分別刷新,但由于刷新頻率太快,人眼不能察覺,以為是兩個(gè)數(shù)碼管是同時(shí)亮的。在程序中我們通過duan:outstd_logic_vector(7downto0)和cat:outstd_logic_vector(5downto0)來控
6、制數(shù)碼管的顯示。當(dāng)輸入不同的音符和不同的控制信息時(shí),duan和cat向量都有不同的值與之對(duì)應(yīng)。(3)8*8點(diǎn)陣顯示模塊dianzhen8*8點(diǎn)陣的顯示和數(shù)碼管的顯示運(yùn)用了同樣的原理,在程序中我們通過row:outstd_logic_vector(7downto0)和col:outstd_logic_vector(7downto0)這兩個(gè)向量來控制點(diǎn)陣的顯示。當(dāng)輸入不同的音符時(shí),點(diǎn)陣顯示相應(yīng)的形狀。(4)音符產(chǎn)生模塊auto。這個(gè)模塊的功能是,選擇的不同模式來產(chǎn)生不同的音符。當(dāng)選擇自動(dòng)播放模式時(shí),隨著計(jì)數(shù)器count的值增加,即地址值遞增時(shí),程序自動(dòng)讀取出事先儲(chǔ)存的音符,并把這
7、個(gè)音符輸出。當(dāng)選擇手動(dòng)演奏模式時(shí),直接將通過BTN1~BTN7輸入的向量當(dāng)做音符輸出yin:outstd_logic_vector(6downto0);。23(1)分頻預(yù)置值產(chǎn)生模塊該模塊的功能是通過音符以及高低音選項(xiàng)來查表找到對(duì)應(yīng)的頻率值。在程序中設(shè)置了全部音符對(duì)應(yīng)的分頻預(yù)置數(shù)。通過判斷音符產(chǎn)生模塊輸出的音符yin:instd_logic_vector(6downto0),以及撥碼開關(guān)的高低音highlow:instd_logic_vector(1downto0)控制鍵,來查找出該音符的頻率值,然后將