Random 如何在VHDL中生成随机时延

Random 如何在VHDL中生成随机时延,random,vhdl,Random,Vhdl,我想在VHDL中使用环形振荡器实现一个PUF,我想生成具有不同门延迟的32个环形振荡器。我该怎么做? 我的代码如下: 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,

我想在VHDL中使用环形振荡器实现一个PUF,我想生成具有不同门延迟的32个环形振荡器。我该怎么做? 我的代码如下:

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;
根据规定,所有ROs都应该相同,并且具有相同的延迟(大多数都是这样工作的)


环形振荡器环路中的延迟是由随机过程变化和系统变化引起的,而不是由标称延迟引起的(如3.1.1所述)。这就是为什么当你创建
n
ROs时,你会(很有可能)在时钟的每个正边缘得到
n/2
0和
n/2
1。您不需要在HDL级别定义延迟。

要在FPGA上实现PUF,您应该使用硬宏进行单RO FPGA设计。由于PUF取决于静态延迟变化(进程相关变化),硬宏将在FPGA上固定设计参数(LUT、切片)。在您的案例31中,一旦您得到了一个,您就可以复制任意多个

PUF到底是什么?这是模拟还是合成?物理不可压缩功能-。如何合成一个可定义的延迟是一个由读者自行决定的练习。正是制造过程不匹配的PUF“量化”使得很难指定。从链接中可以看到,推荐使用环形振荡器作为设备ID。其目的是防止制造链中的其他人伪造硅产品。另请参阅。感谢链接和解释。我想先模拟它,然后合成它。为了在FPGA上模拟不同的环形振荡器,我需要每个环形振荡器有不同的延迟时间。如果我为所有的延迟选择相同的延迟,它将产生一个恒定的PUF:),这是我想要避免的。我需要这个200ps的延迟只是为了模拟,不是为了合成。这是环形振荡器设计的一部分:
gen_chain:i-in-1到chain_len-1生成chain(i)@MübinIcyer:RO设计只需要奇数个相互连接的非门。