CrazyBingo

RST_n的问题

0
阅读(2596)

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

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要接全局时钟!!!!!!!!!否则后果自负!”

Baidu
map