FPGA产生基于LFSR的伪随机数

上一篇《基于FPGA 的CRC校验码生成器》文中,提到了“要实现这一过程,仍然需要LFSR电路,在这补一篇《FPGA产生基于LFSR的伪随机数》,欢迎大家交流学习。话不多说,上货。

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源代码如下:

仿真波形:

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

【QQ交流群】

群号:173560979,进群暗语:FPGA技术江湖粉丝。

多年的FPGA企业开发经验,各种通俗易懂的学习资料以及学习方法,浓厚的交流学习氛围,QQ群目前已有1000多名志同道合的小伙伴,无广告纯净模式,给技术交流一片净土,从初学小白到行业精英业界大佬等,从军工领域到民用企业等,从通信、图像处理到人工智能等各个方向应有尽有。

【微信交流群】

现微信交流群已建立08群,人数已达数千人,欢迎关注“FPGA技术江湖”微信公众号,可获取进群方式。

后续会持续更新,带来Vivado、 ISE、Quartus II 、candence等安装相关设计教程,学习资源、项目资源、好文推荐等,希望大侠持续关注。

江湖偌大,继续闯荡,愿大侠一切安好,有缘再见!

FPGA产生基于LFSR的伪随机数相关推荐

  1. 线性反馈移位寄存器(LFSR) ______FPGA产生基于LFSR的伪随机数

    FPGA产生基于LFSR的伪随机数 https://blog.csdn.net/qq_34070723/article/details/89736772 1.概念 通过一定的算法对事先选定的随机种子( ...

  2. 基于LFSR的伪随机序列发生器

    伪随机序列在现在的数字电路设计中还是蛮重要的,在找工作面试中也会碰到,因此整理一下伪随机序列发生器的设计. 伪随机序列包括m序列,m序列是目前CDMA系统中采用的最基本的PN序列. 是最长线性反馈移位 ...

  3. 小梅哥FPGA:基于线性序列机的TLC5620型DAC驱动设计

    小梅哥FPGA:基于线性序列机的TLC5620型DAC驱动设计 目标:学会使用线性序列机的思想设计常见的有串行执行特征的时序逻辑 实验现象:在QuartusⅡ软件中,使用ISSP工具,输入希望输出的电 ...

  4. FPGA实现基于时间内插法的TDC测量----第一章

    前段时间有同学找我做这个毕业设计,一开始也不太了解TDC测量,只是听学姐说是用FPGA实现时间测量的项目,第一直觉觉得不太难,所以就答应帮忙,所以此处给所有准备使用FPGA实现TDC的朋友们第一个建议 ...

  5. 5.3基于LFSR的生成器

    1.基于LFSR的密钥流生成器应该具备以下性质: 1.大周期 2.大线性复杂度 3.较好的特性统计 2.生成器 1.Geffe生成器 2.Jennings生成器 3.J-K触发器 4.Pless体制 ...

  6. FPGA学习-基于FPGA的高速串行通信GTX知识梳理

    对于XILINX,7系列FPGA,关于GTX核对配置见PG168,了解GTX内部结构及更多的知识见ug476. 以7系列XC7k325t-ffg900为例,见各ug476,351页.可看到该芯片共有4 ...

  7. 【FPGA】基于HLS的全连接神经网络手写体识别

    目录 一 系统分析 1.1 全连接神经网络简介 二 通过HLS 编写全连接神经网络传入权重参数和偏置参数文件 2.1  获得图片.权重以及偏置的参数 2.2 编写C语言的全连接算子 2.3 Slave ...

  8. 【FPGA教程案例91】机器视觉2——通过FPGA实现基于肤色模型的人脸检测,使用MATLAB辅助测试

    FPGA教程目录 MATLAB教程目录 本课程成果预览(将FPGA处理结果导入到matlab显示效果) 目录 1.软件版本 2.基于肤色模型的人脸检测原理

  9. python fpga chips_基于FPGA实现JESD204B高速接口设计

    曹鹏飞 摘 要:JESD204B接口是高速ADC和DAC芯片采用的数据通信接口之一,具有传输速率高,抗干扰能力强,芯片间同步方便等优点.目前国内JESD204B 接口应用多由国外集成芯片提供,缺乏自主 ...

最新文章

  1. 《数学之美》第21章 拼音输入法的数学原理
  2. 第19课:Spark高级排序彻底解密
  3. Qt Creator添加Qt版本
  4. .net core i上 K8S(五).netcore程序的hostip模式
  5. Beego开源项目 收藏
  6. k8s ubuntu cni_周一见 | CNCF 人事变动、最新安全漏洞、K8s 集群需警惕中间人攻击...
  7. java之IO整理(下)
  8. [转]Qt 之 QFileSystemWatcher
  9. NOIP经典基础模板总结
  10. 制作一个遍历当前子目录的Makefile
  11. 怪物之心无法触发_《勇者斗恶龙 怪兽篇:旅团之心》怪物生方法及生规则研究 - 电玩巴士...
  12. 不完全遍历Csrss进程中的句柄表
  13. centos-7版本 安装向日葵远程
  14. 计算机电子管与晶体管区别,电子管、晶体管与集成电路 扫盲
  15. 硬件系列(一)----------WIFI打印机之使用socket进行打印机搜索
  16. Python有限状态机FMS结合测试用例
  17. 入职一家初创公司第一周的血与泪
  18. 【自然语言处理】【检索】GENER:自回归实体检索
  19. Java Lambda 表达式-Steam之两个list间交集、并集、差集
  20. Android创建杀不死的Service

热门文章

  1. 三星note5 android版本,三星Note5型号大全
  2. 无从下手的数字音频处理器?我来教你怎样玩
  3. 论文阅读——基于观测数据的时间序列因果推断综述
  4. 中国城市政治地位,政治地位决定一切!!!
  5. linux系统下新增vg大小
  6. 汇编语言与接口技术(速通版)
  7. linux shell中 '' ``的区别
  8. quartz 取消任务的正确做法
  9. 销售员与客户沟通的思路都有哪些
  10. linux运行reggen文件,Linux启动问题——记Virtex-II Pro(PPC405)Linux内核移植