FPGA基于village的触摸按键开关控制

该文介绍了一个使用Verilog编写的触摸控制开关模块,通过两次触摸切换输出状态。模块利用两个变量产生使能信号,通过逻辑与运算检测触摸输入的边沿变化,从而控制输出的翻转。在仿真中,展示了输入和输出的波形变化。
摘要由CSDN通过智能技术生成

注意:以下是本人学习笔记,如有问题请留言。

原理:通过触摸来改变低电平的次数,触摸一次打开,触摸两次关闭,以此类推。

触摸信号不能直接输出,因为触摸输入的波形不能直接判断,需要通过设置使能信号来判断,输出什么时候反转,什么时候保持。

通过两个变量来获得一个使能信号,当使能信号产生一个高脉冲,输出便反转一次。

 两个变量通过逻辑与组合成一个使能信号。

编程代码:

module  chumo_key
  (
  input     sys_clk_n,
  input     sys_rst_n,
  input     key_in,
  
  output  reg  key_out
  );
reg   key_in_1;    //设置两个变量
reg   key_in_2;
wire  key_falg;    //将两个变量转换成一个使能信号(设置边沿触发)

always@(posedge sys_clk_n or negedge sys_rst_n)
  if(sys_rst_n == 1'b0)    //复位置0,两个变量为低电平
     begin
    
    key_in_1 <= 1'b1;
    key_in_1 <= 1'b1;
     end
  else                //复位置1,输入按键信号传递给in_1;
     begin            //因为是时序逻辑会延迟一拍,把in_1传递给in_2(慢一拍)
      key_in_1 <= key_in;
      key_in_2 <= key_in_1;
     end
   //组合逻辑不会慢一拍,将两个变量逻辑与,得出使能信号  (边沿触发)
  assign  key_falg = ((key_in_1 == 1'b0) && (key_in_2 == 1'b1));
                                          
  always@(posedge sys_clk_n or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)    //复位置0,输出置低电平
      key_out <= 1'b0;
    else if(key_falg == 1'b1)//使能信号输入一个高脉冲信号,输出反转一次
      key_out <= ~key_out;
    else
      key_out <= key_out;
      
    endmodule

仿真编程代码:

`timescale 1ns / 1ns
module  tb_chumo_key();
  reg   sys_clk_n;
  reg   sys_rst_n;
  reg   key_in;
  wire  key_out;
  
initial
  begin
    sys_clk_n  =  1'b1;
    sys_rst_n <=  1'b0;
    key_in    <=  1'b1;
    #20
    sys_rst_n <=  1'b1;
    #50
    key_in <= 1'b0;
    #100
    key_in <= 1'b1;
    #200
    key_in <= 1'b0;
    #50
    key_in <= 1'b1;
    #50
    key_in <= 1'b0;
    #100
    key_in <= 1'b1;
    #200
    key_in <= 1'b0;
    #50
    key_in <= 1'b1;
  end
  
always #10 sys_clk_n = ~sys_clk_n;

chumo_key   tb_chumo_key
  (
  .sys_clk_n  (sys_clk_n),
  .sys_rst_n  (sys_rst_n),
  .key_in     (key_in),
  .key_out    (key_out)
  );

endmodule

仿真波形:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值