//==================================================================================================
// Filename : led.v
// Created On : 2021-01-19 10:26:31
// Last Modified : 2021-01-19 15:18:32
// Revision :
// Author : 陈广
// Company : Infiray
// Email : guang.chen@infiray.com
//
// Description : LED流水灯实验
//
//
// IO:LED0 --> E10;LED1 --> F9; LED2 -->C9;LED3 --> D9;CLK --> E1;RTC_NRST --> N13
//
//==================================================================================================
/***************************************************
LED为共阴极,高电平点亮
循环周期为1ms 每1/4ms点亮一个LED灯
计数器到1ms,输出LED使能信号
****************************************************/
`timescale 1ns/1ns
module led (
input clk,
input rst_n,
output reg [3:0] led_Sig
);
parameter T1MS = 32'd49_999_999 ;
/***************************************************
为什么这里是32'd49_999_999,而不是16d'49_999_999
FPGA 的设计中通常使用计数器来计时,对于 50Mhz 的系统时钟,一个时钟周期是 20ns,那
么表示一秒需要 50_000_000 个时钟周期
(1s=1_000_000_000ns;20ns*50_000_000=1_000_000_000ns=1s),
如果一个时钟周期计数器累加一次,那么计数器从 0 到
49999999 正好是 50000000 个周期,就是 1 秒的时钟
那么可以知道 1ms=1_000_000ns=20ns*50_000即50_000个时钟周期是1ms,
如果一个时钟周期计数器累加一次,那么计数器从0到49_999 正好是50_000个周期,也就是1ms
32位计数器最大可以表示4294967295;最大计时85.8993459秒
16位计数器最大可以表示65535;最大计时1310.7ms
****************************************************/
reg [31:0] timer;
always @ (posedge clk or negedge rst_n)
begin
if(!rst_n)
timer <= 32'd0;
else if (timer == T1MS)
timer <=32'd0;
else
timer <= timer + 32'd1;
end
parameter LED0 = 4'b0001 ;
parameter LED1 = 4'b0010 ;
parameter LED2 = 4'b0100 ;
parameter LED3 = 4'b1000 ;
parameter T1 = 32'd12_499_999 ;
parameter T2 = 32'd24_999_999 ;
parameter T3 = 32'd37_499_999 ;
parameter T4 = 32'd49_999_999;
//========================================================================\
// =========== Define Parameter and Internal signals ===========
//========================================================================/
always @(posedge clk or negedge rst_n)
begin
if (!rst_n)
led_Sig <= 4'b0000;
else if (timer == T1)
led_Sig <= LED0;
else if (timer == T2)
led_Sig <= LED1;
else if (timer == T3)
led_Sig <= LED2;
else if (timer == T4)
led_Sig <= LED3;
end
endmodule
流水灯实验
最新推荐文章于 2023-12-20 19:06:06 发布