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. jQuery EasyUI之DataGrid使用示例

    jQuery EasyUI是一个轻量级的Web前端开发框架,提供了很多的现成组件帮助程序员减轻前端代码开发量,之前有个项目中就用到了其中的DataGrid. jQuery EasyUI框架的官方主页: ...

  2. JS 日期格式转换

    //Json 数据年月日 返回 直接传入参数 如/Date(1379433600000)/ function GetDate(date) { if (date == null) return null ...

  3. css3的3D翻牌效果

    利用hover控制动画,一个从翻面向正面翻,一个从正面向反面翻. 利用:backface-visibility: hidden;控制反面的元素不显示. 不支持的浏览器直接切换层级换图. <!DO ...

  4. Python解析生成XML-ElementTree VS minidom

    OS:Windows 7 关键字:Python3.4,XML,ElementTree,minidom 本文介绍用Python解析生成以下XML: <Persons> <Person& ...

  5. 关于php程序员 解决问题的能力

    转载于 :http://www.tuicool.com/articles/qeUfEf 这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高.解决问题 ...

  6. Hive(转)

    Hive分区表 在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作.有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念.分区表指的是在创建表时指 ...

  7. 导入NGUI插件

    在Unity编辑器顶部菜单栏中的Assets菜单中选择Import Package,然后选择Custom Package(自定义资源包),弹出资源路径窗口,在其中找到NGUI资源包所在的位置,单击”打 ...

  8. Python Geospatial Development reading note(1)

    chapter 1, Summary: In this chapter, we briefly introduced the Python programming language and the m ...

  9. ExtJS4加载FormPanel数据的几种方式

    我们做web应用最多的就是处理表单,extjs为我们提供了很多处理表单的功能,很多初学者疑惑怎么加载表单数据,到底能用什么方式加载?本文中,我将我自己实验过的进行一下总结,自己备忘,也希望能帮助到其他 ...

  10. UI表单

    Monk.UI表单美化插件诞生记!   阅读目录 背景 预览效果 表单组件 普通文本框 多行文本框 复选框 切换滑块 单选框 下拉选择框 数字输入框 时间选择 文件选择 显示文本 按钮 开源地址 背景 ...