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 .我从一本教科书上读到,它有大量未使用的状态,形成了它们自己的计数器,即寄生状态机。这个寄生状态机到底是什么?
发布于 2014-02-15 12:49:29
这里的问题是,如果这个电路由于某种原因最终进入一个未使用的状态,您就会陷入一个循环中,那么永远不会返回到使用的状态之一。该计数器的状态如下:
00000000
10000000
11000000
11100000
11110000
...
00001111
00000111
00000011
00000001如果宇宙射线击中你的芯片并翻转其中一个比特,那么你最终可能会产生在正常操作中不存在的状态:
00010000
10001000
11000100
11100010
11110001
01111000
10111100
....恢复正常的唯一方法是断言复位。您可以有两个选项来处理这个问题:要么添加一堆逻辑来检测这种情况,要么假设不会发生一些随机翻转。我想说,你不需要担心它,除非那个翻转的比特将发射一枚导弹。
https://stackoverflow.com/questions/21791487
复制相似问题