我想在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;
答案 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)。一旦你得到了一个,你可以在你的情况下复制任意多个。