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

Xilinx FPGA中有限状态机(FSM)的正确复位方式探讨

FPGA设计中局部同步复位的计数器同步问题

我日常使用Xilinx FPGA开发板,设计里会尽量避免全局复位信号;必须使用时,仅给绝对必要的寄存器加同步复位——比如只把有限状态机(FSM)拉回IDLE状态,不复位关联的计数器、移位寄存器等。但这里存在一个问题:如果复位触发时计数器正在运行,FSM回到IDLE后计数器会保留旧值,等FSM再次进入计数状态时,计数器会从旧值(比如5)开始计数,破坏原本的设计逻辑。

举个例子,原本的设计逻辑是计数器计数到10后,FSM才切换到下一状态,代码如下:

always_ff @(posedge clk) begin
 case(state) 
   IDLE:
     state <= COUNT; 
   COUNT: begin
     counter <= counter + 1; 
     if(counter == 10 - 1) begin
       counter <= 0; 
       state <= DATA; 
     end
   end 
   DATA:
    // 相关业务逻辑
     ... 
  endcase
end

这种情况下,要是复位时计数器停在5,后续FSM再进入COUNT状态,计数器会从5开始累加,导致没到预设的10次就触发状态切换,逻辑出错。

那改成在进入COUNT状态前(也就是IDLE状态分支里)复位计数器,是不是就能确保无论复位何时触发都安全?修改后的代码如下:

always_ff @(posedge clk) begin
 case(state) 
   IDLE: begin
     state <= COUNT; 
     counter <= 0;
   end
   COUNT: begin
     counter <= counter + 1; 
     if(counter == 10 - 1) begin
       state <= DATA; 
     end
   end 
   DATA:
    // 相关业务逻辑
     ... 
  endcase
end

想知道资深工程师会不会采用这种设计方式,或者有没有对应的标准实践方案?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 00:44:54