ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-11-21 17:02:09  阅读:219  来源: 互联网

标签:LED clk sys Prj1 key input xilinx led rstn


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}]

标签:LED,clk,sys,Prj1,key,input,xilinx,led,rstn
来源: https://blog.csdn.net/Roy_tly/article/details/121455128

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有