文章目录
- 一、前言
- 二、源码
- 三、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Ⅱ文件
- 选择文件后点击add 注意tb文件名需要和模块名一致!!
- 注意,若未配置ModelSim路径请自行查阅相关博客!!!
结果符合预期