随机性在许多嵌入式应用中扮演着至关重要的角色,从加密安全到游戏和模拟。
但是您知道您可以使用可配置逻辑块(CLB)直接在8位微控制器上实现基于硬件的伪随机数生成器(PRNG)吗?
在本文中,我们将探讨如何创建一个利用 CLB 和 SPI 外设的 PRNG。这种硬件驱动的方法以最小的CPU开销实现了高效和连续的随机数生成。
什么是 PRNG ?
伪随机数生成器(Pseudo-Random Number Generator, PRNG)通过确定性算法生成模拟真正随机性的数字序列,这些序列是可重复的,因此非常适合资源受限的环境,在这些环境中,高效和可控的随机性对您的设计至关重要。
第一个图说明了 PRNG 整体操作所需的逻辑。第二张图强调了8位左反馈移位寄存器所需的逻辑,这是负责生成伪随机序列的关键组件。
image865×437 71.3 KB
图 1 :使用 LFSR 、 CLB 和 SPI 实现 PRNG 的概念概述。
image865×189 29.4 KB
图 2:PRNG LFSR 配置框图。
原理图
PRNG通过以下方式实现:
PRNG 以非零种子值初始化,确保连续运行并防止执行期间锁定。
实现概述
硬件需求
带有CLB和SPI外设的单片机 PIC16F13145Curiosity Nano 开发板带有 CLB 和 SPI 外设的微控制器(例如PIC16F13145)
用于配置的 MPLAB ® 代码配置器( MCC )
配置步骤
image865×189 29.4 KB
代码示例
PRNG输出通过SPI (SS, SDI, SCK)和UART验证伪随机数,由板载开关使用
int main(void) { SYSTEM_Initialize(); SPI_Open(CLIENT_CONFIG); __delay_ms(100); while (1) { if (SWITCH_GetValue() == 0) { if (SPI1_IsRXReady()) printf("\n\rRead byte: %x", SPI1_ByteRead()); } } }
测试及结果
通过UART或示波器观察SPI引脚上的输出来验证PRNG。生成的序列表现出一致的伪随机行为,如下所示:
image865×371 79 KB
图 3 :在测试期间捕获的样本 PRNG 输出。
基于 CLB 的 PRNGs 应用
加密功能数据爬游戏的算法仿真和建模
通过利用基于硬件的逻辑,这种方法减少了 CPU 工作负载,简化了系统设计。