xilinx基础篇Ⅱ(5)Prj1 触摸键驱动LED

1.目的

本节实验目的是板上的触摸键的检测,并驱动LED灯。

2.FPGA芯片型号

XC7A35TFGG484

3.硬件设计

AR101的使用(https://www.docin.com/p-972138456.html),如下描述,当前电路连接方式为输出高电平有效、同步模式。

 

4.软件设计

//
//prj_top.v
//
`timescale 1ns / 1ps
module prj_top
    (
        input sys_clk,
        input sys_rstn,
        input key_tpad,
        output led_out
    );
    
    
    wire key_en;

    key_touch inst2_key_touch
    (
        .clk_i(sys_clk),
        .rstn_i(sys_rstn),
        .key_tpad(key_tpad),
        .pos_key_tpad(),
        .neg_key_tpad(key_en)
    );
    
    led_driver inst2_led
    (
        .clk_i(sys_clk),
        .rstn_i(sys_rstn),
        .key_in(key_en),
        .led_out(led_out)
    );
    
endmodule
//
//key_touch.v
//
//检测触摸键IC输出状态
module key_touch
    (
        input clk_i,
        input rstn_i,
        input key_tpad,
        output pos_key_tpad,
        output neg_key_tpad
);

reg  key_tpad_d0, key_tpad_d1;


    always@(posedge clk_i or negedge rstn_i)
    begin
        if(!rstn_i)
            begin
                key_tpad_d0 <= 1'b0;
                key_tpad_d1 <= 1'b0;
            end
        else 
            begin
                key_tpad_d0 <= key_tpad;
                key_tpad_d1 <= key_tpad_d0;
            end
    end
    
    assign pos_key_tpad = key_tpad_d0 & (~key_tpad_d1);
    assign neg_key_tpad = (~key_tpad_d0) & key_tpad_d1;
    
endmodule
//
//led_driver.v
//
module led_driver
    (
        input clk_i,
        input rstn_i,
        input key_in,
        output led_out
    );
    
    reg led_o;
    
    always@(posedge clk_i or negedge rstn_i)
    begin
        if(!rstn_i)
            led_o <= 1'b0;
        else if(key_in) 
            led_o <= ~led_o;
        else 
            led_o <= led_o;
                
    end
    
    assign led_out = led_o;
    
endmodule

5.仿真

`timescale 1ns / 1ps
module tb_top();

    parameter T = 20;
    
    reg  key ;
    reg sys_clk ;
    reg sys_rstn;
    wire led;

    initial 
    begin
        key =1'b0;//按键初始状态为全断开
        sys_clk =1'b0; //初始时钟为低电平
        sys_rstn =1'b0; //复位信号初始为低电平
        
        #T//
        sys_rstn =1'b1; //一个时钟周期后复位信号拉高
        
        #(10000000*T) //200ms
        key = 1'b1; //触摸状态
        
        #T
        key = 1'b0; //触摸状态
        
        #(10000000*T) //200ms
        key = 1'b1; //触摸状态
        
        #T
        key = 1'b0; //触摸状态
    end
    
    always # (T/2) sys_clk <= ~sys_clk;
    
    prj_top inst_prj_top
    (
        .sys_clk (sys_clk),
        .sys_rstn (sys_rstn),
        .key_tpad (key),
        .led_out (led)
    );
endmodule

 仿真结果:

6.应用

信号名 

方向 

管脚 

端口说明 

电平标准 

sys_clk

input

R4

系统时钟,50M

LVCMOS33

sys_rst_n

input

U2

系统复位,低有效 

LVCMOS33

TPAD 

input 

T5

触摸键驱动芯片输出,高有效

LVCMOS33

led[0]

output

R2 

LED,高点亮

LVCMOS33

#------------------------------系统时钟和复位-----------------------------------
create_clock -period 20.000 -name sys_clk [get_ports sys_clk]
set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets sys_clk]
set_property -dict {PACKAGE_PIN U2 IOSTANDARD LVCMOS33} [get_ports sys_rstn]

#----------------------------------触摸按键-------------------------------------
set_property -dict {PACKAGE_PIN T5 IOSTANDARD LVCMOS33} [get_ports key_tpad]

#-----------------------------------LED-----------------------------------------
set_property -dict {PACKAGE_PIN R2 IOSTANDARD LVCMOS33} [get_ports {led_out}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值