有限状态机FSM(自动售报机Verilog实现)
FSM
状态机就是一种能够描述具有逻辑顺序和时序顺序事件的方法。
状态机有两大类:Mealy型和Moore型。
Moore型状态机的输出只与当前状态有关,而Mealy型状态机的输出不仅取决于当前状态,还受到输入的直接控制,并且可能与状态无关。
当使用Verilog来描述一个简单状态机的设计时,应将状态寄存器的控制器的控制和状态机状态里的组合逻辑分开。
分离功能使得在逻辑部分的代码中可以使用阻塞赋值语句
状态更新逻辑包含状态寄存器,不能被外设读取。组合逻辑使用输入和当前状态值来对输出赋值,并改变状态机的下一状态。
同步时序电路的设计方法
逻辑抽象,得出电路的状态转换图或者状态转换表
状态化简
状态分配(状态编码:Binary,Gray,One-Hot)
Verilog根据最简状态转换图编程,检查设计的电路能否自启动
四个要素
当前输入
当前状态
下一状态
当前输出值
代码风格
一段式
当前状态、下一状态、当前输出值都写在一个always块中
二段式
当前状态、下一状态、当前输出值写在两个always块中
注意:这样三种组合方式,及有三种方式写这两个always块。
三段式
当前状态、下一状态、当前输出值分别写在各自的always块中,这样需要3个always块。
自动售报机Verilog实现
设计说明
设计一个简单的数字电路用于电子的报纸售卖机的投币器。
假设报纸的价格为15分。
投币器只能接受5分和1角的硬币。
必须提供适当的数目的零钱,投币器不找零。
合法的硬币组合包括1个5分的硬币和1个一角的硬币,3个5分的硬币,1个1角的硬币和1个5分的硬币。2个1角的硬币是合法的,但是投币器不找零。
电路说明
当投入硬币时,一个两位的信号c