找回密码
 注册
关于网站域名变更的通知
查看: 353|回复: 2
打印 上一主题 下一主题

 FPGA产生基于LFSR的伪随机数 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-2 10:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
FPGA产生基于LFSR的伪随机数
1.概念
  通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取其中一个数字,该数字称作伪随机数,由于所选数字并不具有完全的随机性,但是从实用的角度而言,其随机程度已足够了。这里的的含义是,由于该随机数是按照一定算法模拟产生的,其结果是确定的,是可见的,因此并不是真正的随机数。伪随机数的选择是从随机种子开始的,所以为了保证每次得到的伪随机数都足够地随机随机种子的选择就显得非常重要,如果随机种子一样,那么同一个随机数发生器产生的随机数也会一样。
2.LFSR引出的产生方法
  产生伪随机数的方法最常见的是利用一种线性反馈移位寄存器(LFSR),它是由nD触发器和若干个异或门组成的,如下图:
    
其中,gn为反馈系数,取值只能为01,取为0时表明不存在该反馈之路,取为1时表明存在该反馈之路;nD触发器最多可以提供2^n-1个状态(不包括全0的状态),为了保证这些状态没有重复,gn的选择必须满足一定的条件。下面以n=3g0=1g1=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
            endendmodule
仿真波形:
  
1111 1111为种子,load信号置位后,开始在255个状态中循环,可将输出值255143111……作为伪随机数。

, {( i9 z# k5 v. e* ?, R, \

该用户从未签到

3#
发表于 2022-5-13 16:09 | 只看该作者
FPGA产生基于LFSR的伪随机数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-27 00:39 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表