量子隧道 发表于 2025-2-8 16:24:43

(继续折腾树莓派)LFSR伪随机数高速生成

本帖最后由 量子隧道 于 2025-2-8 16:42 编辑

近日正经事太多,脑袋绷得紧紧的,没时间折腾业余爱好(学习Raspberry Pi Pico)。借着下午有一小会时间,搞一搞。这次试试用MCU以全速工作能产出多快的伪随机码。
伪随机码一般以线性移位寄存器(LFSR)来产生。这玩意是个神奇的结构,以几十bit就能生成比宇宙年龄还长的随机序列。在密码,通信领域有大量应用。下图是搬运自我推崇备至的AOE。



代码:
#include <Arduino.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"

unsigned long LFSR=0x7fffffff;

void setup() {
// 设置 GPIO 为输出模式
for(int i=0;i<=29;i++){
    pinMode(i,OUTPUT);
}
sio_hw->gpio_oe_set = (0x3fffffff);

while(1){
    LFSR = (LFSR<<1) | (((LFSR>>30)^(LFSR>>27)) & 0x00000001);
    sio_hw->gpio_out = LFSR ;
}

}

void loop() {
}


测得:



其中一路是另一路的1bit延迟。这是因为探头夹在了相邻两个GPIO上。

每生成一个新(伪随机)数需要45nS。这个树莓派被我调成时钟频率5nS了。所以那个while loop需要9个clock tick循环一圈。这应该是极限了。这也超过了90年代的硬件随机数发生器了。若用PLD的话可以把9缩成1。

因为所有20多个管脚同时输出,并且相互间是时移关系,所以电路板上还可以对这20多个bit做加权求和,模拟sinx/x函数等,做LPF加高斯白噪音生成。

试过双核一起干,分担工作量,结果一圈循环花的时间更多。想来是两个核访问同一个变量的竞争和调度带来的延迟。所以双核通信看起来需要大数据量倒换才高效。

小实验,小玩具,小结论,博君一笑尔。

scoopydoo 发表于 2025-2-9 22:40:47

量子隧道 发表于 2025-2-9 22:27
这是在天朝,可以合法得瑟。所以不能无愧于作者,我尽量多宣传一下这两位作者的这本书,也算给他们爆点知 ...

这件事情的底线是不能拿来牟利,书还算是便宜的,价值几千几万的软件照样拿来“学习或研究”,大家都这么干。

另外俺给自己做好了心理建设,逻辑是这么贵的书无论如何俺都不会买的,因此作者没有任何损失。

;P

scoopydoo 发表于 2025-2-8 17:30:40

是不是下一步就要搞 PIO 版本的了?

量子隧道 发表于 2025-2-8 17:58:38

scoopydoo 发表于 2025-2-8 17:30
是不是下一步就要搞 PIO 版本的了?

正有此意。上次看RP2040手册看到PIO指令集那块中断了。待我看完PIO部分再想能不能做。

dirtyacc 发表于 2025-2-8 18:20:01

推崇的“AOE”是什么,网站?

量子隧道 发表于 2025-2-8 18:20:55

dirtyacc 发表于 2025-2-8 18:20
推崇的“AOE”是什么,网站?

art of electronics,一本书。

dirtyacc 发表于 2025-2-8 18:25:23

量子隧道 发表于 2025-2-8 18:20
art of electronics,一本书。

哦哦,这书我正在看pdf,中文版只有第二版,英文版有第四版了,稍微对比了一下前面的,感觉更新挺多的

scoopydoo 发表于 2025-2-8 18:48:16

本帖最后由 scoopydoo 于 2025-2-8 18:51 编辑

dirtyacc 发表于 2025-2-8 18:20
推崇的“AOE”是什么,网站?

作为一名游戏迷,提起 AOE 俺首先想到的是 Age of Empires (帝国时代),或者山口山里面的 AOE (群伤、群疗):lol

这本书不知道算是番外篇还是姊妹篇也不错!

量子隧道 发表于 2025-2-8 18:55:32

scoopydoo 发表于 2025-2-8 18:48
作为一名游戏迷,提起 AOE 俺首先想到的是 Age of Empires (帝国时代),或者山口山里面的 AOE (群伤、 ...

这本X篇我是先看的,我觉得好料的密集程度比非X篇更高。

MT4S301 发表于 2025-2-8 19:09:40

是不是几颗QFN封装的74ALVC门也能做伪随机;P

量子隧道 发表于 2025-2-8 19:13:10

MT4S301 发表于 2025-2-8 19:09
是不是几颗QFN封装的74ALVC门也能做伪随机

肯定能啊。还见有人用LVPECL门和触发器,在PCB上搭出超级快,Gbps+的数字伪随机发生器。

MT4S301 发表于 2025-2-8 19:32:11

本帖最后由 MT4S301 于 2025-2-8 19:33 编辑

量子隧道 发表于 2025-2-8 19:13
肯定能啊。还见有人用LVPECL门和触发器,在PCB上搭出超级快,Gbps+的数字伪随机发生器。

说到PECL就头疼,之前搓了cross-coupled pair振荡器+波形放大,
原理图已经调出来但PCB走线(双层板上)走不通。差分对称、供电皮、地平面至多顾及2项
说买点小信号NMOS来做无源混频器的,便卡住了:Q
洛彻司特公司有海量BF11〇8存货.......

dirtyacc 发表于 2025-2-9 00:40:27

scoopydoo 发表于 2025-2-8 18:48
作为一名游戏迷,提起 AOE 俺首先想到的是 Age of Empires (帝国时代),或者山口山里面的 AOE (群伤、 ...

x chapter能分享一下吗?

scoopydoo 发表于 2025-2-9 01:19:10

dirtyacc 发表于 2025-2-9 00:40
x chapter能分享一下吗?

俺手里这个版本有 262MB 太大了,俺在国外,国内的网盘因为没有手机无法注册使用。国外的网盘如果你懂得科学上网的话,我可以放上去。

量子隧道 发表于 2025-2-9 09:07:00

dirtyacc 发表于 2025-2-9 00:40
x chapter能分享一下吗?

扔个邮箱号,我发给你

scoopydoo 发表于 2025-2-9 15:09:55

量子隧道 发表于 2025-2-9 09:07
扔个邮箱号,我发给你

老兄手里的版本文件有多大?
页: [1] 2
查看完整版本: (继续折腾树莓派)LFSR伪随机数高速生成