我的FPGA学习例程练习

1 点亮流水灯

具体要求:每隔1s钟点亮1个led灯,依次点亮开发板上的四个led灯,当按下复位按键时灯全灭。

Verilog HDL:代码如下

`timescale 1ns/1ps
module led_run(clk,rst_n,led);
input clk;
input rst_n;
output[3:0] led;
reg[31:0] timer;
reg[3:0] led;
//================================
//计数器计数:循环计数0-4s
//================================
[email protected](posedge clk or negedge rst_n)
begin
if(~rst_n)
timer<=0;
else if(timer32’d199_999_999)
timer<=0;
else
timer<=timer+1’b1;
end
//
==============================
//led灯控制
//================================
[email protected](posedge clk or negedge rst_n)
begin
if(~rst_n)
led<=4’b1111; //四个灯全灭 ,4个灯为共阳极二极管
else if(timer32’d49_999_999)
led<=4’b1110; //第一个灯亮
else if(timer
32’d99_999_999)
led<=4’b1101;
else if(timer32’d149_999_999)
led<=4’b1011;
else if(timer
32’d199_999_999)
led<=4’b0111;
end
endmodule

使用ModelsimSE进行仿真

将定时器添加入观测波形中(add wave)指令
并且使观测结果以16进制来显示,仿真效果如下:
我的FPGA学习例程练习
由运行结果知,灯的变化分别为1111,1110,1101,1011,0111顺序点亮,与板子上的模拟效果完全相同达到了实验目的。