无源蜂鸣器驱动实验
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
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。