FPGA学习笔记之流水灯(1)
FPGA的开发上手并不难,但是想成为顶尖高手十分不易,不知道要流过多少汗水,写过多少万行代码,调试过多少板子。但是我们不能因为山高难爬就放弃攀登,不能因为美人难追就放弃追求吧,况且学习的过程中也有诸多乐趣。现在就从大家最常接触的流水灯开始入手学习FPGA的开发,将实现多种样子的流水灯。开发语言采用Verilog。
- 功能描述
- 代码
- 总结
功能描述
有编号1、2、3、4共4个LED灯,实现1灯至4灯的循环点亮,每次点亮1个LED灯。复位时所有灯全亮。
代码
下面代码将采用多种方式实现同等功能。
思路1:采用if语句实现。为使代码直观明了,使用两个always块,一个用于计时,一个根据所计时间判断该第几个灯点亮。
module led_top(
input clk, //系统时钟,50MHz
input rst_n, //复位
output reg[3:0] led //输出
);
parameter LED_CNT1 = 25_000_000; //每数0.5秒LED闪一次
parameter LED_CNT2 = LED_CNT1 * 2;
parameter LED_CNT3 = LED_CNT1 * 3;
parameter LED_CNT4 = LED_CNT1 * 4;
reg [31:0] count;
always @(posedge clk or negedge rst_n) //计数器在0~LED_CNT4-1之间循环
begin
if(!rst_n)
count