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. iOS之RunTime浅谈

    首先说一下什么是runtime:RunTime简称运行时.就是系统在运行的时候的一些机制,其中最主要的是消息机制.对于C语言,函数的调用 在编译的时候会决定调用哪个函数( C语言的函数调用请看这里 ) ...

  2. PHP初学留神(四)

    这周去听了Google的演讲,从Idea到Code的商业宣传.不过因为是头一次听英文演讲,心里还是很舒服.这周主要做的是Bootstrap前端美化,这个框架也比较好玩.在php上面花的时间相对少了,也 ...

  3. 使用pdb调试python

    python pdb调试 python -m pdb myscript.py #注意这会重启myscript.py,这样启动的话,代码每一行都是一个节点 也可以在程序中这么设置断点: import p ...

  4. hdu 3336 Count the string KMP+DP优化

    Count the string Problem Description It is well known that AekdyCoin is good at string problems as w ...

  5. NGUI系列教程四(自定义Atlas,Font)

    今天我们来看一下怎么自定义NGUIAtlas,制作属于自己风格的UI.第一部分:自定义 Atlas1 . 首先我们要准备一些图标素材,也就是我们的UI素材,将其导入到unity工程中.2. 全选我们需 ...

  6. 关于如何学好游戏3D引擎编程的一些经验[转]

    此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰 ——阿哲VS自己 QQ79134054多希望大家一起交流与沟通 这篇文章是 ...

  7. python 读写文本文件

    本人最近新学python ,用到文本文件的读取,经过一番研究,从网上查找资料,经过测试,总结了一下读取文本文件的方法. 1.在读取文本文件的时无非有两种方法: a.f=open('filename', ...

  8. centos 卸载vsftpd方法

    centos 卸载vsftpd方法 在服务器上安装了vsftpd,配置出错需要卸载vsftpd.卸载vsftpd的命令如下: 1 [root@localhost ~]# rpm -aq vsftpd2 ...

  9. ZOJ 3609 Modular Inverse

    点我看题目 题意 : 这个题是求逆元的,怎么说呢,题目看着很别扭....就是给你a和m,让你求一个最小的x满足a-1≡x (mod m).或者ax≡1 (mod m).通俗点说呢,就是找一个最小的x, ...

  10. 李洪强漫谈iOS开发[C语言-020]-scanf的本质

    scanf是有返回值和参数的