RST_n的问题

有一个灰常郁闷的问题。。。

module CLK_Generater(
                    input        CLOCK_100,
                    input        RST_n,
                    input        Key,
                    output    reg    [3:0]    CLK_DivChoose,

                    );
reg     [19:0]    count;            //Delay_10ms
reg             CLK_100Hz;         //100HZ(10ms)时钟信
reg     [2:0]    state;          //状态标志

reg        [16:0]    cnt;
reg        [17:0]    Div_cnt;

always @(posedge CLOCK_100 or negedge RST_n)
begin
    if(!RST_n)
        begin
        CLK_100Hz<=0;
        count<=0;
        end
    else
        begin
        if(count<20'd1000000)
            begin
            count<=count+1'b1;
            CLK_100Hz<=CLK_100Hz;
            end
        else
            begin
            count<=0;
            CLK_100Hz<=~CLK_100Hz;
            end   
        end
end

always@(posedge CLK_100Hz or negedge RST_n)
begin
    if(!RST_n)
        CLK_DivChoose <= 4'h0;
    else
        begin
        case(state)                //按键,不按下去的时候是VCC高,按下去的时候是GND低
        0:
            begin
            if(!Key)            //检测键盘是否被按下(Delay_5ms)
                state <= 1;
            else
                state <= 0;        //未按下,循环检测
            end
        1:
            begin
            if(!Key)            //检测键盘是否真的被按下,还是抖动(消抖动(Delay_5ms))
                state <= 2;        //检测到不是抖动,进行下一步操作
            else
                state <= 0;        //是抖动,回去继续检测按键
            end
        2:
            begin           
            CLK_DivChoose <= CLK_DivChoose+1'b1;
            state <= 3;            //只进行加1操作,不连加           
            end
        3:
            begin
            if(Key)                //松手(VCC)检测,有可能是抖动
                state <= 4;
            else                //检测到还是(GND)低电平,未松手
                state <= 3;
            end
        4:
            begin
            if(Key)                //松手(VCC)检测,有可能是抖动
                state <= 0;
            else
                state <= 4;        //检测到还是(GND)低电平,未松手
            end
        endcase
        end
end

endmodule

CLK_DivChoose 同时接到4个LED上面,RST_n是复位,Key是加,效果就是按RST_n全暗,按Key LED加1

但是郁闷的是不行,最后发现RST_n我接到了普通IO口上面,他NND竟然就是不行,但是我要是接到CLK2上面去了,系统灰常稳定,灰常稳定

虽然现在为止我还是不知道为什么,但悟出了一点,RST_n最后用全局时钟,这样到达每一块的时间相等,同时系统也会更稳定。

浪费了做完一个晚上和今天1个小时,郁闷啊,现在终于好 了

铭记:“RST_n要接全局时钟!!!!!!!!!否则后果自负!”

posted on 2010-05-21 16:34  CrazyBingo  阅读(2481)  评论(5编辑  收藏  举报

导航