Verilog初学者大侠:为什么仿真的时候+1加到一个值后会突然乱掉

Verilog菜鸟请教各位大侠:为什么仿真的时候+1加到一个值后会突然乱掉
各位大侠,问个关于Verilog的问题,为什么按照下面的程序
always @(negedge RST or posedge CLK or posedge rise or posedge fall)
begin
if((RST == 1'b0)||(rise == 1'b1)||(fall == 1'b1))
begin
watchdog_timer_count <= 9'b0_0000_0000;
end
else if(!watchdog_timer_done)
begin
watchdog_timer_count <= watchdog_timer_count +1;
end
end
assign watchdog_timer_done = (watchdog_timer_count == WATCHDOG -1) ? 1'b1 : 1'b0;

仿真结果到317突然就变到320了。其中WATCHDOG = 320。仿真的时候和这个有关的线 rise fall rst 都没有变动。。
仿真的时候用的是十进制。。watchdog_timer_done也都是低的。
看到这个仿真结果快吐血了。

对了,在317 到 320 的之间很有短时间的变成 311 310 300,但是时间极短。 

各位大侠帮帮忙~

------解决方案--------------------
先友情帮顶下
------解决方案--------------------
一般在敏感列表里面只写 posedge clock,或者再加上异步的reset。

我觉得照你的意思rise和fall应该是一个同步信号。如果这两个信号中一个为低,一个有下降沿则会增加计数。

always @ (posedge CLK or negedge RST) 
if((RST == 1'b0)
watchdog_timer_counter <= 9'h0;
else if ( ( rise == 1'b1 ) || (fall == 1'b1) )
watchdog_timer_counter <= 9'h0;
else if(!watchdog_timer_done) 
watchdog_timer_count <= watchdog_timer_count +1; 
 
assign watchdog_timer_done = (watchdog_timer_count == WATCHDOG -1) ? 1'b1 : 1'b0;