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. oracle创建job方法

    oracle创建job方法  alter system enable restricted session;--创建表create table G_TEST ( ID     NUMBER(12), ...

  2. margin系列之百分比

    本系列摘自  px; height: 600px; } #demo p{ margin: 10% 5%; } HTML: <div id="demo"> <p&g ...

  3. 字符编码笔记:ASCII,Unicode和UTF-8【转载】

    作者: 阮一峰 日期: 2007年10月28日 今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步 ...

  4. 【dynamic】简化反射简单尝试

    最近在自己瞎整设计自己的数据访问层(纯属深入了解C#用),遇到了反射.网传反射性能很差,可是我们项目中也有功能用到了反射,总体来说还不错(小项目).由于居安思危的感觉越发沉重,不得不去打破传统,去寻求 ...

  5. 在VS中手工创建一个最简单的WPF程序

    如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...

  6. Lucene基础(三)-- 中文分词及高亮显示

    Lucene分词器及高亮 分词器 在lucene中我们按照分词方式把文档进行索引,不同的分词器索引的效果不太一样,之前的例子使用的都是标准分词器,对于英文的效果很好,但是中文分词效果就不怎么样,他会按 ...

  7. iOS多工程依赖

    导入准备工作 1.建立一个Framework & Library->Cocoa Touch Static Library 取名A,并在A里新建一个类用来测试 2.建立一个demo工程B ...

  8. 魔兽争霸Ⅲ运行时不能初始化directX的错误解决

    运行魔兽争霸3不能初始化DirectX错误这样解决: 1:在运行中输入(win+r):dxdiag,查看显示栏,确定电脑已安装好directx 8.1以上,且下面的三个加速都已开启. 2:如果没有安装 ...

  9. Javascript 5种方法实现过滤删除前后所有空格

    第一种:循环检查替换 //供使用者调用 function trim(s){ return trimRight(trimLeft(s)); } //去掉左边的空白 function trimLeft(s ...

  10. poj 3373 Changing Digits (DFS + 记忆化剪枝+鸽巢原理思想)

    http://poj.org/problem?id=3373 Changing Digits Time Limit: 3000MS   Memory Limit: 65536K Total Submi ...