FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-技术文章/快讯-技术分享-正文

FPGA中的有限状态机(FSM)设计:三段式与二段式编码风格对比

二牛学FPGA二牛学FPGA
技术分享
5小时前
0
0
5

有限状态机(Finite State Machine, FSM)是数字逻辑设计的核心模式,用于描述具有有限个状态并按特定条件进行状态转移的系统。在FPGA设计中,FSM的编码风格直接影响其可读性、可维护性、时序性能以及综合后电路的可靠性。本文将深入对比业界主流的三段式与二段式FSM编码风格,提供从快速上手到深入原理的完整设计指南。

Quick Start

    [object Object]

前置条件与环境

项目推荐值/说明替代方案/注意点
目标器件/板卡Xilinx Artix-7系列(如XC7A35T)/ Intel Cyclone IV系列任何支持Verilog-2001/VHDL的FPGA,需注意资源差异。
EDA工具版本Vivado 2020.1 或 Quartus Prime 20.1其他版本需注意语法和综合引擎的细微差别。
仿真工具ModelSim SE/DE 或 Vivado/Quartus自带的仿真器VCS, IES等,需确保支持SystemVerilog以使用断言。
设计语言Verilog (IEEE Std 1364-2001) 或 VHDL (IEEE Std 1076-2002)SystemVerilog (IEEE Std 1800-2012) 可提供更丰富的特性。
时钟与复位全局时钟网络,低电平有效的异步复位(或同步复位)复位策略需与项目整体设计保持一致。
关键约束文件 (.xdc/.sdc)必须包含主时钟、复位(如为异步)的时序约束。对于高速设计,需额外约束输入输出延迟。
验证依赖Testbench需能模拟所有状态转移条件和非法状态。可使用UVM/OSVVM等验证方法学进行更系统验证。
调试工具Vivado ILA / Quartus SignalTap II用于上板后实时抓取状态寄存器与关键信号波形。

目标与验收标准

完成本设计指南后,您将能够:

    [object Object]

实施步骤

阶段一:工程结构与状态定义

首先定义状态名称和编码方式。推荐使用参数(parameter)或枚举(enum,SystemVerilog)来增强可读性。

// 状态定义示例:简单的序列检测器(检测“1011”)
parameter S_IDLE = 4‘b0001; // One-hot编码示例
parameter S_GOT1 = 4’b0010;
parameter S_GOT10 = 4‘b0100;
parameter S_GOT101 = 4’b1000;
// 或者使用二进制编码:parameter S_IDLE = 2‘d0; ...

reg [3:0] current_state, next_state; // 状态寄存器

常见坑与排查:

    [object Object]

阶段二:三段式FSM编码实现

这是最推荐的结构,清晰地将时序、组合逻辑分离。

// 第一段:状态寄存器(时序逻辑,同步复位示例)
always @(posedge clk) begin
    if (!rst_n) begin
        current_state <= S_IDLE;
    end else begin
        current_state <= next_state;
    end
end

// 第二段:次态逻辑(组合逻辑)
always @(*) begin
    next_state = current_state; // 默认保持当前状态,避免锁存器
    case (current_state)
        S_IDLE: if (data_in == 1‘b1) next_state = S_GOT1;
        S_GOT1: if (data_in == 1’b0) next_state = S_GOT10;
                else next_state = S_GOT1; // 注意自环条件
        S_GOT10: if (data_in == 1‘b1) next_state = S_GOT101;
                 else next_state = S_IDLE;
        S_GOT101: if (data_in == 1’b1) next_state = S_IDLE; // 检测到完整序列
                 else next_state = S_GOT10;
        default: next_state = S_IDLE; // 关键!处理非法状态,安全恢复
    endcase
end

// 第三段:输出逻辑(本例为Moore型,输出仅与状态有关,用时序逻辑输出更佳)
always @(posedge clk) begin
    if (!rst_n) begin
        seq_detected <= 1‘b0;
    end else begin
        case (current_state) // 注意这里是current_state
            S_GOT101: seq_detected <= (data_in == 1’b1); // 在S_GOT101状态下,如果输入为1则输出1
            default: seq_detected <= 1‘b0;
        endcase
    end
end

常见坑与排查:

    [object Object]

阶段三:二段式FSM编码实现与对比

二段式将状态寄存器和次态逻辑合并为一段时序逻辑,输出逻辑为另一段(组合或时序)。

// 二段式示例:第一段(状态寄存器+次态逻辑)
always @(posedge clk) begin
    if (!rst_n) begin
        current_state <= S_IDLE;
    end else begin
        case (current_state) // 根据当前状态和输入,决定下一个时钟沿的状态
            S_IDLE: if (data_in == 1‘b1) current_state <= S_GOT1;
            S_GOT1: if (data_in == 1’b0) current_state <= S_GOT10;
                    else current_state <= S_GOT1;
            // ... 其他状态转移
            default: current_state <= S_IDLE;
        endcase
    end
end

// 第二段:输出逻辑(组合逻辑)
always @(*) begin
    seq_detected = 1‘b0; // 默认值
    if (current_state == S_GOT101 && data_in == 1’b1) // Mealy型输出
        seq_detected = 1‘b1;
end

对比与选择:

    [object Object]

原理与设计说明

FSM设计的核心矛盾在于性能(速度)、面积(资源)与可靠性之间的权衡。不同的编码风格和实现方式直接影响这些指标。

    [object Object]

验证与结果

以一个4状态One-hot编码的三段式Moore型序列检测器为例,在Xilinx Artix-7 XC7A35T-2FGG484I器件上,使用Vivado 2020.1进行综合与实现。

指标三段式 (One-hot)二段式 (Binary)测量条件/说明
查找表 (LUT)54二段式因逻辑合并,LUT略少。
触发器 (FF)5 (4状态+1输出)3 (2状态+1输出?)One-hot多用FF,Binary节省FF。
最大频率 (Fmax)> 450 MHz> 350 MHz约束时钟为100MHz,看slack。One-hot因逻辑简单,余量更大。
功耗 (静态)~0.05W~0.05W此类小设计功耗差异可忽略。
关键路径次态逻辑 (LUT1级)状态转移逻辑 (LUT2级)三段式路径更短且规整。
仿真覆盖率状态覆盖100%,转移覆盖100%同左需完备的Testbench激励。

波形验收特征(在仿真中检查):1) 复位后,current_state正确进入S_IDLE。2) 输入特定序列“1011”后,状态按S_IDLE -> S_GOT1 -> S_GOT10 -> S_GOT101顺序转移。3) 仅在最后一个时钟周期,当状态为S_GOT101且输入为1时,输出seq_detected拉高一个周期。4) 输入非法序列,状态能正确跳转或返回IDLE。5) 输出信号无毛刺(如果寄存器化)。

故障排查

    [object Object]

扩展与下一步

    [object Object]
标签:
本文原创,作者:二牛学FPGA,其版权均为FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训所有。
如需转载,请注明出处:https://z.shaonianxue.cn/31358.html
二牛学FPGA

二牛学FPGA

初级工程师
这家伙真懒,几个字都不愿写!
25215.60W3.74W3.63W
分享:
成电国芯FPGA赛事课即将上线
FPGA有限状态机(FSM)设计实践指南:三段式与二段式编码风格对比与实现
FPGA有限状态机(FSM)设计实践指南:三段式与二段式编码风格对比与实现上一篇
2026年异构计算趋势:FPGA与GPU在数据中心加速任务中的协同调度下一篇
2026年异构计算趋势:FPGA与GPU在数据中心加速任务中的协同调度
相关文章
总数:227
锁定高薪职业 FPGA工程师岗位开启等你加入

锁定高薪职业 FPGA工程师岗位开启等你加入

——FPGA企业高薪订单班12月25日重庆启航🚀加速腾飞,FP…
技术分享
2年前
0
0
453
0
FPGA的优势,很强大

FPGA的优势,很强大

与CPU、GPU、ASIC相比,FPGA主要存在如下四个方面的优势:并行…
技术分享
3年前
7
0
911
1
全国大学生电子设计竞赛备战指南(超走心经验版)

全国大学生电子设计竞赛备战指南(超走心经验版)

[写在前面]作为一个经历过四天三夜极限备赛的老学长,想用最接地气的方式和…
技术分享
1年前
0
0
462
1
评论表单游客 您好,欢迎参与讨论。
加载中…
评论列表
总数:0
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
没有相关内容