具有可配置逻辑块的伪随机数生成器

随机性在许多嵌入式应用中扮演着至关重要的角色,从加密安全到游戏和模拟。
但是您知道您可以使用可配置逻辑块(CLB)直接在8位微控制器上实现基于硬件的伪随机数生成器(PRNG)吗?
在本文中,我们将探讨如何创建一个利用 CLB 和 SPI 外设的 PRNG。这种硬件驱动的方法以最小的CPU开销实现了高效和连续的随机数生成。

什么是 PRNG

伪随机数生成器(Pseudo-Random Number Generator, PRNG)通过确定性算法生成模拟真正随机性的数字序列,这些序列是可重复的,因此非常适合资源受限的环境,在这些环境中,高效和可控的随机性对您的设计至关重要。
第一个图说明了 PRNG 整体操作所需的逻辑。第二张图强调了8位左反馈移位寄存器所需的逻辑,这是负责生成伪随机序列的关键组件。


1 :使用 LFSR CLB SPI 实现 PRNG 的概念概述。


2:PRNG LFSR 配置框图。

原理图

PRNG通过以下方式实现:

  1. 线性反馈移位寄存器( LFSR ): 根据特定轻敲确定的反馈函数生成伪随机序列。
  2. SPI :作为移位寄存器有效地处理输出。

PRNG 以非零种子值初始化,确保连续运行并防止执行期间锁定。

实现概述

硬件需求

用于配置的 MPLAB ® 代码配置器( MCC

配置步骤

  1. 配置CLB:配置CLB以实现PRNG和8位LFSR子模块所需的逻辑。l参考上面的图表进行指导。在模式1中使用SPI移位并观察伪随机输出。
  2. 分配一个稳定的时钟源(例如HFINTOSC)来驱动外设。

代码示例

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。生成的序列表现出一致的伪随机行为,如下所示:

3 :在测试期间捕获的样本 PRNG 输出。

基于 CLB 的 PRNGs 应用

  • 加密功能
  • 数据爬
  • 游戏的算法
  • 仿真和建模

通过利用基于硬件的逻辑,这种方法减少了 CPU 工作负载,简化了系统设计。


了解更多

了解有关实现 prng 和其他可配置逻辑块示例的更多信息: