vhdl入门问题提问

vhdl fpga入门问题 使用一号按键控制4个LED灯,每按动一次,灯从左到右依次亮起,且每次只有一个灯亮。


module    key_new(
    input        wire            sclk,
    input        wire            rst_n,
    input        wire            key_in,
    
    output        reg    [3:0]        LED_out
    );
    
    //==========================//
    parameter    T_10ms=19'd499_999;
    //==========================//
    reg    [18:0]    cnt_10ms;
    reg            flag_10ms;
    reg            key_value;
    //==========cnt_10ms==========//
    always@(posedge    sclk    or    negedge    rst_n)
        if(!rst_n)
            cnt_10ms    <=19'd0;
        else    if(key_in==1'b1)      
            cnt_10ms    <=19'd0;    //key_in=1时,清零,遇到0时就累积加,所以,必须要添加此句        
        else    if(cnt_10ms==T_10ms)    //为的是cnt_10ms>T_10ms,如此就不会执行    cnt_10ms    <=cnt_10ms+1'b1;
            cnt_10ms    <=19'd500_000;
//        else    if(key_in==1'b0)    //
        else    if(key_in==1'b0&&cnt_10ms<=T_10ms)    //目的 是:计数T_10ms+1'b1之后,就不加1
            cnt_10ms    <=cnt_10ms+1'b1;
            
    //==========flag_10ms========//        
    always@(posedge    sclk    or    negedge    rst_n)
        if(!rst_n)
            flag_10ms    <=1'b0;        //因为key_value要取反,所以光有flag_10ms=0是不行的,还需要key_in==1'b0;按下了才有效果
        else    if(cnt_10ms==T_10ms-1'b1)
            flag_10ms    <=1'b1;
        else
            flag_10ms    <=1'b0;

    //==================//
    always@(posedge    sclk    or    negedge    rst_n)
        if(!rst_n)
            key_value    <=1'b0;        

        else    if(flag_10ms==1'b1&&key_in==1'b0)
            key_value    <=1'b1;
        else
            key_value    <=1'b0;    
        
    always@(posedge    sclk    or negedge    rst_n)
        if(!rst_n)
            LED_out    <=4'b0001;
        else    if(key_value==1'b1)
            LED_out    <=    {LED_out[2:0],LED_out[3]};
            
            
endmodule