1. 概念
通過(guò)一定的算法對(duì)事先選定的隨機(jī)種子(seed)做一定的運(yùn)算可以得到一組人工生成的周期序列,在這組序列中以相同的概率選取其中一個(gè)數(shù)字,該數(shù)字稱作偽隨機(jī)數(shù),由于所選數(shù)字并不具有完全的隨機(jī)性,但是從實(shí)用的角度而言,其隨機(jī)程度已足夠了。這里的“偽”的含義是,由于該隨機(jī)數(shù)是按照一定算法模擬產(chǎn)生的,其結(jié)果是確定的,是可見(jiàn)的,因此并不是真正的隨機(jī)數(shù)。偽隨機(jī)數(shù)的選擇是從隨機(jī)種子開(kāi)始的,所以為了保證每次得到的偽隨機(jī)數(shù)都足夠地“隨機(jī)”,隨機(jī)種子的選擇就顯得非常重要,如果隨機(jī)種子一樣,那么同一個(gè)隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)數(shù)也會(huì)一樣。
2. 由LFSR引出的產(chǎn)生方法
產(chǎn)生偽隨機(jī)數(shù)的方法最常見(jiàn)的是利用一種線性反饋移位寄存器(LFSR),它是由n個(gè)D觸發(fā)器和若干個(gè)異或門(mén)組成的,如下圖:

其中,gn為反饋系數(shù),取值只能為0或1,取為0時(shí)表明不存在該反饋之路,取為1時(shí)表明存在該反饋之路;n個(gè)D觸發(fā)器最多可以提供2^n-1個(gè)狀態(tài)(不包括全0的狀態(tài)),為了保證這些狀態(tài)沒(méi)有重復(fù),gn的選擇必須滿足一定的條件。下面以n=3,g0=1,g1=1,g2=0,g3=1為例,說(shuō)明LFSR的特性,具有該參數(shù)的LFSR結(jié)構(gòu)如下圖:

假設(shè)在開(kāi)始時(shí),D2D1D0=111(seed),那么,當(dāng)時(shí)鐘到來(lái)時(shí),有:
D2=D1_OUT=1;
D1=D0_OUT^D2_OUT=0;
D0=D2_OUT=1;
即D2D1D0=101;同理,又一個(gè)時(shí)鐘到來(lái)時(shí),可得D2D1D0=001. ………………
畫(huà)出狀態(tài)轉(zhuǎn)移圖如下:

從圖可以看出,正好有2^3-1=7個(gè)狀態(tài),不包括全0;
如果您理解了上圖,至少可以得到三條結(jié)論:
1)初始狀態(tài)是由SEED提供的;
2)當(dāng)反饋系數(shù)不同時(shí),得到的狀態(tài)轉(zhuǎn)移圖也不同;必須保證gn===1,否則哪來(lái)的反饋?
3)D觸發(fā)器的個(gè)數(shù)越多,產(chǎn)生的狀態(tài)就越多,也就越“隨機(jī)”;
3. verilog實(shí)現(xiàn)
基于以上原理,下面用verilog產(chǎn)生一個(gè)n=8,反饋系數(shù)為g0g1g2g3g4g5g6g7g8=101110001的偽隨機(jī)數(shù)發(fā)生器,它共有2^8=255個(gè)狀態(tài),該LFSR的結(jié)構(gòu)如下:

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
仿真波形:
以1111 1111為種子,load信號(hào)置位后,開(kāi)始在255個(gè)狀態(tài)中循環(huán),可將輸出值255、143、111……作為偽隨機(jī)數(shù)。
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1646文章
22054瀏覽量
618800 -
移位寄存器
+關(guān)注
關(guān)注
3文章
293瀏覽量
22748 -
LFSR
+關(guān)注
關(guān)注
0文章
16瀏覽量
12921
發(fā)布評(píng)論請(qǐng)先 登錄
【assingle分享】labview隨機(jī)數(shù)發(fā)生器
【總結(jié)】LabVIEW隨機(jī)數(shù)發(fā)生器
怎么設(shè)計(jì)基于USB和FPGA的隨機(jī)數(shù)發(fā)生器驗(yàn)證平臺(tái)?
學(xué)習(xí)筆記 | 基于FPGA的偽隨機(jī)數(shù)發(fā)生器(附代碼)
偽隨機(jī)數(shù)發(fā)生器的FPGA實(shí)現(xiàn)與研究
基于FPGA的真隨機(jī)數(shù)發(fā)生器設(shè)計(jì)

真隨機(jī)數(shù)發(fā)生器的容差分析

C語(yǔ)言中偽隨機(jī)數(shù)的產(chǎn)生及性能檢驗(yàn)
補(bǔ)充: FPGA產(chǎn)生基于LFSR的偽隨機(jī)數(shù)

如何使用FPGA實(shí)現(xiàn)偽隨機(jī)數(shù)發(fā)生器

FPGA產(chǎn)生基于LFSR的偽隨機(jī)數(shù)概念

基于FPGA的偽隨機(jī)數(shù)發(fā)生器設(shè)計(jì)方案
【STM32】隨機(jī)數(shù)發(fā)生器詳解

FPGA的偽隨機(jī)數(shù)發(fā)生器學(xué)習(xí)介紹
如何在FPGA中實(shí)現(xiàn)隨機(jī)數(shù)發(fā)生器

評(píng)論