ZedBoard教程PL篇(2):按键检测

 开发板环境:vivado2017.4

开发板:Zedboard 芯片型号:xc7z020clg484-1

本章主要使用用verilog编写一个按键检测程序,按一次按键LED亮一次,依次点亮八个LED灯

按键工程

 按键检测代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/02/26 12:48:48
// Design Name: 
// Module Name: key_test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module key_test(
input           clock,//100M
input           reset,//SW0
input           key_in,//BTNC
output  [7:0]   led//LED0~LED7

    );
   
     
    
    reg         key_in_r1;
    reg         key_in_r2;
    wire        key_in_flag;
    
    reg         key_out;
    reg         key_out_r1; 
    reg         key_out_r2;
    
    reg [19:0]  cnt;
    reg [7:0]   led_reg;   
    wire        key_out_flag;
     
    
    always @ (posedge clock, negedge reset)
            if(!reset) 
                key_in_r1 <= 1'b1;
            else        
                key_in_r1 <= key_in;
     
    
    always @ (posedge clock, negedge reset)
            if(!reset) 
                key_in_r2 <= 1'b1;
            else        
                key_in_r2 <= key_in_r1;
    
    assign key_in_flag = (!key_in_r2 & key_in_r1); 
    
    always @ (posedge clock, negedge reset)
            if(!reset)
                cnt <= 20'h0;
            else if(key_in_flag)
                cnt <= 20'h0;
            else
                cnt <= cnt + 1'b1;
    
    always @ (posedge clock, negedge reset)
            if(!reset)
                key_out <= 1'b1;
            else if(cnt == 20'hfffff)            
                key_out <= key_in;
     
    
    always @ (posedge clock, negedge reset)
            if(!reset)
                key_out_r1 <= 1'b1;
            else
                key_out_r1 <= key_out;
    
    always @ (posedge clock, negedge reset)
            if(!reset)
                key_out_r2 <= 1'b1;
            else
                key_out_r2 <= key_out_r1;
    
assign  key_out_flag =   (!key_out_r2 && key_out_r1);  

//点亮LED
    always@(posedge clock or negedge reset)begin
            if(!reset)    
                led_reg    <=  8'b00000001;
            else if(key_out_flag)begin
                if(led_reg == 8'b10000000)
                    led_reg    <=  8'b00000001;
                else    
                    led_reg    <=  led_reg<<1;
            end        
end

assign  led =   led_reg;
               
endmodule

按键检测约束文件

set_property PACKAGE_PIN T22 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property PACKAGE_PIN T21 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property PACKAGE_PIN U22 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property PACKAGE_PIN U21 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property PACKAGE_PIN V22 [get_ports {led[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}]
set_property PACKAGE_PIN W22 [get_ports {led[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}]
set_property PACKAGE_PIN U19 [get_ports {led[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}]
set_property PACKAGE_PIN U14 [get_ports {led[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}]
set_property PACKAGE_PIN Y9 [get_ports clock]
set_property IOSTANDARD LVCMOS33 [get_ports clock]
set_property PACKAGE_PIN F22 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports reset]


set_property PACKAGE_PIN P16 [get_ports key_in]
set_property IOSTANDARD LVCMOS33 [get_ports key_in]

使用的按键

 

将reset打到下面不然会一直复位,然后按key按键,注意key按键默认没有按的时候是低电平,按键按下就会输入高电平,所以和大多少的按键相反,写程序注意按键上升沿检测按键

开发板上电后第一个led灯亮

按一下按键,第二个灯亮

 再按一下按键,第三个灯亮,每次按键都是依次点亮led,如果按了八次就会重新从第一个灯开始亮起

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: pl/sql: statement ignored 表示 PL/SQL 语句被忽略。这通常是由于语法错误或语句不完整导致的。需要检查语句是否正确,并确保所有必需的关键字和符号都已包含在内。如果语句正确,但仍然被忽略,则可能需要检查是否存在其他错误或问题。 ### 回答2: 当在PL/SQL程序中遇到"PL/SQL: statement ignored"的错误提示时,往往表示在PL/SQL块中的一条语句被忽略了。这可能是由于一些常见问题导致的。 首先,可能是由于语句末尾缺少了分号。在PL/SQL中,每条语句都应以分号结尾,如果忘记了分号,编译器会忽略该语句,出现"PL/SQL: statement ignored"的错误提示。请检查语句末尾是否有分号,并添加分号来解决此问题。 另外,也有可能是由于变量或表名拼写错误。在PL/SQL程序中,如果引用了不存在的变量或表名,编译器会将相关的语句忽略,并给出相应的错误提示。请检查程序中使用的所有变量和表名的拼写是否正确,并对错误的拼写进行纠正。 此外,还有可能是由于使用了不受支持的语句或功能。在PL/SQL中,某些特定的语句或功能可以不被支持,并可能导致"PL/SQL: statement ignored"的错误提示。请检查程序中使用的语句或功能是否在PL/SQL中受支持,根据需要进行修改或替换。 总结起来,当出现"PL/SQL: statement ignored"的错误提示时,我们应该首先检查语句末尾是否有分号,然后检查变量或表名的拼写是否正确,最后确保使用的语句或功能在PL/SQL中受支持。通过这些步骤的检查和纠正,可以解决这个错误。 ### 回答3: "PL/SQL: statement ignored"是Oracle数据库中的一个错误提示信息。当我们在PL/SQL编程中遇到这个错误时,意味着Oracle无法正确解析或执行我们的语句。 导致"PL/SQL: statement ignored"错误的原因可能有很多。以下是一些常见的情况: 1. 语法错误:通常,这个错误提示意味着我们的PL/SQL语句存在语法错误。可能是拼写错误、缺少关键字、丢失括号等。我们需要仔细检查我们的代码并修正这些错误。 2. 对象不存在:当我们在PL/SQL语句中引用一个不存在的表、视图、包、过程或函数时,Oracle会报错。我们需要确保我们所引用的对象确实存在,并且我们具有访问权限。 3. 变量或参数问题:有时,我们的PL/SQL语句可能包含对不存在的变量或参数的引用。我们需要仔细检查我们的代码并确保所有的变量和参数都已正确定义。 4. 权限问题:如果我们试图在没有足够权限的情况下执行某个操作(如更新表、执行存储过程等),Oracle会报错。我们需要确保我们具有执行所需操作的必要权限。 解决"PL/SQL: statement ignored"错误的方法有以下几个步骤: 1. 仔细检查代码,确保没有语法错误或拼写错误。 2. 确保我们引用的对象存在,并且我们具有访问权限。 3. 检查所有的变量和参数,并确保它们被正确定义。 4. 确保我们具有执行所需操作的必要权限。 总之,"PL/SQL: statement ignored"错误提示表示我们的PL/SQL语句存在问题,需要仔细检查和修正。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值