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

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

3天内不再提示

补充: FPGA产生基于LFSR的伪随机数

FPGA学习交流 来源:互联网 作者:佚名 2018-06-13 11:21 次阅读

大家好,又到了每日学习的时间了,上一篇《荐读:基于FPGA 的CRC校验码生成器》文中,提到了“要实现这一过程,仍然需要LFSR电路,参看《FPGA产生基于LFSR的伪随机数》中关于该电路特性的介绍”,在这补一篇《FPGA产生基于LFSR的伪随机数》,欢迎大家交流学习。

1.概念
通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取其中一个数字,该数字称作伪随机数,由于所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。这里的“伪”的含义是,由于该随机数是按照一定算法模拟产生的,其结果是确定的,是可见的,因此并不是真正的随机数。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地“随机”,随机种子的选择就显得非常重要,如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。

2.由LFSR引出的产生方法
产生伪随机数的方法最常见的是利用一种线性反馈移位寄存器(LFSR),它是由n个D触发器和若干个异或门组成的,如下图:
172436rpfddydydqfssy4b.png


其中,gn为反馈系数,取值只能为0或1,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;n个D触发器最多可以提供2^n-1个状态(不包括全0的状态),为了保证这些状态没有重复,gn的选择必须满足一定的条件。下面以n=3,g0=1,g1=1,g2=0,g3=1为例,说明LFSR的特性,具有该参数的LFSR结构如下图:
172437h4v9c2u4l24mfcwl.png

假设在开始时,D2D1D0=111(seed),那么,当时钟到来时,有:

D2=D1_OUT=1;

D1=D0_OUT^D2_OUT=0;

D0=D2_OUT=1;

即D2D1D0=101;同理,又一个时钟到来时,可得D2D1D0=001. ………………

画出状态转移图如下:
172437n8pz2rre8a2aepg9.png


从图可以看出,正好有2^3-1=7个状态,不包括全0;

如果你理解了上图,至少可以得到三条结论:

1)初始状态是由SEED提供的;

2)当反馈系数不同时,得到的状态转移图也不同;必须保证gn===1,否则哪来的反馈?

3)D触发器的个数越多,产生的状态就越多,也就越“随机”;


3.verilog实现

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

verilog源代码如下:
172438bsww78bz0ozi81iw.png


仿真波形:
172438hzqlfvald91af2r8.png

以1111 1111为种子,load信号置位后,开始在255个状态中循环,可将输出值255、143、111……作为伪随机数。

这篇补充就说到这里,各位,加油。

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

    关注

    1603

    文章

    21328

    浏览量

    593264
收藏 人收藏

    评论

    相关推荐

    keil 产生 随机数

    最近需要用 keil 软件产生一个0-10的随机数,请各位大神指点下,有原代码参考的话就更好了
    发表于 03-12 20:53

    怎么产生更大范围的随机数

    labview提供了产生0-1的随机数函数,怎么产生更大的范围的随机数
    发表于 10-26 21:17

    STM32的ADC产生随机数

    本帖最后由 sunhongdd26 于 2015-7-14 09:58 编辑 因为在做一样东西需要产生随机数,范围在[0,15],在网上找到一种方法,就是利用ADC悬空引脚产生随机数
    发表于 02-28 11:58

    随机数产生小程序求助

    刚开始学习Labview,想做一个小程序:打开布尔开关,自动产生0-10范围内的随机数,输出数值控件一直刷新随机数,开关关闭后,随机数停止刷新,输出控件显示最后一个
    发表于 04-18 23:50

    关于STM32真随机数算法的问题

    rand是随机数,真随机数配合定时器time()计算产生随机数,但是如果我想上电初始化的时候要产生
    发表于 11-13 10:12

    想要在STM32每次上电初始化时产生随机数,该如何设置?

    rand是随机数,真随机数配合定时器time()计算产生随机数,但是如果我想上电初始化的时候要产生
    发表于 11-28 15:24

    keil-O2优化时系统自带的随机数会导致死机

    暂时用的一个代替方法: //获取随机数//可以产生0~RANDOM_MAX-1的随机数//seed:种子//max:最大值 //返回值:0~(max-1)中的一个值u32 app_g
    发表于 03-27 04:36

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

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

    产生随机数的方法有哪些

    随机数在单片机的应用中也是很多的,当然产生随机数的方法有很多,当中有一个就是利用单片机定时器,取出未知的定时器THX和TLX的值,再加以运算得到一个规定范围内的随机数值。这做法也是可行
    发表于 07-15 09:08

    什么是随机数

    用到的随机数,一般都只满足第一个条件,这种只满足随机性分布的随机数,就叫做随机数或弱
    发表于 07-22 09:42

    stm32随机的使用

    不行了,想起来了随机数,接下来就是实现过程,很简单随机数的建立:最常见的使用方法是:srand和rand()配合使用产生
    发表于 08-23 07:08

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

    今天是画师本人第一次和各位大侠见面,执笔绘画FPGA江湖,本人写了篇关于FPGA随机数发生器学习笔记,这里分享给大家,仅供参考。学习笔记 | 基于
    发表于 04-21 19:42

    AT32的随机数产生

    AT32的随机数产生为设计者使用AT32芯片时,产生符合应用需求的随机数,提供设计建议。
    发表于 10-26 06:04

    FPGA产生基于LFSR的伪随机数概念

    大家好,又到了每日学习的时间了,上一篇《荐读:基于FPGA 的CRC校验码生成器》文中,提到了“要实现这一过程,仍然需要LFSR电路,参看《FPGA产生基于
    的头像 发表于 04-02 16:33 2161次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>产生</b>基于<b class='flag-5'>LFSR</b>的伪<b class='flag-5'>随机数</b>概念

    基于LFSR随机数FPGA产生

    通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取其中一个数字,该数字称作伪随机数,由于所选数字并不具有完全的随机性,但是从实用的角度而言,其
    发表于 11-17 09:54 587次阅读