星空最火知名网站

登录 免费注册 星空最火知名网站 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

状态机设计,选用了One-Hot State Mchine,F、G状态不是很理解

作者:海棠 栏目:EDA技术
状态机设计,选用了One-Hot State Mchine,F、G状态不是很理解


原程序如下:
//seq.v
/*一个简单的状态机设计,功能是检测一个5位二进制序列"10010"。
考虑到序列重叠的可能,有限状态机共提供8个状态(包括初始状态IDLE)。
*/
MODULE seq(x,clk,rst,z,state);
input  x,clk,rst;
OUTPUT z;
OUTPUT[2:0] state;
reg[2:0] state;
wire z;


parameter IDLE='d0,  A='d1,  B='d2,
                     C='d3,  D='d4,
                     E='d5,  F='d6,
                     G='d7;
            
assign  z = ( state==E && x==0 )? 1 : 0;    //当x=0时,状态已变为E,
                                          //状态为D时,x仍为1。因此
                      //输出为1的条件为( state==E && x==0 )。
always @(posedge clk)
   if(!rst)
          begin
          state <= IDLE;   //保证进入有效状态
          end
   else
          casex(state)   //要求检测的序列是‘10010’
            IDLE : if(x==1)
                       begin  
                          state <= A;
                       end
            A:     if(x==0)
                       begin
                          state <= B;
                       end
            B:     if(x==0)
                       begin
                          state <= C;
                       end
                    else
                       begin
                          state <= F;  //为什么不让它直接跳回A状态???
                       end
            C:      if(x==1)
                       begin
                          state <= D;
                       end
                    else
                       begin
                          state <= G;
                       end
            D:      if(x==0)
                       begin
                          state <= E;
                       end
                    else
                       begin
                          state <= A;
                       end
            E:      if(x==0)
                       begin
                          state <= C;
                       end
                    else
                       begin
                          state <= A;
                       end
          //--------------------------
2楼: >>参与讨论
海棠
大家帮分析分析。
疑问在B、C状态的else语句那里,这样设计有什么好处?

3楼: >>参与讨论
水管工
其实也没有什么特殊意义
一个可能是为了以后扩充
另外更重要的就是要把各种状态占满。一旦期间受到干扰,这可以保证一定时间后期间会自动回到正确的轨道上来。

由于是触发器结构,我不认为有什么抗干扰的好处

当然,如果牛人(或某些软件自动生成)可以看出这样的设计会减少逻辑门的占用那就不是我所能理解的了。给出真值表供参考
state[2] s1 s0  x     OUTPUT  S2 S1 S0
IDLE   0  0  0  0      IDLE    0  0  0
IDLE   0  0  0  1        A     0  0  1
   A   0  0  1  0        B     0  1  0
   A   0  0  1  1        A     0  0  1
   B   0  1  0  0        C     0  1  1
   B   0  1  0  1        F     1  1  0
   C   0  1  1  0        G     1  1  1
   C   0  1  1  1        D     1  0  0
   D   1  0  0  0        E     1  0  1
   D   1  0  0  1        A     0  0  1
   E   1  0  1  0        C     0  1  1
   E   1  0  1  1        A     0  0  1
   F   1  1  0  0        B     0  1  0
   F   1  1  0  1        A     0  0  1
   G   1  1  1  0        G     1  1  1
   G   1  1  1  1        F     1  1  0


4楼: >>参与讨论
caiyanan
同样迷惑
昨天看这个例子的时候同样迷惑了半天,自己写的话怎么也想不到去增加这两个状态。楼上说占满状态,受到干扰时可以自动回到正确的轨道上来,肯定是有这个原因的,但是就算没有这两个状态,也还有default状态啊?对了楼主,这个FSM采用的不是One-Hot State Mchine吧?

参与讨论
昵称:
讨论内容:
 
 
相关帖子
请教一个ISP的问题?
请教两个Verilog 的问题!
想学习CPLD,准备做一块板,请问用些什么配置?
请教,数模混合IC的仿真方法?
EPM3064A和EPM240A哪个便宜一些?


Copyright © 1998-2006 www.j71x6.cn 浙ICP证030469号
博鱼最火网上大全(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 网络188BET导航(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 外围权威利记官方(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 真人利记足球大全(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 永利网络足球网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 雷火竞技正规权威网(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 188BET线上外围(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新) 永利最新网上足球(官方)网站/网页版登录入口/手机版登录入口-最新版(已更新)