分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7中實現4位偽隨機數發(fā)生器(PRNGs)。
現場可編程門陣列(FPGA)是一種高度可配置的集成電路,它使開發(fā)者能夠測試和重寫程序以執(zhí)行各種功能。它在原型設計、測試數字電路和實現生產中的定制數字系統(tǒng)方面很受歡迎。
該領域涉及但不限于:
數字信號處理
-示例應用:音頻、視頻處理、通信系統(tǒng)和雷達處理。
-實現定制的ML和AI算法,如CNN
通信系統(tǒng)和數據存儲中的加密安全
-實現加密算法,如AES、DES和RSA
-示例應用:安全通信系統(tǒng)和數據存儲
工業(yè)控制系統(tǒng)
-在各種工業(yè)中實現定制的控制系統(tǒng):機器人、自動化和過程控制
-示例應用:自主車輛控制系統(tǒng)和智能電網控制系統(tǒng)
航空航天和國防
-實現定制的數字系統(tǒng),具有高性能、低功耗和抗輻射能力
-示例應用:雷達處理和制導系統(tǒng)
1、 問題陳述
雖然隨機性是安全網絡物理系統(tǒng)(CPS)的一個重要組成部分,但如何在FPGA中實現隨機數發(fā)生器呢?
今天分享一下關于如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7中實現4位偽隨機數發(fā)生器(PRNGs)。
請注意,PRNGs與真隨機數發(fā)生器不同。PRNGs可能在輸出中存在偏差或模式,因此應結合其他安全措施使用,如安全的密鑰管理實踐和強大的加密算法,以保護目標系統(tǒng)。
CMOD S7的近景
下面是用Verilog語言編寫的程序,使用了Vivado軟件。在這個程序中,主要有3個主要功能:
這個程序使用計數器來確定1秒的間隔
這個程序在反饋中進行LFSR操作,并計算4位lfsr_reg
這個程序以二進制格式輸出隨機數,用LED燈顯示,范圍從0 ~ 15。下圖顯示為1011,即十進制的11。
隨機數的一個輸出。二進制的1011是十進制的11
4位二進制數轉換為十進制。
下面是用Verilog語言實現4位LFSR的源代碼。
我們定義了一個名為“DELAY”的常量,其十進制值為12000000,以匹配默認時鐘運行在12 MHz
clog2(12000000)=24
//因為默認時鐘運行在12MHz `defineDELAY1_200_000_0//1秒 modulelfsr( inputclk, outputreg[3:0]LED ); reg[3:0]lfsr_reg; reg[$clog2(`DELAY)-1:0]counter=0; wirefeedback; assignfeedback=~(lfsr_reg[3]^lfsr_reg[2]); always@(posedgeclk) begin if(counter==`DELAY-1) begin counter<=?0;?//?復位計數器 ????????lfsr_reg?<=?{lfsr_reg[2:0],?feedback};?//?更新LFSR?//?反饋位在第3和第2位,向左移位 ????????LED?=?lfsr_reg; ????end? ????else ????????counter?<=?counter?+?1;?//?增加計數器 ???????? end
Cmod-S7–25-Master.xdc的示例內容,其中定義了設計約束,如引腳分配、時鐘約束和I/O時序參數,這些參數在實現階段使用。
##Thisfileisageneral.xdcfortheCmodS7-25Rev.B ##Touseitinaproject: ##-uncommentthelinescorrespondingtousedpins ##-renametheusedports(ineachline,afterget_ports)accordingtothetoplevelsignalnamesintheproject ##12MHzSystemClock set_property-dict{PACKAGE_PINM9IOSTANDARDLVCMOS33}[get_ports{clk}];#IO_L13P_T2_MRCC_14Sch=gclk create_clock-add-namesys_clk_pin-period83.33-waveform{041.66}[get_ports{clk}]; ##4LEDs set_property-dict{PACKAGE_PINE2IOSTANDARDLVCMOS33}[get_ports{LED[0]}];#IO_L8P_T1_34Sch=led[1] set_property-dict{PACKAGE_PINK1IOSTANDARDLVCMOS33}[get_ports{LED[1]}];#IO_L16P_T2_34Sch=led[2] set_property-dict{PACKAGE_PINJ1IOSTANDARDLVCMOS33}[get_ports{LED[2]}];#IO_L16N_T2_34Sch=led[3] set_property-dict{PACKAGE_PINE1IOSTANDARDLVCMOS33}[get_ports{LED[3]}];#IO_L8N_T1_34Sch=led[4] set_propertyCONFIG_VOLTAGE3.3[current_design] set_propertyCFGBVSVCCO[current_design] set_propertyBITSTREAM.GENERAL.COMPRESSTRUE[current_design] set_propertyBITSTREAM.CONFIG.CONFIGRATE33[current_design] set_propertyCONFIG_MODESPIx4[current_design]
2、演示
3 、結論
從綜合報告中可以看出,這個程序只占用了FPGA中0.05%的LUT滑塊。我們可以在這個CMOD S7中實現更多有趣的功能,充分利用資源。
來源: 本文轉載自Java學研大本營公眾號
-
FPGA
+關注
關注
1620文章
21468瀏覽量
597911 -
濾波器
+關注
關注
158文章
7530瀏覽量
176171 -
Xilinx
+關注
關注
70文章
2133瀏覽量
120100 -
生成器
+關注
關注
7文章
312瀏覽量
20751
原文標題:使用Verilog在FPGA中實現偽隨機數生成器
文章出處:【微信號:FPGA研究院,微信公眾號:FPGA研究院】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論