关于Verilog FSM中Mealy型和Moore型状态机的时序区别

编程入门 行业动态 更新时间:2024-10-26 09:19:33

关于Verilog FSM中Mealy型和Moore型状态机的<a href=https://www.elefans.com/category/jswz/34/1768946.html style=时序区别"/>

关于Verilog FSM中Mealy型和Moore型状态机的时序区别

一、Moore型状态机和Mealy型状态机在定义上的区别

1:输出只和当前状态有关而与输入无关,则称为摩尔(Moore)状态机;

2:输出不仅和当前状态有关而且和输入有关,则称为米利(Mealy)状态机;

二、Moore型状态机和Mealy型状态机在定义上的区别

       以序列检测101为例(允许重叠检测)

  1. 摩尔型状态机需要s0、s1、s2、s3四种状态,每次检测到101序列,则跳转到s3输qout=1,注意“需要等到下一次的有效边沿来临才会有输出”
  2. 米利型状态机则需要s0、s1、s2三种状态,每次检测到101序列,在最后一个1输入的时候就可以输出qout=1,注意“无需等到下一次有效边沿来临就会输出”

     (这就是为什么mealy型状态机比moore型状态机少一个状态输出)

三、Moore型状态机三段式之第三段讨论。

       在网上看了很多作者的博客,发现,三段式状态机的第三段描述并不相同,有的使用时序描述,有的使用组合描述

       下面以101序列检测器(允许重叠检测)讨论区别。

       如图是Moore型状态机的状态转换图:

       第三段采用时序描述或组合描述代码:

module FSM(clk,reset,din,qout);input clk,reset,din;output reg qout;parameter s0 = 2'b00, s1 = 2'b01, s2 = 2'b11, s3 = 2'b10;reg [1:0] ns,cs;always@(posedge clk or posedge reset) beginif(reset) cs <= s0;else cs <= ns;endalways@* beginns = s0;case(cs)s0: ns = din?s1:s0;s1: ns = din?s1:s2;s2: ns = din?s3:s0;s3: ns = din?s1:s2;default: ns = s0;endcaseend//always@(posedge clk or posedge reset) begin//	if(reset) qout <= 0;//	else begin//		 case(cs)//		 s0: qout <= 0;//		 s1: qout <= 0;//		 s2: qout <= 0;//		 s3: qout <= 1;//		 default: qout <= 0;//		 endcase//		 end//endalways@(*) begincase(cs)s0: qout <= 0;s1: qout <= 0;s2: qout <= 0;s3: qout <= 1;default: qout <= 0;endcaseend
endmodule

 仿真:

组合描述仿真波形

时序描述仿真波形

        结论:可以看出,组合描述的输出不需要等一个时钟边沿。时序描述需要等一个时钟边沿。导致时序描述的输出无法达到重叠检测的功能。

更多推荐

关于Verilog FSM中Mealy型和Moore型状态机的时序区别

本文发布于:2024-03-08 00:58:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1719420.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:时序   区别   状态机   FSM   Verilog

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!