名称:音乐播放器一首歌蜂鸣器ROM存储歌曲(代码在文末付费下载)
软件:Quartus
语言:Verilog
代码功能:
设计音乐播放器,播放一首歌,使用开发板的蜂鸣器播放音乐,使用Quartus内的ROM IP核存储音乐文件,简谱存储在ROM中,歌曲为《茉莉花》,简谱存储在ROM中,具体值可以打开music.mif文件查看。
mif文件说明:
8表示简谱1
9表示简谱2
10表示简谱3
以此类推
每个简谱对应4个相同的值
演示视频:
部分代码展示
//播放器控制模块 module?music_ctrl(sysclk,stop_key,start_key,tonecode,tonestep,led,spkout); ???input???????????sysclk;//50M晶振 input???????????stop_key;//reset input???????????start_key;//开始 input???????[9:0]?tonestep; ???output??????[7:0]?tonecode; output???????led;//指示灯 output??????????spkout;//蜂鸣器输出 ??? reg?spkout=0; ???reg?[10:0]??????addr='d0;//分频控制字--addr[21:0] ???reg?[24:0]??????divclk_counter='d0; ???reg?????????????musicclk=0; ??? ???wire?[9:0]??????step; ???reg?[7:0]???????tonecode='d0; ???wire?[9:0]??????tonestep; ???reg?[7:0]???????codeaddr1='d0; ??? wire?[7:0]?ROM_data; ROM?i_ROM( .address(codeaddr1), .clock(musicclk), .q(ROM_data) ); reg??music_select=1'd0; assign?led=music_select; always@(posedge?sysclk?or?negedge?stop_key?or?negedge?start_key) if(!stop_key) music_select<=0;//停止 else?if(!start_key) music_select<=1;//开始 ???assign?step?=?tonestep; ???always?@(posedge?sysclk)????? ??????begin addr?<=?addr?+?step;//step是根据音乐文件产生的频率控制字,不同step产生不同频率的spkout ??????end ???always?@(posedge?sysclk)????? ??????begin ?????????if?(divclk_counter?==?179)//50M/(1799999*2)=分频到13.9Hz---仿真将1799999改小为179 ?????????begin ????????????musicclk?<=?(~musicclk);//musicclk=13.9Hz ????????????divclk_counter?<=?0; ?????????end ?????????else ????????????divclk_counter?<=?divclk_counter?+?1; ??????end always?@(posedge?sysclk)? if(music_select==0)begin spkout<=1'b1;//0时蜂鸣器拉高,不唱 end else?begin spkout<=addr[10];//addr的最高位就是输出蜂鸣器的频率--仿真将addr[21]改成addr[10] end ???always?@(posedge?musicclk?or?negedge?stop_key) ???begin if(!stop_key) codeaddr1?<=?0;//停止 else ?????????if?(music_select) ???????????????begin ??????????????????tonecode?<=?ROM_data;//播放歌曲 ??????????????????if?(codeaddr1?==?255) ?????????????????????codeaddr1?<=?0;//播放完后循环 ??????????????????else ?????????????????????codeaddr1?<=?codeaddr1?+?1; ???????????????end ???end ??? endmodule
设计文档:
1. 工程文件
2. 程序文件
ROM文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
整体仿真图
音乐控制模块
频率控制模块
数码管显示模块
附简谱:
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=195
阅读全文
1044