一种基于FPGA的高频异步随机数发生器的制作方法

文档序号:13660773阅读:469来源:国知局
一种基于FPGA的高频异步随机数发生器的制作方法

本发明属于数据处理技术领域,尤其涉及一种基于fpga的高频异步随机数发生器



背景技术:

随着计算机网络和通信技术的飞速发展,信息数据的安全性越来越重要,密码技术作为信息安全的核心技术也随之得到了迅速的发展。随机数可以在密码算法中用来充当密钥,在认证协议中作为挑战数据,在一些特定的场合用来作为随机填充位或随机掩码等。不仅在信息安全领域随机数发生器有着广泛的应用,在统计学上也得到了广泛的应用。因此,随机数发生器的设计有着十分重要的意义。

目前,在真随机数发生器的设计上主要有三种方案:直接放大法,离散事件混沌法,振荡器采样法。前两者主要用于客户定制的单元设计,都受到器件工艺技术的限制,无法跨工艺重用。此外,采用这些方案设计出来的随机数发生器生成随机数的速率比较低,一般只有几十kb/s。若将其用于信息安全领域,将会严重限制安全通信的效率,将成为安全通信的瓶颈。而采用振荡器采样法,不仅只需要使用普通的逻辑单元,硬件开销小,而且生成随机数的效率高。



技术实现要素:

针对现有技术存在的问题,本发明提供了一种基于fpga的高频异步随机数发生器。

本发明是这样实现的,

一种基于fpga的高频异步随机数发生器设置有采样模块,包括:

采样模块是通过click电路来进行采样,提高随机数产生的频率;

真随机数发生器与采样模块相连接,以多组等长的反相器振荡环路相异或产生的抖动信号作为随机源,通过采样脉冲对其进行采样;

伪随机数发生器由lfsr模块与真随机数发生器相连接构成,采用真随机数对lfsr的输出其进行扰乱,以此来增强伪随机数的随机性;

真伪随机数选择模块,分别与真随机数发生器模块和伪随机数发生器模块相连接,根据自己的需要来对真随机数和伪随机数进行选择。

进一步,所述click电路有两对输入/输出节点,左边一对in_r/in_a用于和左方的click通讯,右方的另一对out_r/out_a用于和右方的click通讯。

进一步,所述真随机数发生器在fpga内部,当2n+1个反相器组成闭合的环路时,可以得到一个高频的振荡信号。

进一步,所述高频振荡器由单脉冲enable信号来启动。

进一步,所述线性反馈移位寄存器由移位寄存器和反馈函数两部分组成。

本发明的优点及积极效果为:

该基于fpga的高频异步随机数发生器采用一种利用数字电路时钟抖动以及相位漂移工作机制,以多组反相器振荡环路作为随机源。伪随机数发生器是基于lsfr设计的,使用真随机数发生器作为其扰动机制,由多个lsfr同时产生,在每个采样信号到来时能产生多比特的数值。本设计采用click电路作为其采样信号,可以提高系统频率。并且设计了一个真伪随机数选择电路,可以任意选择输出的是真随机数还是伪随机数,大大方便的用户的操作,使系统的功能更加完善,可操作性更强。

相比于现有技术的缺点和不足,本发明具有以下有益效果:

1.采用了异步click电路模块来驱动电路,从而极大的提高了随机数产生的频率。由于xilinxvc707开发平台的固有时钟频率是200mhz,若采用同步时钟来驱动电路,随机数最高产生频率为200mhz,而本次设计采用异步click电路模块来驱动电路,随机数产生频率可达到289mhz.

2、采用了真伪随机数选择模块来控制真伪随机数的产生,这样可以根据用户的需求来输出真随机数或伪随机数,从而极大满足了用户的需求。

3、在伪随机数发生器的设计上不是采用算法实现的,而是采用真随机数发生器来对伪随机数进行扰乱,不仅避免了算法的复杂性而且使得伪随机数的相关性降低。

附图说明

图1是本发明实施例提供的基于fpga的高频异步随机数发生器的系统图;

图2是本发明实施例提供的click电路示意图;

图3是本发明实施例提供的click电路的波形图;

图4是本发明实施例提供的高频振荡器脉冲信号图;

图5是本发明实施例提供的获取抖动信号图;

图6是本发明实施例提供的真随机源设计模块图;

图7是本发明实施例提供的反馈移位寄存器fsr图;

图8是本发明实施例提供的线性反馈移位寄存器lfsr图;

图9是本发明实施例提供的高速伪随机数发生器原理图;

图10是本发明实施例提供的select电路原理图;

图11是本发明实施例提供的电路仿真结果图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

下面结合附图1至附图11及具体实施例对本发明的应用原理作进一步描述。

本发明实施例提供的基于fpga的高频异步随机数发生器包括采样模块,真随机数发生器模块,伪随机数发生器模块和真伪随机数选择模块。

如图1所示。其中:

采样模块采用的是click电路来进行采样,此模块能够提高随机数产生的频率;

真随机数发生器是基于门延时不同进行设计的,以多组等长的反相器振荡环路相异或产生的抖动信号作为随机源,然后通过采样脉冲对其进行采样;

伪随机数发生器采用的是一种基于lfsr的伪随机数发生器,采用真随机数对其进行扰乱,以此来增强伪随机数的随机性;

真伪随机数选择模块是用来满足用户需要进行设计的,用户可以根据自己的需要来对真随机数和伪随机数进行选择。

采用click电路来产生抽样脉冲,采用click电路可以提高采样频率。click异步控制电路的原理图如图2所示,有两对输入/输出来实现“约束数据捆绑”两相握手通讯协议,左边一对(in_r/in_a)用于和左方的click通讯,右方的另一对(out_r/out_a)用于和右方的click通讯。当输入握手请求信号in_r升高时,通过异或门使信号变高,然后与同或门输出的信号经过与门and,使触发器ff工作,同时激活了局部fire,而后触发器输出的值将分别传到in_a和out_r。其中in_a表明应答上一个click电路,而out_r表示进行下一次的握手请求。而后左右两级的click模块将会重置此click的in_a和out_r,同时取消了局部fire。局部fire在激活和取消的时间段内,进行数据处理。

在本次设计中使用单个click模块,在输入端in_r和out_a中分别输入不同的振荡信号,从而是click模块循环输出fire信号,在fire信号的上升沿时对真随机数和伪随机数进行采样。

click电路及其波形图如图3所示,

真随机数发生器在fpga内部,当2n+1个反相器组成闭合的环路时,可以得到一个高频的振荡时钟,该时钟信号的周期与门延时以及反相器的个数有关,而与外部信号无关。

高频振荡器如图4所示,由单脉冲enable信号来启动该高频振荡器。由于每个门延时时间的不同,相同长度的两组振荡环的输出时间也是不同的。如果将相同长度的组1与组2两组振荡环的输出相异或就可以得到一组由随机信号构成的新波形,如图5所示。

真随机源模块的的设计如图6所示。

线性反馈移位寄存器由两部分组成:移位寄存器和反馈函数。

如图7所示。移位寄存器是个位序列,每次生成一个位时,移位寄存器中的所有位都右移一位,移出的位就是结果,空出的最左位由反馈函数对其它所有位进行运算得到的结果填充。当反馈函数是线性函数时,这个反馈移位寄存器fsr就是lfsr。一个最简单的,也是最常用、最容易实现的lfsr是反馈函数为移位寄存器中某些位简单异或,如图8所示。

参与异或运算的位称为抽头。一个n位长lfsr最多有2n个内部状态,其周期最大为2n-1,因为全零状态是自闭的。

高速伪随机数发生器dpfsr原理如图9所示。

dpfsr是由置乱扰动源、多个线性反馈移位寄存器lfsr、逻辑控制器以及数据缓存器构成的。其中置乱扰动源采用的是真随机数发生器,主要作用是动态的对lfsr的输出进行扰乱,以此来降低伪随机数输出的相关性。采用lfsr主要是为了方便硬件高速实现。控制逻辑起到控制状态转换,并协调各个部件工作的作用。生成的随机数输入到数据缓存器暂时存储,为系统的调用做准备,数据缓存器能够实时自动更新其中的内容。

图8中的控制逻辑一采用的是异或门进行的。控制逻辑二是一个并转串电路,数据缓存器能够实时自动更新其中的内容。dpfsr的工作过程主要是:在m个lfsr的初始状态都设定后,dpfsr进入正常工作状态。在dpfsr的正常工作状态,lfsr的工作与前面介绍的工作过程大致相同,只是在工作的过程中真随机数发生器的干扰。真随机数发生器对lfsr的干扰主要是通过真随机数发生器的输出与lfsr寄存器的某一位进行异或运算,得到的值替代原来的位,其他的都保持不变。由原理图可以看到,dpfsr的工作效率是单路lfsr的m倍,可以同时产生mbits。产生的随机数经过进一步的置乱处理后,按照fifo的原则存入到数据缓存中。也就是说,每次产生的随机数按照先后次序在数据缓存器中从前往后依次排列,当缓冲器满时,丢弃最前面的随机数,并且后面的随机数顺序前移。

真伪随机数选择电路是用来对真伪随机数进行切换的,该电路由逻辑门电路构成,其电路图如图所示,s是开关信号,当开关断开(即s=0)时系统输出伪随机数,当开关闭合(s=1)时系统输出真随机数。其电路图如图所示。select电路函数表达式为:

其电路原理图如图10所示。

其后仿真结果如图11所示;其中:true_random为单比特的真随机数,pseudorandom为单比特伪随机数,random_number为select电路选择的真伪随机数,prn为二比特伪随机数。

对lfsr0和lfsr1产生的结果prn[0]和prn[1]进行了检测,其数据见附录1,其检测结果如下。

总测试数目n=567547

(1)单比特检测

prn[0]中“0”出现的次数为283463,其所占的比例为0.49945292

“1”出现的次数为284084,其所占的比例为0.5005471

prn[1]中“0”出现的次数为284005,其所占的比例为0.5004079

“1”出现的次数为283542,其所占的比例为0.4995921

可见0,1概率大致相等,通过比特分布测试,进一步说明均匀特性较好

(2)频度检测

prn[0]的频度为0.67948735

prn[1]的频度为0.37771145

(3)运行检测(游程分布)

prn[0]的跳变次数为283091

prn[1]的跳变次数为284043

其期望跳变次数为(1+567547)/2=283774

prn[0]

游程ck值如下:

0游程:c1=70841,c2=35295,c3=17571,c4=8861,c5=4515

1游程:c1=70316,c2=35558,c3=17794,c4=8935,c5=4520

prn[1]

游程ck值如下:

0游程:c1=70939,c2=35693,c3=17667,c4=8799,c5=4445

1游程:c1=70226,c2=35398,c3=17638,c4=8960,c5=4391

理论值:c1=70943.625,c2=35471.8125,c3=17735.90625,c4=8867.953125,c5=4433.976563

其推导公式为e(ck)=2-(k+1)(n-k+3),k分别用1,2...,n-2代入,n=56754,测试结果可以认为输出序列相关性较小。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1