線性反饋移位寄存器(LFSR)-非線性反饋移位寄存器的verilog實現(產生偽隨機數)


一、線性反饋移位寄存器(LFSR)

通過對事先選定的種子做運算使得人工生成的偽隨機序列的過程,在實際中,隨機種子的選擇決定了輸出的偽隨機序列的不同,也就是說隨機種子的選擇至關重要。

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

    

其中,gn為反饋系數,取值只能為0或1,取為0時表明不存在該反饋之路,取為1時表明存在該反饋之路;這里的反饋系數決定了產生隨機數的算法的不同。用反饋函數表示成y=a0x^0+a1x+a2x^2.......反饋函數為線性的叫線性移位反饋序列,否則叫非線性反饋移位序列。

應該選取哪些位來進行異或才能保證最長周期為,這是一個很重要的問題。選取的“某些位”構成的序列叫做抽頭序列,理論表明,要使LFSR得到最長的周期,這個抽頭序列構成的多項式加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觸發器的個數越多,產生的狀態就越多,也就越“隨機”;

 

 verilog實現:

module RanGen(
    input               rst_n,    /*rst_n is necessary to prevet locking up*/
    input               clk,      /*clock signal*/
    input               load,     /*load seed to rand_num,active high */
    input      [7:0]    seed,     
    output reg [7:0]    rand_num  /*random number output*/
);


always@(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        rand_num    <=8'b0;
    else if(load)
        rand_num <=seed;    /*load the initial value when load is active*/
    else
        begin
            rand_num[0] <= rand_num[7];
            rand_num[1] <= rand_num[0];
            rand_num[2] <= rand_num[1];
            rand_num[3] <= rand_num[2];
            rand_num[4] <= rand_num[3]^rand_num[7];
            rand_num[5] <= rand_num[4]^rand_num[7];
            rand_num[6] <= rand_num[5]^rand_num[7];
            rand_num[7] <= rand_num[6];
        end
            
end
endmodule

在通信系統的秘鑰分析中需要用到LFSR作為保證密鑰流得的周期長度,平衡性,而非線性組合函數決定了密鑰流的密碼性質,防止其被攻擊。

二、非線性反饋移位寄存器

如下圖,現在還沒有太多的涉及到,所以只說些簡單的概念:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM