Moore型状态机:下一状态只由当前状态决定,即次态=f(现状,输入),输出=f(现状);

Mealy型状态机:下一状态不但与当前状态有关,还与当前输入值有关,即次态=f(现状,输入),输出=f(现状,输入);

// Example of a 5-state Mealy FSM

module mealy (data_in, data_out, reset, clock);  
output reg data_out;  input [1:0] data_in;  input reset, clock;  
reg [2:0] pres_state, next_state;  
parameter st0=3'd0, st1=3'd1, st2=3'd2, st3=3'd3, st4=3'd4;

always @ (posedge clock or negedge reset)  
begin: statereg  
  if(!reset)  pres_state = st0;  else  pres_state = next_state;  
end

always @(pres_state or data_in)  
begin: fsm  
case (pres_state)  
st0:    case(data_in)  
  2'b00: next_state=st0;  2'b01: next_state=st4;  2'b10: next_state=st1;  2'b11: next_state=st2;  endcase  
st1:    case(data_in)  
  2'b00: next_state=st0;  2'b10: next_state=st2;  default:next_state=st1;  endcase

st2:    case(data_in)  
  2'b0x: next_state=st1;  2'b1x: next_state=st3;  endcase  
st3:    case(data_in)  
  2'bx1: next_state=st4;  default: next_state=st3;  endcase  
st4:    case(data_in)  
  2'b11: next_state=st4;  default: next_state=st0;  endcase  
default:    next_state=st0;  }  
endcase  
end // fsm

always @(data_in or pres_state)  
begin: outputs  
case(pres_state)  
st0:    case(data_in)  
  2'b00:      data_out=1'b0;  default:     data_out=1'b1;  endcase

st1:    data_out=1'b0;  
st2:    case(data_in)  
  2'b0x:      data_out=1'b0;  default:     data_out=1'b1;  endcase  
st3:      data_out=1'b1;  
st4:    case(data_in)  
  2'b1x:      data_out=1'b1;  default:     data_out=1'b0;  endcase  
default:    data_out=1'b0;  
endcase  
end // outputs  
endmodule

 

// Example of a 5-state Moore FSM  
module moore (data_in, data_out, reset, clock);  
output reg data_out;  input [1:0] data_in;  input reset, clock;

reg [2:0] pres_state, next_state;  
parameter st0=3'd0, st1=3'd1, st2=3'd2, st3=3'd3, st4=3'd4;  
//FSM register  
always @(posedge clock or negedge reset)  
begin: statereg  
if(!reset)  pres_state = st0;  else  pres_state = next_state;  end // statereg

// FSM combinational block`  
always @(pres_state or data_in)  
begin: fsm  
case (pres_state)  
st0:    case(data_in)  
2'b00:       next_state=st0;  
2'b01:       next_state=st4;  
2'b10:       next_state=st1;  
2'b11:       next_state=st2;  
endcase  
st1:    case(data_in)

2'b00:       next_state=st0;  
2'b10:       next_state=st2;  
default:     next_state=st1;  
endcase  
st2:    case(data_in)  
2'b0x:       next_state=st1;  
2'b1x:       next_state=st3;  
endcase  
st3:    case(data_in)  
2'bx1:       next_state=st4;  
default:     next_state=st3;  
endcase  
st4:    case(data_in)  
2'b11:       next_state=st4;  
default:     next_state=st0;  
endcase  
default:    next_state=st0;  
endcase  
end // fsm  
// Moore output definition using pres_state only  
always @(pres_state)  
begin: outputs 

case(pres_state)  
st0:     data_out=1'b1;  
st1:     data_out=1'b0;  
st2:     data_out=1'b1;  
st3:     data_out=1'b0;  
st4:     data_out=1'b1;  
default: data_out=1'b0;  
endcase  
end // outputs  
endmodule // Moore 

(1)注意程序中的阻塞性赋值。

(2)注意data_out的输出值。

(3)Moore型状态机的输出和输入数据没直接关系,从More程序中看出,Pre_state的状态决定了状态机的输出结果,但是Pre_state得状态和数据输入有关。

Mealy和moore型状态机的更多相关文章

  1. 每天进步一点点------基础实验_12_有限状态机 :Moore型序列检测器

    /********************************************************************************* * Company : * Eng ...

  2. C语言状态机

    转载声明 如果转载本博客内容,请联系869119842@qq.com,获得作者书面授权 前言 状态机的好处不用多说,自己百度去,但传统的编程模式,无论是C语言,或是硬件FPGA的Verilog都是采用 ...

  3. 9、链表 & 状态机 & 多线程

    链表的引入 从数组的缺陷说起 数组有2个缺陷:一个是数组中所有元素的类型必须一致:第二个是数组的元素个数必须事先制定并且一旦指定之后不能更改. 如何解决数组的2个缺陷:数组的第一个缺陷靠结构体去解决. ...

  4. fpga状态机详解

    什么是状态机:状态机通过不同的状态迁移来完成特定的逻辑操作 状态机的分类:Moore型状态机和Mealy型状态机 Moore型:状态机的变化只与当前的状态有关 Mealy型:状态机的变化不仅与当前的状 ...

  5. FPGA 状态机-序列检测器verilog

    实现功能:检测出串行输入数据4位Data二进制序列0101,当检测到该序列的时候,out=1,否则out=0 (1)给出状态编码,画出状态图 (2)门电路实现 (3)verilog实现 首先规定Q3Q ...

  6. 基于FPGA的三段式状态机

    状态机分类: 通常, 状态机的状态数量有限, 称为有限状态机(FSM) .由于状态机所有触发器的时钟由同一脉冲边沿触发, 故也称之为同步状态机. 根据状态机的输出信号是否与电路的输入有关分为 Meal ...

  7. 【FPGA篇章四】FPGA状态机:三段式以及书写方法

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 状态机是fpga设计中极其重要的一种技巧,状态机通过不同的状态迁移来完成特定的逻辑操作,掌握状态机的写法可以使fpga的开发事半功倍. 状态 ...

  8. 对Verilog 初学者比较有用的整理(转自它处)

    *作者: Ian11122840    时间: 2010-9-27 09:04                                                              ...

  9. 有限状态机FSM(自动售报机Verilog实现)

    有限状态机FSM(自动售报机Verilog实现) FSM 状态机就是一种能够描述具有逻辑顺序和时序顺序事件的方法. 状态机有两大类:Mealy型和Moore型. Moore型状态机的输出只与当前状态有 ...

随机推荐

  1. SerializableMaplist传递数据

    package com.xjx.data; import java.io.Serializable; import java.util.List; import java.util.Map; /** ...

  2. .net Remoting 的工作原理是什么?

    webservice和.net remoting都是用来通信的框架,它们最大的优点是可以像调用本地对象一样调用远程对象 区别:1.webservice是用的应用层协议http封装的,所以它可以被很多其 ...

  3. js中的callback(阻塞同步或异步时使用)

    1.回调就是一个函数的调用过程,函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b, 那么这个过程就叫回调 eg. function a(callback){ alert('paren ...

  4. DBA

    一个公司的数据库系统也是由DBA 来进行管理的,它们的主要工作如下: l 安装和配置数据库,创建数据库以及帐户:l 监视数据库系统,保证数据库不宕机:l 收集系统统计和性能信息以便进行调整:l 发现性 ...

  5. iframe 适用高度

    contentWindow 兼容各个浏览器,可取得子窗口的 window 对象. contentDocument Firefox 支持,> ie8 的ie支持.可取得子窗口的 document ...

  6. WebLogic启动时报错

    java.lang.ClassCastException: com.octetstring.vde.backend.BackendRoot cannot be cast to com.octetstr ...

  7. ubuntu - sudo in php exec

    最近写防火墙的WEB版,需要在PHP中调用linux系统命令,但是防火墙有关的执行都需要管理员权限才能执行. 在ubuntu下,Apache2的运行账户默认是www-data,默认是不能通过sudo来 ...

  8. 【存储器相关】RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器区别

    常见存储器概念:RAM.SRAM.SDRAM.ROM.EPROM.EEPROM.Flash存储器可以分为很多种类,其中根据掉电数据是否丢失可以分为RAM(随机存取存储器)和ROM(只读存储器),其中R ...

  9. C#操作mongodb数据库

    1.下载驱动: 如下图:选择c#解决方案,右键,点击 “管理NuGet程序包(N)...” 在弹出的对话框中,输入MongoDB.Driver,进行搜索,然后选择安装. 2.引用命名空间: using ...

  10. HDU3367+并查集应用

    题意:找到一个这样的图,在这个图中,最多有一个环. 使得所有的边的和最大. 贪心+并查集 首先把边排序,然后开始分类讨论. 对于边ab(含有两个端点ab) 如果a,b是属于两个不同的集合 a b 是两 ...