0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA產(chǎn)生中偽隨機數(shù)發(fā)生器分析

454398 ? 來源:BitArt的博客 ? 作者:BitArt的博客 ? 2020-11-21 11:49 ? 次閱讀

1. 概念

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

2. 由LFSR引出的產(chǎn)生方法

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


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


假設(shè)在開始時,D2D1D0=111(seed),那么,當(dāng)時鐘到來時,有:

D2=D1_OUT=1;

D1=D0_OUT^D2_OUT=0;

D0=D2_OUT=1;

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

畫出狀態(tài)轉(zhuǎn)移圖如下:


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

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

1)初始狀態(tài)是由SEED提供的;

2)當(dāng)反饋系數(shù)不同時,得到的狀態(tài)轉(zhuǎn)移圖也不同;必須保證gn===1,否則哪來的反饋?

3)D觸發(fā)器的個數(shù)越多,產(chǎn)生的狀態(tài)就越多,也就越“隨機”;

3. verilog實現(xiàn)

基于以上原理,下面用verilog產(chǎn)生一個n=8,反饋系數(shù)為g0g1g2g3g4g5g6g7g8=101110001的偽隨機數(shù)發(fā)生器,它共有2^8=255個狀態(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信號置位后,開始在255個狀態(tài)中循環(huán),可將輸出值255、143、111……作為偽隨機數(shù)。

編輯:hfy


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1625

    文章

    21620

    瀏覽量

    601238
  • 移位寄存器
    +關(guān)注

    關(guān)注

    2

    文章

    258

    瀏覽量

    22212
  • LFSR
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    12729
收藏 人收藏

    評論

    相關(guān)推薦

    【assingle分享】labview隨機數(shù)發(fā)生器

    ,提供了多種不同的函數(shù),下面大概總結(jié)一下。一、隨機數(shù)發(fā)生器在LABVIEW數(shù)值函數(shù)選板,提供了一個隨機數(shù)
    發(fā)表于 04-07 10:27

    【總結(jié)】LabVIEW隨機數(shù)發(fā)生器

    ,提供了多種不同的函數(shù),下面大概總結(jié)一下。一、隨機數(shù)發(fā)生器在LABVIEW數(shù)值函數(shù)選板,提供了一個隨機數(shù)
    發(fā)表于 01-30 14:51

    怎么設(shè)計基于USB和FPGA隨機數(shù)發(fā)生器驗證平臺?

    隨機數(shù)發(fā)生器是信息安全領(lǐng)域不可或缺的重要組成部分,廣泛應(yīng)用于金融、軍事等信息安全保密通信的電子設(shè)備。目前,隨著對RNG體積、功耗、接口方式等要求的提高,設(shè)計集成化芯片或IP核形式的隨機數(shù)
    發(fā)表于 08-27 06:05

    學(xué)習(xí)筆記 | 基于FPGA隨機數(shù)發(fā)生器(附代碼)

    以及真隨機數(shù)。本次設(shè)計為基于FPGA生成的隨機數(shù)發(fā)生器,什么是
    發(fā)表于 04-21 19:42

    隨機數(shù)發(fā)生器FPGA實現(xiàn)與研究

    摘要:在很多實際應(yīng)用,直接利用FPGA 產(chǎn)生隨機序列的方法可以為系統(tǒng)設(shè)計或測試帶來極大的便利。本文給出了基于線性反饋移位寄存
    發(fā)表于 07-22 15:12 ?0次下載

    基于FPGA的真隨機數(shù)發(fā)生器設(shè)計

    設(shè)計并實現(xiàn)了一種基于 FPGA 的真 隨機數(shù)發(fā)生器 ,利用一對振蕩環(huán)路之間的相位漂移和抖動以及亞穩(wěn)態(tài)作為隨機源,使用線性反饋移位寄存的輸出
    發(fā)表于 05-30 17:04 ?72次下載
    基于<b class='flag-5'>FPGA</b>的真<b class='flag-5'>隨機數(shù)</b><b class='flag-5'>發(fā)生器</b>設(shè)計

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

    基于混沌、均勻分布的真隨機數(shù)發(fā)生器的工作電路和精度要求較高的電壓參考電路的溫度漂移進行分析,給出了仿真得到的溫度曲線;分析了工藝可能存在的
    發(fā)表于 06-10 15:53 ?26次下載
    真<b class='flag-5'>隨機數(shù)</b><b class='flag-5'>發(fā)生器</b>的容差<b class='flag-5'>分析</b>

    C語言中隨機數(shù)產(chǎn)生及性能檢驗

    系統(tǒng)仿真或加密算法中常需要產(chǎn)生滿足一定分布函數(shù)的 隨機數(shù) ,高級程序設(shè)計語言中的庫函數(shù)采用線性同余法產(chǎn)生一個在[0,32767] 服從均勻分布的
    發(fā)表于 07-07 16:35 ?70次下載

    補充: FPGA產(chǎn)生基于LFSR的隨機數(shù)

    大家好,又到了每日學(xué)習(xí)的時間了,上一篇《薦讀:基于FPGA 的CRC校驗碼生成器》文中,提到了要實現(xiàn)這一過程,仍然需要LFSR電路,參看《FPGA產(chǎn)生基于LFSR的
    的頭像 發(fā)表于 06-13 11:21 ?7632次閱讀
    補充: <b class='flag-5'>FPGA</b><b class='flag-5'>產(chǎn)生</b>基于LFSR的<b class='flag-5'>偽</b><b class='flag-5'>隨機數(shù)</b>

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

    在很多實際應(yīng)用,直接利用FPGA產(chǎn)生隨機序列的方法可以為系統(tǒng)設(shè)計或測試帶來極大的便利。本文給出了基于線性反饋移位寄存
    發(fā)表于 02-05 15:22 ?24次下載
    如何使用<b class='flag-5'>FPGA</b>實現(xiàn)<b class='flag-5'>偽</b><b class='flag-5'>隨機數(shù)</b><b class='flag-5'>發(fā)生器</b>

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

    大家好,又到了每日學(xué)習(xí)的時間了,上一篇《薦讀:基于FPGA 的CRC校驗碼生成器》文中,提到了“要實現(xiàn)這一過程,仍然需要LFSR電路,參看《FPGA產(chǎn)生基于LFSR的
    的頭像 發(fā)表于 04-02 16:33 ?2376次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>產(chǎn)生</b>基于LFSR的<b class='flag-5'>偽</b><b class='flag-5'>隨機數(shù)</b>概念

    基于FPGA隨機數(shù)發(fā)生器設(shè)計方案

    基于FPGA隨機數(shù)發(fā)生器設(shè)計方案
    發(fā)表于 06-28 14:36 ?4次下載

    【STM32】隨機數(shù)發(fā)生器詳解

    00. 目錄文章目錄00. 目錄01. 隨機數(shù)發(fā)生器簡介02. 隨機數(shù)發(fā)生器主要特性03. 隨機數(shù)發(fā)生器
    發(fā)表于 12-08 18:36 ?11次下載
    【STM32】<b class='flag-5'>隨機數(shù)</b><b class='flag-5'>發(fā)生器</b>詳解

    FPGA隨機數(shù)發(fā)生器學(xué)習(xí)介紹

    今天是畫師本人第一次和各位大俠見面,執(zhí)筆繪畫FPGA江湖,本人寫了篇關(guān)于FPGA隨機數(shù)發(fā)生器學(xué)習(xí)筆記,這里分享給大家,僅供參考。 基于
    的頭像 發(fā)表于 09-12 09:13 ?1477次閱讀

    如何在FPGA實現(xiàn)隨機數(shù)發(fā)生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7實現(xiàn)4位隨機數(shù)發(fā)生器(PRNGs)。
    的頭像 發(fā)表于 08-06 11:20 ?548次閱讀
    如何在<b class='flag-5'>FPGA</b><b class='flag-5'>中</b>實現(xiàn)<b class='flag-5'>隨機數(shù)</b><b class='flag-5'>發(fā)生器</b>