孩子都能学会的FPGA:第二十一课——用线性反馈移位寄存器实现伪随机序列

news2025/2/26 19:54:31

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真(前提是安装了modelsim),降低了初学者的门槛。如需整个工程请留言(WX:Blue23Light),不收任何费用,但是仅供参考,不建议大家获得资料后从事一些商业活动!

前面的仿真一直说到仿真的数据用到的是随机数,verilog仿真的时候有提供产生随机数的命令random,很多读者可能会问,既然FPGA这么强大,用FPGA不能产生随机数吗?这个当然是可以的,用FPGA产生真正的随机数可能会相对麻烦一些,但是产生伪随机数还是非常简单的。

FPGA产生伪随机序列可以用线性反馈移位寄存器来实现,线性反馈移位寄存器(linear feedback shift register, LFSR)是指给定前一状态的输出,将该输出的线性函数再用作输入的移位寄存器。异或运算是最常见的单比特线性函数:对寄存器的某些位进行异或操作后作为输入,再对寄存器中的各比特进行整体移位。

寄存器的初始值叫做“种子”,因为线性反馈移位寄存器的运算是确定性的,所以,由寄存器所生成的数据流完全决定于寄存器当时或者之前的状态。而且,由于寄存器的状态是有限的,它最终肯定会是一个重复的循环。然而,通过本原多项式, 线性反馈移位寄存器可以生成看起来是随机的且循环周期非常长的序列。移位寄存器结构简单,运行速度快,实用的密钥流产生器大多基于移位寄存器,移位寄存器理论也成了现代流密码体制的基础。

线性反馈移位寄存器的应用包括生成伪随机数,伪随机噪声序列,快速数字计数器,还有扰频器。线性反馈移位寄存器在硬件和软件方面的应用都非常得普遍。循环冗余校验中用于快速校验传输错误的数学原理,就与线性反馈移位寄存器密切相关。

上面说到了本原多项式,可以理解成我们常说额特征多项式,如下所示,gm为多项式的系数,对于二进制,多项式系数只能为1或0

LFSR结构如下图所示,每一位的值等于前一位的移位值与最后一位反馈值取异或,即Q(k)=Q(k-1)^(gk*Q(n))。

LFSR的结构图可以看出LFSRFPGA实现非常简单,我们来实现X^7+X^6+X^5+X^4+1这个本原多项式。整个代码如下所示,非常的简单。

在仿真里面设置初始值是7,双击sim目录下的top_tb.batmodelsim的仿真结果如下所示,rand_out取无符号的整数,基本上是符合随机数分布的。

如果想让数据的随机性更强一些,可以不定时的改变移位寄存器的初始值,如下所示,定义了一个寄存器cnt用于减法计数,每计数到0就取当前的rand_out重新组合后进行计数,进一步增加了cnt随机性。

modelsim的仿真如下所示。

读者也可以自己设计,多加入一些随机的因素,让数据更加的随机,同时也可以试试不同的本原多项式,或者取不同长度的移位寄存器,看看生成随机数的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1285398.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

神经网络常用归一化和正则化方法解析(一)

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

CRM:提升营销效果的关键

一场成功的营销活动,可以帮助企业扩大知名度,获取大量的优质商机。作为专业的管理软件,CRM系统同样具备营销管理的能力,帮助企业实现营销活动的规划、执行和监控,提高营销效果。下面说说,CRM营销自动化对企…

职场人的年底总结,年初规划,又要开始啦!

在2023年,你可能错过了某些重要的职业发展机会,或者错失了一些与家人和朋友共度的时光。也可能经历了企业的降本增效,面临了被否定和裁员的风险;或者是得到了企业的重用和提拔,一个人撑起了整个业务部门。这些经历不仅…

Python中函数添加超时时间,Python中signal使用

from time import time, sleepimport signal# 模拟要删除5条数据,中间有超时的i 5# 超时后执行的方法def timeout_handler(signal, frame):# 引发异常raise TimeoutError("删除第" str(i) "条,超时!")# 或者执行其他操作,不往外抛异常(超时的函数不会被…

【排障记录】Oracle自动归档清理任务无法进行(windows平台),原因居然是?

前言 接用户求助,生产业务上的一套数据库存在归档文件占用过多磁盘空间的问题(约四万个),需要清理,最好设置成定期自动清理,以减少人工干预。 处置过程 由于Oracle搭建在windows操作系统之上&#xff0c…

spring boot mybatis TypeHandler 源码如何初始化及调用

目录 概述使用TypeHandler使用方式在 select | update | insert 中加入 配置文件中指定 源码分析配置文件指定Mapper 执行query如何转换 结束 概述 阅读此文 可以达到 spring boot mybatis TypeHandler 源码如何初始化及如何调用的。 spring boot 版本为 2.7.17,my…

编译原理词法分析:NFA转DFA(原理+完整代码+可视化实现)

NFA转换为DFA 【本文内容摘要】 什么是DFA通过子集构造法将NFA转换为DFA生成DFA的dot文件并且形成可视化。 如果本文对各位看官有用的话,请记得给一个免费的赞哦(收藏也不错)! 文章目录 NFA转换为DFA一、什么是DFA二、NFA转换为…

java表达式、java中jexl3的使用,java中jexl3如何自定义函数方法,jexl3自定义函数怎么传集合数组列表

引入jexl3 <dependency><groupId>org.apache.commons</groupId><artifactId>commons-jexl3</artifactId><version>3.2.1</version> </dependency> 基本用法 //引入对应包 import org.apache.commons.jexl3.*;public class …

【STM32入门】3.OLED屏幕

1.OLED引脚 OLED屏幕的接线按图所示&#xff0c;本例中用的是4管脚OLED屏幕 2.驱动程序 配套的驱动程序是“OLED.c"&#xff0c;主要由以下函数构成&#xff1a;1、初始化&#xff1b;2、清屏&#xff1b;3、显示字符&#xff1b;4、显示字符串&#xff1b;5、显示数字…

杀虫剂市场分析:2022年市场规模突破100亿元

杀虫剂是杀死害虫的一种药剂&#xff0c;目前杀虫剂主要应用在农业种植领域中&#xff0c;其中水稻的应用占比最大。杀虫剂的分类繁多&#xff0c;目前市场上主要以有机磷杀虫剂等为主流。 杀虫剂是指被用于杀死昆虫或防止昆虫进行破坏性行为的化学物质&#xff0c;杀虫剂的种类…

C盘爆满,python pip无法安装应用

解决方法1 C盘扩容 从其他盘压缩空间&#xff0c;C盘使用压缩的空间进行扩容&#xff0c;治标不治本&#xff0c;以后C盘还会越来越大 解决方法2 转移pip安装目录 1. 获取显示pip安装目录 C:\Users\biewang>pip show pip Name: pip Version: 23.3.1 Summary: The PyPA r…

品牌保护与知识产权:跨境电商中的法律挑战与解决方案

随着跨境电商的蓬勃发展&#xff0c;品牌保护和知识产权问题日益成为业界关注的焦点。在全球范围内进行电商业务&#xff0c;涉及到多国法律法规的复杂性&#xff0c;品牌所有者需要面对一系列法律挑战&#xff0c;保护其品牌和知识产权不受侵害。本文将深入探讨跨境电商中面临…

操作系统概论:揭秘计算机背后的神秘力量

操作系统概论 & 功能 概述定义操作系统功能作为系统资源的管理者向上层提供方便易用的服务作为最接近硬件的层次 主页传送门&#xff1a;&#x1f4c0; 传送 概述 概念&#xff1a; 定义 控制和管理计算机硬件和软件资源的程序一种系统软件为上层用户、应用程序提供简单易…

关于对ArrayBlockingQueue 的AQS探究

1、介绍 条件队列是 AQS 中最容易被忽视的一个细节。大部分时候&#xff0c;我们都用不上条件队列&#xff0c;但是这并不说明条件队列就没有用处了&#xff0c;它反而是我们学习生产者-消费者模式的最佳教材。条件队列是指一个阻塞队列&#xff0c;其中的元素是等待某个条件成…

派对的最大快乐值

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 派对的最大快乐值 &#x1f48e;总结 派对的最大快乐值 题目 员工信息的定义如下&#xff1a; 公司的每个员工都符合 Employee 类的描述。整个公司的人员结构可以看作是一棵标准的、没有环的多叉树。树的头节点是公…

Win环境中安装Jenkins指南

目录 安装Java环境 下载并安装Jenkins Jenkins版本 启动Jenkins 如何删除Jenkins 安装Java环境 访问 Oracle官方网站 下载并安装JDK 安装完成后&#xff0c;设置系统环境变量 JAVA_HOME 到你的 JDK 安装路径&#xff0c;并将 %JAVA_HOME%\bin 添加到系统 PATH 中。 下载…

css实现姓名两端对齐

1.1 效果 1.2 主要代码 text-align-last: justify; 1.3 html完整代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

外包干了3年,技术退步明显...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

【UE】UEC++ CurveFloat、CurveVector、CurveLinearColor

目录 【UE】UEC CurveFloat、CurveVector、CurveLinearColor 一、CurveFloat 二、CurveVector 三、CurveLinearColor 四、材质设置 五、运行结果 【UE】UEC CurveFloat、CurveVector、CurveLinearColor 一、CurveFloat #pragma once#include "CoreMinimal.h" …

人工智能时代AIGC绘画实战

系列文章目录 送书第一期 《用户画像&#xff1a;平台构建与业务实践》 送书活动之抽奖工具的打造 《获取博客评论用户抽取幸运中奖者》 送书第二期 《Spring Cloud Alibaba核心技术与实战案例》 送书第三期 《深入浅出Java虚拟机》 送书第四期 《AI时代项目经理成长之道》 …