打印

关于环形振荡器的问题

[复制链接]
3455|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sunwind45|  楼主 | 2011-6-17 10:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用Spartaniii可以实现环形振荡器吗? XC3S400

我拷贝了网上的一个例子,下载进去,没啥反应。

这种自震荡的东西能仿真吗?

在fpga里实现环形振荡器,有什么起振条件吗?还有,看例子里使用LUT,延迟是固定的吗?不明白为啥不直接用与门或非门实现?!

相关帖子

沙发
dan_xb| | 2011-6-17 13:16 | 只看该作者
你的例子啥样子的?

使用特权

评论回复
板凳
dan_xb| | 2011-6-17 13:56 | 只看该作者
本帖最后由 dan_xb 于 2011-6-17 14:00 编辑

给你一个可实现的例子:
这个产生大约1.5MHz的时钟(Spartan-3),随温度变化
module ring_osc(osc_out);  //about 1.5MHz out Clock
  output osc_out;
  (* s = "TRUE" *) wire delay1,delay2,delay3,delay4;
  (* s = "TRUE" *) wire delay5,delay6,delay7,delay8;
  (* s = "TRUE" *) wire delay9,delay10,delay11,delay12;
  (* s = "TRUE" *) wire delay13,delay14,delay15,delay16;
  (* s = "TRUE" *) wire invert;
  wire clk_div2,clk_div4,clk_div8,clk_div16,clk_div32;
  
  (* LOC = "SLICE_X0Y0" *)  LUT1 #(.INIT(2'b10)) delay1_lut  (.O(delay1) ,.I0(invert) );
  (* LOC = "SLICE_X0Y1" *)  LUT1 #(.INIT(2'b10)) delay2_lut  (.O(delay2) ,.I0(delay1) );
  (* LOC = "SLICE_X0Y2" *)  LUT1 #(.INIT(2'b10)) delay3_lut  (.O(delay3) ,.I0(delay2) );
  (* LOC = "SLICE_X0Y3" *)  LUT1 #(.INIT(2'b10)) delay4_lut  (.O(delay4) ,.I0(delay3) );
  (* LOC = "SLICE_X0Y4" *)  LUT1 #(.INIT(2'b10)) delay5_lut  (.O(delay5) ,.I0(delay4) );
  (* LOC = "SLICE_X0Y5" *)  LUT1 #(.INIT(2'b10)) delay6_lut  (.O(delay6) ,.I0(delay5) );
  (* LOC = "SLICE_X0Y6" *)  LUT1 #(.INIT(2'b10)) delay7_lut  (.O(delay7) ,.I0(delay6) );
  (* LOC = "SLICE_X0Y7" *)  LUT1 #(.INIT(2'b10)) delay8_lut  (.O(delay8) ,.I0(delay7) );
  (* LOC = "SLICE_X0Y8" *)  LUT1 #(.INIT(2'b10)) delay9_lut  (.O(delay9) ,.I0(delay8) );
  (* LOC = "SLICE_X0Y9" *)  LUT1 #(.INIT(2'b10)) delay10_lut (.O(delay10),.I0(delay9) );
  (* LOC = "SLICE_X0Y10" *) LUT1 #(.INIT(2'b10)) delay11_lut (.O(delay11),.I0(delay10));
  (* LOC = "SLICE_X0Y11" *) LUT1 #(.INIT(2'b10)) delay12_lut (.O(delay12),.I0(delay11));
  (* LOC = "SLICE_X0Y12" *) LUT1 #(.INIT(2'b10)) delay13_lut (.O(delay13),.I0(delay12));
  (* LOC = "SLICE_X0Y13" *) LUT1 #(.INIT(2'b10)) delay14_lut (.O(delay14),.I0(delay13));
  (* LOC = "SLICE_X0Y14" *) LUT1 #(.INIT(2'b10)) delay15_lut (.O(delay15),.I0(delay14));
  (* LOC = "SLICE_X0Y15" *) LUT1 #(.INIT(2'b10)) delay16_lut (.O(delay16),.I0(delay15));
  (* LOC = "SLICE_X0Y16" *) LUT1 #(.INIT(2'b01)) invert_lut  (.O(invert) ,.I0(delay16));
  
  FDCPE #(.INIT(1'b0)) toggle1_flop (.Q(clk_div2), .C(invert),   .CE(1'b1),.CLR(1'b0),.D(~clk_div2), .PRE(1'b0));  //24MHz
  FDCPE #(.INIT(1'b0)) toggle2_flop (.Q(clk_div4), .C(clk_div2), .CE(1'b1),.CLR(1'b0),.D(~clk_div4), .PRE(1'b0));  //12MHz
  FDCPE #(.INIT(1'b0)) toggle3_flop (.Q(clk_div8), .C(clk_div4), .CE(1'b1),.CLR(1'b0),.D(~clk_div8), .PRE(1'b0));  //6MHz
  FDCPE #(.INIT(1'b0)) toggle4_flop (.Q(clk_div16),.C(clk_div8), .CE(1'b1),.CLR(1'b0),.D(~clk_div16),.PRE(1'b0));  //3MHz
  FDCPE #(.INIT(1'b0)) toggle5_flop (.Q(clk_div32),.C(clk_div16),.CE(1'b1),.CLR(1'b0),.D(~clk_div32),.PRE(1'b0));  //1.5MHz
  
  BUFG BUFG1 (.O(osc_out),.I(clk_div32));
  
endmodule

使用特权

评论回复
评论
busuib 2021-4-1 20:03 回复TA
@yq327115059 :你好,我目前也在做基于fpga的ro puf,但是遇到了点问题,仿真的时候,两个RO链路没有办法得到不同的频率,不知道可否交流一下呢 
yq327115059 2019-6-17 16:02 回复TA
前辈,这么多年过去了,不知道你还记得你这个回答吗?我正在尝试用FPGA 实现PUF结构失败了n次,希望前辈还能收到这条评论,来救救我!!!感激不尽 
地板
午后苦丁茶| | 2011-6-19 21:27 | 只看该作者
:L

使用特权

评论回复
5
bairan168| | 2011-6-19 21:37 | 只看该作者
咋没结果呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

74

主题

178

帖子

1

粉丝