fpga4fun.com/Music box

1.Simple beep

先做一个简单地蜂鸣器,原理是晶振通过不同的分频器分成不同的频率,通过电路发出音调不同的声音。

例子中Pluto FPGA板子有25Mhz的时钟频率,采用16位计数器(可以产生65536个不同的数值),则最高位的频率是25000000/65536=381hz(通过计数器不同位数进行分频,产生不同的频率),例如第0位就是25Mhz/ 2^0 =12.5Mhz...最高位就是以381hz的频率在0/1之间来回切换

实例代码如下:

module music(clk, speaker);
input clk;
output speaker;

// first create a 16bit binary counter
reg [15:0] counter;
always @(posedge clk) counter <= counter+1;

// and use the most significant bit (MSB) of the counter to drive the speaker
assign speaker = counter[15];
endmodule

现在产生的是381hz的声音

"A"的声音

A的声音频率是440hz,若要产生440hz的声音,则25000000/440 = 56818.18

则需要16位计数器到56817的时候重新开始计数,但对于32768(2^15)~ 56817 的占空比为42%(24049/56818),若要实现0.5占空比,最简单的方法是除以2(58818/2=28409),所以若要获得440hz的频率且具有0.5的占空比,需要在半个周期内(计数器为28409)将电平清零取反。

简单来说,晶振频率/时间 = 想要的频率

用计数器实现时间的确定,用计数的办法,也就是加法比如需要30%高电平,70%低电平,加到30取反清零,然后加到70再取反

代码如下:

module music(clk, speaker);
input clk;
output speaker;

reg [14:0] counter;
always @(posedge clk) if(counter==28408) counter<=0; else counter <= counter+1;

reg speaker;
always @(posedge clk) if(counter==28408) speaker <= ~speaker;
endmodule

救护车来了

救护车的音调为tone[23] 25000000/2^23 = 1.5hz

音调一致,两次响铃间隔时间来回交替,一个时间为clkdivider-1,一个为clkdivider/2 -1,也就是形成所谓的占空比,当tone[23]=1,维持时间为clkdivider-1,为0时维持时间clkdivider/2 -1,代码如下:

module music(clk, speaker);
input clk;
output speaker;
parameter clkdivider = 25000000/440/2;

reg [23:0] tone;
always @(posedge clk) tone <= tone+1;

reg [14:0] counter;
always @(posedge clk) if(counter==0) counter <= (tone[23] ? clkdivider-1 : clkdivider/2-1); else counter <= counter-1;

reg speaker;
always @(posedge clk) if(counter==0) speaker <= ~speaker;
endmodule
相关推荐
暗碳30 分钟前
stm32 74hc238流水灯
stm32·单片机·嵌入式硬件
1101 110136 分钟前
STM32-温湿度上传OneNET项目
stm32·单片机·嵌入式硬件
电棍23337 分钟前
verilog笔记
笔记·fpga开发
余衫马1 小时前
ESP32-S3 实战指南:BOOT-KEY 按键驱动开发全解析
驱动开发·单片机·嵌入式硬件
文军的烹饪实验室4 小时前
处理器架构、单片机、芯片、光刻机之间的关系
单片机·嵌入式硬件·架构
Leiditech__5 小时前
人工智能时代电子机器人静电问题及电路设计防范措施
人工智能·嵌入式硬件·机器人·硬件工程
jmlinux5 小时前
STM32 HAL库USART串口DMA IDLE中断编程:避坑指南
stm32·单片机·嵌入式硬件
沐欣工作室_lvyiyi7 小时前
基于单片机的智能电表设计(论文+源码)
单片机·嵌入式硬件·电能表·数字电能表
半导体老登7 小时前
新能源汽车核心元件揭秘:二极管、三极管结构与工作原理解析(2/2)
人工智能·单片机·嵌入式硬件·汽车
猿~~~9 小时前
STM32的HAL库开发---多通道ADC采集(DMA读取)实验
stm32·单片机·嵌入式硬件