当前位置: 代码迷 >> 综合 >> 【 Vivado 】输出延迟约束实例
  详细解决方案

【 Vivado 】输出延迟约束实例

热度:31   发布时间:2023-12-12 21:10:11.0

Output Delay Constraints Instance

本节讲解一下output delay的实例。依旧是Ethernet PHY和FPGA的接口,框图如图1所示,其中TX接口,MII管理接口输出方向需要output delay约束。

图1

  1. TX接口:

TX接口由时钟TXCK和数据TXD[3:0]组成,都是从FPGA输出,即时钟和数据同源,因此TX接口为源同步输出接口。

       根据上节中output delay value的计算公式:

       max_input_delay = Tbd_max + Tsetup - Tcd_min

       min_input_delay = Tbd_min – Thold - Tcd_max

       其中有4个时间参数:Tbd,Tcd,Tsetup和Thold,如图2所示。

图2

Tcd和Tbd分别是时钟TXCK和数据TXD[3:0]在板上的延时。首先通过PCB设计软件计算得到它们布线长度:LTXCK=784mil,LTXD[3]=663mil,LTXD[2]=680mil,LTXD[1]=852mil,LTXD[0]=901mil,因此计算得到:

Tcd_max= Tcd_min=784mil*166ps/inch= 0.130144n

Tbd_max=901mil*166ps/inch= 0.149566ns

Tbd_min=663mil*166ps/inch=0.110058ns

Tsetup和Thold是PHY(DP83849ID)芯片的时间参数,如图3所示,查询datasheet得到:

参考时间参数T2.4.2,Tsetup=10ns

 参考时间参数T2.4.3,Thold=0ns

图3

综上可得到output delay value

max_output_delay = Tbd_max + Tsetup - Tcd_min=0.149566ns

+ 10ns - 0.130144ns=10.019422ns

min_output_delay = Tbd_min – Thold - Tcd_max=0.110058ns

– 0ns - 0.130144ns=-0.020086ns

可能有些人会诧异,为什么min_output_delay的值会是负的?负的表示相对于输出是反方向的延时。

下面对TX接口的output delay进行约束:

create_clock -nameTXCK -period 40 -waveform {0 20} [get_ports {TXCK}]

create_clock -nameTXCK_PHY -period 40 -waveform {0 20}

set_output_delay –clock TXCK_PHY -max 10.019422 [get_ports {TXD[3] TXD[2] TXD[1] TXD[0]}]

set_output_delay –clock TXCK_PHY -min -0.020086ns [get_ports {TXD[3] TXD[2] TXD[1] TXD[0]}]

Vivado中约束如下图所示:

约束主时钟

约束虚拟时钟

约束min output delay

约束max output delay

  1. MII管理接口:

MII管理接口由时钟MDC和数据MDIO组成,其中MDIO为双向接口,因此需要对其进行input delay和output delay约束。在其output方向,MDC和MDIO都是从FPGA输出的,因此也是源同步输出接口。

时间参数的计算与TX接口类似,如图4所示

图4

其中MDC和MDIO在板上的布线长度分别为LMDC=924mil,LMDIO=587mil,可得:

Tcd_max= Tcd_min=924mil*166ps/inch= 0.153384ns

Tbd_max=Tbd_min=587mil*166ps/inch=0.097442ns

Tsetup和Thold的值参考datasheet,如图5所示,可得:

参考时间参数T2.3.2,Tsetup=10ns

参考时间参数T2.3.3,Thold=10ns

图5

       综上可得到output delay value

max_output_delay = Tbd_max + Tsetup - Tcd_min=0.153384ns + 10ns

- 0.097442ns=10.055942ns

       min_output_delay = Tbd_min – Thold - Tcd_max=0.153384ns - 10ns - 0.097442ns=-9.944058ns

       下面对MII管理接口的output delay进行约束:

create_clock -nameMDC -period 400 -waveform {0 200} [get_ports {MDC}]

create_clock -nameMDC_PHY -period 400 -waveform {0 200}

set_output_delay –clock MDC_PHY -max 10.055942 [get_ports {MDIO}]

set_output_delay –clock MDC_PHY -min -9.944058 [get_ports {MDIO}]

Vivado中约束如下图所示:

约束主时钟

约束虚拟时钟

约束max output delay

约束min output delay