超过飞飞系列-ZYNQ之FPGA学习3.3按键控制BEEP(基于正点原子ZYNQ)

一、基础知识
电平引脚
程序图
按键消抖
在这里插入图片描述

  1. 按键消抖此程序采用20ms延时,当按键信号平稳20ms时开始。
  2. 消抖20ms在程序中采用倒计时的方式。
  3. 50MHz——时钟,20ns——周期 ,计算20ms 要计算到10的6次方。

二、程序

top_key_beep

module top_key_beep(
    input       clk,
    input       rst_n,
    
    input       key,
    output      beep
    );
    
wire key_value ;
wire key_flag;    

//   程序例化
key_deounce u_key_deounce(             
   .clk          (clk),
   .rst_n          (rst_n),
                 
   .key            (key),
   .key_value      (key_value),
   .key_flag       (key_flag)                          
    );  
    
 beep_control u_beep_control(
    .clk           (clk),
    .rst_n         (rst_n),

    .key_value     (key_value),
    .key_flag      (key_flag),
    .beep           (beep)
    );              
endmodule

key_deounce

module key_deounce(             
    input       clk,
    input       rst_n,
    
    input       key,
    output  reg key_value,
    output  reg key_flag                                   
    );       

reg  [19:0] cnt;                    // 50MHz  时钟    20ns    周期  ;计算20ms 要计算到10的6次方
reg         key_reg;  
// 主代码
always @ (posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        cnt <= 20'd0;
        key_reg <= 1'b1;
    end
    else begin
        key_reg <=key;
        if(key_reg != key)begin
            cnt <= 20'd100_0000;
        end
        else begin
            if(cnt > 20'd0)
                cnt <= cnt - 1'b1;
            else
                cnt <= 20'd0;
        end
    end
end

always @ (posedge clk or negedge rst_n)begin
    if(!rst_n)begin   
        key_value <= 1'b1;
        key_flag  <= 1'b0;
    end
    
    else if(cnt == 20'd1)begin
        key_value <= key;
        key_flag  <= 1'b1;
        end
    else begin
        key_value <= key_value;
        key_flag  <= 1'b0;
    end
end
        
endmodule                          

beep_control

module beep_control(
    input       clk,
    input       rst_n,
    
    input       key_value,
    input       key_flag,
    output reg beep
    );
always @ (posedge clk or negedge rst_n)begin
    if(!rst_n)
        beep <= 1'b1;
    else if(key_flag && (key_value == 1'b0))
        beep <=~beep;
end
        
endmodule

约束文件

set_property -dict {PACKAGE_PIN G18 IOSTANDARD LVCMOS33} [get_ports {beep}] 
set_property -dict {PACKAGE_PIN L20 IOSTANDARD LVCMOS33} [get_ports {key}] 
set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports clk] 
set_property -dict {PACKAGE_PIN J15 IOSTANDARD LVCMOS33} [get_ports rst_n]


三、总结

  1. 程序完整但是有警告
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UG585-Zynq-7000-TRM是一份关于Xilinx Zynq-7000 SoC处理器的技术参考手册。Zynq-7000 SoC处理器是一款配备ARM Cortex-A9双核处理器和Xilinx可编程逻辑部分(PL)的可扩展平台,旨在为嵌入式系统开发者提供卓越的灵活性和可编程性。 TRM代表Technical Reference Manual(技术参考手册),其中包含了该处理器的体系结构和功能特性的详细描述,包括处理器内部的各种模块、外设、总线结构等等。该手册的主要目的是为开发者提供全面的指导和支持,从而加速其系统设计和开发应用,减少错误和风险。 UG585-Zynq-7000-TRM手册的内容包括Zynq-7000的基本特征、处理器硬件和软件架构、可编程逻辑PL和PS之间的通信、外设接口和寄存器映射、中断控制等内容。开发者可以根据手册中的详细说明,了解Zynq-7000的构成和功能,从而基于此设计和实现自己的应用。 总之,UG585-Zynq-7000-TRM手册是一份非常重要的技术参考资料,为开发者提供全面的指导和支持,促进了Zynq-7000处理器的应用和拓展,也为未来的嵌入式系统设计提供了参考和借鉴。 ### 回答2: UG585是Xilinx公司发布的Zynq-7000系列技术手册,全称为“Zynq-7000 All Programmable SoC Technical Reference Manual”。Zynq-7000系列是Xilinx公司推出的一款功能强大的FPGA芯片,集成了双核ARM Cortex-A9处理器和可编程逻辑资源,支持高性能中间件、操作系统和外围设备的支持。该手册详细介绍了Zynq-7000系列SoC的架构、功能、性能、测试和验证、软件和硬件开发等方面的知识。他对于学习、使用和开发Zynq-7000 SoC具有非常重要的意义,使得开发人员能够深入了解这个芯片的细节,掌握它的特性和功能,以便更加高效地使用它进行开发。如果你想要学习和使用Zynq-7000 SoC,UG585是一个非常重要的参考文献,值得认真阅读和研究。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值