2015-05-03 57 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。