余 菲,趙 杰
(深圳職業技術學院 電子與通信工程學院,廣東 深圳 518055)
隨著電子信息技術的發展,隨機數發生芯片或電路在集成電路領域的應用越來越廣泛[1].隨機數按照發生機理的不同,分為偽隨機數和真隨機數2種[2],其中偽隨機數是按照一些算法,結合隨機種子發生的一系列難以發現規律的數字;而真隨機數是利用一些物理學效應,發生的沒有數學規律的一系列數字.根據目前的信息技術發展現狀,偽隨機數越來越難以應對“不可預測性”的要求,所以真隨機數的發生和應用變得越來越重要[3].因而,真隨機數發生芯片或集成電路芯片上真隨機數發生電路成為了研究熱點.FPGA技術作為進年來發展較快的一種技術,內部集成了各種邏輯門等電路結構,可以方便地實現多種電路進而完成芯片設計,利用FPGA芯片資源,構建隨機數發生電路是一種很好的實現真隨機數發生芯片的方案[4].
真隨機數的發生必須依賴物理過程,在電路中真隨機數的發生也必須依賴電路中具有隨機特性的一些物理過程,利用電路中的結構,典型的片上真隨機數的發生方法有3類[5-6],包括直接放大法、振蕩采樣法和離散時間混沌法.由于FPGA芯片內部的資源為數字電路結構以及少量和數字電路直接相關的模擬電路單元結構,因此在PFGA無法利用直接放大法發生隨機數.目前利用FPGA構建片上真隨機數發生器典型的隨機源主要有2種:一種是利用FPGA的邏輯門構建高速數字電路振蕩器;另一種是利用模擬PLL(鎖相環)電路發生的數字時鐘信號上面的抖動構建隨機量.對比這2種方法,前者的方法較為簡單,但是對芯片電路性能要求很高,電路功耗很大,芯片壽命很短.而基于模擬PLL(鎖相環)電路的方法[7],一般結構復雜,設計難度高,由于鎖相環的隨機Jitter具備一定的規律性,所以隨機性不理想.
考慮到基于 PLL的隨機數產生芯片的產生效果比較好,結合FPGA數字電路中的另外一種離散時間混沌法,基于組合邏輯競爭冒險產生隨機數辦法,本文設計的FPGA的隨機數發生芯片的系統結構如圖1所示,主要由接口控制模塊、PLL鎖相環回路模塊、競爭冒險發生器模塊3個部分組成.其中接口模塊負責和外部電路通信,給芯片提供系統時鐘,分頻器數值和處理隨機數序列的發送;系統主時鐘是門控時鐘,由外部控制器決定是否產生隨機數序列.
系統時鐘經過一個延遲線后送入 PLL作為參考時鐘,PLL的輸出時鐘本身就具有一定的隨機Jitter,在本文所述的芯片電路中,PLL的輸出又被送入一個多路擾動線,而多路擾動線是由前面產生的隨機數序列進行控制擾動的大小,這樣相當于產生了一個隨機的擾動.經過隨機擾動的信號被送入鎖相環的“反饋信號”端,這樣鎖相環就很難完成鎖定,導致Jitter加大,隨機性大大變強.利用系統時鐘進行分頻,使用分頻時鐘對鎖相環輸出的含有很大Jitter,而且經過隨機擾動的高速時鐘進行采樣,采樣的結果具有良好隨機性的數據.
利用系統時鐘,采用特殊的時鐘邊沿競爭冒險發生器結構,能在系統時鐘的邊沿時刻構建具有大量的毛刺信號,利用這種信號和前面鎖相環產生的隨機數進行異或門的邏輯,其結果將是形成一個在時鐘邊沿時刻具有大量毛刺的隨機數信號.再利用三級 D觸發器消除前面可能出現的亞穩態,就會得到良好的隨機數序列.最后把這列隨機數序列送入擾動線控制器做隨機擾動控制,同時接口控制器模塊進行處理并輸出給芯片外部.
組合邏輯的競爭冒險是由于組合邏輯門電路的輸入變化不同步造成的,一般地組合邏輯競爭冒險并不具備任何隨機性,這些組合邏輯的競爭冒險會帶來輸出的毛刺,而這些毛刺是有一定規律的.但是,如果組合邏輯競爭冒險產生的毛刺發生在D觸發器數據端,并且發生在D觸發器的采樣邊沿,那么采樣的結果就具備一定的隨機性了.本文設計的時鐘邊沿競爭冒險發生器如圖2所示,該競爭冒險發生器采樣最難以消除冒險的異或門邏輯作為最終的組合邏輯電路,利用5個自翻轉的D觸發器作為組合邏輯的輸入.通常地,D觸發器的初始值是一個上電時候的隨機量,所以,該電路產生隨機數的種子是隨機的.要想在系統時鐘的邊沿造成組合邏輯的冒險毛刺,需要讓5個D觸發器在時鐘邊沿附近跳變.我們設計了一個時鐘延遲線,利用延遲線,讓中間的D觸發器的時鐘和系統時鐘的相位一致,前2個D觸發器的時鐘相位依次超前一點,而后面2個D觸發器又依次落后系統時鐘相位一點.這樣產生的組合邏輯輸入信號,均在系統時鐘跳變的邊沿進行變化,這樣輸出信號在系統時鐘邊沿產生大量的小毛刺.
多路擾動線是增加PLL相位Jitter的有效辦法,加上隨數控制的多路擾動器對電路的擾動完全不可預測,大大加強了Jitter的隨機效果.多路擾動線如圖3所示.

圖1 隨機數發生芯片系統結構

圖2 時鐘邊沿競爭冒險發聲器結構

圖3 多路擾動器結構圖
在多路擾動器線當中,一共有4個控制位.每個控制位可以控制選擇一條延遲線或者是一條導線進行擾動,利用FPGA中的CMOS傳輸門來實現兩路選擇的效果.4個控制位的延遲線按照2n作為延遲的權值,第一個延遲線延遲為1個時間單位,第二個延遲線的延遲為2個時間單位,第三個延遲線的延遲為4個時間單位,第四個延遲線的延遲為8個時間單位.這樣,隨著4個控制位的數據不同,整條延遲線可以排列組合出0~15個時間單位的延遲效果,對PLL的反饋進行隨機的擾動.
接口模塊是整個芯片和外部連接的橋梁,負責對系統主時鐘進行門控處理,接受外部控制信號,對輸出數字進行組裝等工作,其結構如圖4所示.
在接口模塊電路中有2組寄存器,一個寄存器叫做“門控時鐘控制”寄存器,代表是否啟動隨機數發生器的標志.如果該標志位為高電平,代表著將外部時鐘送入隨機數發生器芯片;如果該標志位為低電平,則表示截斷整個時鐘,隨機數發生芯片停止工作.另外一個寄存器存儲著分頻計數器的數值,用來作分頻電路分頻的數值標準.這2個寄存器都在外部“寫指令”控制信號下工作.此外,接口電路一個很重要的作用是對單個的隨機數進行拼接,按照8位一組的要求進行輸出.因為,在該模塊中設計了一個8位移位寄存器,配合這個寄存器,有一個8位的計數器,每當寫滿了8個寄存器后,產生一個“寫出數”的控制信號.

圖4 接口模塊電路結構
為了驗證PLL的隨機性效果,本文利用Matlab進行了仿真,首現利用Matlab產生1000個滿足高斯分布的隨機數,用來仿真 PLL的 Jitter.該組隨機數分布如圖5a所示,其中高斯分布的隨機Jitter的取值范圍是0~4之間,縱坐標表示隨機值,橫坐標表示隨機點的序號.
按照一般地鎖相環電路規律,Jitter的平均值應該為 5%~10%,假定 FPGA芯片中能達到的 Jitter為 5%,據此我們設計的隨機擾動線的擾動時間設為5%~10%.給Jitter增加了隨機擾動之后,再使用DFF對數據進行采樣,然后得到取值范圍為0到255的8位隨機數.最后,產生的隨機數如圖5b所示,縱坐標代表8位隨機數的數值,橫坐標代表隨機數的序號.可見這些點的隨機性良好,而且概率分布是平均分布,不再是高斯分布.

圖5 高斯分布隨機Jitter(a)和產生隨機數的效果(b)
利用Quartus II 可以對FPGA內部的電路用Verilog語言進行建模,并能對其效果進行仿真.利用Verilog對競爭冒險發生器仿真的波形如圖6所示.由圖6可見,在時鐘的邊沿附近,組合邏輯競爭冒險發生器的輸出“rdata”產生了大量的毛刺,這些毛刺在后面利用D觸發器采樣的時候會產生不確定的采樣效果,達到增強最終隨機性的目的.

圖6 競爭冒險波形仿真
利用 FPGA實現了一個隨機數放大芯片的設計,利用FPGA實現該電路具有方便快捷的好處.經過理論分析和1000個隨機數點的仿真,證明本文所述的真隨機數發生器具有極其良好的隨機性,而且隨機數按照平均概率分布.利用Quartus II工具的仿真證明了組合邏輯競爭冒險器有著良好的加強隨機性的能力.而利用PLL和門控時鐘技術可以有效地降低系統的功耗和穩定性,增加芯片的壽命.本文所述的可變頻隨機數產生系統可以根據外部系統的要求改變隨機數產生的速度,使設計的真隨機數發生芯片具有較好的性能和應用價值.
[1] 杜學峰,武杰.基于FPGA的任意分布高速偽隨機數發生器[J].中國科學技術大學學報,2003,36(9):990-994.
[2] 張潤捷.一種基于 FPGA實現的真隨機數發生器[J].中國集成電路,2008,114(11):52-55.
[3] 王萊,劉松強.真隨機數發生器的設計和實現[J].核電子學與探測技術,1998,18(6):452-455.
[4] 祝愛民,石春和,董良東,等.基于FPGA 高斯白噪聲發生器的設計與實現[J].火力與指揮控制,2009,34(7):119-121.
[5] Craig S,Petrie J,Alvin C. A noise-based IC random number generator for applications in cryptography[J].IEEE Transaction on Circuits and Systems, 2000,47(5):234-236.
[6] 霍文捷,劉政林,陳毅成,等.一種基于 FPGA 的真隨機數生成器的設計[J].華中科技大學學報(自然科學版),2009,37(1):73-76.
[7] 周干民,楊盛光,蔣召宇,等. 一種基于鎖相環的真隨機數發生器[J]. 電子與信息學報,2007,27(7):1152-1156.