verilog实验1:基于FPGA蜂鸣器演奏乐曲并数码管显示

这篇博客介绍了如何使用FPGA通过编程让蜂鸣器播放《生日快乐》乐曲,并在数码管上显示音调。内容包括代码实现的两个主要部分:音调方波生成和数码管显示,以及作者对学习FPGA的感悟和成长经历。
摘要由CSDN通过智能技术生成

一、实验任务

       利用FPGA进行代码开发,使蜂鸣器演奏出乐曲《生日快乐》,将音调显示在数码管。原理为蜂鸣器为交流源蜂鸣器,在引脚上加一定频率的方波就可以发声,而且发声的频率由所加方波决定。这样我们就可以根据无源蜂鸣器的原理进行发声练习了。

二、代码实现

       由于需要蜂鸣器发声且数码管显示音调,所以我们将代码分为两部分。

       第一部分用于产生音调的方波。第二部分为数码管显示。

       (一)产生音调

       (1)PreDiv 预置分频数模块

       将48M晶振分频12M,再计算得出各个音调的频率,公式为12M÷音调频率÷2,所得即为预置分频数。程序中只编写了低音和中音的14个音。

 

module prediv(
    input [3:0]Index,
    input clk,
    input Reset_n,
    output reg[15:0] PreDiv
    );
        
    always @ (negedge Reset_n or posedge clk)
            if(!Reset_n)
            begin
            PreDiv<=16'h5997;
            end
        else
            begin
            case(Index)
            4'd1:PreDiv<=16'h5997;
            4'd2:PreDiv<=16'h4FCD;
            4'd3:PreDiv<=16'h471B;
            4'd4:PreDiv<=16'h431E;
            4'd5:PreDiv<=16'h3BCA;
            4'd6:PreDiv<=16'h3544;
            4'd7:PreDiv<=16'h2F74;
            4'd8:PreDiv<=16'h2CCA;
            4'd9:PreDiv<=16'h27E8;
            4'd10:PreDiv<=16'h238D;
            4'd11:PreDiv<=16'h218E;
            4'd12:PreDiv<=16'h1DE5;
            4'd13:PreDiv<=16'h1AA2;
            4'd14:PreDiv<=16'h17BA;
        endcase
        end
endmodule

       (2)Index 索引数模块

        为了便于代码书写,需要引用索引数(其实加一个ROM更为方便),即使用“5“为低音”so",如简谱一样,可以更为方便的编写乐曲。毕竟乐曲有很多音符,如果每次都用预置数编写程序,程序书写和查错会非常不方便。当然这也是verilog语言的魅力之处。

module index(
    input clk,
    input reset_n,
    output reg[3:0]index
    );
    
    reg[5:0]cnt;
    wire clk2m;
    wire
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值