FPGA演奏歌曲(国际歌)

FPGA之蜂鸣器播放音乐《花海》 蜂鸣器是我们常用的电子元器件,本文使用无源蜂鸣器进行音乐《花海》的播放 阅读详情

编曲部分

clk_out是周期为0.5s的时钟信号

M是使能段,当M为1时演奏歌曲

m表示不同音调,1-7对应中音do、ri、mi、fa、so、la、xi  ,8-14对应高音 ,14-21对应低音

state表示状态,一共157个状态,每个状态为0.5s,全歌时长78.5s

module state(
input clk_out,     //周期0.5s的时钟信号
input M,            
output reg [4:0] m=0,
output reg [7:0] state=0
    );

    
    always@(posedge clk_out)         
    if(~M|state>=157)
       state=0;
    else
     state=state+1;

       

 
 always@(M,state)               //国际歌乐谱
   if(M)
     begin
     case(state) 
     0: m=5;                    
        
     1: m=8; 
     2: m=7;
     3: m=9;     
     4: m=8;   
     5: m=5;    
     6: m=3;
         
     7: m=6;   
     8: m=6;  
     9: m=4;
     10: m=0;
     11: m=6;     
        
     12: m=9;
     13: m=8;
     14: m=7;     
     15: m=6;
     16: m=5;
     17: m=4;
     
     18: m=3;     
     19: m=3;
     20: m=3;
     21: m=5;    
     
     22: m=8;  
     23: m=7;    
     24: m=9;
     25: m=8;
     26: m=5;
     27: m=3;        
     
     28: m=6;     
     29: m=6;    
     30: m=4;
     31: m=6;
     32: m=9;
     33: m=8;
         
     34: m=7;    
     35: m=8;
     36: m=11; 
     37: m=7;
     
     38: m=8;      
     39: m=8;
     40: m=8; 
     41: m=0; 
     42: m=10;      
     43: m=9; 
     
     44: m=7; 
     45: m=7;
     46: m=6;
     47: m=7;
     48: m=8;
     49: m=6;
     
     50: m=7;
     51: m=7; 
     52: m=5; 
     53: m=5;      
     54: m=4; 
     55: m=5;
      
     56: m=6;
     57: m=6;
     58: m=9;
     59: m=8;
     
     50: m=7;
     51: m=7; 
     52: m=5; 
     53: m=6;      
     54: m=4; 
     55: m=5;
      
     56: m=6;
     57: m=6;
     58: m=9;
     59: m=8;
     
     60: m=7;
     61: m=7; 
     62: m=7; 
     63: m=0;      
     64: m=9; 
         
     65: m=9;  
     66: m=7;
     67: m=5;
     68: m=5;
     69: m=4;
     70: m=5;
     
     71: m=10; 
     72: m=10; 
     73: m=8;      
     74: m=6;     
     75: m=7;     
     76: m=8;
     
     77: m=7;
     78: m=9;
     79: m=8;
     80: m=6;
     
     81: m=5; 
     82: m=5; 
     83: m=5;      
     84: m=0;     
     85: m=10;     
     86: m=9;
     
     87: m=8;
     88: m=8;
     89: m=5;
     90: m=3;    
          
     91: m=6; 
     92: m=6; 
     93: m=4;      
     94: m=0;     
     95: m=9;     
     96: m=8;
         
     97: m=7;
     98: m=7;
     99: m=6; 
     100: m=5;
          
     101: m=5; 
     102: m=5; 
     103: m=5;      
     104: m=0;     
     105: m=5; 
         
     106: m=10;    
     107: m=10;
     108: m=9;
     109: m=5;
          
     110: m=8;     //61
     111: m=8; 
     112: m=7; 
     113: m=7;
           
     114: m=6;     
     115: m=5;     
     116: m=6;    
     117: m=9;
     
     118: m=9;
     119: m=9;
     120: m=9;     
     121: m=0; 
     122: m=10; 
     123: m=9;
           
     124: m=8;     
     125: m=8;     
     126: m=5;    
     127: m=3;
     
     128: m=6;
     129: m=6;
     130: m=4;     
     131: m=0; 
     132: m=9; 
     133: m=8; 
          
     134: m=7;     //71
     135: m=7;     
     136: m=6;    
     137: m=5;
     
     138: m=10;
     139: m=10;
     140: m=10;     
     141: m=10; 
     
     142: m=12; 
     143: m=12;      
     144: m=11;     
     145: m=10;
          
     146: m=9;    
     147: m=10;
     148: m=11;
     149: m=0;     
     150: m=11; 
         
     151: m=10; 
     152: m=10; 
     153: m=9;      
     154: m=9;     
     155: m=8;     
     156: m=8;    
     157: m=8;
                                                        
     default: m=0;
     endcase
     end
    else if (~M)
      m=0;

     
     
endmodule

音调部分

clk是50Mhz时钟

B为无源蜂鸣器,当无源蜂鸣器输入时钟不同时,会发出不同的声音,详情可看代码部分

当输入m为不同的值时,q控制蜂鸣器时钟频率(例如m=1 、q=47773、蜂鸣器时钟频率为50M/(47773×2)=523.3HZ,发出中音do。)

module music(
 
 input clk,
 input [4:0] m,
 input M,
 output reg B=0 
    );
   integer q=0;
   integer p=0; 
    
   
   always@(posedge clk)
   begin
      case(m)
       1:q=47773; //523.3HZ中do
       2:q=42567; //587.3HZ 中ri          
       3:q=37919; //659.3HZ 中mi        
       4:q=35790; //698.5HZ 中fa
       5:q=31887; //784HZ 中so      
       6:q=28409; //880HZ 中la            
       7:q=25308; //987.8HZ 中xi
       8:q=23914; //1045.4HZ 高do      
       9:q=21282; //1174.7HZ 高ri         
       10:q=18960; //1318.5HZ 高mi
       11:q=17904; //1396.3HZ 高fa         
       12:q=15943; //1568HZ 高so           
       13:q=14204; //1760HZ 高la              
       14:q=12655; //1975.5HZ 高xi          
       15:q=95565; //261.6HZ 低do
       16:q=85120; //293.7HZ 低ri           
       17:q=75849; //329.6HZ 低mi 
       18:q=71592; //349.2HZ 低fa               
       19:q=63775; //392HZ 低so                  
       20:q=56818; //440HZ 低la              
       21:q=50617; //493.9HZ 低xi                                   
     endcase    
 end
 
 always@(posedge clk)      
   begin
         if((p>=q)&M) 
         begin
         p=0; B=~B;
         end
         else if(M)
         p=p+1;
         else 
         B=0;         
   end 
            
endmodule

顶层模块

clk_0_5模块是分频器,输出周期为0.5s的时钟信号(比较简单,就不单独列出了)

state、music为乐曲、音调部分模块,上文已写

led_0是我之前写的显示ip核,可以显示当前播放进度,不影响核心功能,可以删除。

module buz(
input clk,
input M,
output B,
output [7:0] seg,
output [5:0] dig
);

wire clk_out;
wire [4:0] m;
wire [7:0] state;

clk_0_5s m1(clk,clk_out);
state m2(clk_out,M,m,state);
music m3(clk,m,M,B);
led_0 m4(clk,state/100,(state%100)/10,state%10,30,30,30,seg,dig);


endmodule

效果演示

FPGA演奏国际歌

FPGA实现蜂鸣器播放音乐实验,以儿歌《两只老虎》为例 FPGA-蜂鸣器播放儿歌《两只老虎》 阅读详情

相关推荐

FPGA开发——蜂鸣器实现音乐播放器的设计

我们在进行蜂鸣器的学习的时候,总会在想既然蜂鸣器能够发出声音,那么它能够播放音乐吗,今天这篇我们文章我们就一起来学习怎样使用使用蜂鸣器来播放音乐,也就是怎样成为一个音乐播放器。PWM(Pulse Width Modulation),即脉冲宽度调制,是一种模拟信号电平数字编码方法。它通过将有效的电信号分散成离散形式,从而来降低电信号所传递的平均功率。PWM技术的核心在于通过调节脉冲的时间宽度(占空比)来等效地获得所需要合成的相应幅值和频率的波形。

weixin_63553972的博客 3958

FPGA开发:音乐播放器

本文介绍了利用FPGA开发板蜂鸣器播放音乐的实现方法。通过简谱原理分析音符频率与时值关系,设计包含按键消抖、ROM存储、频率译码和状态机演奏四个模块的系统架构。重点阐述了状态机控制逻辑和计数器设计,实现音符频率、持续时间和占空比的精确控制。最后给出了ROM初始化方法和参数转换公式,为FPGA音乐播放提供完整解决方案。

保持终身学习的能力,温故而知新 7469

FPGA入门系列实验教程——乐曲自动演奏

FPGA入门系列实验教程——乐曲自动演奏

FPGA 08 基础 蜂鸣器实验音乐谱播放器实验

FPGA 08 基础 蜂鸣器实验音乐谱播放器实验 模块名称: music_test 主要功能 :每隔一段时间,输出的音调由低到高,且每个音调的发出的声音是固定的。 实现(设计)流程: 1、内部一共由3个部分(2个定时器+1个查找表)组成,自左向右分别是: 音频切换循环定时器、音频查找表、音频生成器 ​ ①音频切换循环定时器 : 通过设置内部循环定时器的计数值,保持当前的音调持续一个固定的时间。当每次计数器计数到设置的值以后,产生一个Full_flag 脉冲信号。随后将脉冲信号给音频.

lj1986817902的博客 1995

FPGA控制蜂鸣器奏乐

将《练习》简谱数据提取出,装入寄存器(存储器),在FPGA(我用的是EP2C5Q208C8)及时钟的控制下不断提取存储器中的数据,用蜂鸣器演奏。蜂鸣器必须是无源蜂鸣器。

MIPI D-PHYv2.5笔记(11) -- 高速时钟传输(High-Speed Clock Transmission)

在High-Speed模式中,Clock Lane提供了一个低摆幅(low-swing)、差分DDR时钟信号,此信号从Master到Slave,用于为高速数据传输提供时钟信号。时钟信号关于Forward Direction中的Data Lane上的位切换序列(toggling bit sequence)有正交相位,并且在一次burst的第一个被传输的bit的中心点有一个上升沿。

vivo01的专栏 3019

FPGA项目(16)——基于FPGA的音乐演奏电路

基于FPGA的音乐演奏电路

guangali的博客 3029

Truncated SVD for faster dection

Truncated SVD方法最先被提出在《Fast R-CNN》论文中,用于降低全连接层的运算量,提升模型的速度。在卷积神经网络的分类任务中,FC层的运算速度远远大于CONV层,而在Fast R-CNN的目标检测任务中,大多数的运算时间发生在FC 的运算中,是因为针对每张输入图片,只进行一次卷积操作,而要对生成的Region Proposal,大致两千个,进行全连接操作进行分类与Bounding...

weixin_35747666的博客 1535

简易音乐播放器的实现(FPGA)

本文主要介绍了如何使用FPGA实现简易音乐播放器。主要涉及到按键去抖,分频器运用,ROM运用等相关内容。并在文末附上了工程文件下载地址

qq_54843159的博客 4405

vivado 编译ADI AD9361 TCL脚本生成hdl工程

(4)输入"source ../../scripts/adi_make.tcl"命令(仅双引号内部命令,不包含双引号),个人理解:该命令用来加载当前所需要编译工程所需要各功能模块的信息,因为每个工程需要不同的功能模块,比如有的需要gpio模块,有的不需要gpio模块,这些模块上前面路径的library也同样以TCL脚本形式存在,当有需要时才进行编译,怎么知道当前工程需要什么模块呢就是通过"source ../../scripts/adi_make.tcl"(仅双引号内部命令,不包含双引号)命令实现。

weixin_40586423的博客 807

金融波动预测:GARCH模型实战解析与ARIMA对比

本文深入解析GARCH模型在金融波动预测中的实战应用,并与传统ARIMA模型进行对比。通过沪深300指数日收益率数据的案例分析,展示GARCH模型如何有效捕捉波动聚集效应,提升极端波动预测准确率。文章包含Python代码实现、参数解读及模型选择指南,为量化交易者提供实用的波动率建模解决方案。

weixin_29098367的博客 189

FPGA学习蜂鸣器演奏小星星

注:代码没有实现一个音符占两拍的功能,主要为蜂鸣器练习。

qq_51152795的博客 1654

文档信息抽取技术:从非结构化文本到结构化信息的旅程

文档信息抽取技术是一种将非结构化文本转化为结构化信息的技术。这种技术可以从各类文档中自动提取出如实体、关系和其他重要信息,并将它们转化为方便计算机进一步处理和分析的格式。

INTSIG的博客 980

【音乐合成】基于FPGA的音乐合成系统verilog实现

频率选择音乐的合成主要有几种频率,这里设置如下几组频率,在实际情况下,可以进行扩充。Fc = 261.63; %CFd = 293.66; %DFe = 329.63; %EFf = 349.23; %FFg = 392; %GFa = 440; %AFb = 493.88; %B在FPGA中,取整数,进行四舍五入的选择。 这个模块的仿真效果如下所示:2.2正弦信号的模块设计 第二,正弦信号的模块设计,这个是核心模块,产生不同...

FPGA/MATLAB学习教程/源码/项目合作开发 3846

C语言实战:高效端口扫描器的多线程优化与性能对比

本文详细介绍了使用C语言开发高效端口扫描器的多线程优化技术,包括TCP全连接扫描、SYN半连接扫描和FIN扫描的实现原理。通过线程池、I/O复用技术和性能优化策略,显著提升扫描效率,并与Nmap进行性能对比。文章还涵盖了常见问题解决方案及安全伦理注意事项,为开发者提供全面的实战指导。

ol789012的博客 134

【2024年华为秋招-12月25日-第三题(300分)- PCB印刷电路板布线】(题目+思路+Java&C++&Python解析+在线测试)

在PCB印刷电路板设计中,器件之间的连线需要避免线路的阻抗值增大、而且赛件之间还有别的器件和别的干扰源,在布线时我们希望受到的干扰尽量小。现将电路板简化成一个M×N的矩阵,每个位置(单元格)的值表示其源干扰度。如果单元格的值为0,表示此位置没有干扰源;如果单元格的值为非0,则表示此位置是干扰源,其值为源干扰度。连线经过干扰源或干扰源附近会增加连线的总干扰度。位置Axy的干扰源的源干扰度为dd01、若连线经过位置Axy,则其总干扰度会增加d;2、若连线经过离位置A。

m0_73659489的博客 344

电子技术课程设计基于FPGA的音乐乐曲演奏电路的设计

当一个4Hz的时钟脉冲来到时,乐谱发生器模块输出一个音符数据给分频系数模块,分频系数模块输出此音符相应的分频系数所需的初始值,将初始值送给数控分频器模块,当12MHz的时钟脉冲来到时,数控分频器就根据分频系数输出相应的频率(即此音符所对应的发生频率)给扬声器,扬声器就可发出对应音符的声音来.连续的8Hz的时钟脉冲就将乐谱发生器里所存储的音符数据一个接一个的送给了分频系数模块,再经过数控分频模块,最后扬声器一个接一个的发出音符数据所对应的声音来。若基准频率过高,虽然可以减少频率的相对误差,但分频结构将变大。

叶绿体不忘呼吸 9206

【FISCO BCOS】二十、多机部署区块链

实际开发中,为了满足高可用性和高容错性的需求,往往会采用多级部署区块链的方式,今天介绍一下FISCO BCOS的多机部署流程。

naihe_fish的博客 3651

基于fpga的电子琴

基于fpga的电子琴 1.芯片介绍 主流产品:ALTERA公司 、FLEX公司 产品类型:CPLD:EPROM类型,掉电后程序不丢失。 FPGA:SRAM类型,掉电后程序丢失,必须重新编程。 工作电压:5V/3.3V/2.5V/1.8V/1.5V 目前主要产品 MAX7000S/AE,MAX3000A系列、FLEX10KE/ACEX1K系列 APEX20K/20KE系列、APEXII系列、Stratix系列 Cyclone(飓风) 系列、Excalibur系列 1.3 Cyclone(飓风)系列介绍 Alt

QQ1391074994的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

利用FPGA制作播放器播放《关键词》

freq模块接收到的高5位中,包含了音调、音符信息,均有对应的频率,其中最低音频率为262hz,据此计算出他们对应的频率值,命名为freq_max(18位),再建立一个18位计数器cnt,因为蜂鸣器低电平有效,分频一个占空比40%(60%单位时间播放)频率,控制蜂鸣器。:虽然7位的二进制可以表示一个完整的音符,但是由于我写的音符数量达到了143个,导致rom中的地址数超过了2^7,所以可以将节拍改成000表示1拍,001表示2拍,010表示3拍,011表示四拍,将data扩充至8位。

Andriaro的博客 1763

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

FPGA项目(4)--基于FPGA的电子琴

基于FPGA的电子琴设计,通过了modelsim仿真

guangali的博客 8264

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

FPGA蜂鸣器演奏音乐

FPGA蜂鸣器演奏音乐 今天来讲一下利用FPGA蜂鸣器演奏音乐的程序。 (1)蜂鸣器介绍 一般蜂鸣器分为有源蜂鸣器和无源蜂鸣器。 ①有源蜂鸣器内部有振荡驱动电路,只要加上电源就可以发声,可以用作报警器的发声器件,但是缺点就是它的频率是固定的,因此只有一个单一的音调。 ②我们FPGA板子上的蜂鸣器和单片机开发板上的蜂鸣器大部分都是无源蜂鸣器,可以由我们编程实现它的频率变化,由此发出不同音调的声音。 ...

grace_fight的博客 2万+

FPGA蜂鸣器播放音乐

在FPGA的板子上实现蜂鸣器播放音乐

qq_37278781的博客 7238

【亲测免费】 基于FPGA的音乐播放器Verilog开发

基于FPGA的音乐播放器Verilog开发 【下载地址】基于FPGA的音乐播放器Verilog开发 基于FPGA的音乐播放器Verilog开发本资源库包含了详细的教程与源代码,用于指导开发者如何使用Verilog语言在FPGA平台上实现一个音乐播放器 ...

gitblog_06584的博客 985

基于FPGA的电子琴设计(按键和蜂鸣器)----第一版

基于FPGA的电子琴设计(按键和蜂鸣器)----第一版

郝旭帅电子设计团队的博客 1574

基于FPGA的音乐播放器系统设计_kaic

存储在存储单元中的值决定逻辑单元的逻辑功能,模块之间或模块之间的连接和I/O最终决定了FPGA可以实现的功能,FPGA(场程序器门阵列的程序器设备开发中的产品,开发分号电路,帮助在专用集成电路的研究方向上解决这些电路。FPGA的逻辑是通过向内部静态存储单元加载编程数据来实现的,存储在存储器单元中的值决定了逻辑单元的逻辑功能以及各模块之间或模块与I/O间的联接方式,并最终决定了FPGA所能实现的功能,加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

远程调试、小程序、管理系统、JAVA、C#、IDEA、VS开发工具等 5844
扑棱鹅子
博客等级 码龄6年 0粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值