微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于检测五位二进制序列10010的状态机设计问题

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

时间:10-02 整理:3721RD 点击:
    时钟上升沿到来时,data左移,同时data最高位赋给x,同样在该上升沿到来时,进入状态判断,第一个x=1时应该进入状态A(001),为什么modelsim仿真波形图显示x=1下一周期才变为状态A,感觉状态(state)的输出滞后一个周期,希望大神帮忙看看哪里出了问题,或者解释一下是什么原因?谢谢(附代码和仿真结果图)








一个是tb  一个主程序



采用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

谢谢你,我还想问一下,就是我是按书上一个例子写的,但是我觉得当x=1时,state应该为001,但是为什么仿真结果在x=1的一个周期之后才变为001,能帮我看看是为什么么?

你把你的testbench的39行改成非阻塞赋值看看  data<={data[22:0],data[23]}

这个例子你可以把它改成异步low reset   看看 波形怎么变化 这样你才会看到同步和异步的区别

谢谢你,这个我试过了,没有变化

你说的异步low reset怎么弄,我百度了一些相关的,感觉不是太明白,我就觉得按逻辑变化分析和仿真结果不一样,可能是我想错了,不知道问题在哪里

你查一下异步的  这个实验用异步会消除前面的不定态

谢谢分享谢谢分享谢谢分享
      谢谢分享谢谢分享                       谢谢分享
      谢谢分享谢谢分享                谢谢分享         
            谢谢分享              谢谢分享谢谢分享谢谢分享
            谢谢分享              谢谢分享        谢                谢
            谢谢分享              谢谢分享        谢                谢
            谢谢分享              谢谢分享        分                分
            谢谢分享              谢谢分享        享                享
            谢谢分享              谢谢分享        谢                谢
            谢谢分享              谢谢分享        谢                谢
谢        谢谢分享               谢谢分享       分                分
谢谢     谢谢分享              谢谢分享        享                享
谢谢分 谢谢分享              谢谢分享        谢                谢
谢谢分 谢谢分享                               谢       谢
谢谢分谢谢分享                         谢                 谢
        谢谢谢谢                    分                               分

我知道了,那个上跳沿不能算作X==1,粗心了,刚学不久,还是谢谢你的回答

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top