最近項目用到了千兆以太網,PHY通過ZYNQ的PL管腳進入FPGA后,直接連到PS端的MAC,PL端使用ODDR保證MAC發送的Tx信號到PHY的接收時序,
PHY用的是TI的DP83867,沒注意這貨在GMII的模式下不能調整clock和Data的相位關系,結果FPGA保證了沿對齊,PHY也是沿對齊去采集,導致不同批次的硬件表現不一致!!!血的教訓啊。
記錄下ODDR的輸出模式:

clk_wire和輸出的關系對應如下仿真波形:

2. 對於PHY輸出的RX_CLK、RX_DV、RX_ERR、RX_D信號,FPGA內部需要查看時鍾即數據的延遲路徑進行分析。本例中使用iodelay只對RX_DV、RX_ERR、RX_D進行了約束,以滿足PHY輸出時序的要求(DP83867在GMII模式下不支持PHY設置延遲)。
iodelay使用時需要使用IDELAYCTRL、IDELAYE2,其中IDELAYCTRL在一個工程中不能有多個實例,項目中用到了兩個網口,因此將IDELAYCTRL放在了頂層模塊中,在各個網絡模塊中使用IDELAYE2進行延遲。在xdc中進行延遲值的設置,分別如下:



