在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 7013|回复: 11

[求助] ADC DDR时序约束问题源同步约束

[复制链接]
发表于 2016-11-6 17:37:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 kimdow 于 2016-11-6 17:54 编辑

时序如图所示,在FPGA中的PLL用了源同步模式,约束如下,看了一下时序分析图,应该是set_input_delay的值计算的有问题,不知道这么算错在哪里?另外,直接set_input_delay的值用tskew的值也出现时序不稳定。




  1. create_clock -name virt_clk -period 121MHz
  2. create_clock -name input_clock -period 121MHz [get_ports ADC_DCO]

  3. create_generated_clock -name rx_clock -source adc_pll_inst|altpll_component|auto_generated|pll1|inclk[0] \                       adc_pll_inst|altpll_component|auto_generated|pll1|clk[1] -phase 90
  4. set tPD_min 4.1
  5. set tPD_max 5.2
  6. set tDCO_min 4.7
  7. set tDCO_max 5.8
  8. set Tco_max [expr $tPD_max - $tDCO_min]
  9. set Tco_min [expr $tPD_min - $tDCO_max]

  10. set freqDCO 121
  11. set period [expr 1000.0/$freqDCO]
  12. set phi_pll_adc 90
  13. set delta_t [expr $phi_pll_adc * $period / 360.0]

  14. set data_delay_max [expr $Tco_max - $delta_t]
  15. set data_delay_min  [expr $Tco_min - $delta_t]

  16. set_input_delay -max -clock [get_clocks virt_clk] $data_delay_max  [get_ports {ADC_D[*]}]
  17. set_input_delay -min -clock  [get_clocks virt_clk] $data_delay_min [get_ports {ADC_D[*]}]
  18. set_input_delay -max -clock [get_clocks virt_clk] -clock_fall $data_delay_max [get_ports {ADC_D[*]}] -add
  19. set_input_delay -min -clock  [get_clocks virt_clk] -clock_fall $data_delay_min [get_ports {ADC_D[*]}] -add

  20. set_false_path -setup -rise_from [get_clocks virt_clk] \
  21.    -fall_to [get_clocks rx_clock]
  22. set_false_path -setup -fall_from [get_clocks virt_clk] \
  23.    -rise_to [get_clocks rx_clock]
  24. set_false_path -hold -rise_from [get_clocks virt_clk] \
  25.    -rise_to [get_clocks rx_clock]
  26. set_false_path -hold -fall_from [get_clocks virt_clk] \
  27.    -fall_to [get_clocks rx_clock]


复制代码


时序图

时序图
发表于 2016-11-7 09:01:28 | 显示全部楼层
很久不搞ADC接口了,一些建议如下:
1)AN433(altera)详细的介绍了如何进行源同步的时序约束。
2)个人的理解的一些简单的约束的办法。
     a. 用示波器测量时钟和数据(所有bit)的建立和保持时间。
      b.假设建立时间为Ts 那么max_delay 就是Ts。 假设保持时间为Th 那么min_delay 就是-Th。
      c.当然你能根据手册推到出送到FPGA接口的virtual_clk和Data的关系也可以,约束办法如上。
      d.还有一些注意实行就是,用一个数据UI的70%减去Ts得到Th,这样把Skew的余量留出来。
总而言之,你要清晰的告诉FPGA的综合工具,送到FPGA的始终和数据的时序关系是怎么样的,这个可以通过手册推导,也可以通过示波器测量。
       说了很多,很多疏漏的地方,请见谅。
发表于 2016-11-7 19:40:06 | 显示全部楼层
# set multi cycle ,供参考
set_multicycle_path -setup -end 0 -rise_from [get_clocks virtual_clk] -rise_to [get_clocks input_clock]
set_multicycle_path -setup -end 0 -fall_from [get_clocks virtual_clk] -fall_to [get_clocks input_clock]
set_multicycle_path -hold -end -1 -rise_from [get_clocks virtual_clk] -rise_to [get_clocks input_clock]
set_multicycle_path -hold -end -1 -fall_from [get_clocks virtual_clk] -fall_to [get_clocks input_clock]
 楼主| 发表于 2016-11-7 21:57:58 | 显示全部楼层




   你好,按照AN433试了,手头上不太好用示波器测试,现在只能不停的调整PLL来采集,很难找到一个合适的phase。
发表于 2016-11-8 16:58:22 | 显示全部楼层
回复 4# kimdow



  • set tPD_min 4.1
  • set tPD_max 5.2
  • set tDCO_min 4.7
  • set tDCO_max 5.8
  • set Tco_max [expr $tPD_max - $tDCO_min]
  • set Tco_min [expr $tPD_min - $tDCO_max]
  • set freqDCO 121
  • set period [expr 1000.0/$freqDCO]
  • set phi_pll_adc 90
  • set delta_t [expr $phi_pll_adc * $period / 360.0]
  • set data_delay_max [expr $Tco_max - $delta_t]
  • set data_delay_min  [expr $Tco_min - $delta_t]
按照你提供的参数计算了一下:
   data_delay_max = (5.2-4.7)- [90*1000/121/360] = -1.566

data_delay_min = (4.1-5.8)- [90*1000/121/360] = -3.766


这两个参数似乎是有问题的,因为一般情况下,data_delay_max是正的,不要考虑PLL的问题,内部的综合工具会自动的把相应的延时计算进去。


建议去掉delta_t, 试一下:

data_delay_max = (5.2-4.7)= 0.5

data_delay_min = -1.7
有点过约束,只要器件性能可以,应该能满足。


另外,用PLL调相,你是用在线的动态重配,还是重新编版本?
如果是重新编版本的话,综合工具会综合你的调相后的结果重新布局布线,所以相当于没调。
再试一下。。。



发表于 2016-11-8 16:59:31 | 显示全部楼层
对了Multi_cycle 也要加上,这个也很重要
发表于 2016-11-9 20:57:55 | 显示全部楼层
set_multicycle_path 需要加上,设置set_input_delay -max和-min直接用Tskew的max和min就可以了,只要PCB布线没有额外的延时可以准确的采样到数据。我再RGMII接口的设计就是这样约束的,
发表于 2016-11-13 09:04:57 | 显示全部楼层
假设TSKEW的min、typ、max分别是0.3、0.5、0.7。这样试试:
create_clock -name input_clock -period 8.264 -waveform{0.5 4.632} [get_ports ADC_DCO]
set data_delay_max  0.2
set data_delay_min  -0.2
其它约束不改动。
发表于 2016-11-13 11:28:59 | 显示全部楼层
学习一下,楼主辛苦,顶一下!3026827905
发表于 2017-2-24 17:14:53 | 显示全部楼层
adc本身可以通过配置寄存器来调整随路时钟跟数据相位关系。这个调试起来应该会更简单一点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-19 15:59 , Processed in 0.030223 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表