有很多学习FPGA的童鞋对时序约束和分析都处于懵懂的状态,笔者也是经历了漫长的过程才对时序有了一定的认识,现在写Timing Constraints in Vivado系列博文也是抱着能系统学习的态度才开始的。
后续的博文,笔者准备理论讲解结合多个实例介绍的方式展开,这样有利于加深一下大家对理论的理解。可能实例中有理解及计算的纰漏,还望大家及时指正。
在《6. Input Delay Constraints实例一》中分享了一个实例,如图1所示,对RX接口进行了约束。另外MII管理接口,其中MDIO是双向数据接口,肯定需要input delay的约束,由于笔者开始不确定此接口属于系统同步输入还是源同步输入,没有做进一步介绍,那就在此篇博文深入分析一下。
图1
最初以为MII接口属于源同步输入,但是仔细查看后发现不对劲儿,时钟MDC并不是由PHY提供的,而是FPGA输出给PHY的,这与源同步接口的定义矛盾,源同步需要时钟和数据来自同一个源。因此只能划分到系统同步输入范畴了,仔细一想还是能说得通的,系统同步中只要求source clock和destination clock来自同一个时钟网络即可,不管是在FPGA外部还是内部,如图2所示,
图2
《5. Constraining Input Delay》系统同步输入的input delay value计算公式如下:
max input delay = Tclkd_ext_max + Tco_max + Tbd_max – Tclkd_int_min
min input delay = Tclkd_ext_min + Tco_min + Tbd_min – Tclkd_int_max
此例的情况,时钟源到FPGA输入端口的延时Tclkd_int等于0,时钟源到外部芯片的延时为TCD,因此得到变化后的公式如下:
max input delay = TCD_max + TCO_max + TBD_max
min input delay = TCD_min + TCO_min + TBD_min
各时间参数的计算如下:
TCD :时钟线MDC在板上的长度LMDC=489mil,TCD_max= TCD_min=489mil*166ps/inch= 0.081174ns
TBD:数据线MDIO在板上的长度LMDIO=634mil,TBD_max= TBD_min=634mil*166ps/inch= 0.105244ns
TCO:参考PHY(DP83849ID)的手册,如图3所示,TCO等于时间参数T2.3.1,得到TCO_max=30ns,TCO_min=0ns。
图3
得到input delay值如下:
max input delay = TCD_max + TCO_max +TBD_max?? =0.081174ns+30ns+0.105244ns = 30.186418ns
min input delay = TCD_min + TCO_min + TBD_min =0.081174ns+0ns+0.105244ns=0.186418ns
综上,MII管理接口的约束如下:
create_clock –name MDC –period 400 –waveform {0 200} [get_ports {MDC}]
set_input_delay -clock [get_clocks MDC] -max 30.186418 [get_ports {MDIO}]
set_input_delay -clock [get_clocks MDC] -min 0.186418 [get_ports {MDIO}]
在Vivado中的约束如图4,5所示:
图4
图5
文章评论(0条评论)
登录后参与讨论