基于FPGA的真随机数发生器及发生方法与流程

文档序号:16734759发布日期:2019-01-28 12:32阅读:971来源:国知局
技术简介:
本发明针对传统FPGA真随机数发生器存在数据速率低、环境敏感性高及可靠性差的问题,提出采用n级自定时振荡环作为稳定熵源,结合超前进位单元延迟链采样和边缘检测后处理技术,实现高速高质量随机数生成。通过优化振荡环结构与进位链布局,提升系统鲁棒性,减少资源占用,使随机数输出速率可达500Mbps并通过NIST测试验证质量。
关键词:真随机数发生器,FPGA
本发明涉及电子电路领域,具体地,涉及基于fpga的真随机数发生器及发生方法。
背景技术
:随机数被用来产生安全系统需要的安全密钥、操作系统协议、移动设备id和数字签名验证等。随机数发生器在模拟仿真、数据加密、系统安全和统计分析等方面的应用十分广泛,这些系统对随机数的质量和产生速度的有一定的要求。随机数分为伪随机数和真随机数,其中真随机数的质量高,包含真随机数发生器的系统安全性也更高。由于现场可编程门阵列(fpga)在当前的电子系统中应用非常普遍,基于fpga的真随机数发生电路具有重要的应用前景。fpga中的真随机数发生电路包括:熵源,采样量化和后处理三部分组成。fpga中的熵源主要来源于振荡器的抖动,亚稳态电路等,当前基于以上熵源的发生电路主要问题是数据产生率低,对工作环境、电压和工艺变化敏感,可靠性不高。技术实现要素:针对现有技术中的缺陷,本发明的目的是提供一种基于fpga的真随机数发生器及发生方法。根据本发明提供的一种基于fpga的真随机数发生器,包括:n级自定时振荡环:产生抖动信号作为熵源,所述n级自定时振荡环的每一级输出的抖动信号分别连接熵提取模块,n为大于等于3的正整数;熵提取模块:由fpga中的延迟链和触发器单元组成,所述延迟链分别采集所述抖动信号,所述触发器在一个相同时钟的控制下对所述延迟链中的抖动信号进行采样,再将每个延迟链中同一级的抖动信号进行异或,将异或后得到的数据数列输入边缘检测器;边缘检测器:检测数据序列中的边缘跳变数据位,输出一位随机数,并将得到的随机数送入后处理模块;后处理模块:将输入的随机数进行纠偏,得到随机数序列。较佳的,所述n级自定时振荡环采用均匀间隔传播模式。较佳的,所述n级自定时振荡环的每一级由一个密勒单元和一个反相器构成,所述密勒单元由fpga中的lut实现,将所述n级自定时振荡环的每一级固定位一个lut。较佳的,所述延迟链由fpga中的超前进位单元级联形成。较佳的,所述随机数为二进制随机数,所述随机数序列为二进制随机数序列。根据本发明提供的一种基于fpga的真随机数发生方法,包括:s1、采用n级自定时振荡环产生抖动信号作为熵源,n为大于等于3的正整数;s2、由fpga中的延迟链分别采集所述n级自定时振荡环每一级输出的所述抖动信号,由fpga中的触发器在一个相同时钟的控制下对所述延迟链中的抖动信号进行采样,再将每个延迟链中同一级的抖动信号进行异或得到数据数列;s3、检测数据序列中的边缘跳变数据位,输出一位随机数;s4、将随机数进行纠偏,得到随机数序列。较佳的,所述n级自定时振荡环采用均匀间隔传播模式。较佳的,所述n级自定时振荡环的每一级由一个密勒单元和一个反相器构成,所述密勒单元由fpga中的lut实现,将所述n级自定时振荡环的每一级固定位一个lut。较佳的,所述延迟链由fpga中的超前进位单元级联形成。较佳的,所述随机数为二进制随机数,所述随机数序列为二进制随机数序列。与现有技术相比,本发明具有如下的有益效果:1、使用自定时振荡环作为真随机数发生器的熵源,比传统的反相器振荡环更稳定,鲁棒性更好,这样的真随机数发生器在电压或环境变化时可以相对稳定的工作。2、采用fpga中的超前进位单元作为熵提取核心电路,结合数据后处理电路,可以提高随机数输出的速率。3、这种真随机数发生器电路结构比较简单,在fpga中占用的资源较少,可以在不同的平台上进行移植,应用范围更广。4、本发明的真随机数发生器不仅可以以尽可能高的速率产生随机数,而且可以保证随机数的质量。附图说明通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:图1为本发明基于fpga的真随机数发生器的结构示意图;图2为n级自定时振荡环的电路结构示意图;图3为自定时振荡环单级的结构示意图;图4为自定时振荡环单级的真值表;图5为密勒单元在xilinxvirtex5fpga中的实现;图6为熵提取模块中快速进位链的进位单元的结构;图7为消除超前进位链产生“冒泡”的方式。具体实施方式下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。图1为本发明在xilinxvirtex5fpga上实现的一种真随机数发生器的结构示意图,包括作为熵源的n级自定时振荡环1、熵提取模块2、边缘检测器3和处理输出数据的后处理模块4。图2为本发明中的自定时振荡环,其由n级构成,每一级由一个二输入密勒单元(图3)和一个反相器构成,其中n是大于等于3的正整数。如图3和图4所示,每一级中反相器的输出连接到密勒单元的一个输入,反相器的输入为ri,密勒单元的另一个输入为fi,输出为ci。每一级反相器的输入ri连接到下一级的输出ci+1。为了设置自定时振荡环的初始状态,在每一级上加入set和reset信号,当set信号为1,reset信号为0时,密勒单元的输出为1。当reset信号为1,set信号为0时,密勒单元的输出为0。在fpga中这种密勒单元用6输入lut来实现,如图4所示,a,b为密勒单元的两个输入,set和reset信号为控制信号,q为密勒单元的输出,这种结构在fpga中易于实现。在自定时振荡环中,存在bubble和token。如果振荡环i级中的输出ci不等于上一级的输出ci-1,则说明i级中存在一个token。如果振荡环i级中的输出ci等于上一级的输出ci-1,则说明i级中存在一个bubble。自定时振荡环可以产生自主振荡需要满足三个条件:(1)振荡环级数n大于等于3;(2)振荡环中bubble的数量应该大于等于1;(3)振荡环中token的数量为一个正偶数。通过调整振荡环的初始状态,可以设置振荡环的振荡方式。振荡环有两种传播模式:均匀间隔传播模式和突发传播模式。如果在振荡环的初始状态中bubble的数量和token的数量相差越小,则这时密勒单元内的查理效应越大,输出含有抖动的时钟频率越高,此时振荡环处于均匀间隔传播模式。如果在振荡环的初始状态中bubble的数量和token的数量相差越大,密勒单元内的查理效应越小,输出的时钟的频率就越低,此时振荡环处于突发传播模式。在真随机数发生器中这两种模式都可以产生需要的熵源,但是在相同级数的情况下,均匀间隔传播模式的频率更高。图5为自定时振荡环中密勒单元在fpga中使用lut的实现,我们使用6输入的lut,其中的a、b为密勒单元的输入,set和reset为密勒单元的控制信号,q为密勒单元的输出。将自定时振荡环的每一级固定为一个lut方便之后布局布线时固定每个lut的位置。如图6所示,所述的熵提取模块2是由fpga中的m个carry4级联形成的快速延迟链组成。carry4单元分布于fpga的slice中,结构如图6所示,将同一列的slice中的carry4连接起来,每一级carry4的cout连接到下一级的ci,第一级carry4的cyinit连接到振荡环的每一级的输出。在xilinxvirtex5fpga中,每一级carry4的位置需要手动设置,为了保证振荡环每一级的输出到其对应的快速进位链的距离大致相同,需要把振荡环每级的lut放置在对应进位链的下方。每级carry4的输入di=4’b0000,s=4’b1111,此时co输出每位信号的进位。这些进位输入到d触发器内,每个d触发器的时钟控制端连接到同一个采样时钟,由d触发器采样并输出。将进位链的同一级输出进行异或操作,得到一个4m位的二进制数据序列。由于fpga中的carry4具有超前进位的特性,信号在进位链中传递时,后面的数据位有可能提前变化,这时在输出的二进制数据序列中有可能出现“冒泡”现象,比如应该输出序列“……000111……”,却输出了“……001011……”。这种“冒泡”会影响之后边缘检测器对于信号边缘位置的判断,为了消除这种“冒泡”,一般的方法是将carry4拆成两级来输出,只输出co0和co3,这种方法可以有效消除输出序列中的“冒泡”现象,但是会减少输出数据的数量,降低输出数据的精度。所以我们采用另一种方法,调整进位单元数据输出的顺序,不改变进位单元内部的结构,如图7所示。这种结构不仅可以有效消除随机数序列中的“冒泡”现象,而且不会降低输出随机数的精度。所述的边缘检测器3用来检测熵提取模块异或产生的4m位的数据序列中的信号上升或下降边缘的位置。对熵提取器得到的数据序列相邻位进行异或处理,之后用优先级编码器定位信号边缘的位置,如果信号边缘位于奇数位,则输出“0”,如果信号边缘位于偶数位,则输出“1”。所述的后处理模块4用来对边缘检测器产生的随机数序列进行纠偏。选用异或链后处理方法,这种方法的设计比较简单,而且可以有效的消除随机数序列中的偏差,不影响随机数的输出速率。在自定时振荡环级数的选择上,我们考虑到要尽可能减少fpga中资源的消耗,所以级数n选择3.在xilinxvirtex5fpga中三级的自定时振荡环的频率为400mhz,此时振荡环处于突发传播模式。为了在快速进位延迟链中至少捕获一个信号边缘,信号延迟链的总延迟时间应该大于振荡环产生的含有抖动的时钟周期的一半,所以快速延迟链中的进位单元选择8个,每条进位链输出一个32位的随机数序列,将三条延迟链的输出序列进行异或操作,得到一个32位的随机数序列,之后进行边缘检测和后处理。在xilinxvirtex5fpga中carry4中相邻级之间的延迟大约为20ps到30ps,所以理论上来说,采样时钟的周期只要大于carry4中相邻级之间的延迟就可以得到一个有效的随机数。在实际电路中,由于其它因素的影响,采样频率会相对减少。在本发明中,我们选择的采样频率为500mhz,随机数输出速率为500mbps,这个速率相对于其它的真随机数发生器来说有更大的优势。在本发明中真随机数发生器在xilinxvirtex5fpga中占用了47个slice,其中熵源模块占用了3个slice,熵提取模块占用了24个slice,边缘检测器和后处理模块占用了20个slice。在xilinxvirtex5fpga中1个slice包括4个lut,3个mux,1个carry4和4个d触发器。在xilinxvirtex5fpga中产生的随机数通过uart程序从fpga中传到电脑端口,再使用串口调试助手分批地输出,最终输出106个数据,将这些数据使用nist随机数评估软件对随机数的质量进行测试。nist测试包括15项测试项目,可以测试随机数发生器产生的二进制序列的质量。一些测试项目需要的数据量最少为106个数据,所以我们最少输出106个数据。测试完成后返回的综合p值应大于0.01,这说明这项测试项目通过测试。表1nisttestp-valueresultfrequency0.038038passblockfrequency0.660658passruns0.669964passlongestruns0.604115passrank0.854837passfft0.327823passnon-overlappingtemplate0.690779passoverlappingtemplate0.448382passapproximateentropy0.931223passserial0.643265passlinearcomplexity0.619939passcumulativesums0.067702passrandomexcursions0.813107passrandomexcursionsvariant0.850644passuniversal0.745105pass表1是本发明中产生的随机数的nist测试结果,表中每一项测试结果都有一个综合p值,所有项目的p值都大于0.01,均通过测试。本发明不仅可以产生高质量的随机数,而且可以以很高的速率产生随机数。而且这个真随机数发生器占用fpga的资源较少,可以很方便地集成到应用系统中,这对于真随机数发生器在数据加密、统计分析、信息通讯等方面的应用来说尤为重要,可以进一步缩小器件的体积,提高器件的性能,进一步提高系统的安全性。本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。当前第1页12
当前第1页1 2 
网友询问留言 留言:0条
  • 还没有人留言评论。精彩留言会获得点赞!