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

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

3天内不再提示

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

电子工程师 来源:博客园 作者:super_star123 2021-04-02 16:33 次阅读

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

1.概念

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

2.由LFSR引出的产生方法

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

853083a2-9385-11eb-8b86-12bb97331649.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结构如下图:

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

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

D2=D1_OUT=1;

D1=D0_OUT^D2_OUT=0;

D0=D2_OUT=1;

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

画出状态转移图如下:

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

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

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

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

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

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

3.verilog实现

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

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

verilog源代码如下:

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

仿真波形:

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

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

原文标题:荐读: FPGA产生基于LFSR的伪随机数

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

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

    关注

    1603

    文章

    21328

    浏览量

    593251
  • LFSR
    +关注

    关注

    0

    文章

    16

    浏览量

    12719

原文标题:荐读: FPGA产生基于LFSR的伪随机数

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全志R128应用开发案例——获取真随机数

    路独立的环形振荡器,由模拟器件电源噪声产生频率抖动,用低频始终重采样,然后进行弹性抽取和熵提取处理,最终输出128bit真随机数。 载入方案 我们使用的开发板是 R128-Devkit,需要开发
    发表于 11-13 16:31

    用rand形成的不是真正的随机数,怎么才能达到真正的随机?

    用rand形成的不是真正的随机数啊,,怎么才能达到真正的随机
    发表于 10-30 06:14

    单片机是如何产生随机数的?

    单片机如何产生随机数
    发表于 10-27 06:44

    AT32的随机数产生

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

    全志R128应用开发案例——获取真随机数

    路独立的环形振荡器,由模拟器件电源噪声产生频率抖动,用低频始终重采样,然后进行弹性抽取和熵提取处理,最终输出128bit真随机数。 载入方案 我们使用的开发板是 R128-Devkit,需要开发
    发表于 10-24 17:05

    STM8有随机数发生器吗?

    怎么才能用STM8产生一个随机数
    发表于 10-23 06:55

    求助,为何随机数总是固定数?

    []={0xc00xf90xa40xb00x990x920x820xf80x800x90}; P0=a[rand()%10]; c=0; while (1) ; } 以上是源程序,P0连接共阳数码管,P2.0控制数码管阳极,随机数函数产生一个
    发表于 09-28 07:38

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

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

    STM32L4随机数生成器模块(RNG)介绍

    基于噪声源的32位真随机数生成器。 •使用线性反馈移位寄存器进行后处理。 •由专用时钟(PLL48CLK)计时 •两个连续随机数之间的PLL48CLK时钟信号的40个周期 •可禁用以降低功耗 •5个
    发表于 09-11 07:29

    Arm真随机数发生器(TRNG)表征应用说明

    本章概述ARM®真随机数生成器(TRNG)及其特性。 ARM®真随机数生成器(TRNG)从物理熵源收集熵,物理熵源是能够生成不可预测或随机输出比特流的组件。 所收集的熵被用来向密码随机
    发表于 08-29 07:19

    【野火 fireFlasher Mini 脱机烧录器】随机数功能测试

    ,查看一下这个地址的默认数据是字符串“1234567890”,截图如下: 下面通过上位机对随机数功能进行设置,测试使用2组随机数,地址使用0x8010ccc和0x8010cdc,随机数数量使用4,每个
    发表于 05-21 17:27

    i.MX8QM真随机数生成器符合什么要求?

    大家好, 我们的客户要求我们指定一个真正的随机数生成器。 i.MX8QM 真随机数生成器符合什么要求? 以下是对 SE050 中的随机数生成器的描述。除此之外,请告诉我 i.MX8 中的真正
    发表于 05-18 06:13

    【野火 fireFlasher Mini 脱机烧录器】烧录次数和写入随机数测试

    又到了周末了,终于有时间来折腾申请的烧录器了,前面两篇我试用了一下基本功能、下载速度和远程文件功能。今天我要试用一下下载次数限制的功能和写入随机数的功能,继续为展现野火烧录器的强大而努力。 首先要试
    发表于 05-13 18:41

    【野火 fireFlasher Mini 脱机烧录器】随机数测试

    随机数测试 野火mini脱机烧录器支持在指定地址添加指定个数的随机数,最多支持4组,每组4096个随机数。本篇来测试一下随机数的功能。 小试牛刀 先简单测试一下,在地址0x080040
    发表于 05-12 21:42

    S32K312如何获取随机数

    S32K312如何获取随机数
    发表于 05-06 07:46