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. fedora 非root用户访问socket 没用权限

    在非root用户下执行基于Libpcap库编写的应用程序时不能正常运行,原因是由于libpcap库使用raw socket的套接字.而Raw Socket的使用需要root权限,否则raw socke ...

  2. SQL中子查询为聚合函数时的优化

    测试数据:create table test1 as select * from dba_objects where rownum<=10000;--10000条记录create table t ...

  3. 刷漆(Codechef October Challenge 2014:Remy paints the fence)

    [问题描述] Czy做完了所有的回答出了所有的询问,结果是,他因为脑力消耗过大而变得更虚了:).帮助Czy恢复身材的艰巨任务落到了你的肩上. 正巧,你的花园里有一个由N块排成一条直线的木板组成的栅栏, ...

  4. iOS8的一些控件的变更---备用

    UISearchDisplayController变更为UISearchController UIAlertView变更为UIAlertController 如果添加点击事件则需要使用UIAlertC ...

  5. Centos安装gnome主菜单编辑器无

    首选项---主菜单--   即是alacarte.. centos ===安装  alacarte.noarch 0:0.12.4-1.el6 即可.

  6. BZOJ 3993 [SDOI 2015] 星际战争 解题报告

    首先我们可以二分答案. 假设当前二分出来的答案是 $Ans$ ,那么我们考虑用网络流检验: 设武器为 $X$,第 $i$ 个武器的攻击力为 $B_i$: 设机器人为 $Y$,第 $i$ 个机器人的装甲 ...

  7. Ubuntu下将Sublime Text设置为默认编辑器

    转自将Sublime Text 2设置为默认编辑器 修改defaults.list 编辑/etc/gnome/default.list文件,将其中的所有gedit.desktop替换为sublime_ ...

  8. 0xc0000428 winload.exe无法验证其数字签名的解决方法

    只要把windows/system32/boot中的winload.exe复制到windows/system32中替换即可!! 只有启动画面会有变化,可以使用魔方等软件进行修复,恢复到之前的样子

  9. unity 导出 android安装包配置方案

    原地址:http://blog.csdn.net/u012085988/article/details/17393111 1.jdk本人安装的是win32版的(虽然系统是64位的.但听说装64位的导出 ...

  10. [jobdu]数组中的逆序对

    http://ac.jobdu.com/problem.php?pid=1348 数组中的逆序对也是个常见的题目,算法导论中也有一些描述,参考:http://www.cnblogs.com/wuyue ...