状态机理论
AI summary
状态机理论包括状态机的基本概念、分类和设计思路,讨论了摩尔型和米利型状态机的特点及其电路模型。推荐使用二段式和三段式描述方法以提高代码清晰度和可维护性,避免一段式描述的缺点。状态机的编码方法和结构也被详细介绍,并提供了练习以巩固学习内容。
Last edited time
Sep 28, 2024 12:34 PM
Last edited by
Tags
State Machine Theory
Finite State Machine
Circuit Design
一:关于状态机
- 状态机概念
- 状态机本质
- 状态机设计思路
- 状态机三要素
- 状态机分类
- 状态机电路模型
- 状态机描述方式
- 状态机编码
- 状态机评判标准
- 状态机语法/写法
可以参考如何写好状态机_Verilog_CH06_FSM文档。
二:状态机电路模型
摩尔型状态机:Moore
只和当前状态有关,和输入条件无关。
米利型状态机:Mealy
不仅和当前状态有关,还和输入条件有关。
无论是摩尔还是米利型状态机,都有三种描述方法(一段式/二段式/三段式)。
一段式FSM电路模型:(避免写法)
- 一个always块完成电路功能;
- 输出会晚于状态一个时钟周期;
- 时序逻辑电路(闭节点:CN);
always @ (*) //开节点 always @ (posedge clk) //闭节点
一段式写法就是将状态的同步转移,状态输出和状态的输入条件都写在一个always块中。
缺点:一段式描述方法将状态转移判断的组合逻辑和状态寄存器转移的时序逻辑混写在同一个always 模块中,不符合将时序和组合逻辑分开描述的 Coding Style(代码风格),而且在描述当前状态时要考虑下个状态的输出,整个代码不清晰,不利于维护修改,并且不利于附加约束,不利于综合器和布局布线器对设计的优化。
另外,这种描述相对于两段式描述比较冗长。本例为了便于初学者掌握,选择了一个非常简单的米勒型状态机,不能很好的反应一段式比较冗长的缺点,但是如果状态机相对复杂些,一般来说,一段式代码长度会比两段式冗长大约 80%到 150%左右。
所以一段式 FSM 描述是不推荐的 FSM 描述方式,请读者一定要避免。
二段式FSM电路模型:(推荐写法)
- 两个always块完成电路功能;
- 第一个always块采用时序逻辑电路完成状态转移;第二个always块采用组合逻辑电路完成判断条件转移,描述转移规律和输出动作;
- 输出采用组合逻辑电路容易产生毛刺。
优点:为了使 FSM 描述清晰简介,易于维护,易于附加时序约束,使综合器和布局布线器更好的优化设计,推荐使用两段式 FSM 描述方法。
缺点:两段式 FSM 描述方法虽然有很多好处,但是它有一个明显的弱点就是其输出一般使用组合逻辑描述,而组合逻辑易产生毛刺等不稳定因素,并且在 FPGA/CPLD 等逻辑器件中过多的组合逻辑会影响实现的速率(这点与 ASIC 设计不同)。所以在上节我们特别提到了在两段式 FSM 描述方法中,如果时序允许插入一个额外的时钟节拍,则尽量在在后级电路对FSM 的组合逻辑输出用寄存器寄存一个节拍,则可以有效地消除毛刺。
三段式FSM电路模型:(最优推荐写法)
- 三个always块完成电路功能;
- 第一个always块采用时序逻辑电路完成状态转移;第二个always块采用组合逻辑电路完成判断条件转移,描述转移规律;第三个always块采用时序逻辑电路完成转移条件中的输出动作。
- 输出采用时序逻辑电路有效的避免毛刺的产生。
三:状态机描述方式
状态转移图:STG
同步复位/异步复位区分:
- 同步复位(
always @ (posedge clk)
)
- 异步复位(
always @ (posedge clk, negedge rst_n)
)
四:状态机编码
对状态名进行编码,基本会采用定参(推荐parameter)。
二进制码:00/01/10/11(比较常用,多数在简单设计中使用)。
独热码:0001/0010/0100/1000(多数在复杂性设计/顺序跳转设计中使用)。
格雷码:经常在CPLD中使用。
五:状态机结构
六:一段/二段/三段RTL视图
一段RTL视图:
二段RTL视图:
三段RTL视图:
七:练习
- 完成上课内容(FSM理论和电路模型)
- 完成二段和三段式FSM改写
Loading...