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

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

3天内不再提示

MAX765x微处理器的伪随机数生成例程

星星科技指导员 来源:ADI 作者:ADI 2023-03-01 15:28 次阅读

本应用笔记给出了使用MAX7651/52微控制器和12位模数转换器ADC)生成随机数的功能。

扩频通信、安全、加密和调制解调器等应用需要生成随机数。实现随机数发生器的最常见方法是线性反馈移位寄存器(LFSR)。LFSR生成的代码实际上是“伪”随机的,因为一段时间后数字重复。诀窍是使用足够长度的移位寄存器,以便模式在极长时间后重复。

长度为 1 的基本 LFSR 如图 <> 所示。移位寄存器是一组串联的触发器,具有异或反馈。异或门用于对输入位进行加扰。

poYBAGP-_rOAWarmAAAViuADkfo522.gif


图1.5级线性反馈移位寄存器。

有些表格提供了正确的反馈抽头位置,用于生成需要最大时钟数重复的序列。下表如下所示:

表 1.用于最大长度 2 至 32 位 LFSR 的抽头

位数 循环长度 Taps
2 3* [0,1]
3 7* [0,2]
4 15 [0,3]
5 31* [1,4]
6 63 [0,5]
7 127* [0,6]
8 255 [1,2,3,7]
9 511 [3,8]
10 1023 [2,9]
11 2047 [1,10]
12 4095 [0,3,5,11]
13 8191* [0,2,3,12]
14 16,383 [0,2,4,13]
15 32,767 [0,14]
16 65,535 [1,2,4,15]
17 131,071* [2,16]
18 262,143 [6,17]
19 524,287* [0,1,4,18]
20 1,048,575 [2,19]
21 2,097,151 [1,20]
22 4,194,303 [0,21]
23 8,388,607 [4,22]
24 16,777,215 [0,2,3,23]
25 33,554,431 [7,24]
26 67,108,863 [0,1,5,25]
27 134,217,727 [0,1,4,26]
28 268,435,455 [2,27]
29 536,870,911 [1,28]
30 1,073,741,823 [0,3,5,29]
31 2,147,483,647* [2,30]
32 4,294,967,295 [1,5,6,31]

* 长度为素数的序列

请注意,有多种解决方案可以生成抽头位置 最大长度序列。

使用 LFSR 存在一个主要问题:如果所有阶段都恰好是 “0”,移位寄存器被“卡住”。这是因为 所有“0”的异或仍然是“0”。异或反馈确实 不生成“1”来重新开始序列。为了防止 在这种情况下,例程必须首先加载非零 种子价值。此值可以是任何数字,只要它不是 零。LFSR 生成的数字基于种子值。你 将一遍又一遍地获得相同的数字序列,除非在某个时候 LSFR 重新加载了不同的种子。

这个种子价值从何而来?这将取决于可用的内容 在您的特定应用程序中。例如,如果您的系统可以访问 到RTC(实时时钟),那么一个好的种子是基于时间的。你 可以读取当前时间和/或日期,屏蔽部分并使用它 作为种子。另一个例子是温度。如果您的系统可以读取温度 (假设它不是恒定的)那么这可以成为一颗好种子。的 ADC MAX765x可设置为读取各种内容: 刻度交流电源线 电压、某些传感器位置甚至放大齐纳的约翰逊噪声 二极管(密码学中的常见做法)。

但是,在某些情况下,您只需要使用 01H 或其他数字, 并接受序列最终将重复的事实,并且 预定模式。

呈现的例程使用 25 位序列,该序列在 叫了33万次。即使你不能生产一个独特的种子 时间,长度使得在大多数应用程序中,“随机性”是 绰绰有余。

MAX765x列表如下所示。例程使用四个 8 位内存 标记为 RN1-RN4 的位置。较低的 3 字节 RN1-RN3 用于 24 位, RN4 的 MSB 是第 25 位。该算法使用 XOR 反馈(使用 处理器的 XRL 指令)来自“阶段”25(进位 位)和阶段 7(RN1 的 MSB)。因为所有的抵抗者都只是 RAM 位置,您可以形成最多 32 位宽的随机数。为此 例如,在例程结束时,将 8 位数字 RANNUM 存储在 RAM 中。

要获得随机数的真实高斯分布函数,您需要 可以做进一步的处理。添加任意数量的连续 样本和取平均值(例如 4)将创建高斯分布。

算法中使用的一个编程“技巧”是“字节交换” 模拟“移位 8 个时钟”。这是为了节省 CPU 时钟周期。 例如,如果原始字节顺序是 ABCD,则在字节交换之后 顺序是BCDA。这样可以防止代码必须进行“内务管理” 将一个字节的 MSB 移动到下一个字节的 LSB。这不重要 如果每时钟或每 8 个时钟计算随机数:它们 仍然是随机的。由于LFSR的总长度是3的乘积 质数(31、601 和 1801) 序列仍然是 33,554,431 子程序 调用,直到序列重复!当然,由于我们正在查看 8 在我们的示例中,值限制为 00H 到 0FFH, 因此,相同的值将被多次返回。

审核编辑:郭婷

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

    关注

    31

    文章

    5310

    浏览量

    119983
  • adc
    adc
    +关注

    关注

    98

    文章

    6430

    浏览量

    544051
  • 调制解调器
    +关注

    关注

    3

    文章

    849

    浏览量

    38771
收藏 人收藏

    评论

    相关推荐

    FPGA产生中随机数发生分析

    1. 概念 通过一定的算法对事先选定的随机种子(seed)做一定的运算可以得到一组人工生成的周期序列,在这组序列中以相同的概率选取其中一个数字,该数字称作伪随机数,由于所选数字并不具有完全的
    的头像 发表于 11-21 11:49 3516次阅读
    FPGA产生中<b class='flag-5'>伪</b><b class='flag-5'>随机数</b>发生<b class='flag-5'>器</b>分析

    什么是随机数

    做开发的工程师们应该或多或少都接触过随机数,可能认为它就是一个随机生成的数字嘛,使用时也很简单,只要调用开发语言提供的函数即可。但实际上随机数后面还是有着比较复杂但也有趣的知识点的。根
    发表于 07-22 09:42

    学习笔记 | 基于FPGA的随机数发生(附代码)

    以及真随机数。本次设计为基于FPGA生成随机数发生,什么是
    发表于 04-21 19:42

    C语言中随机数的产生及性能检验

    系统仿真或加密算法中常需要产生满足一定分布函数的 随机数 ,高级程序设计语言中的库函数采用线性同余法产生一个在[0,32767] 服从均匀分布的随机数,但每次程序运行的结果都
    发表于 07-07 16:35 70次下载

    C语言random函数随机数产生

    由C语言的stalib.h库里面的random函数可以得到一个0-0x7FFFh的随机数,当然,调用随机数函数之前,是要进行种子的筛选的,以当前的时间参数作为种子,可以使得
    发表于 08-25 17:56 1.3w次阅读

    C#教程之随机数加密

    C#教程之随机数加密,很好的C#资料,快来学习吧。
    发表于 04-21 09:52 5次下载

    max765x微处理器随机数生成程序

    扩频通信、安全、加密和调制解调等应用需要随机数的产生。实现一个随机数发生的最常用的方法是一个线性反馈移位登记(LFSR)。由一个LFSR生成
    发表于 04-12 09:50 1次下载
    为<b class='flag-5'>max765x</b><b class='flag-5'>微处理器</b>的<b class='flag-5'>伪</b><b class='flag-5'>随机数</b><b class='flag-5'>生成</b>程序

    神经网络的随机数生成方法

    的输入输出,改善了混沌退化对随机数的性能影响,同时,通过与Logistic映射所生成随机序列和可变参数进行异或处理,有效避免了生成序列的重
    发表于 02-02 15:49 0次下载

    随机数生成算法

    在计算机上用数学的方法产生随机数列是目前通用的方法,它的特点是占用的内存少,速度快.用数学方法产生的随机数列是根据确定的算法推算出来的,严格说来并不是随机的,因此一般称用数学方法产生的随机数
    发表于 04-03 10:25 6次下载

    如何在C语言中使用随机数

    通常情况下,使用最多的方法的就是使用rand函数随机生成随机数来完成随机数生成工作。注意这里
    的头像 发表于 11-09 16:46 5145次阅读

    基于FPGA的随机数发生设计方案

    基于FPGA的随机数发生设计方案
    发表于 06-28 14:36 4次下载

    单片机STM32F1随机数生成探索与实践(基于CUBEMX和KEIL5)

    原理产生模拟噪声信号并采集,使用该硬件可以产生真随机数。但是低端单片机,如STM32F1,8051等没有随机数发生,只能利用软件生成
    发表于 12-31 19:12 12次下载
    单片机STM32F1<b class='flag-5'>随机数</b><b class='flag-5'>生成</b>探索与实践(基于CUBEMX和KEIL5)

    如何在200 smart中生成随机数

    上文写了博途中生成随机数的几种办法,现在试着使用其中简单的线性同余法实现在200 smart中完成类似功能。
    的头像 发表于 03-23 13:51 6561次阅读
    如何在200 smart中<b class='flag-5'>生成</b><b class='flag-5'>伪</b><b class='flag-5'>随机数</b>

    FPGA的随机数发生学习介绍

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

    如何使用雪花算法生成真正的随机数

    以前用rand和srand生成随机数随机数的序列是固定的,今天学习生成真正的
    的头像 发表于 10-09 10:05 1279次阅读