环形柜台的用途是什么?

What is the purpose ring counters?

目前,我正在尝试查看 verilog 中的环形计数器。 但是我很好奇环形计数器的用途是什么? 我没听清楚。有谁知道环形计数器的用途是什么?

Ring counters four flip-flops can be used to create a four state FSM,没有额外的逻辑。传统的状态机需要 2 个触发器和下一状态逻辑。维基百科指出 Ring counter 会更简单并且具有更小的合成区域。

我希望加法器和下一个状态逻辑所需的大小与环形计数器中使用的两个额外触发器的大小相似,这使得这两种类型的四状态机大致相同。环形计数器也会快速增长,每个额外的状态都需要一个额外的触发器。状态必须始终遵循线性模式。大多数 FSM 都有分支并对输入做出反应,最大限度地减少了使用环形计数器的机会。

环形计数器的优点是它的状态是one-hot。这可能会简化输出逻辑。

环形计数器FSM:

module ring_counter(
  input clk,
  input rst_n,

  //outputs ...
);
reg state0;
reg state1;
reg state2;
reg state3;

always @(posedge clk, negedge rst_n) begin
  if (~rst_n) begin
    state0 <= 1'b1;
    state1 <= 1'b0;
    state2 <= 1'b0;
    state3 <= 1'b0;
  end
  else begin
    state0 <= state3;
    state1 <= state0;
    state2 <= state1;
    state3 <= state2;
  end
end
endmodule

整体状态将从 0001 开始,然后围绕 001001001000 旋转并回到开头 0001

相比之下,典型的 FSM 可能是:

reg [1:0] state;

always @(posedge clk, negedge rst_n) begin
  if (~rst_n) begin
    state <= 'b0;
   end
   else begin
     state <= state + 1;
   end
 end

这将遍历状态 00 -> 01 -> 10 -> 11