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

fpga4fun.com/Music box相关推荐

  1. 远程控制virtual box虚拟机系统的三种方式

    远程控制virtual box虚拟机系统的三种方式[阅读时间:5分钟] 1.使用现有的远程控制软件 2.使用SSH连接 3.使用远程桌面控制虚拟机系统 对于把虚拟机安装在寝室笔记本的人来说,能够远程控 ...

  2. ICE BOX 配置,使用----第一篇

    一 理论部分 (1) 为什么要使用icebox? icebox server代替了通常的server. icebox是为了方便集中管理多个ice服务而建立的. 它通过使用icebox服务器,把ice服 ...

  3. IE的box模型显示bug

    原作者charlee.原始链接http://tech.idv2.com/2007/01/02/ie-box-model-bug/以及本声明. box模型即由<div>等块元素的 margi ...

  4. 手动部署OpenStack环境(一:Virtual Box 5.1 环境的安装及配置)

    任务一.Virtual Box 5.1 环境的安装及配置 1.1.安装环境检查 1.2.创建安装目录 1.3.安装及配置 实验目的及要求 完成Virtual box平台安装,会应用相关操作: 在vir ...

  5. OpenStack环境搭建(一:Virtual Box 5.1 环境的安装及配置)

    实验要求: 完成Virtual box平台安装,会应用相关操作: 在virtual box虚拟平台上部署Fuel Master节点: 在virtual box虚拟平台上部署计算节点Computer: ...

  6. Virtual Box+Centos7.0+Kaldi安装

    Kaldi Kaldi是一个强大的语音识别工具库(ASR),主要由Daniel Povey开发和维护.目前支持GMM-HMM.SGMM-HMM.DNN-HMM等多种语音识别的模型的训练和预测.其中DN ...

  7. Windows10+Virtual box+ubuntu17.10

    1.从官网下载virtual box 和 ubuntu17.10的desktop镜像 ubuntu 17.10 镜像的下载链接 virtual box的下载链接 2.打开VirtualBox,选择新建 ...

  8. Python使用matplotlib可视化箱图、seaborn中的boxplot函数可视化分组箱图、在箱图中添加抖动数据点(Dot + Box Plot)

    Python使用matplotlib可视化箱图.seaborn中的boxplot函数可视化分组箱图.在箱图中添加抖动数据点(Dot + Box Plot) 目录

  9. R语言ggplot2可视化:可视化箱图、在箱图中添加抖动数据点(Dot + Box Plot)、自定义抖动数据点的大小、颜色、数据点分布在箱图中间、添加主标题、副标题、题注信息

    R语言ggplot2可视化:可视化箱图.在箱图中添加抖动数据点(Dot + Box Plot).自定义抖动数据点的大小.颜色.数据点分布在箱图中间.添加主标题.副标题.题注信息 目录

最新文章

  1. git 使用和一些错误
  2. Linux Xmanager
  3. EAS WebService部署
  4. 做移动端视频通话软件,大致看了下现有的开源软件(转)
  5. Oracle创建视图、通过视图创建表
  6. laravel 关联关系之多态关联
  7. 王者非法进入服务器维护封号,王者荣耀哪些行为会被封号 违规封号行为汇总...
  8. Linux之父和Redis之父,Redis之父:10x程序员应该具备哪些素质
  9. php跳过代码,PHP利用continue实现跳过本次循环中剩余代码的注意点
  10. Linux入门之磁盘管理(3)文件系统挂载
  11. php苹果推送消息,php推送消息到IOS
  12. 提取pdf文件文本:pdfparser与xpdf具体操作
  13. Echarts2竖直datazoom滑动后显示数据不全的解决方法
  14. 鹰信车载桌面,通过车机可以拨号,统一管理车载电话应用
  15. Mybatis面向接口编程
  16. html倒计时插,JS倒计时插件
  17. 地图瓦片坐标系定义及计算原理
  18. pymol怎么做底物口袋表面_pymol常用操作
  19. Named Route ‘layout‘ has a default child route. When navigating to this named route (:to=“{name: ‘l
  20. 国内动漫绘画培训班盘点

热门文章

  1. 特斯拉:上海超级工厂建设顺利 预计2019年年底正式投产
  2. WordPress常见模板文件列表
  3. 【Asia-Tsukuba 2017 】problem C - Medical Checkup
  4. 逆战班-- 初识react 01
  5. ubuntu18安装vnc远程桌面服务
  6. 在群晖synoboot.img引导文件中加入网卡驱动_ESXI6.7安装群晖详细教程
  7. Linux正确的关机命令
  8. 我的世界java边境之地_边境之地/Java版
  9. 2016年影响株洲的十大社会新闻是哪些?
  10. git 为什么会出现detached head