基于线性反馈移位寄存器的伪随机数生成器(VHDL)

逻辑设计主页

功能特性

以下内容基于Lattice Diamond设计软件2.0.1版本展开。

• 线性反馈移位寄存器概述
• 利用中心极限定理与反馈机制调整分布形态
• LFSR_Plus.vhd核心模块的基本选项与配置
• 输出分布示例(直方图)
• 通过测试平台将伪随机数写入文件

简介

本VHDL模块采用两个具有最大序列长度多项式的线性反馈移位寄存器(LFSR),其中一个是可调输出字长(4至24位),另一个用于生成非均匀占空比时钟。模块提供四种输出分布类型:高斯单峰分布、双峰分布、均匀分布及非均匀分布。通过以下方式构建这些分布:使用非均匀时钟不规则触发可调LFSR输出,将缩放输出导入缓冲加法器树以应用中心极限定理生成正态分布,并利用反馈回路进一步调整分布形态。后附图表包含示例直方图。

LFSR_Plus.vhd模块通过将伪随机值写入文件进行测试平台验证。可将该数据导入常用统计分析软件包进行验证。本示例使用Excel统计插件包生成直方图。

背景知识

LFSR是任意长度的移位寄存器,其输入基于前态线性函数计算得出。该函数经选择可产生最大长度序列。当输出位宽调整时,系统会构建具有最大长度多项式的新LFSR。所用多项式已在VHDL模块中注释说明。

本设计所需/使用的软件:

• Lattice Diamond设计软件2.0.1版,配合第三方软件Synplify Pro for Lattice及Active-HDL Lattice版

应用场景

电路构建

通过修改LFSR_Plus.vhd模块实体块中的泛型参数值进行配置。输出字宽可在4至24位间调整。可选择输出分布的类型。通过修改模块实体中的通用参数"V"值,可调整用于时钟控制的LFSR大小。模块内的注释提供了进一步指导。

该设计具有两个输出端口"u_noise_out"和"g_noise_out"以加速验证,仿真时可同时写入两个文件。通过模块内少量VHDL代码修改,可将完整功能整合至单一输出端口。

图1展示了4位单峰均匀输出实现的RTL结构图。

1 - LFSR_Plus RTL 结构图

采用(w-1)位宽总线移位FIFO实现中心极限定理,生成高斯分布。"g_noise

2 - “g_noise_out” 端口 6 位单峰分布

3 - “g_noise_out” 端口 6 位双峰分布

4 - “g_noise_out” 端口 8 位单峰分布

5 - “g_noise_out” 端口 8 位双峰分布

6 - “g_noise_out” 端口 10 位单峰分布

7 - “g_noise_out” 端口 10 位双峰分布

8 - “g_noise_out” 端口 13 位单峰分布

9 - “g_noise_out” 端口 13 位双峰分布

10 - “g_noise_out” 端口 19 位单峰分布

11 - “g_noise_out” 端口 19 位双峰分布

12 - “g_noise_out” 端口 21 位单峰分布

13 - “g_noise_out” 端口 21 位双峰分布

"u_noise_out"端口采样分布直方图见图14至图17。

14 - “u_noise_out” 端口 8 位均匀分布

15 - “u_noise_out” 端口 8 位平均均匀分布

16 - “u_noise_out” 端口 19 位均匀分布

17 – “u_noise_out” 端口输出的 19 位均值均匀分布

随附的测试平台是通过“HDL图表”窗口中的“生成测试平台模板”命令创建的。通过阅读VHDL注释来理解“noise_gen_tb.vhd”文件。创建并打开两个文件用于写入;“g_noise_out”和“u_noise_out”的输出数据被写入这些打开的文件中。模拟时间需足够长,以生成具有统计意义的数据量。

设计软件

使用Lattice Diamond设计软件2.0.1版开发“LFSR_Plus.vhd”,并得到Synopsys(Synplify Pro for Lattice)和Aldec(Active-HDL Lattice Edition)的支持软件辅助。Diamond可作为独立开发环境,配合其他综合与仿真软件使用。

结论

本设计展示了基于LFSR的伪随机序列生成器在Lattice Diamond设计软件中的应用。测试平台突显了该软件打开文件并写入输出数据以供仿真后分析的功能。

附加信息

更多设计支持、产品教程、应用笔记、用户指南及其他文档可在Lattice官网上查阅

附录:下载资源

LFSR_Plus.vhd (11.2 KB)
noise_gen_tb.vhd (3.2 KB)