17.08.2013 Views

下载 - Xilinx

下载 - Xilinx

下载 - Xilinx

SHOW MORE
SHOW LESS

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 状态机(右))的算法状态图

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!