1、状态机的设计
状态机是一种设计思路,将一个事件分成多个完整的状态,每个状态通过输入和输出进入下一个状态,这就是状态机思维。
为什么要用状态机思维呢,因为这种思维可以清晰快速的将事情分成多个独立的小部分,将这些小部分分别编程,可以最大程度的节约资源和时间。很多复杂的东西,堆在一起没有头绪,但分成好多状态后就会发现,所谓的复杂,只不过是多个状态的叠加而已。
2、状态机的Verilog编程(以野火教程:FPGA Verilog开发实战指南 第23章状态机为例)
用Verilog构成状态机通常有五部分:
第一部分:定义输入输出端口(没啥好说的)
第二部分:将每个状态进行编码
状态少于20个,使用独热码比较合适。状态太多就改为格雷码。但如果是要用于高频系统的话,只能使用独热码。
第三部分:定义状态变量和其他变量
定义变量state来存储当前的状态,state的位数就是状态的个数。
有时候会将多个输入信号合成一个多位的变量,只是为了编程更简便而已。
第四部分:第一段状态机:
第一部分状态机用来描述根据输入进入下一个状态。通常使用case与if-else做一个状态选择。
第二段状态机的always模块个数是由输出数量决定的,两个输出就是两个always。每个always管一个变量。第二段状态机通常是描述根据当前状态和输入决定输出的过程