You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Verilog FSM代码解析及4位状态编码修改问题咨询

FSM状态编码修改与逻辑说明

一、3位转4位状态编码修改方案

  • 原状态定义位置定位:列出的6个状态定义,统一位于FSM模块开头的localparam/parameter参数声明段,和状态寄存器声明(reg [2:0] current_state, next_state)紧邻。
  • 最小改动修改方法:无需调整原有状态跳转判断逻辑,仅需两步即可完成4位扩展:
    1. 将状态寄存器位宽从3位改为4位,对应代码修改为:
      // 原代码:reg [2:0] current_state, next_state;
      reg [3:0] current_state, next_state;
      
    2. 将所有状态参数的编码从3位扩展为4位,直接在原3位编码最高位补0即可,对应参数修改参考:
      localparam RESET          = 4'b0000; // 原3'b000
      localparam WAIT_PWD       = 4'b0010; // 原3'b010,Wait for password
      localparam COMPARE        = 4'b0100; // 原3'b100
      localparam DO_OPERATION   = 4'b0101; // 原3'b101
      localparam LOGIN_SUCCESS  = 4'b0110; // 原3'b110,Log in successful
      localparam LOGIN_FAILED   = 4'b0111; // 原3'b111
      

注意:修改完成后全局搜索代码中所有硬编码的状态判断常量,同步将位宽改为4位,避免综合时出现位宽不匹配警告。如果追求更好的FSM时序表现,也可以将4位编码改为FPGA适配性更好的独热码,对应编码为4'b0001、4'b0010、4'b0100、4'b1000,但该方案需要同步调整次态跳转逻辑的判断条件。

二、FSM模块功能与流转逻辑说明

该FSM是典型的密码验证登录控制状态机,采用通用的两段/三段式FSM结构编写,分为状态寄存器时序逻辑、次态组合判断逻辑、输出逻辑三个代码段,各状态功能与流转规则如下:

  • Reset状态:全局复位状态,系统上电/复位信号触发时进入该状态,所有输出寄存器、计数器清零复位,复位释放后一个时钟周期自动跳转到Wait for password状态。
  • Wait for password状态:密码输入等待状态,该状态下持续扫描输入接口采集用户输入的密码值,当检测到用户按下确认键、密码输入完成时,跳转到Compare状态。
  • Compare状态:密码比对状态,将用户输入的密码值和预存的正确密码做逐位比对,同时累计密码输入错误次数:比对一致直接跳转到Log in successful状态;比对不一致且错误次数未达锁定阈值时,清空当前输入缓存跳回Wait for password状态;比对不一致且错误次数达到锁定阈值时,跳转到Login failed状态。
  • Log in successful状态:登录成功状态,该状态下点亮登录成功指示灯,输出系统解锁信号,等待1~2个时钟周期完成信号同步后,自动跳转到Do operation状态。
  • Do operation状态:功能操作响应状态,该状态下解锁用户功能操作权限,响应各类功能操作请求,当检测到用户主动退出登录、或者操作超时信号时,清空登录状态标记跳回Wait for password状态,等待下一次密码输入。
  • Login failed状态:登录失败锁定状态,该状态下点亮告警指示灯,锁定密码输入接口,启动锁定计时器,当计时器达到设定的锁定时长后,清空错误计数器跳回Wait for password状态,重新允许用户输入密码。

内容的提问来源于stack exchange,提问作者adfty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.04 16:15:42