FPGA项目开发:基于FPGA的伪随机数发生器(附代码)

今天是画师和各位大侠见面了,执笔绘画FPGA江湖,本人写了篇关于FPGA的伪随机数发生器学习笔记,这里分享给大家,仅供参考。

一、概念

随机数是专门的随机试验的结果,产生随机数有多种不同的方法。这些方法被称为随机数生成器。随机数最重要的特性是它在产生时后面的那个数与前面的那个数毫无关系。随机数分为三类,分别是伪随机数、密码学安全的伪随机数以及真随机数。

本次设计为基于FPGA生成的伪随机数发生器,什么是伪随机数呢?统计学伪随机性指的是在给定的随机比特流样本中,1的数量大致等于0的数量,同理,“10”“01”“00”“11”四者数量大致相等。类似的标准被称为统计学随机性。满足这类要求的数字在人类“一眼看上去”是随机的。

在实际应用中往往使用伪随机数就足够了。这些数列是“似乎”随机的数,实际上它们是通过一个固定的、可以重复的计算方法产生的。计算机或计算器产生的随机数有很长的周期性。它们不真正地随机,因为它们实际上是可以计算出来的,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。

二、设计原理

本次设计采用线性反馈移位寄存器(Linear Feedback Shift Register, LFSR)来实现伪随机数发生器。线性反馈移位寄存器是指,给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。

线性反馈移位寄存器通常由动态或静态主从型触发器构成。反馈回路由异或门构成。其特性通常由一个特征多项式表征。LFSR结构如下图所示:

图1 LFSR结构示意图

对应的特征多项式为:

Gm为多项式的系数,而多项式系数只能为1或0。

利用LFSR生成伪随机数,需要给它一个随机种子(seed),由于它是由N个触发器和异或门组成,所以种子不能给全0,如果给的全0,将会陷入0的死循环一直出不来,就得不到我们想要的伪随机数,在设计时,我们可以给一个任意不为0的数。

基于以上原理,我们使用本原多项式x^32+x^7+x^5+x^3+x^2+x+1来构造最大周期的LFSR。

三、架构设计

设计架构如下图:

将输入时钟命名为clk,复位信号命名为rst_n,输入有效信号命名为ivalid,输入的随机种子命名为seed[31:0],生成的随机数命名为data[31:0]。

四、Verilog 代码实现

代码中data <= seed部分也可以不需要,不用输入有效信号以及随机种子,直接初始化为非零值也可。如直接初始化为非零值,则仿真代码只需进行复位即可。

设计实现代码如下:

module PRNG(input      wire               clk,input      wire               rst_n,input      wire               ivalid,input      wire      [31:0]   seed,output     reg       [31:0]   data
);always @ (posedge clk,negedge rst_n) beginif (rst_n == 1'b0)data <= 32'd0;else if (ivalid == 1'b1)data <= seed; else begindata[0] <= data[31];data[1] <= data[0] ^ data[31];data[2] <= data[1] ^ data[31];data[3] <= data[2] ^ data[31];data[4] <= data[3];data[5] <= data[4] ^ data[31];data[6] <= data[5];data[7] <= data[6] ^ data[31];data[8] <= data[7];data[9] <= data[8];data[10] <= data[9];data[11] <= data[10];data[12] <= data[11];data[13] <= data[12];data[14] <= data[13];data[15] <= data[14];data[16] <= data[15];data[17] <= data[16];data[18] <= data[17];data[19] <= data[18];data[20] <= data[19];data[21] <= data[20];data[22] <= data[21];data[23] <= data[22];data[24] <= data[23];data[25] <= data[24];data[26] <= data[25];data[27] <= data[26];data[28] <= data[27];data[29] <= data[28];data[30] <= data[29];data[31] <= data[30];endendendmodule

五、仿真测试及结果

仿真代码如下:

`timescale 1ns/1psmodule PRNG_tb;reg                 clk;reg                 rst_n;reg                 ivalid;reg       [31:0]    seed;wire      [31:0]    data;PRNG PRNG_inst(.clk            (clk),.rst_n          (rst_n),.ivalid         (ivalid),.seed           (seed),.data           (data));initial clk = 1'b0;always # 5 clk = ~clk;initial beginrst_n = 1'b0;ivalid = 1'b0;seed = 32'd0;# 201;rst_n = 1'b1;#200;@ (posedge clk);# 2;ivalid = 1'b1;seed = {$random} % 4294967295;@ (posedge clk);# 2;ivalid = 1'b0;seed = 32'd0;#200000;$stop;endendmodule

本次仿真采用100M时钟进行,输入种子为非零随机数。

六、总结

以上是经过学习,集合了各家所长得到的结果。由于想做一个32位的伪随机数发生器,在网上找了各种资料,并没有找到有规定的标准多项式,于是随意定了一个。在实际运用当中,如果有标准的多项式系数,可能得到了一个伪随机数,就可以根据已知的特征式得出后面的结果,安全性也就大大降低了。

【QQ交流群】

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

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

【微信交流群】

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

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

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

FPGA项目开发:基于FPGA的伪随机数发生器(附代码)相关推荐

  1. FPGA项目开发:204B实战应用-LMK04821代码详解(二)

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...

  2. FPGA项目开发之时钟规划

    FPGA项目开发之时钟规划 当我刚开始我的FPGA设计生涯时,我对明显更小.更不灵活的 FPGA(想想 XC4000XL / Clcyone3/4和 Spartan)和工具的非常简单的时钟规则之一是尽 ...

  3. gwo算法matlab源代码,智能优化算法应用:基于GWO优化BP神经网络 - 附代码

    智能优化算法应用:基于GWO优化BP神经网络 - 附代码 智能优化算法应用:基于GWO优化BP神经网络 - 附代码 智能优化算法应用:基于GWO优化BP神经网络 文章目录智能优化算法应用:基于GWO优 ...

  4. FPGA项目开发:基于JESD204B的LMK04821芯片项目开发经验分享

    大侠好,阿Q来也,今天头一次和各位见面,请各位大侠多多关照.今天给各位大侠带来一篇项目开发经验分享"基于JESD204B的LMK04821芯片项目开发",这是本人实打实的项目开发经 ...

  5. fpga项目开发实例_深入浅出玩转FPGA书+视频教程:35课时+源码

    欢迎FPGA工程师加入官方微信技术群 点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群 <深入浅出玩转FPGA(第3版)>收集整理了作者在FPGA项目实践中的经验点滴.书中 ...

  6. 【FPGA,MPPT】基于FPGA的MPPT最大功率跟踪系统verilog开发

    1.软件版本 MATLAB2019a,ISE14.7 2.本算法理论知识 MPPT,我们采用的是 FPGA的设计结构如下: 这里, 第一,使用MATLAB模拟出光伏设备PV输出的电流和电压数据,尽量贴 ...

  7. imut FPGA课设 基于FPGA的VGA弹球游戏设计 *秋昊

    写在前面的话: 本文主要呈现了一篇IMUT的FPGA课设报告. 课设报告内容(word版),视频演示,程序源码,专业创新实践简介,专业创新实践指导书均已放入下面的百度云链接中,也不大,总共不到20MB ...

  8. Matlab与FPGA图像处理系列——基于FPGA的实时边缘检测系统设计,sobel边缘检测流水线实现

    注:下载链接的资源是图片存 ROM 后读取进行 Sobel 检测显示在 VGA上,可供参考. 摘要:本文设计了一种基于 FPGA 的实时边缘检测系统,使用OV5640 摄像头模块获取实时的视频图像数据 ...

  9. 【FPGA实例】基于FPGA的DDS信号发生器设计

    原文链接来源:www.runoob.com 基于FPGA的DDS信号发生器设计 DDS 原理 ------DDS(直接频率合成) 技术是根据奈奎斯特抽样定理及数字处理技术,把一系列的模拟信号进行不失真 ...

最新文章

  1. String Replace 不区分大小写的方法
  2. mariadb mysql同步_mysql/mariadb 主从复制实现数据库同步
  3. Algorithm:【Algorithm算法进阶之路】之十大经典排序算法
  4. Redis学习之复制(三)
  5. leetcode142. 环形链表 II(暴力+双链表)
  6. 编译原理(四)之解析语言翻译成三地址代码
  7. framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)
  8. 如何使用HTML5创建在线精美简历
  9. Python自动登录QQ
  10. java机甲类回合制游戏,课内资源 - 基于java的RPG回合制游戏
  11. Android Studio与夜神模拟器联合调试
  12. 图片处理之thumbnailator和TwelveMonkeys的使用
  13. 用python画一个机器猫歌词_用Python语言模型和LSTM做一个Drake饶舌歌词生成器!自己蒙了!...
  14. 百度智能云智慧监管平台落地宁波,物联网加持赋能安全生产
  15. 计算机专业英语第12章在线测试答案,计算机专业英语第章在线测试.doc
  16. 计算机机房消房安全管理制度,计算机机房消防安全管理制度
  17. PACS—医学影像信息化的基础
  18. 苹果cms播放器不能全屏播放解决方法
  19. Kubernetes:基于命名行终端/ Web 控制台的管理工具 kubebox
  20. Metasploit技术(四)——进程迁移

热门文章

  1. KOOM原理分析之一些基础知识
  2. 22、关于破解滑动的验证码
  3. pandas将dataframe中的NaN替换成None
  4. 驾校课程推荐: 【科目二】这应该是目前我见过的最好 最详细的科目二教学视频
  5. Linux串口编程最全详解-一个努力奋斗的少年
  6. 浅理解扁平数据结构转Tree(树形结构)
  7. IIS 互联网信息服务(Internet Information Server)
  8. 2021,拥抱变化,不断成长
  9. SAP BASIS ADM100 中文版 Unit 1(1)
  10. 多线程异步提高RK3588的NPU占用率,进而提高yolov5s帧率