初写Verilog HDL程序,感觉无法理解程序运行的过程。如下是我写的一个调整占空比输出的小程序,本想实现的是计数CLK_IN数0xFFFF后,置RESET为高。这时占空比调节功能有效,在每个UP_DUTY的上升沿加大占空比,在DOWN_DUTY的上升沿减小占空比。但是一上电,占空比初始输出就不对,调整UP_DUTY或DOWN_DUTY输入,可调占空比输出,但是发现(pwm_count < 16'hFFF9)或 (pwm_count > 16'h1C71)没起作用,有时调到最大占空比后,再输入UP_DUTY的上升沿,PWM_OUT又变小了。请问这是为什么啊?谢谢! 
CLK_IN:12MHz时钟输入 
PWM_OUT:PWM输出 
RESET:复位输出 
UP_DUTY:增大占空比输入控制 
DOWN_DUTY:减小点空比输入控制 
 
module PWM(CLK_IN, PWM_OUT, RESET,  UP_DUTY, DOWN_DUTY); 
input         CLK_IN; 
input         UP_DUTY; 
input         DOWN_DUTY; 
output      PWM_OUT; 
output         RESET; 
 
reg RESET; 
reg PWM_OUT; 
reg rst_flag; 
reg [1:0] in_reg; 
reg [15:0] count; 
reg [15:0] pwm_count; 
 
initial pwm_count = 16'h8E35;        //初始值 
initial rst_flag = 1'b0; 
initial in_reg   = 2'b00; 
 
always @(posedge CLK_IN) 
  begin 
    count = count + 1'b1;   //计数累加                                   
    if ((count == 'hFFFF) && (rst_flag == 1'b0))  
                begin  
             RESET = 1'b1;   //全局复位完成 
                  rst_flag = 1'b1; 
      end 
   
    if (rst_flag) 
      begin 
        if (count < pwm_count) 
          PWM_OUT = 1'b1; 
        else 
          PWM_OUT = 1'b0; 
                 
        if (!UP_DUTY && in_reg[0] && (pwm_count < 16'hFFF9)) 
            pwm_count = (pwm_count + 16'h1C71);        //占空比增加                                                   
        else if (!DOWN_DUTY && in_reg[1] && (pwm_count > 16'h1C71)) 
            pwm_count = (pwm_count - 16'h1C71);         //占空比减少         
                 
       in_reg = {DOWN_DUTY, UP_DUTY}; 
      end 
  end 
endmodule |  
  
 
 
 
 
 |   
 |  
  
 |