FPGA学习——点亮流水灯

文章目录

  • 一、前言
  • 二、源码
  • 三、ModelSim仿真
    • 3.1 tb文件源码:
    • 3.2 创建项目
    • 3.3 ModelSim仿真

一、前言

在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Ⅱ文件
FPGA学习——点亮流水灯_第1张图片
FPGA学习——点亮流水灯_第2张图片

FPGA学习——点亮流水灯_第3张图片

  • 选择文件后点击add 注意tb文件名需要和模块名一致!!
    FPGA学习——点亮流水灯_第4张图片
  • 注意,若未配置ModelSim路径请自行查阅相关博客!!!
    FPGA学习——点亮流水灯_第5张图片
    FPGA学习——点亮流水灯_第6张图片
    结果符合预期

你可能感兴趣的:(fpga开发,学习)