FPGA培训资料-高级状态机设计

---
title: "FPGA培训资料-高级状态机设计"
source: "/日常学习资料/FPGA培训资料/FPGA培训_2012_07/4.3FSM.pdf"
original_path: "/日常学习资料/FPGA培训资料/FPGA培训_2012_07/4.3FSM.pdf"
author: "FPGA培训资料"
date: "2012-07"
size: "528 KB"
pages: 67
status: done
method: PDF文本提取
---

核心内容

Altera(现Intel)FPGA培训课程中关于有限状态机(FSM)设计的专题讲座,涵盖Moore/Mealy状态机、同步问题、传统与ASM设计方法,以及UART、RISC控制器等实例。

状态机概述

基本定义

  • 有限状态机(FSM):时序电路中只能存在有限个状态,每个状态和输出都是确定的
  • 三要素:状态变量(划分逻辑顺序)、输入(进入状态的条件)、输出(特定事件)
  • 核心作用:控制事件发生顺序、调整数据通路时序、实现通讯握手协议等

分类方式

  • 按逻辑形式:Moore状态机(输出仅依赖当前状态)、Mealy状态机(输出依赖当前状态和输入)
  • 按描述方式:2段式、3段式

Moore vs Mealy状态机对比

特性Moore状态机Mealy状态机
输出依赖仅当前状态当前状态 + 输入
输出同步性时钟同步(有优势)异步(随输入改变)
时序设计更有优势需同步化处理
结构状态寄存器 + 次态逻辑 + 输出逻辑状态寄存器 + 次态/输出联合逻辑

同步问题与亚稳态

问题根源

  • 状态机输入通常来自异步信号,与时钟不同步
  • 直接采样可能导致错误状态跳转

解决方案

  1. 输入同步:使用D触发器在时钟上升沿采样
  2. 二级同步器:两个级联D触发器,降低亚稳态概率
  3. 输出同步:Moore输出已同步;Mealy需用触发器同步化输出

状态机设计方法

传统设计方法

适用于简单状态机(如偶校验器):

  1. 状态转移图 → 状态转移表 → 真值表 → 逻辑方程 → 电路映射

算法状态机(ASM)设计方法

适用于复杂状态机:

  • ASM图三元素:状态框、条件输出、判断框、寄存器操作框
  • 3段式Verilog描述:
    • 第一个always块:状态更替(时序逻辑)
    • 第二个always块:次态逻辑(组合逻辑)
    • 第三个always块:输出逻辑(组合或时序)

设计实例

1. 偶校验器

  • 状态:EVEN(0)、ODD(1)
  • 输入:bit
  • 输出:parity
  • 状态方程:NS = PS XOR PI,OUT = PS

2. UART发射机

  • 状态:idle → waiting → sending
  • 关键控制信号:Byte_ready、Load_XMT_shftreg、T_byte、bit_count、shift、clear
  • 使用ASM图清晰表达控制流程

3. UART接收机

  • 状态:idle → starting → receiving
  • 采样计数器(Sample_counter)用于多采样抗干扰
  • 错误检测:Error1(主机未准备好)、Error2(终止位丢失)

4. 简单RISC控制器

  • 指令集:NOP、ADD、SUB、AND
  • 控制单元 + 数据通道单元分离架构
  • 状态编码:S_idle、S_fet1、S_fet2、S_dec等

5. SPI发射机控制器

  • 状态机驱动SDO、CS_n、SCLK时序
  • 支持8位指令+8位数据扩展

状态编码方式

编码方式特点
二进制编码最省触发器,编码解码逻辑复杂
格雷编码相邻状态仅1位变化,减少glitch
独热码每个状态一个触发器,比较快但资源多
输出状态编码部分状态复用输出位

推荐:将初始状态(如Idle)编码为0,利用FPGA全局reset正确初始化

关键设计原则

  1. 安全性:避免无效状态导致电路死锁
  2. 稳定性:状态转移清晰,无毛刺输出
  3. 速度:满足设计时钟要求
  4. 面积:合理选择编码方式
  5. 可维护性:设计清晰易懂,便于后续修改

关联笔记