什么是Johnson计数器中的寄生状态机

时间:2014-02-14 23:48:57

标签: system-verilog

module johnson #(parameter N=8)
  (output logic [N-1:0] q, input logic clk,reset);

  always_ff @(posedge clk,posedge reset)
    if(reset)
      q<=0;
    else
      q<={~q[0],q[N-1:1]};

endmodule

以上是8位Johnson计数器的systemverilog HDL。我从教科书中读到它有大量未使用的状态,这些状态形成了它们自己的计数器,即寄生状态机。这个寄生状态机究竟是什么?

1 个答案:

答案 0 :(得分:6)

这里的问题是,如果这个电路由于某种原因最终进入其中一个未使用状态,那么你将陷入循环,然后永远不会返回到其中一个使用状态。此计数器具有以下状态:

00000000
10000000
11000000
11100000
11110000
...
00001111
00000111
00000011
00000001

如果宇宙射线撞击你的芯片并翻转其中一个位,你可能会得到正常操作中不存在的状态:

00010000
10001000
11000100
11100010
11110001
01111000
10111100
....

恢复正常的唯一方法是断言重置。您有两种方法可以解决这个问题:要么添加一堆逻辑来检测情况,要么假设随机翻转不会发生。我会说你不需要担心它,除非那个翻转的钻头要发射导弹。