流水灯实验

//==================================================================================================
//  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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chen_陈某人

一杯水,一包烟,一把键盘敲一天

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值