2014-02-14 40 views
6
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位約翰遜計數器的systemverilog HDL。我從教科書中讀到,它有大量未使用的狀態,構成了它們自己的計數器,即寄生狀態機器。這個寄生狀態機究竟是什麼?什麼是約翰遜計數器中的寄生狀態機

回答

6

這裏的問題是,如果這條賽道結束了進入閒置狀態的一個由於某種原因,你會停留在循環此後再也沒有返回到使用狀態中的一種。該計數器有以下幾種狀態:

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

如果宇宙射線擊中了你的芯片和翻轉位中的一個,那麼你可以使用不正常運行狀態存在結束:

00010000 
10001000 
11000100 
11100010 
11110001 
01111000 
10111100 
.... 

恢復正常的唯一方法是聲明重置。你有兩個選擇來解決這個問題:或者添加一堆邏輯來檢測情況,或者假設隨機翻轉不會發生。我會說你不必擔心它,除非這個翻轉的位將要發射導彈。