FPGA学习——点亮流水灯

该文介绍了如何使用Verilog编写一个FPGA程序,使LED每隔1s轮流亮起。通过设置一个计数器并在ModelSim环境下进行仿真验证,详细步骤包括源码编写、仿真测试bench文件的创建以及在QuartusⅡ中的项目配置和仿真运行。
摘要由CSDN通过智能技术生成

一、前言

在FPGA开发板中,一般板载LED默认高电平点亮,因此我们只需要将想要亮起的LED赋值为1即可。
本入门实验要求为每隔1s开发板上的LED轮流亮起,因此我们需要一个1s的计数器,
由于开发板晶振时钟为50MHz,因此我们计数50_000_000即为1s。

二、源码

注意:为了后续方便仿真所以这里MAX设置为5,若要上板请修改为50_000_000!!!!

module led (
    input   wire            clk,
    input   wire            rst_n,

    output  reg   [3:0]     led
);

parameter MAX = 5 ;//若要上板请修改为50_000_000!!!!
reg [25:0]  cnt;

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        cnt <= 1'b0;
    end
    else if(cnt == MAX - 1'b1)begin
        cnt <= 1'b0;
    end
    else begin
        cnt <= cnt + 1'b1;
    end
end

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        led <= 4'b0001;
    end
    else if(cnt == MAX - 1'b1)begin
        led <={led[2:0],led[3]};
    end
    else begin
        led <= led;
    end
end

endmodule

三、ModelSim仿真

3.1 tb文件源码:

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

    reg clk;//50M,每10ns反转一次电平
    reg rst_n;//复位信号

    wire [3:0] led;
    
    always #10 clk = ~clk;

    initial begin
        clk = 1'b0;
        rst_n = 1'b0;
        #10;
        rst_n =1'b1;
        #100000;
        $stop;
    end

    led u_led(
        .clk (clk),
        .rst_n (rst_n),

        .led (led)
    );
endmodule

3.2 创建项目

请查看博主以前博客

3.3 ModelSim仿真

右键QuartusⅡ文件
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 选择文件后点击add 注意tb文件名需要和模块名一致!!
    在这里插入图片描述
  • 注意,若未配置ModelSim路径请自行查阅相关博客!!!
    在这里插入图片描述
    在这里插入图片描述
    结果符合预期
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值