Spartan 6 FPGA与FT601 USB3.0 FIFO接口FSM状态更新异常排查
Spartan 6 XC6SLX FPGA 对接FT601 USB3.0 FIFO FSM状态更新异常排查与解决
核心问题定位
在FT601多通道协议的DATA TRANSFER阶段,仅当FT6_RXF_N=1(缓冲区满)时能正常切换到BUS TURN(type2)状态;但本地无数据(DataAvailable=0)时,RequestData已拉低(示波器可观测),但NextState未更新为STATE_BUS_TURN_AROUND_TWO,FT6_WR_N也未拉高。设计采用FT6_Clk上升沿计算NextState,下降沿更新CurrentState的双沿触发结构。
可能原因与排查步骤
1. 异步信号未同步导致采样错误
如果DataAvailable来自FPGA内部其他时钟域,未进行同步处理会导致亚稳态,使得FT6_Clk上升沿采样时信号不稳定,无法触发状态转移条件。
- 排查:检查
DataAvailable的来源时钟域,对比FT6_Clk的时钟频率与相位关系。 - 解决:对
DataAvailable做两级寄存器同步到FT6_Clk域:reg DataAvailable_sync1, DataAvailable_sync2; always @(posedge FT6_Clk or negedge rst_n) begin if(!rst_n) begin DataAvailable_sync1 <= 1'b0; DataAvailable_sync2 <= 1'b0; end else begin DataAvailable_sync1 <= DataAvailable; DataAvailable_sync2 <= DataAvailable_sync1; end end // 状态机中使用同步后的DataAvailable_sync2替代原信号
2. 状态转移条件逻辑漏洞
检查STATE_DATA_OUTPUT下的转移逻辑,是否存在优先级覆盖或逻辑表达式错误:
- 常见问题:
- 用
&&替代||,导致两个触发条件需同时满足才会转移; DataAvailable的判断被FT6_RXF_N的条件覆盖(比如用if-else if结构时,FT6_RXF_N的优先级过高,而DataAvailable=0时FT6_RXF_N仍为0,导致分支不执行)。
- 用
- 排查:单独提取状态转移逻辑,用仿真验证
DataAvailable=0时NextState的赋值结果。 - 解决:合并触发条件,确保两种场景都能触发状态转移:
STATE_DATA_OUTPUT: begin if(FT6_RXF_N == 1'b1 || DataAvailable_sync2 == 1'b0) begin NextState <= STATE_BUS_TURN_AROUND_TWO; RequestData <= 1'b0; end else begin // 持续数据传输逻辑 NextState <= STATE_DATA_OUTPUT; RequestData <= 1'b1; end end
3. 双沿触发的时序约束问题
设计采用上升沿计算NextState、下降沿更新CurrentState的结构,若NextState的组合逻辑延迟过大,会导致FT6_Clk下降沿时NextState未稳定,CurrentState无法正确更新。
- 排查:使用Xilinx ISE的Timing Analyzer分析
DataAvailable_sync2到NextState寄存器的建立/保持时间是否违例。 - 解决:
- 给FT6_Clk添加明确的时序约束:
create_clock -name FT6_Clk -period 10 [get_ports FT6_Clk] - 优化组合逻辑路径,比如将复杂判断拆分为多级寄存器或调整逻辑顺序。
- 给FT6_Clk添加明确的时序约束:
4. FT6_WR_N控制逻辑与状态机的联动问题
若FT6_WR_N直接由CurrentState控制,当CurrentState未更新时,FT6_WR_N自然不会变化。需确认:
FT6_WR_N的赋值是否与状态转移同步;- 是否存在隐含条件(比如最后一组数据的传输完成标志未被正确识别)导致状态转移被阻塞。
验证建议
- 仿真验证:搭建Testbench,单独模拟
DataAvailable=0的场景,观察NextState、CurrentState及FT6_WR_N的波形变化,定位逻辑错误点。 - 硬件调试:在FPGA中添加ILA逻辑分析仪,抓取
FT6_Clk、CurrentState、NextState、DataAvailable_sync2、FT6_RXF_N的实时波形,对比触发条件与状态转移的时序关系。
内容的提问来源于stack exchange,提问作者user202474
相关产品推荐
相关产品推荐

