fpga例程:按键检测 - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki

代码

  • 一定要注意,if..elseif...else的顺序
  • elseif(key==1)优先,elseif(dly_cnt==100)其次,最后才是计数逻辑
module tb7;
reg clk, rst_n;
initial clk=0;
always #10 clk=~clk;
initial begin
    rst_n=0;
    #1000;
    rst_n=1;
end 

reg key;
initial begin
    key=1;
    wait(rst_n==1);
    #100;
    key=0;
    #40;
    key=1;
    #30;
    key=0;
    #100;
    key=1;
    #200;
    key=0;
    #8000;
    key=1;
    #40;
    key=0;
    #80;
    key=1;

    #1000;

    key=0;
    #40;
    key=1;
    #30;
    key=0;
    #100;
    key=1;
    #200;
    key=0;
    #8000;
    key=1;
    #40;
    key=0;
    #80;
    key=1;
end

//1)
reg [15:0] dly_cnt;

always @(posedge clk or negedge rst_n)
if(rst_n==0)
    dly_cnt<=0;
else if(key==1)
    dly_cnt<=0;    
else if(dly_cnt==100)
    dly_cnt<=100;
else
    dly_cnt++;
    
assign key_pulse=(dly_cnt==100-1);


endmodule

image

按键检测用verilog写确实比较简单,比c语言简单多了。