修改时间 03-23-2021 10:30 AM
我使用zynq器件,select io 解码串行数据, data 和 clock 直接进入, 未进行其他处理, 综合有关于data保存时间的时序错误,请问什么问题? 实测接收功能基本正确.
器件时序, 约束采用的是其中的tframe = 1.3 - 1.9ns
set_input_delay -clock [get_clocks rxDco_p] -clock_fall -min -add_delay -1.300 [get_ports rxData_n]
set_input_delay -clock [get_clocks rxDco_p] -clock_fall -max -add_delay -1.900 [get_ports rxData_n]
set_input_delay -clock [get_clocks rxDco_p] -min -add_delay -1.300 [get_ports rxData_n]
set_input_delay -clock [get_clocks rxDco_p] -max -add_delay -1.900 [get_ports rxData_n]
set_input_delay -clock [get_clocks rxDco_p] -clock_fall -min -add_delay -1.300 [get_ports rxData_p]
set_input_delay -clock [get_clocks rxDco_p] -clock_fall -max -add_delay -1.900 [get_ports rxData_p]
set_input_delay -clock [get_clocks rxDco_p] -min -add_delay -1.300 [get_ports rxData_p]
set_input_delay -clock [get_clocks rxDco_p] -max -add_delay -1.900 [get_ports rxData_p]
谢谢.
修改时间 03-23-2021 05:01 PM
应该是set_input_delay约束写错了
如果参考vivado language template的话,你的这个data接口符合source synchronous --> center aligned --> DDR的模板
其中参数
dv_bre = dv_bfe = 1.3ns
dv_are = dv_afe = (1/2 period - 1.9)ns
所以约束里的
-max值是(1/2 period - 1.3)
-min值是(1/2 period - 1.9)
试试看
-vivian
修改时间 03-23-2021 05:01 PM
应该是set_input_delay约束写错了
如果参考vivado language template的话,你的这个data接口符合source synchronous --> center aligned --> DDR的模板
其中参数
dv_bre = dv_bfe = 1.3ns
dv_are = dv_afe = (1/2 period - 1.9)ns
所以约束里的
-max值是(1/2 period - 1.3)
-min值是(1/2 period - 1.9)
试试看
-vivian
修改时间 03-25-2021 11:30 AM
language template在vivado图形界面tools菜单里。
关于template没有过多的文档介绍,还是要先学习input delay/output delay的理论基础,结合实践琢磨一下,这套template使用的方法还是有点巧妙的
我的经验是通过时序图对比,找到最匹配的template,确定里面对应参数的值,套用template里面的约束模板就可以。
你可以找出我说的这个source synchronous --> center aligned --> DDR 模板,看里面的时序图跟你这个用户手册里的时序图对比下
你的时序图里没有画出data有效数据跟无效数据(就是阴影部分)的范围,但tFRAME的值之所以是1.3~1.9,就是因为data有有效数据跟无效数据范围的原因,把你的时序图的有效数据和无效数据范围画出来,就容易跟template里的时序图匹配了
你的例子我可以拿来用吗?打算写一个template使用的blog
-vivian