彭雅嵐 肖順文
(西華師范大學(xué) 電子信息工程學(xué)院,四川南充 637009)
在計(jì)算機(jī)、通信系統(tǒng)中采用的隨機(jī)數(shù)均為偽隨機(jī)數(shù)[1],由線性反饋移位寄存器[2]所構(gòu)成的偽隨機(jī)數(shù)發(fā)生器是擴(kuò)頻通信系統(tǒng)中的核心。線性反饋移位寄存器是一種十分有用的時(shí)序邏輯結(jié)構(gòu),其結(jié)構(gòu)簡單、速度快,它被廣泛應(yīng)用于可編程分頻器、信道編碼、CRC(Cyclic Redundancy Check)校驗(yàn)碼生成、密碼算法實(shí)現(xiàn)等多個(gè)方面[3-4]。本文基于FPGA(Field Programmable Gate Array)實(shí)現(xiàn)用N級(jí)線性反饋移位寄存器(Linear Feedback Shift Register, LFSR)產(chǎn)生偽隨機(jī)數(shù)組。
圖1 N級(jí)線性反饋移位寄存器結(jié)構(gòu)圖
圖2 n=8,G=18DH,SEED=FFH時(shí)的仿真圖
圖3 n=8,G=18DH,SEED=EAH時(shí)的仿真圖
線性反饋移位寄存器是給定前一狀態(tài)的輸出,將該輸出的線性函數(shù)再用作輸入的移位寄存器。異或運(yùn)算是最常見的單比特線性函數(shù):對寄存器的某些位進(jìn)行異或操作后作為輸入,再對寄存器中的各比特進(jìn)行整體移位。圖1是由n個(gè)D觸發(fā)器和若干個(gè)異或門組成的線性反饋移位寄存器結(jié)構(gòu)圖,其特性由移位寄存器級(jí)數(shù)(周期長度)、初始狀態(tài)(各寄存器的初始值)、反饋邏輯(異或邏輯)和時(shí)鐘周期共同決定[5]。
圖1中,Qi+1表示各級(jí)寄存器Di的輸出,gi為反饋系數(shù),gi的取值決定了Qi是否參與反饋。gi只能取0或1,當(dāng)gi=0時(shí),表示Qi被斷開不參與反饋;當(dāng)gi=1時(shí),表示Qi將參與反饋。由于反饋的需要,其中g(shù)n與g0必須取1,使線性反饋移位寄存器的輸出端Qn參與反饋。移位寄存器的初始狀態(tài)由使用者設(shè)定,初值裝載完成后,每當(dāng)時(shí)鐘周期CLK到來,移位寄存器移位一次,即若gi+1=1,則寄存器Di將其輸出值Qi+1(0或1)與Qn進(jìn)行反饋邏輯(異或)運(yùn)算后,傳遞給下一級(jí)寄存器Di+1;若gi+1=0,則寄存器Di直接將其內(nèi)容傳遞給下一級(jí)寄存器Di+1。
本文基于VHDL硬件描述語言設(shè)計(jì)了一個(gè)級(jí)數(shù)與反饋系數(shù)均可控的,由線性反饋移位寄存器所構(gòu)成的偽隨機(jī)數(shù)發(fā)生器。參考文獻(xiàn)[6]介紹了多種VHDL的語法,這里采用了GENERIC參數(shù)定義語句,對級(jí)數(shù)N進(jìn)行有效設(shè)定,并利用FOR_LOOP循環(huán)語句對反饋系數(shù)的值進(jìn)行判斷后,再帶入反饋邏輯運(yùn)算得到下一級(jí)寄存器的值。最后由用戶設(shè)定隨機(jī)種子的值,從而得到一系列偽隨機(jī)數(shù)。
部分VHDL源程序如下:
IF CLK'EVENT AND CLK = '1' THEN
IF LOAD = '1' THEN REGN <= SEED;ELSE
REGN(0) <= REGN(n-1);
FOR i IN n-2 DOWNTO 0 LOOP
IF G(i+1)='1' then
REGN(i+1) <=REGN(i) XOR REGN(n-1);ELSE
REGN(i+1) <=REGN(i);
END IF;END LOOP;END IF;END IF;
使用ALTERA公司的QUARTUS II 9.0軟件對所設(shè)計(jì)的線性反饋移位寄存器進(jìn)行編譯和仿真。CLK為仿真時(shí)鐘信號(hào),時(shí)鐘周期為5ns;LOAD是裝載數(shù)據(jù)的控制端,高電平有效;SEED為用戶選定的隨機(jī)種子;G為反饋系數(shù)的取值。
圖2為級(jí)數(shù)取8,隨機(jī)種子取11111111,反饋系數(shù)取110001101時(shí)產(chǎn)生的偽隨機(jī)數(shù)。
圖3為級(jí)數(shù)取8,隨機(jī)種子取11101010,反饋系數(shù)取110001101時(shí)產(chǎn)生的偽隨機(jī)數(shù)。
圖4為級(jí)數(shù)取8,隨機(jī)種子取11101010,反饋系數(shù)取111000001時(shí)產(chǎn)生的偽隨機(jī)數(shù)。
圖5為級(jí)數(shù)取16,隨機(jī)種子取FFFFH,反饋系數(shù)取18003H時(shí)產(chǎn)生的偽隨機(jī)數(shù)。
運(yùn)用控制變量法,從上述四種不同條件下的仿真圖中可以看出,當(dāng)將線性反饋移位寄存器的級(jí)數(shù)、反饋系數(shù)和隨機(jī)種子中任一項(xiàng)取不同值的時(shí)候均可以得到不同的偽隨機(jī)數(shù)組。
圖4 n=8,G=1C1H,SEED=EAH時(shí)的仿真圖
圖5 n=16,G=18003H,SEED=FFFFH時(shí)的仿真圖
本文用VHDL語言設(shè)計(jì)了一種能有效產(chǎn)生偽隨機(jī)數(shù)的N級(jí)線性反饋移位寄存器,通過改變級(jí)數(shù)N、反饋系數(shù)G和隨機(jī)種子SEED的值可以得到多種多樣的偽隨機(jī)數(shù)。較其他線性反饋移位寄存器的設(shè)計(jì)來說,本設(shè)計(jì)的級(jí)數(shù)和反饋系數(shù)均可調(diào),且設(shè)計(jì)過程簡單易懂,具有靈活性好,使用便捷的優(yōu)點(diǎn)。
[1]劉沛華,魯華祥,龔國良,劉文鵬,陳天翔.基于FPGA的高速任意分布偽隨機(jī)數(shù)發(fā)生器[J].應(yīng)用科學(xué)學(xué)報(bào),2012,30(03):306-310.
[2]崔嵬,李承恕.線性反饋移位寄存器的改進(jìn)算法及其電路實(shí)現(xiàn)[J].北方交通大學(xué)學(xué)報(bào),2004(05):69-72.
[3]管超,周潤德,葛元慶.高速線性反饋移位寄存器的實(shí)現(xiàn)[J].微電子學(xué),2000(04):241-243.
[4]鄭誠瑋,戴紫彬,李偉.面向可重構(gòu)并行化處理的線性反饋移位寄存器統(tǒng)一架構(gòu)研究[J].微電子學(xué)與計(jì)算機(jī),2015,32(11):111-115.
[5]陳澄,張茂青,崔秀美.基于FPGA的可編程M序列發(fā)生器的設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2013,26(06):15-16.
[6]潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程[M].科學(xué)出版社.2013.
數(shù)字技術(shù)與應(yīng)用2018年3期