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

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

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

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

電子工程師 ? 來(lái)源:博客園 ? 作者:super_star123 ? 2021-04-02 16:33 ? 次閱讀

大家好,又到了每日學(xué)習(xí)的時(shí)間了,上一篇《薦讀:基于FPGA 的CRC校驗(yàn)碼生成器》文中,提到了“要實(shí)現(xiàn)這一過(guò)程,仍然需要LFSR電路,參看《FPGA產(chǎn)生基于LFSR的偽隨機(jī)數(shù)》中關(guān)于該電路特性的介紹”,在這補(bǔ)一篇《FPGA產(chǎn)生基于LFSR的偽隨機(jī)數(shù)》,歡迎大家交流學(xué)習(xí)。

1.概念

通過(guò)一定的算法對(duì)事先選定的隨機(jī)種子(seed)做一定的運(yùn)算可以得到一組人工生成的周期序列,在這組序列中以相同的概率選取其中一個(gè)數(shù)字,該數(shù)字稱(chēng)作偽隨機(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)組成的,如下圖:

853083a2-9385-11eb-8b86-12bb97331649.png

其中,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)如下圖:

853d2120-9385-11eb-8b86-12bb97331649.png

假設(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)移圖如下:

85613786-9385-11eb-8b86-12bb97331649.png

從圖可以看出,正好有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)如下:

85882148-9385-11eb-8b86-12bb97331649.png

verilog源代碼如下:

85b4d166-9385-11eb-8b86-12bb97331649.png

仿真波形:

85f23b00-9385-11eb-8b86-12bb97331649.png

以1111 1111為種子,load信號(hào)置位后,開(kāi)始在255個(gè)狀態(tài)中循環(huán),可將輸出值255、143、111……作為偽隨機(jī)數(shù)。

原文標(biāo)題:薦讀: FPGA產(chǎn)生基于LFSR的偽隨機(jī)數(shù)

文章出處:【微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598879
  • LFSR
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    12726

原文標(biāo)題:薦讀: FPGA產(chǎn)生基于LFSR的偽隨機(jī)數(shù)

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    雅特力AT32 MCU的隨機(jī)數(shù)生成

    概述產(chǎn)品和生態(tài)系統(tǒng)安全性的需求比以往任何時(shí)候都更加重要。真隨機(jī)數(shù)是所有安全系統(tǒng)的核心,其質(zhì)量會(huì)影響設(shè)計(jì)的安全性。因此在沒(méi)有內(nèi)置硬件TRNG的AT32的微控制器系列中,如何提高隨機(jī)數(shù)的有效,來(lái)符合
    的頭像 發(fā)表于 08-30 12:26 ?124次閱讀
    雅特力AT32 MCU的<b class='flag-5'>隨機(jī)數(shù)</b>生成

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

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

    如何使用Python生成四位隨機(jī)數(shù)

    為了實(shí)現(xiàn)這些目標(biāo),Python 為我們提供了random() 模塊。random() 是一個(gè)內(nèi)置的 Python 模塊,用于生成隨機(jī)數(shù)
    的頭像 發(fā)表于 04-15 12:47 ?442次閱讀

    TC389芯片上HSM的TRNG真隨機(jī)數(shù)功能,如何判斷其隨機(jī)能力呢?

    想咨詢(xún)一下,TC389芯片上HSM的TRNG真隨機(jī)數(shù)功能,如何判斷其隨機(jī)能力呢?有什么資料或者測(cè)試內(nèi)容嗎?
    發(fā)表于 03-05 07:20

    全志R128應(yīng)用開(kāi)發(fā)案例——獲取真隨機(jī)數(shù)

    路獨(dú)立的環(huán)形振蕩器,由模擬器件電源噪聲產(chǎn)生頻率抖動(dòng),用低頻始終重采樣,然后進(jìn)行彈性抽取和熵提取處理,最終輸出128bit真隨機(jī)數(shù)。 載入方案 我們使用的開(kāi)發(fā)板是 R128-Devkit,需要開(kāi)發(fā)
    發(fā)表于 11-13 16:31

    Arduino篇—電子骰子

    在Arduino中,random()函數(shù)用來(lái)產(chǎn)生隨機(jī)數(shù),可以傳入一個(gè)區(qū)間,產(chǎn)生此區(qū)間內(nèi)的隨機(jī)數(shù)。
    的頭像 發(fā)表于 11-01 10:15 ?856次閱讀
    Arduino篇—電子骰子

    用rand形成的不是真正的隨機(jī)數(shù),怎么才能達(dá)到真正的隨機(jī)?

    用rand形成的不是真正的隨機(jī)數(shù)啊,,怎么才能達(dá)到真正的隨機(jī)
    發(fā)表于 10-30 06:14

    單片機(jī)是如何產(chǎn)生隨機(jī)數(shù)的?

    單片機(jī)如何產(chǎn)生隨機(jī)數(shù)?
    發(fā)表于 10-27 06:44

    AT32的隨機(jī)數(shù)產(chǎn)生

    AT32的隨機(jī)數(shù)產(chǎn)生為設(shè)計(jì)者使用AT32芯片時(shí),產(chǎn)生符合應(yīng)用需求的隨機(jī)數(shù),提供設(shè)計(jì)建議。
    發(fā)表于 10-26 06:04

    全志R128應(yīng)用開(kāi)發(fā)案例—獲取真隨機(jī)數(shù)

    R128 內(nèi)置了TRNG,一個(gè)真隨機(jī)數(shù)發(fā)生器,隨機(jī)源是 8 路獨(dú)立的環(huán)形振蕩器
    的頭像 發(fā)表于 10-24 17:49 ?818次閱讀
    全志R128應(yīng)用開(kāi)發(fā)案例—獲取真<b class='flag-5'>隨機(jī)數(shù)</b>

    全志R128應(yīng)用開(kāi)發(fā)案例——獲取真隨機(jī)數(shù)

    路獨(dú)立的環(huán)形振蕩器,由模擬器件電源噪聲產(chǎn)生頻率抖動(dòng),用低頻始終重采樣,然后進(jìn)行彈性抽取和熵提取處理,最終輸出128bit真隨機(jī)數(shù)。 載入方案 我們使用的開(kāi)發(fā)板是 R128-Devkit,需要開(kāi)發(fā)
    發(fā)表于 10-24 17:05

    STM8有隨機(jī)數(shù)發(fā)生器嗎?

    怎么才能用STM8產(chǎn)生一個(gè)隨機(jī)數(shù)
    發(fā)表于 10-23 06:55

    PLC輸出0~100之間的隨機(jī)數(shù)編寫(xiě)

    由于西門(mén)子PLC不提供隨機(jī)數(shù)相關(guān)函數(shù),在需要用到隨機(jī)數(shù)的情況下,只能自己手動(dòng)去寫(xiě),下面來(lái)教大家寫(xiě)一個(gè)簡(jiǎn)單的0~100之間的隨機(jī)數(shù)。
    發(fā)表于 10-11 12:22 ?3198次閱讀
    PLC輸出0~100之間的<b class='flag-5'>隨機(jī)數(shù)</b>編寫(xiě)

    如何使用雪花算法生成真正的隨機(jī)數(shù)

    以前用rand和srand生成過(guò)隨機(jī)數(shù),隨機(jī)數(shù)的序列是固定的,今天學(xué)習(xí)生成真正的隨機(jī)數(shù)的生成。 熵池 利用/dev/urandom可以生
    的頭像 發(fā)表于 10-09 10:05 ?1166次閱讀

    求助,為何隨機(jī)數(shù)總是固定數(shù)?

    []={0xc00xf90xa40xb00x990x920x820xf80x800x90}; P0=a[rand()%10]; c=0; while (1) ; } 以上是源程序,P0連接共陽(yáng)數(shù)碼管,P2.0控制數(shù)碼管陽(yáng)極,隨機(jī)數(shù)函數(shù)產(chǎn)生一個(gè)
    發(fā)表于 09-28 07:38