无源蜂鸣器驱动实验

news/2024/6/18 2:05:46 标签: fpga开发

1.原理

计划是,生成不同的7个频率控制蜂鸣器发声,每个音调发声0.5秒。

50MHZ计数0.5秒,50MHZ一个周期20ns,要计数0.5秒 ,0.5/0.000_000_02s=25000_000个时钟周期。因为是从0开始计数,所以计数的最大值是0-2499_999。

用一个计数器计数发音的7个0.5秒,当成是一个循环。

1/262hz=0.0038167938931298s,约等于3816794 ns。因此3816794/20=190,839.7。约等于190840。也就是说要计数0-190839个时钟周期才是262hz。占空比是50%(占空比
是一个脉冲周期内,高电平的时间与整个周期时间的比例)。

注意:

最后一个else在时序逻辑中可以不写,但在组合逻辑中一定要写。

2.1 beep.v

module beep #(
	parameter CNT_MAX=25'd24_999_999,
	parameter DO	=18'd190839,
	parameter RE    =18'd170067,
	parameter MI    =18'd151415,
	parameter FA    =18'd143265,
	parameter SO    =18'd127550,
	parameter LA    =18'd113635,
	parameter XI    =18'd101214
)
(
	input wire 		sys_clk,
	input wire 		sys_rst_n,
	
	output reg		beep
);

reg [24:0] cnt;
reg [2:0]  cnt_500ms;
reg [17:0] freq_cnt;
reg [17:0] freq_data;
wire [16:0] duty_data;

assign duty_data=freq_data>>1;

always@(posedge sys_clk or negedge sys_rst_n )
	if(sys_rst_n==1'b0)
		cnt<=25'd0;
	else if(cnt==CNT_MAX)
		cnt<=25'd0;
	else
		cnt<=cnt+1'b1;
		
always@(posedge sys_clk or negedge sys_rst_n )
	if(sys_rst_n==1'b0)
		cnt_500ms<=3'd0;
	else if((cnt_500ms==3'd6)&&(cnt==CNT_MAX))
		cnt_500ms<=3'd0;
	else if(cnt==CNT_MAX)
		cnt_500ms<=cnt_500ms+1'b1;
	else
		cnt_500ms<=cnt_500ms;
		
always@(posedge sys_clk or negedge sys_rst_n )
	if(sys_rst_n==1'b0)
		freq_cnt<=18'd0;
	else if((cnt==CNT_MAX)||(freq_cnt==freq_data))
		freq_cnt<=18'd0;
	else 
		freq_cnt<=freq_cnt+1'b1;
		
always@(posedge sys_clk or negedge sys_rst_n )
	if(sys_rst_n==1'b0)
		freq_data<=DO;
	else case(cnt_500ms)
		3'd0: freq_data=DO;
		3'd1: freq_data=RE;
		3'd2: freq_data=MI;
		3'd3: freq_data=FA;
		3'd4: freq_data=SO;
		3'd5: freq_data=LA;
		3'd6: freq_data=XI;
		default: freq_data=DO;
	endcase
	

always@(posedge sys_clk or negedge sys_rst_n )
	if(sys_rst_n==1'b0)
		beep<=1'b0;
	else if(freq_cnt>=duty_data)
		beep<=1'b1;
	else
		beep<=1'b0;
		
endmodule
	

tb_beep.v

`timescale 1ns/1ns
module tb_beep();

reg sys_clk;
reg sys_rst_n;

wire beep;

initial
	begin
		sys_clk=1'b1;
		sys_rst_n<=1'b0;
		#20
		sys_rst_n<=1'b1;
	end
	
always #10 sys_clk=~sys_clk;
	
beep #(
	.CNT_MAX(25'd24_999_999),
	.DO		(18'd190839)    ,
	.RE     (18'd170067)    ,
	.MI     (18'd151415)    ,
	.FA     (18'd143265)    ,
	.SO     (18'd127550)    ,
	.LA     (18'd113635)    ,
	.XI     (18'd101214)
)
beep_inst(
	.sys_clk  (sys_clk),
	.sys_rst_n(sys_rst_n),
			  
	.beep     (beep)
);
endmodule


http://www.niftyadmin.cn/n/5410088.html

相关文章

Webserve(4): HTTP解析

// 写HTTP响应 bool http_conn::write() {int temp 0;if ( bytes_to_send 0 ) {// 将要发送的字节为0&#xff0c;这一次响应结束。modfd( m_epollfd, m_sockfd, EPOLLIN ); init();return true;}while(1) {// 分散写temp writev(m_sockfd, m_iv, m_iv_count);if ( temp <…

LINUX内核打开IPV4分片支援。

在某些LINUX系统上面IP分片是被禁用的&#xff0c;通常我们都不需要IPV4分片的支持&#xff0c;但是有些程序必须强制打开IP分片&#xff0c;因为它们不考虑自己分片的问题&#xff0c;常见于UDP、大包ICMP/PING测试。 打开终端窗口。 使用以下命令查看当前系统上 IPv4 分片支…

08、MongoDB -- MongoDB 的 集合关联($lookup 和 DBRef 实现集合关联)

目录 MongoDB 的 集合关联演示前提&#xff1a;登录单机模式的 mongodb 服务器命令登录【test】数据库的 mongodb 客户端命令登录【admin】数据库的 mongodb 客户端命令 SQL 术语 与 Mongodb 的对应关系使用 $lookup 实现集合关联语法格式添加测试数据1、查询出订单数量大于6&a…

每日一题-合成两个有序链表

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 以上是题目信息&#xff1a; 下面是解答过程 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ typedef struct Lis…

解决“您的连接不是私密链接”

目录 那么这项提示“不安全”的政策为什么会出台呢&#xff1f;其存在的意义又在哪里呢&#xff1f; 将http访问更改为https访问需要怎么做呢&#xff1f; 我们在上网的过程中经常会遇到浏览器提示“您的连接不是私密连接”&#xff1b;“您与该网站的连接不是私密连接&#…

内存溢出(OOM)-汇总指南

目录 java.lang.OutOfMemoryError:Java heap space 原因分析 示例 解决方案 java.lang.OutOfMemoryError:GC overhead limit exceeded 原因分析 示例 解决方案 java.lang.OutOfMemoryError:Permgen space 原因分析 示例 解决方案 java.lang.OutOfMemoryError:Metas…

怎么将电脑excel文档内的数据转换为图片形式

你平时在办公室会遇到格式转换的问题吗&#xff1f;比如PDF转Word&#xff0c;WPS转PDF&#xff0c;PDF转TXT&#xff0c;图片转PDF等。边肖最近在工作过程中遇到了类似的问题。为了更方便的查看表格&#xff0c;需要将Excel表格转换成图片格式。遇到这样的问题&#xff0c;很多…

【爬虫】单首音乐的爬取(附源码)

以某狗音乐为例 import requests import re import time import hashlibdef GetResponse(url):# 模拟浏览器headers {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0}# 发送请求…