FPGA学习笔记之蜂鸣器实现两只老虎

您所在的位置:网站首页 儿童音乐简谱两只老虎 FPGA学习笔记之蜂鸣器实现两只老虎

FPGA学习笔记之蜂鸣器实现两只老虎

2024-07-09 21:44| 来源: 网络整理| 查看: 265

一、目标要求

使用verilog语言编程实现在FPGA开发板的蜂鸣器歌唱“两只老虎”

二、如何产生不同的声音

通过给无源蜂鸣器不同频率的PWM方波信号从而实现不同的音调音符。

1、“两只老虎”乐普

2、各音符对应的频率和周期

三、代码实现思路

首先我们需要一个计数器(cnt_time)来实现对音符的驱动(因为对乐谱不懂哈,所以在本次项目中,博主以250ms唱一个音符)。其次我们需要一个计数器来计算当前时间唱到了哪个音符(cnt_num)以实现当前音符和PWM方波信号的匹配,从而使蜂鸣器能够在正确的时间发出正确的声音,最后我们需要一个计数器(cnt_frq)对各音符对应的PWM方波信号进行计算。具体代码实现如下:

//实现简单的两只老虎 module beep_pwm ( input clk , input rst_n , output reg beep //输出的PWM信号 ); //参数定义 parameter CYCLE = 50_000_000, TIME_250MS = 125_00000;//0.25s localparam DOL = CYCLE/262 , REL = CYCLE/294 , MIL = CYCLE/330 , FAL = CYCLE/349 , SOL = CYCLE/392 , LAL = CYCLE/440 , XIL = CYCLE/494 , DOM = CYCLE/523 , REM = CYCLE/587 , MIM = CYCLE/659 , FAM = CYCLE/698 , SOM = CYCLE/784 , LAM = CYCLE/880 , XIM = CYCLE/988 , DOH = CYCLE/1047 , REH = CYCLE/1175 , MIH = CYCLE/1319 , FAH = CYCLE/1397 , SOH = CYCLE/1568 , LAH = CYCLE/1760 , XIH = CYCLE/1967 ; //计数器信号 reg [17:0] cnt_frq;//频率计数器 wire add_cnt_frq; wire end_cnt_frq; reg [24:0] cnt_time;//频率计数器 wire add_cnt_time; wire end_cnt_time; reg [6:0] cnt_num;//频率计数器 wire add_cnt_num; wire end_cnt_num; //PWM方波中间信号(用于匹配不同时间段的音符PWM方波) reg [17:0] frq_num ; //音符频率计数器 always @(posedge clk or negedge rst_n) begin if(!rst_n)begin cnt_frq


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3