状态机:数字逻辑设计的核心模式
在复杂的FPGA世界里,状态机(FSM)就像是控制逻辑的“大脑”和“指挥官”。它能把一个复杂的任务,拆解成几个清晰的步骤(状态),然后根据不同的输入,灵活地在这些步骤间切换,并指挥输出。学会设计高效、可靠的状态机,是你从FPGA新手成长为高手的关键一步。
一个好的状态机,代码读起来清爽,改起来也方便。更重要的是,它能帮你优化时序,减少那些让人头疼的竞争冒险和毛刺,让你的系统跑得既快又稳。

状态机的基本类型:Moore型与Mealy型
状态机主要有两位“明星成员”:Moore型和Mealy型。
- Moore型:它的输出只认当前的状态。时钟一拍下来,输出就稳稳当当地确定了。这种模型时序简单,分析起来不费劲,是求稳时的首选。
- Mealy型:它的输出既要看当前状态,也要看输入信号。所以它对输入的变化反应更快,像个急性子。但这也带来了一个小麻烦:如果输入信号变化不稳,输出就可能产生毛刺,时序分析起来会稍微复杂一些。
在实际项目中,我们常常以可靠的Moore型为“主心骨”,在局部需要快速响应时,巧妙结合输入信号(类似Mealy的思路),形成一种混合风格。理解它俩的区别,你才能为你的设计选出最合适的“模特”。
高效状态机的三段式编码风格
在Verilog里,想让你的状态机代码清晰又专业,强烈推荐“三段式”写法。这是业界公认的“最佳姿势”,它把状态机的逻辑整整齐齐地分到三个独立的always块里:
- 第一段(状态寄存器):只管“记状态”。用同步时序逻辑和非阻塞赋值,老老实实根据时钟来更新当前状态。



