关于检测五位二进制序列10010的状态机设计问题

2019-07-15 23:37发布

    时钟上升沿到来时,data左移,同时data最高位赋给x,同样在该上升沿到来时,进入状态判断,第一个x=1时应该进入状态A(001),为什么modelsim仿真波形图显示x=1下一周期才变为状态A,感觉状态(state)的输出滞后一个周期,希望大神帮忙看看哪里出了问题,或者解释一下是什么原因?谢谢(附代码和仿真结果图)
QQ截图20150818083525.png
QQ截图20150818083544.png
QQ截图20150818083602.png
QQ截图20150818083736.png
QQ截图20150818083756.png
QQ截图20150817220729.png
QQ截图20150817220807.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
骨灰级发烧友
2019-07-16 08:12
采用Moore机,画出状态图,并写出状态转移输出表。为了简单起见,我们这里采用的是无重复的序列检测。
程序代码:  
module VrSMex( CLOCK, X, Z);
   input CLOCK, X;   
   output Z;   
   reg Z;   
   reg [2:0] Sreg, Snext;
   parameter [2:0] A = 3'b000,                 
                   B = 3'b001,                 
                   C = 3'b010,                 
                   D = 3'b011,                 
                   E = 3'b100,
                                   F = 3'b101;
    always @ (posedge CLOCK)     
        Sreg <= Snext;
        always @ (X, Sreg) begin     
          case (Sreg)        
             A:      if(X==0)  Snext = A;               
                 else      Snext = B;
                 B:      if(X==0)  Snext = C;               
                 else      Snext = B;                 
                 C:      if(X==0)  Snext = D;               
                 else      Snext = B;                 
                 D:      if(X==0)  Snext = A;               
                 else      Snext = E;               
                 E:      if(X==0)  Snext = F;               
                 else      Snext = B;
                 F:      if(X==0)  Snext = A;               
                 else      Snext = B;         
           default Snext = A;     
        endcase
        end
       
        always @ (Sreg)            
          case (Sreg)      
            A, B, C, D, E: Z = 0;      
                F:             Z = 1;      
                default        z = 0;
        endcase
endmodule

一周热门 更多>