1. 程式人生 > >【 Vivado 】輸入延遲約束例項

【 Vivado 】輸入延遲約束例項

上篇博文講了輸入延遲約束( Input Delay Constraints):輸入延遲約束(Constraining Input Delay)

這篇博文講解具體的例項,通過例項去學習是最有效果的。

例項1

如圖1所示系統,乙太網PHY晶片與FPGA相連,分為三組介面:

  RX介面:時鐘RXCK和資料RXD

 TX介面:時鐘TXCK和資料TXD

  MII管理介面:時鐘MDC和資料MDIO

(圖1)

其中RX介面屬於源同步輸入介面,以下就以RX介面為例講解一下約束input delay

Clock Constraints

首先約束時鐘,如圖2所示為PHY(DP83849ID)在100Mb/s模式下的時序圖,時鐘和資料為Center Aligned關係,因此時鐘在FPGA中無需再移相,可直接使用RXCK採集資料,時鐘約束如下:

create_clock –name RXCK –period 40 –waveform {0 20} [get_ports {RXCK}]

(圖2)

​​​​​​​Input Delay Value

       根據上節中源同步輸入計算Input Delay的公式:

       max_input_delay = Tbd_max + Tco_max - Tcd_min

       min_input_delay = Tbd_min + Tco_min - Tcd_max

 Tbd為資料線RXD在板上的延時,也就是訊號在電路板上的傳播時間。查找了網上的一些資料:

“訊號速度還與不同材料的介電常數相關,具體計算公式是   V=C/Er0.5    

,其中Er是訊號線周圍材料的相對介電常數。我們常見的PCB材料Fr4的介電常數在4.2-4.5左右,為了計算方便我們取4。帶入公式可以算出,Fr4材料製作的PCB板上面訊號的傳輸速度是光速的二分之一。光速大約等於12inch/ns,計算得出Fr4板上訊號速度大約是6inch/ns。換算成延時,也就是166ps/inch。這就是我們經常說的PCB板上訊號延時大約是166ps/inch

在此例中,通過PCB設計軟體計算得到RXD[3:0]的走線長度,分別是LRXD[3]=426mil,LRXD[2]=451mil,LRXD[1]=502mil,LRXD[0]=406mil,因此可以計算得到:

       Tbd_max = 502mil * 166ps/inch = 0.083332ns

       Tbd_min = 406mil * 166ps/inch = 0.067396ns

Tcd為時鐘線RXCK在板上的延時,走線長度LRXCK=399mil,因此可以計算得到:

       Tcd_max=Tcd_min=399mil * 166ps/inch = 0.066234ns

Tco為RX介面clock_to_output時間,如圖2中,等於T2.5.2時間引數,因此可得到:

       Tco_max = 30ns

       Tco_min = 10ns

       綜上:

  max_input_delay = Tbd_max + Tco_max - Tcd_min = 0.083332ns + 30ns - 0.066234ns = 30.017098ns

 min_input_delay = Tbd_min + Tco_min - Tcd_max = 0.067396ns + 10ns - 0.066234ns = 10.001162ns

​​​​​​​Constraints

  很顯然,RX介面為SDR,時鐘約束和input delay值的計算後,可以對input delay進行約束,命令如下:

set_input_delay -clock[get_clocks RXCK] -max 30.017098[get_ports {RXD[3] RXD[2] RXD[1] RXD[0]}]

set_input_delay -clock[get_clocks RXCK] -min 10.001162[get_ports {RXD[3] RXD[2] RXD[1] RXD[0]}]

       在Vivado的GUI介面中也可以進行約束,設計經過綜合實現後,開啟編輯約束檔案,如圖3所示

(圖3)

選擇Set Input Delay,在右側雙擊,可彈出Input Delay設定視窗,如圖4所示

(圖4)

在彈出的Input Delay視窗中設定引數,如圖5所示,Input Delay約束完成。

(圖5)

例項2

在例項1中,如圖1所示,對RX介面進行了約束。另外MII管理介面,其中MDIO是雙向資料介面,肯定需要input delay的約束

 

(圖1)

 最初以為MII介面屬於源同步輸入,但是仔細檢視後發現不對勁兒,時鐘MDC並不是由PHY提供的,而是FPGA輸出給PHY的,這與源同步介面的定義矛盾,源同步需要時鐘和資料來自同一個源。因此只能劃分到系統同步輸入範疇了,仔細一想還是能說得通的,系統同步中只要求source clock和destination clock來自同一個時鐘網路即可,不管是在FPGA外部還是內部,如圖2所示,

(圖2)

系統同步輸入的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、6