如何在VHDL中生成随机时间延迟

时间:2015-05-03 21:38:42

标签: 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,
      clk_o => s_inp(i)
    );
 end generate;

2 个答案:

答案 0 :(得分:0)

根据Improved Ring Oscillator PUF: An FPGA-friendly Secure Primitive,所有RO应该相同并且具有相同的延迟(大多数ring oscillators都是这样的。)

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

答案 1 :(得分:0)

要在FPGA上实现PUF,您应该将硬宏用于单个RO FPGA设计。由于PUF依赖于静态延迟变化(依赖于工艺的变化),Hard Macro将在FPGA上修复设计参数(LUT,slice)。一旦你得到了一个,你可以在你的情况下复制任意多个。