FPGA產生基於LFSR的僞隨機數

本文部分轉自https://blog.csdn.net/limanjihe/article/details/52400969,

部分轉自http://blog.sina.com.cn/s/blog_8c0542a50102wvcx.html


1.概念

  通過一定的算法對事先選定的隨機種子(seed)做一定的運算可以得到一組人工生成的週期序列,在這組序列中以相同的概率選取其中一個數字,該數字稱作僞隨機數,由於所選數字並不具有完全的隨機性,但是從實用的角度而言,其隨機程度已足夠了。這裏的“僞”的含義是,由於該隨機數是按照一定算法模擬產生的,其結果是確定的,是可見的,因此並不是真正的隨機數。僞隨機數的選擇是從隨機種子開始的,所以爲了保證每次得到的僞隨機數都足夠地“隨機”,隨機種子的選擇就顯得非常重要,如果隨機種子一樣,那麼同一個隨機數發生器產生的隨機數也會一樣。

2.由LFSR引出的產生方法

  產生僞隨機數的方法最常見的是利用一種線性反饋移位寄存器(LFSR),它是由n個D觸發器和若干個異或門組成的,如下圖:

    

其中,gn爲反饋係數,取值只能爲0或1,取爲0時表明不存在該反饋之路,取爲1時表明存在該反饋之路;n個D觸發器最多可以提供2^n-1個狀態(不包括全0的狀態),爲了保證這些狀態沒有重複,gn的選擇必須滿足一定的條件。下面以n=3,g0=1,g1=1,g2=0,g3=1爲例,說明LFSR的特性,具有該參數的LFSR結構如下圖:

    

  假設在開始時,D2D1D0=111(seed),那麼,當時鍾到來時,有:

  D2=D1_OUT=1;

  D1=D0_OUT^D2_OUT=0;

  D0=D2_OUT=1;

即D2D1D0=101;同理,又一個時鐘到來時,可得D2D1D0=001. ………………

畫出狀態轉移圖如下:

          

  從圖可以看出,正好有2^3-1=7個狀態,不包括全0;

  如果您理解了上圖,至少可以得到三條結論:

  1)初始狀態是由SEED提供的;

  2)當反饋係數不同時,得到的狀態轉移圖也不同;必須保證gn===1,否則哪來的反饋?

  3)D觸發器的個數越多,產生的狀態就越多,也就越“隨機”;

然後我們可以看到這個計數器循環起來了,無論進入那樣一個狀態除了0之外,都可以循環着回來,其實這裏就相當於了一個3bit的僞隨機數,很有意思,不是所有的多項式都有這個特性,我們現在在從數學上面來看看這個問題,其實最上面的電路是可以看成是一個除法電路,在Galois域的一個除法電路。現在假設的是R(x)是寄存器中剩餘的數據,M(x)是輸入的碼字多項式,然後數學公式可以表示成:

LFSR的工作原理以及LFSR在CRC上的應用

然後分別計算出了M(x)的各種情況,

  LFSR的工作原理以及LFSR在CRC上的應用

對於這個部分的計算我開始走進了誤區,因爲開始我把這的除法當作二進制除法來算了,所以一直沒得到正確的結果,後來我明白了這的除法是模二的除法,在LFSR的結果中,多項式中的“+”都是模2加,就是異或運算,所以是沒有進位的概念;同樣,這裏的除法秀的也是模2除法,即除法過程中用到的減法是模2減法,是不會產生加法進位和減法借位的運算,所以在進行模2除法時,只要部分餘數首位爲1,便可上商1,否則上商0,然後按照模2減法求得餘數,當被除數被除完時,最後得到比除數少一位的餘數。

這裏用一個例子說明一下,比如M(x)=x7時,R(x)=1;模2的計算公式如下:

LFSR的工作原理以及LFSR在CRC上的應用

 

所以這裏一定要區別模2和二進制數之間的運算的區別。

M(x)和R(x)到底是什麼意義呢?

比如M(x)=1時,R(x)=1,指的就是當M(x)輸入一個1時,這時的R(x)爲1,即寄存器剩餘的數爲001,即Q1=1,Q2=0,Q3=0。

又M(x)=x時,R(x)=x,指的就是當M(x)順序輸入1,0時,這時的R(x)爲x,即寄存器剩餘的數爲010,即Q1=0,Q2=1,Q3=0。

同理,可以知道,當M(x)=x6時,R(x)=x2+1,指的就是當M(x)順序輸入1,0,0,0,0,0,0時,這時的R(x)爲x2+1,即寄存器剩餘的數爲010,即Q1=1,Q2=0,Q3=1。

可以看出,當第一個時鐘時輸入端輸入一個1時,以後保持輸入端爲0,則隨着時鐘的到來,輸入碼字多項式就是按照1,x,x2,x3,x4,x5,x6,x7,…,xn這樣的順序發展着,觀察前六個輸入的R(x)分別對應的輸出爲:001,010,100,011,101,111,101,111,剛好爲除去000的其他七個狀態,當M(x)爲x7時,輸出又回來001,所以輸出一直這樣循環下去,因此LFSR可以用來BIST的僞隨機測試碼產生器。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章