音乐播放器蜂鸣器ROM存储歌曲verilog,代码/视频

名称:音乐播放器蜂鸣器ROM存储歌曲

软件:Quartus

语言:Verilog

代码功能:

设计音乐播放器,要求至少包含2首歌曲,使用按键切换歌曲,使用开发板的蜂鸣器播放音乐,使用Quartus内的ROM IP核存储音乐文件,

简谱存储在ROM中,共2首歌曲。

《茉莉花》的简谱存储在ROM中,具体值可以打开music.mif文件查看

《两只老虎》的简谱存储在ROM2中,具体值可以打开music2.mif文件查看

mif文件说明:

8表示简谱1

9表示简谱2

10表示简谱3

以此类推

每个简谱对应4个相同的值

演示视频:音乐播放器蜂鸣器ROM存储歌曲Verilog_Verilog/VHDL资源下载

代码下载:音乐播放器蜂鸣器ROM存储歌曲Verilog_Verilog/VHDL资源下载名称:音乐播放器蜂鸣器ROM存储歌曲(代码在文末付费下载)软件:Quartus语言:Verilog代码功能: 设计音乐播放器,要求至少包含2首歌曲,使用按键切换歌曲,使用开发板的蜂鸣器播放音乐,使用Quartus内的ROM IP核存储音乐文件,简谱存储在ROM中,共2首歌曲。 《茉莉花》的简谱存储在ROM中,具体值可以打开music.mif文件查看 《两只老虎》的简谱存http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=194

部分代码展示

复制代码
//播放器控制模块
module music_ctrl(sysclk,stop_key,select,start_key,tonecode,tonestep,led,spkout);
   input           sysclk;//50M晶振
input           stop_key;//reset
input           select;//歌曲选择,0和1对应不同歌曲
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;
reg [7:0]       codeaddr2='d0;
   
wire [7:0] ROM_data1;
wire [7:0] ROM_data2;
//ROM(歌曲茉莉花)
ROM i1_ROM(
.address(codeaddr1),
.clock(musicclk),
.q(ROM_data1)
);
//ROM(歌曲两只老虎)
ROM2 i2_ROM(
.address(codeaddr2),
.clock(musicclk),
.q(ROM_data2)
);
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(select==0)begin//歌曲1
         if (music_select)
               begin
                  tonecode <= ROM_data1;//播放歌曲
                  if (codeaddr1 == 255)
                     codeaddr1 <= 0;//播放完后循环
                  else
                     codeaddr1 <= codeaddr1 + 1;
               end
end

设计文档:

  1. 工程文件
  1. 程序文件

ROM文件

Mif文件

  1. 程序编译
  1. RTL图
  1. Testbench
  1. 仿真图

整体仿真图

音乐控制模块

频率控制模块

数码管显示模块

相关推荐
晚霞的不甘16 分钟前
CANN 支持多模态大模型:Qwen-VL 与 LLaVA 的端侧部署实战
人工智能·神经网络·架构·开源·音视频
ALINX技术博客7 小时前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
拾荒的小海螺9 小时前
开源项目:LTX2 高效可控的开源视频生成模型
开源·音视频
JJRainbow14 小时前
SN75176 芯片设计RS-232 转 RS-485 通信模块设计原理图
stm32·单片机·嵌入式硬件·fpga开发·硬件工程
s91236010114 小时前
FPGA眼图
fpga开发
北京青翼科技15 小时前
【PCIe732】青翼PCIe采集卡-优质光纤卡- PCIe接口-万兆光纤卡
图像处理·人工智能·fpga开发·智能硬件·嵌入式实时数据库
minglie116 小时前
verilog信号命名规范
fpga开发
EasyGBS17 小时前
视频画面模糊、卡顿、丢失?EasyGBS新增“视频质量诊断”功能,告别人工盯屏
视觉检测·音视频·gb28181·花屏·视频质量诊断·蓝屏检测
zhuweisky17 小时前
ArkTS实现鸿蒙手机视频聊天、屏幕分享(HarmonyOS)
音视频·harmonyos·鸿蒙开发
XHW___00117 小时前
webrtc 关键模块创建的时机
网络·音视频·webrtc