为什么MH计数到5不停止还要继续计数呢

2019-07-15 21:16发布

问题.png
上面是数字跑表计数器模块仿真图,分十位MH计时到5后仍然继续计数,请大神指点这个问题怎么解决。
下面是程序:
module jishuqi(clk_100hz,reset,pause,MH,ML,SH,SL,MSH,MSL);
input clk_100hz,reset,pause;
output reg [3:0]MH;
output reg [3:0]ML;
output reg [3:0]SL;
output reg [3:0]SH;
output reg [3:0]MSL;
output reg [3:0]MSH;
reg cnt_ms;
reg cnt_s;
always@(posedge clk_100hz or negedge reset)
  begin
    if(!reset)
      begin
       MSL<=4'd0;
       MSH<=4'd0;
       cnt_ms<=1'b0;
      end
    else
      begin
       if(!pause)
        begin
          if(MSL==9)
           begin
             if(MSH==9)
              begin
                MSL<=4'd0;
                MSH<=4'd0;
                cnt_ms<=1'b1;
              end
             else
              begin
                MSL<=0;
                MSH<=MSH+1'b1;
                cnt_ms<=1'b0;
              end
           end
          else
                          begin
                                  MSL<=MSL+1'b1;
                                  cnt_ms<=1'b0;
                          end
        end
      end
        end
always@(posedge cnt_ms or negedge reset)
  begin
    if(!reset)
      begin
        SL<=4'd0;
        SH<=4'd0;
        cnt_s<=1'b0;
      end
    else
      begin
        if(!pause)
          begin
           if(SL==9)
             begin
              if(SH==5)
                begin
                  cnt_s<=1'b1;
                  SH<=4'd0;
                  SL<=4'd0;
                end
              else
                begin
                  cnt_s<=1'b0;
                  SH<=SH+1'b1;
                  SL<=4'd0;                       
                end
             end
           else
             begin
                SL<=SL+1'b1;
                cnt_s<=1'b0;
             end
          end
      end
  end
always@(posedge cnt_s or negedge reset)
  begin
    if(!reset)
      begin
        ML<=4'd0;
        MH<=4'd0;
      end
    else
      begin
        if(!pause)
          begin
            if(ML==9)
              begin
                if(MH==5)
                 begin
                   MH<=4'd0;
                   ML<=4'd0;
                 end
                else
                  ML<=4'd0;
                  MH<=MH+1'b1;
              end
            else
               begin
                  ML<=ML+1'b1;
               end
          end
      end
  end

endmodule

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
17条回答
asuyyy
2019-07-17 01:44
无影000 发表于 2017-11-15 09:21
我是定义了四位MH 这是为了给下一个模块输入的信号ML MSL等位宽一样 而且这个计数到5就应该执行MH

是不是MH==5的语句。在前仿真的时候没有问题。但是在后仿真的时候会跑到15?
然后改成MH>6的时候,就前后仿真都没问题?-

如果是的话,就是时序约束的问题了。建立时间,保持时间不满足。

一周热门 更多>