0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA产生中伪随机数发生器分析

454398 来源:BitArt的博客 作者:BitArt的博客 2020-11-21 11:49 次阅读

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触发器的个数越多,产生的状态就越多,也就越“随机”;

3. verilog实现

基于以上原理,下面用verilog产生一个n=8,反馈系数为g0g1g2g3g4g5g6g7g8=101110001的伪随机数发生器,它共有2^8=255个状态,该LFSR的结构如下:


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个状态中循环,可将输出值255、143、111……作为伪随机数。

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1603

    文章

    21326

    浏览量

    593243
  • 移位寄存器
    +关注

    关注

    2

    文章

    182

    浏览量

    22021
  • LFSR
    +关注

    关注

    0

    文章

    16

    浏览量

    12719
收藏 人收藏

    评论

    相关推荐

    【assingle分享】labview随机数发生器

    ,提供了多种不同的函数,下面大概总结一下。一、随机数发生器在LABVIEW数值函数选板,提供了一个随机数
    发表于 04-07 10:27

    【总结】LabVIEW随机数发生器

    ,提供了多种不同的函数,下面大概总结一下。一、随机数发生器在LABVIEW数值函数选板,提供了一个随机数
    发表于 01-30 14:51

    随机数发生器在信息安全系统的应用

    安全控制,采用最新专利科技集成了硬件高速真随机数发生器,其产生随机序列具有极高的不可预测性和不可重复性,并且已通过FIPS140-2和A
    发表于 12-05 09:55

    随机数发生器产生实数如何更改只生成整数输出?

    随机数发生器产生实数。如何更改只生成整数输出? 以上来自于谷歌翻译 以下为原文Random number generator produces real numbers. How can it be changed to pr
    发表于 03-14 08:06

    怎么设计基于USB和FPGA随机数发生器验证平台?

    随机数发生器是信息安全领域不可或缺的重要组成部分,广泛应用于金融、军事等信息安全保密通信的电子设备。目前,随着对RNG体积、功耗、接口方式等要求的提高,设计集成化芯片或IP核形式的随机数
    发表于 08-27 06:05

    单片机C语言如何产生随机数

    来实现随机数产生。 C语言中有三个通用的随机数发生器,分别为 rand函数、random函数、randomize 函数,但是rand函数产生
    发表于 05-14 15:14

    Zynq-7000 AP SoC是否具有真正的随机数发生器

    随机数发生器在安全解决方案起着重要作用。真正的随机数发生器通常由平台支持,例如Exynos 5,OMAP 3,4 SoC系列和飞思卡尔i
    发表于 07-17 14:27

    请问随机数发生器的主要特性和功能以及如何操作?

    随机数发生器简介随机数发生器主要特性随机数发生器功能说明随机
    发表于 11-13 07:51

    stm32随机的使用

    stm32随机的使用前言最近使用了一款芯片,内置随机数发生器,封装了一个 8 Byte的指令接口,mcu每次发送指令给芯片,芯片就会返回 8 字节
    发表于 08-23 07:08

    随机数发生器的相关资料分享

    00. 目录文章目录00. 目录01. 随机数发生器简介02. 随机数发生器主要特性03. 随机数发生器
    发表于 02-14 07:35

    学习笔记 | 基于FPGA随机数发生器(附代码)

    以及真随机数。本次设计为基于FPGA生成的随机数发生器,什么是
    发表于 04-21 19:42

    基于FPGA的真随机数发生器设计

    设计并实现了一种基于 FPGA 的真 随机数发生器 ,利用一对振荡环路之间的相位漂移和抖动以及亚稳态作为随机源,使用线性反馈移位寄存器的输出与原始序列运算作为后续处理。在X
    发表于 05-30 17:04 72次下载
    基于<b class='flag-5'>FPGA</b>的真<b class='flag-5'>随机数</b><b class='flag-5'>发生器</b>设计

    基于FPGA的伪随机数发生器设计方案

    基于FPGA的伪随机数发生器设计方案
    发表于 06-28 14:36 4次下载

    【STM32】随机数发生器详解

    00. 目录文章目录00. 目录01. 随机数发生器简介02. 随机数发生器主要特性03. 随机数发生器
    发表于 12-08 18:36 10次下载
    【STM32】<b class='flag-5'>随机数</b><b class='flag-5'>发生器</b>详解

    FPGA的伪随机数发生器学习介绍

    今天是画师本人第一次和各位大侠见面,执笔绘画FPGA江湖,本人写了篇关于FPGA的伪随机数发生器学习笔记,这里分享给大家,仅供参考。 基于FPGA
    的头像 发表于 09-12 09:13 793次阅读