LED控制 verilog FPGA 基础练习6

本文介绍了使用Verilog在FPGA中实现LED控制的边沿检测技术,通过上升沿和下降沿判断来切换LED的亮灭状态,提供了一个基础练习实例和仿真结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LED控制 verilog FPGA 基础练习6

发现问题,用技术解决问题。兴趣是自己的源动力 !

目录

    • LED控制 verilog FPGA 基础练习6
  • 前言
  • 一、LED控制
    • 1.1 控制方案
      • 1.1.1 功能代码
      • 1.1.2 仿真代码
      • 1.1.3 仿真结果
  • 总结

前言

借用LED灯的开关切换控制,主要来联系如何通过上升沿或者下降沿来进行特定的操作。核心就是通过打拍进行边沿的判断。

一、LED控制

实际场景:按一下,切换LED的开和关

1.1 控制方案

  • 触摸LED控制的核心就是判断上升沿和下降沿
  • 实现方法就是:每一个变动flag就取反

1.1.1 功能代码

module touch_ctrl_led
(
input wire sys_clk , //系统时钟,频率50MHz
input wire sys_rst_n , //复位信号,低电平有效
input wire touch_key , //触摸按键信号

output reg led //led输出信号

);
// *******************************************
// 触摸LED控制的核心就是判断上升沿和下降沿
// 实际场景:按一下,切换LED的开和关(即上或者下降沿)
// 实现方法就是:每一个变动flag就取反
// *******************************************

// 上升沿和下降沿判断

// 先对输入信号进行打一拍

reg touch_key_dly1;
reg touch_key_dly2;
wire [1:0] touch_en;
always@(posedge sys_clk or negedge sys_rst_n) 
begin
	if(sys_rst_n == 1'b0) 
		begin
			touch_key_dly1 <= 1'b1; // 低电平亮
			touch_key_dly2 <= 1'b1;
		end
	else 
		begin
			touch_key_dly1 <= touch_key; // 因为触摸相当于和当前时钟是异步的,所以打两排,第一拍先同步
			touch_key_dly2 <= touch_key_dly1;
		end
end

assign touch_en = {touch_key_dly2,touch_key_dly1}; // 2'b10表示下升沿,2'b01表示下升沿,

always@(posedge sys_clk or negedge sys_rst_n) 
begin
	if(sys_rst_n == 1'b0) 
		begin
			led <= 1'b1; 
		end
	else if(touch_en == 2'b10 | touch_en == 2'b01 )
		begin
			led <= ~led; // 每次变化,对led来说就是一开一关
		end
end


endmodule

1.1.2 仿真代码

`timescale 1ns/1ns
module tb_top;

reg sys_clk;
reg sys_rst_n;
reg touch_key;
wire led;


initial begin
	sys_clk    = 1'b0;
	sys_rst_n  = 1'b0;
	#50;
	sys_rst_n  = 1'b1;
end

always #10 sys_clk = ~sys_clk;

// 模拟开关

initial 
begin
 #200
 touch_key <= 1'b0 ;
 #2000
 touch_key <= 1'b1 ;
 #1000
 touch_key <= 1'b0 ;
 #3000
 touch_key <= 1'b1 ;

end

touch_ctrl_led u0_touch_ctrl_led
(
.sys_clk 	(sys_clk 	), 		//系统时钟,频率50MHz
.sys_rst_n  (sys_rst_n  ), 	//复位信号,低电平有效
.touch_key  (touch_key  ), 	//触摸按键信号
.led 		(led 		)	//led输出信号

);

endmodule

1.1.3 仿真结果

在这里插入图片描述图1 上升沿判断,LED拉低,亮
在这里插入图片描述图2 下升沿判断,LED拉低,灭

注意:这里只要是有切换,就变换LED灯的亮或者灭

总结

  • 核心思想:判定条件是上升沿或者下降沿才进行的某个特定的操作。
  • 知识点总结:
    1. 如何通过边沿切换控制LED的亮和灭?
    2. 异步的信号进来需要进行clk同步
    3. 边沿判断的方式?如下面代码,2拍写前,1写后;2’b10,其中1变成0,就是代表下降沿;2’b01,其中0变成1,就是代表上降沿;
     // 2'b10表示下升沿,2'b01表示下升沿,
    assign touch_en = {touch_key_dly2,touch_key_dly1}; 
    
  • 欢迎一起交流学习,如有错误之处,还请各位指正。

参考资料

[1] FPGA系列教学

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值