2015-05-03 79 views
0

我想用VHDL中的環形振盪器來實現PUF,我想用不同的門延遲產生32個環形振盪器。我怎樣才能做到這一點? 我的代碼如下:如何在VHDL中產生隨機時間延遲

generate_ros: 
for i in 0 to 31 generate 
ro_1: ring_oscilator 
    generic map (delay => 200 ps , chain_len => 15) -- 200ps shall be random 
    port map (
     rst_i => s_rst, 
     clk_o => s_inp(i) 
    ); 
end generate; 
+1

什麼是一個PUF?這是模擬還是合成? – Paebbels

+1

Physical Unclonable Function - [PUF](http://rijndael.ece.vt.edu/puf/background.html)。如何合成一個可定義的延遲是一個練習,由讀者自行決定。這是製造過程不匹配PUF的「量化」,使其很難指定。從鏈接可以看到一個環形振盪器被推薦用於設備ID。這個想法是爲了防止製造鏈中的某個人(其他人)僞造硅產品。另請參見[改進的環形振盪器PUF:一種對FPGA友好的安全基元](http://rijndael.ece.vt.edu/puf/paper/jofc2010.pdf)。 – user1155120

+0

感謝您的鏈接和解釋。我想先模擬它然後合成它。爲了在FPGA上模擬不同的環形振盪器,每個環形振盪器需要不同的延遲時間。如果我爲它們選擇相同的延遲,它會產生一個恆定的PUF :),這是我想避免的。 –

回答

0

根據Improved Ring Oscillator PUF: An FPGA-friendly Secure Primitive所有辦事處應該是相同的,並且具有相同的延遲(最ring oscillators這樣工作)。

環形振盪器環路中的延遲是由隨機過程變化和系統變化引起的,而不是由標稱延遲引起的(如3.1.1所述)。這就是爲什麼當你創建n RO時,你會得到(很有可能)n/2 0和n/2 1在你的時鐘的每個上升沿。您無需在HDL級別定義延遲。

+0

我需要這個200ps的延遲只是爲了模擬,而不是爲了合成。這是ring_oscilator設計的一部分:對於i in 1 to chain_len-1,gen_chain: 生成 鏈(i)<=不是鏈(i-1)在延遲之後; end generate; 鏈(0)<=未鏈(chain_len-1)或延遲後的rst_i; ro_o <= chain(chain_len-1);'如您所知'後面的語句被合成器忽略,它僅用於模擬。 –

+0

@MübinIcyer:RO設計只需要奇數個彼此連接的非門。 – Qiu

0

要在FPGA上實現PUF,您應該使用硬宏進行單個RO FPGA設計。由於PUF依賴於靜態延遲變化(依賴於工藝的變化),硬宏將固定FPGA上的設計參數(LUT,slice)。一旦你得到了一個,你可以複製儘可能多的,在你的情況31。