【数字逻辑与EDA】有限状态机的设计与序列检测器的设计

目录:

  • 前言
  • 一、有限状态机
  • 二、分类
      • 1、摩尔型(Moore)
      • 2、米里型(Mealy)
  • 三、描述方式
      • 1、三过程(建议用此,结构清晰)
      • 2、双过程(CS+NS,OL)
      • 3、双过程(CS,NS+OL)
      • 4、单过程
  • 四、以状态机实现模5计数器
  • 五、序列检测器
      • 1、思路
      • 2、序列检测'101'
          • (1)、序列转移图
          • (2)、编码
      • 3、状态转移图的练习
          • 1、序列检测'111'
          • 2、序列检测'1001'
  • ❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭!

前言

✨你好啊,我是“ 怪& ”,是一名在校大学生哦。
主页链接:怪&的个人博客主页
☀️博文主更方向为:课程学习知识、作业题解、期末备考。随着专业的深入会越来越广哦…一起期待。
❤️一个“不想让我曾没有做好的也成为你的遗憾”的博主。
很高兴与你相遇,一起加油!

一、有限状态机

  • 其是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
  • 其是时序电路设计中经常采用的一种方式,尤其适用于设计数字系统的控制模块。用Verilog的case、if-else等语句能很好地描述基于状态机的设计。
  • 有限状态自动机(FSM “finite state machine” 或者FSA “finite state automaton” )是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型。
  • 有限状态自动机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。有限状态自动机可以表示为一个有向图。有限状态自动机是自动机理论的研究对象。

二、分类

1、摩尔型(Moore)

  • 只与当前状态有关
    【数字逻辑与EDA】有限状态机的设计与序列检测器的设计_第1张图片

2、米里型(Mealy)

  • 当前状态有关
  • 输入也有关
    【数字逻辑与EDA】有限状态机的设计与序列检测器的设计_第2张图片

三、描述方式

1、三过程(建议用此,结构清晰)

三个always语句分别描述

  • 现态(CS)
  • 次态(NS)
  • 输出逻辑(OL)

2、双过程(CS+NS,OL)

两个always语句分别描述

  • 现态(CS)+ 次态(NS)
  • 输出逻辑(OL)

3、双过程(CS,NS+OL)

两个always语句分别描述

  • 现态(CS)
  • 次态(NS)+输出逻辑(OL)

4、单过程

一个always描述

  • 现态(CS)、次态(NS)、输出逻辑(OL)

四、以状态机实现模5计数器

module count5(clk,clr,out,count);
input clk,clr;
output count;
out reg[2:0] out;
parameter  s0=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100; //定义变量 

always @(posege clk)
	begin
		if(clr) out=so;		//异步复位
		else
			case(out)		//跳转 
				s0:out=s1;	//cs:ns    现态:次态 
				s1:out=s2;
				s2:out=s3;
				s3:out=s4;
				s4:out=s0;
			default: out=s0;  //防止意外 
			endcase
	end

always @(out)	//产生输出逻辑 
	begin
		if(out=3'b100) cout=1;
		else cout=0;
	end
endmodule

五、序列检测器

1、思路

(1)、首先画出状态转移图
(2)、根据状态转移图

  • clk -> CS:NS
  • 根据输入判断NS
  • 判断输出

(3)、编码

2、序列检测’101’

(1)、序列转移图
  • 绿色的 S0,S1,S2,S3为命名的变量
  • 箭头上的 0/0, /上边的 0表示的输入值,/下边的 0表示输出值。
  • 箭头表示跳转由于CS(现态)-> NS(次态)
    【数字逻辑与EDA】有限状态机的设计与序列检测器的设计_第3张图片
(2)、编码
module tese_101(clk,clr,x,z);
input x,clk,clr;
output reg z;
parameter S0=2'b00, S1=2'b01,S2=2'b11,S3=2'b10; //<4的状态数量建议以格雷码编码
reg[1:0] CS,NS;

always@(posedge clk or posedge clr)	//定义现态(CS) 
	begin
		if(clr) CS=S0;	//异步复位 
		else CS=NS;
	end

always@(CS)			//定义次态 (NS) 
	begin
		case(CS)
			S0:if(x) NS=S1;else NS=S0;
			S1:if(x) NS=S1;else NS=S2;
			S2:if(x) NS=S3;else NS=S0;
			S3:if(x) NS=S1;else NS=S2;
		default: NS=S0; //防止意外 
		endcase
	end
	 
always@(CS)		//产生输出逻辑 
	begin
		if(CS=S3)	z=1;
		else z=0;
	end
endmodule

3、状态转移图的练习

将状态转移图画准确,Code部分将迎刃而解
接下来,咱们来练习一下状态转移图的画法把:

1、序列检测’111’

【数字逻辑与EDA】有限状态机的设计与序列检测器的设计_第4张图片

2、序列检测’1001’

【数字逻辑与EDA】有限状态机的设计与序列检测器的设计_第5张图片

❤️❤️❤️忙碌的敲代码也不要忘了浪漫鸭!

今日份运动与家长视频 Date:2022.4.26 ExerciseAndVideo_Time:22:20 Code_Time: 23:58

【数字逻辑与EDA】有限状态机的设计与序列检测器的设计_第6张图片

你可能感兴趣的:(程序员的必修之课,EDA,有限状态机,笔记)