always语句块中含有多个if语句时执行顺序问题

2019-07-15 21:40发布

  1. always @(posedge clk)
  2. begin
  3.   if(enable)  begin   //如果使能端有效时就亮灯及计时
  4.                                  if(!sta)  begin  //如果状态变量sta为0按“绿-黄-左拐-黄-红”的顺序亮灯
  5.                                                          sta<=1;
  6.                                                          case(ordera)
  7.                                                                 0: begin a_time<=agreen; akind<=2;ordera<=1;end
  8.                                                                 1: begin a_time<=ayellow;akind<=4;ordera<=2;end
  9.                                                                 2: begin a_time<=aleft;  akind<=1;ordera<=3;end
  10.                                                                 3: begin a_time<=ayellow;akind<=4;ordera<=4;end
  11.                                                                 4: begin a_time<=ared;   akind<=8;ordera<=0;end
  12.                                                                 default:                 akind<=8;
  13.                                                          endcase
  14.                                                    end
  15.                                                   
  16.                                  else   begin       //如果状态变量sta为1就就执行亮灯倒计时
  17.                                                   if(a_time>1)  
  18.                                                                 if(a_time[3:0]==0) begin
  19.                                                                                                                 a_time[3:0]<=4'd9;
  20.                                                                                                                 a_time[7:4]<=a_time[7:4]-1;
  21.                                                                                                    end
  22.                                                                 else a_time[3:0]<=a_time[3:0]-1;               
  23.                                                   if(a_time==2) sta<=0;//
  24.                                                 end
  25.                       end
  26.   else  begin   //如果使能端无效
  27.                   akind<=4'b1000;
  28.                   ordera<=0;
  29.                   sta<=0;
  30.                 end
  31. end
复制代码

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。