LED按键进阶Verilog

本文详细介绍了在数字电路中如何实现LED灯的闪烁效果以及按键的消抖处理。通过两个Verilog模块,LED模块实现了基于50MHz时钟的1秒周期闪烁,而KEY模块则通过20ms的延时消除按键抖动,确保稳定输出。这两个基本的数字电路设计对于嵌入式系统的用户交互有着重要的应用。
摘要由CSDN通过智能技术生成
  1. LED进阶
  • 实现闪烁的效果
  module LED 
(
   CLK_50M,RST_N,
   LED1
);

input CLK_50M;
input  RST_N;
output LED1;


reg [26:0]  time_cnt;
reg [26:0]  time_cnt_n;

reg led_reg;
reg led_reg_n;

parameter SET_TIME_1S=27'd50_000_000;


always @ (posedge CLK_50M or negedge RST_N)
begin 
if (!RST_N)
   time_cnt<= 27'h0;
else 
   time_cnt<= time_cnt_n;
end

always @(*)
begin
if (time_cnt==SET_TIME_1S)
   time_cnt_n=27'h0;
else
   time_cnt_n=time_cnt+27'h1;
end

always @ (posedge CLK_50M or negedge RST_N)
begin 
if (!RST_N)
   led_reg<= 1'h0;
else 
   led_reg<= led_reg_n;
end

always @(*)
begin
if (time_cnt==SET_TIME_1S)
   led_reg_n=~led_reg;
else
   led_reg_n=led_reg;
end
   
assign LED1=led_reg;

endmodule 


  1. 按键进阶
  • 按键消抖
 module KEY
(
   CLK_50M,RST_N,KEY,LED
);

input			CLK_50M;
input			RST_N;
input 	[7:0] KEY;
output  [7:0] LED;


reg 		[20:0] time_cnt; 
reg 		[20:0] time_cnt_n;

reg		[7:0]  KEY_in_r;//接收按键信号
reg 		[7:0]  KEY_out;//消抖完成输出按键
reg 		[7:0]  KEY_out_n;//KEY_out下一个状态

wire 			 KEY_press; //检测按键没有变化

parameter SET_TIME_20MS=21'd1_000_000;

always @(posedge CLK_50M or negedge RST_N)
begin
   if(!RST_N)
   	KEY_in_r<=8'h00;
   else
   	KEY_in_r<=KEY;  //接收键值
end

assign KEY_press=KEY_in_r^KEY;   //检测是否有变化
//time_cnt赋值
always @(posedge CLK_50M or negedge RST_N)
begin
   if(!RST_N)
   	time_cnt<=21'h0;
   else
   	time_cnt<=time_cnt_n;

end

always@(*)
begin
   if(time_cnt==SET_TIME_20MS||KEY_press)
   	time_cnt_n=21'h0;
   else
   	time_cnt_n=time_cnt+1'b1;

end
always @(posedge CLK_50M or negedge RST_N)
begin
   if(!RST_N)
   	KEY_out<=8'h00;
   else
   	KEY_out<=KEY_out_n;
end


always@(*)
begin
   if(time_cnt==SET_TIME_20MS)
   	KEY_out_n=KEY_in_r;
   else
   	KEY_out_n=KEY_out;
   
end
assign LED=~KEY_out;
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值