下载 - Xilinx
下载 - Xilinx
下载 - Xilinx
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
手把手课堂:FPGA 101<br />
状态机需要更少的状态。Mealy 状态机的不足之处就是在与另<br />
一个状态机进行通信时,如果输出出乎意料地严重依赖于其它<br />
事件的序列或时序,就可能会发生紊乱情况。<br />
当然,并非只能使用单纯的 Moore 状态机或 Mealy 状态机,<br />
也可以将这两种状态机混合使用,从而更有效地实现所需的函<br />
数。比如说,用于接收 RS232 串行数据的状态机就可以是混<br />
合机。<br />
实现状态机<br />
使用 VHDL 这样的高级语言,可以轻松地直接从状态图<br />
实现状态机。VHDL 支持多种枚举类型,方便您定义实际的状<br />
态名称。举例如下:<br />
IDLE<br />
TYPE state IS (idle, led_on, led_off) ;<br />
上面的类型定义对应的是图 1 中所示的状态图,即用于在<br />
按下按钮时切换发光二极管开 / 关的状态机。<br />
实现状态机有许多种方法,可分为两类基本方法。第一类<br />
基本方法就是一次性将所有内容集成到单个进程中。第二类基<br />
本方法是双进程法,将组合逻辑和顺序逻辑分开。<br />
一般来说,大多数工程师都倾向于实现单进程状态机。与<br />
传统上讲授的双进程法相比,这种方法具有以下优势:<br />
• 可以避免组合过程中信号覆盖不完全造成的闭锁风险。<br />
• 状态机的输出与时钟保持同步。<br />
Toggle<br />
• 通常比双进程实现方案更容易调试。<br />
0<br />
Start<br />
LED_OFF LED_ON<br />
0 Toggle 1<br />
Toggle<br />
0<br />
48 赛灵思中国通讯 46 期 2012 年冬季刊<br />
IDLE<br />
Start<br />
1<br />
LED_OFF Toggle<br />
1<br />
LED_ON<br />
图 1 - 用于开 / 关 LED 的 Moore 状态机(左)和 Mealy 状态机(右)的状态图<br />
Op = 0<br />
1 0<br />
Start<br />
Op = 1<br />
1 0<br />
Toggle<br />
Op = 0<br />
Idle<br />
Led_on<br />
Led_off<br />
1 0<br />
Toggle<br />
1 0<br />
Start<br />
Op = 1<br />
Idle<br />
Led_on<br />
1 0<br />
Toggle<br />
Op = 0<br />
Led_off<br />
1 0<br />
Toggle<br />
图 2 - 用于图 1 所示的状态机(Moore 状态机(左),<br />
Mealy 状态机(右))的算法状态图