fpga开发--蜂鸣器发出连续不同的音调
描述
使用fpga蜂鸣器连续发出do,re,mi,fa,so,la,xi七个不同的音调,每个音调的持续时间为0.5s。
思路
采用状态机实现音调的转化,当do状态持续了0.5s之后转移到re状态,以此类推...采用0.5s的时间flag信号控制状态机的转变。因为不同的音调有不同的频率,所以在每个时钟周期内需要发出不同频率的方波,采用计数器控制占空比,在每个状态下需要设置不同的频率计数器最大值,采用状态机控制计数器的频率最大值。
细节
设置输入clk,rst,输出beep
内部寄存器cnt_time 计数0.5s时间间隔,标志信号time_flag 每当计数0.5s拉高一个周期,当flag拉高时,状态寄存器状态改变
状态机采用三段式编写
设置内部寄存器cnt_wave,记录不同的频率最大值,设置变量wave_num为不同频率的最大值。
代码
module music
#(parameter time_max = 25'd24999999,parameter dowave = 17'd95419,parameter rewave = 17'd85033,parameter miwave = 17'd75756,parameter fawave = 17'd71632,parameter sowave = 17'd63774,parameter lawave = 17'd56817,parameter xiwave = 17'd50606)
(input wire clk,
input wire rst,
output reg beep);parameter Do = 3'd0,Re = 3'd1,Mi= 3'd2,Fa = 3'd3,So=3'd4,La=3'd5,Xi=3'd6;
reg [24:0] cnt_time ;
reg [2:0] state,next_state;
reg time_flag;
reg [16:0] cnt_wave;
reg [16:0] wave_max;//产生时钟信号
always@(posedge clk or negedge rst)
beginif(rst == 1'd0)cnt_time <= 25'd0;else if (cnt_time == time_max)cnt_time <=25'd0;elsecnt_time <=cnt_time+25'd1;
endalways@(posedge clk or negedge rst)
beginif(rst == 1'd0)time_flag <= 1'd0;else if(cnt_time == (time_max -1))time_flag <=1'd1;else time_flag<=1'd0;
end//七个音调状态
always@(posedge time_flag or negedge rst)
beginif(rst == 1'd0)state <= Do;else state <= next_state;
endalways@(*)
beginif(rst == 1'd0)next_state = Do;else begincase (state)Do: next_state = Re;Re: next_state = Mi;Mi: next_state = Fa;Fa: next_state = So;So: next_state = La;La: next_state = Xi;Xi: next_state = Do;default: next_state=Do;endcaseend
end//产生不同的方波
always@(posedge clk or negedge rst)
beginif(rst == 1'd0)cnt_wave <= 17'd0;else if((cnt_wave == wave_max)|| time_flag == 1'd1)cnt_wave <= 17'd0;else cnt_wave <=cnt_wave +17'd1;endalways@(posedge clk or negedge rst)
beginif(rst ==1'd0)beep <=1'd0;else if(cnt_wave == wave_max)beep <=~beep;else beep <=beep;
end//选择不同的方波计数值
always@(posedge clk )
begincase (next_state)Do: wave_max <= dowave;Re: wave_max <= rewave;Mi: wave_max <= miwave;Fa: wave_max <= fawave;So: wave_max <= sowave;La: wave_max <= lawave;Xi: wave_max <= xiwave;default: wave_max <= dowave;endcase
endendmodule
测试代码:
`timescale 1ns/1ns
`include"music.v"module top();reg clk;
reg rst;
wire beep;initial
beginrst = 1'b0;clk = 1'b0;#15rst = 1'b1;
endalways #10 clk=~clk;music
#(.time_max (25'd50),.dowave (17'd39),.rewave (17'd29),.miwave (17'd21),.fawave (17'd15),.sowave (17'd10),.lawave (17'd8),.xiwave (17'd4))
m1(clk,rst,beep);endmodule
仿真波形

错误:
状态变化时采用了时序逻辑,应该用组合逻辑,
cnt_time 计数器无法清零,清零条件应改为计数器计数到最大值或者时间等于0.5s时清零,若只有计数器计数到最大值清零,那么只会在第一个频率内有beep波形
相关文章:
fpga开发--蜂鸣器发出连续不同的音调
描述 使用fpga蜂鸣器连续发出do,re,mi,fa,so,la,xi七个不同的音调,每个音调的持续时间为0.5s。 思路 采用状态机实现音调的转化,当do状态持续了0.5s之后转移到re状态,…...
Redis 主从同步原理
一、什么是主从同步? 主从同步,就是将数据冗余备份,主库(Master)将自己库中的数据,同步给从库(Slave)。 从库可以一个,也可以多个,如图所示: 二…...
opencv-28 自适应阈值处理-cv2.adaptiveThreshold()
什么是自适应阈值处理? 对于色彩均衡的图像,直接使用一个阈值就能完成对图像的阈值化处理。但是,有时图像的色彩是不均衡的,此时如果只使用一个阈值,就无法得到清晰有效的阈值分割结果图像。 有一种改进的阈值处理技术ÿ…...
Java泛型5——泛型通配符
注:以下内容基于Java 8,所有代码都已在Java 8环境下测试通过 目录: Java泛型1——概述Java泛型2——泛型类Java泛型3——泛型接口Java泛型4——泛型方法Java泛型5——泛型通配符Java泛型6——类型擦除 什么是通配符 在Java中,类…...
牛客 AB25 ranko的手表 JAVA 枚举
描述 ranko 的手表坏了,正常应该显示 xx:xx 的形式(4 个数字),比如下午 1 点半应该显示 13:30 ,但现在经常会有一些数字有概率无法显示。 ranko 在 �1t1 时刻看了下时间,过了一段时间在 &am…...
常微分方程建模R包ecode(二)——绘制相速矢量场
本节中我们考虑一个更为复杂的常微分方程模型, d X C d t ν ( X A Y A ) − β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ) ⋅ X C , ( 1 ) d Y C d t β ⋅ X C ⋅ ( Y C Y A ) − ( μ g ρ ) ⋅ Y C , ( 2 ) d X A d t g ⋅ X C − β ⋅ X A ⋅ ( Y C Y A …...
学习C#编写上位机的基础知识和入门步骤:
00001. 掌握C#编程语言基础和.NET框架的使用。 00002. 学习WinForm窗体应用程序开发技术,包括控件的使用和事件驱动编程。 00003. 熟悉基本的数据结构和算法知识,如链表、栈、队列等。 00004. 理解串口通信协议和通信方法,用于与底层硬件设…...
简单高效!低代码搭建销售自动化程序的方法与实践
在当今数字化时代,销售自动化成为了提高销售效率和业绩的重要手段之一。而低代码平台的兴起,使得搭建销售自动化程序变得更加简单和高效。本文将介绍低代码平台及其优势,并探讨如何利用低代码平台搭建销售自动化程序。 1、低代码平台 1&…...
第九十三回 在Flutter中mock数据
文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了"在Flutter中解析JSON数据"相关的内容,本章回中将介绍 如何mock数据.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的mock数据主要是通过相关的代码模拟服务器…...
进程与线程的区别与联系
多进程已经可以很好的实现并发编程的效果了,但是仍然有一个明显的缺点:进程太重了,进程消耗的资源更多,速度更慢。如果进程创建销毁不频繁,那么还好,一旦需要大规模创建和销毁进程,开销就比较大…...
使用gadl对土地利用栅格重分类
要使用Python语言进行土地利用栅格的重分类,可以使用gadl库(GDAL的Python绑定)来实现。gadl库提供了一组功能强大的函数和类,可用于读取、处理和分析栅格数据。 首先,确保已经安装了gadl库。可以使用以下命令通过pip进…...
SQL-每日一题【1141. 查询近30天活跃用户数】
题目 活动记录表:Activity 请写SQL查询出截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。 以 任意顺序 返回结果表。 查询结果示例如下。…...
Java小型操作系统模拟(采用策略模式结合反射进行搭建,支持一些简单的命令)
Java小型操作系统模拟 项目说明第一阶段:反射结合策略模式搭建基本的命令结构第二阶段:注解结合反射与策略模式,将结构进一步规范第三阶段:开启新的窗口,将控制台输入切换到新窗口中,同时创建右键菜单&…...
VsCode与Idea编辑器更换背景图
目录 VsCode Idea VsCode 需要安装background插件 安装完成后,打开设置,搜索background 然后就可以在json文件进行图片设置,透明度等等 Idea 打开File -> Settings 然后找到Appearance , 往下滑,找到BackGround …...
Visual Studio 快捷键
记录一下VS的快捷键,用Xcode几个星期后回到VS一下子有点乱,还好有条件反射在,过了会就都恢复了 目录 跳转快捷键查找快捷键编辑快捷键代码折叠书签操作记忆来源VS一定要装VAssistX插件,下面的快捷键部分是VX提供的。 跳转快捷键 快速打开文件 Alt + Shift + O 快速打开对…...
IT技术面试中常见的问题及解答技巧
在IT技术面试中,面试官常常会问到一些常见的问题,针对这些问题,我们可以充分准备和提前准备一些解答技巧。下面我将分享一些我个人的经验和观察,希望对大家有所帮助。 请介绍一下你的项目经验。 在回答这个问题时,我们…...
Java使用hive连接kyuubi
一、Maven依赖 <dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>2.3.9</version> </dependency> 二、相关配置信息 驱动类:org.apache.hive.jdbc.HiveDriver连接UR…...
性能测试基础知识(三)性能指标
性能测试基础知识(三)性能指标 前言一、时间特性1、响应时间2、并发数3、吞吐量(TPS) 二、资源特性1、CPU利用率2、内存利用率3、I/O利用率4、网络带宽使用率5、网络传输速率(MB/s) 三、实例场景 前言 性能…...
【 Redis】的乱码问题
问题描述: 使用RedisTemplate存储的数据,在 redis-cli 客户端查看时,key 和 value 都会携带类似\xac\xad\这样的字符串。 原因: 由于默认使用了 jdk 的序列化方式。以下是支持的序列化方式 项目一般都会有缓存,常常…...
虚拟机安装的问题
CentOS7报错: Host SMBus Controller not enabled! 1.在上图界面中直接输入root用户的密码登录到系统 2.输入命令,lsmod | grep i2c 3.输入命令,vi /etc/modprobe.d/blacklist.conf 创建黑名单,添加以下内容: blacklist i2c_piix…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...
