軟件:VIVADO
語言:Verilog
代碼功能:
1.鍵盤按鍵作為琴鍵,由于按鍵有限,根據(jù)你要演奏的曲目,設(shè)計(jì)每個按鍵代表的音符
2.用數(shù)碼管顯示當(dāng)前按下的音符,自定義顯示方式。
3.蜂鳴器作為輸出,參考音符頻率對照表
4.選擇一個拔碼開關(guān)作為電子琴的開關(guān),信號有效時才產(chǎn)生音樂輸出,無效時不輸出音樂。
5.能自動播放一首樂曲。
6.LED燈點(diǎn)亮情況能根據(jù)樂曲變化而變化
7.具有暫停和繼續(xù)播放功能。
8.具有倍速播放功能。
9.具有循環(huán)播放功能
本代碼已在硬木課堂開發(fā)板驗(yàn)證,硬木課堂開發(fā)板如下,其他開發(fā)板可以修改管腳適配:
1、工程文件
2、程序文件
3、程序編譯
4、RTL圖
5、管腳分配
6、Testbench
7、仿真圖
整體仿真圖
按鍵輸入模塊
分頻模塊
琴鍵控制
數(shù)碼管顯示
部分代碼展示:
//琴鍵控制模塊 module control(clk,reset,code,speed_key,start_stop_key,add_step,auto_key,LED); input ? ? ? ?clk;//50MHz input ? ? ? ?reset;//低電平--SW0 input ?start_stop_key;//暫停繼續(xù)--SW2 input ? ? ? ?[4:0]code;//琴鍵編碼 output ? ? ? [11:0]add_step; ?output ? ? ? [11:0]LED; ?input ?speed_key;//加速--SW3 input ?auto_key;//自動播放開關(guān),1自動播放,0按鍵模式 reg [11:0]LED; ?reg [7:0] ? ?tone_num=8'd0; reg [11:0] ? add_step=12'd0; ?//定義數(shù)組,用于存儲1首歌曲 reg [7:0] music_1[0:495]; //初始化歌曲,存入數(shù)組 initial begin $readmemh("music1.list", music_1);//music_1.list存儲的簡譜 end reg [31:0] div_cnt=32'd0; reg ?play_enable=0; reg [9:0] address=10'd0;//簡譜地址 wire [31:0] speed_para; assign speed_para= (speed_key==0) ? 32'd3597122 : 32'd1798561; always @(posedge clk) ? ? ? ? ? ?begin
【來源:www.hdlcode.com】
閱讀全文