关于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) begin
		if(reset) cs <= s0;
		else cs <= ns;
	end
	always@* begin
		ns = 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;
		endcase
	end
	//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
	//end
	
	always@(*) begin
			 case(cs)
			 s0: qout <= 0;
			 s1: qout <= 0;
			 s2: qout <= 0;
			 s3: qout <= 1;
			 default: qout <= 0;
			 endcase
	end
endmodule

 仿真:

组合描述仿真波形

时序描述仿真波形

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

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Young__

谢谢打赏^~^

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值