Перейти к содержанию
    

GMII RX не сходятся времянки при добавлении set_input_delay

Доброго времени суток!

К ПЛИС Kintex-7 подключена Marvel PHY 88E1111 с GMII интерфейсом.

Почти пустой проект работает, пакеты принимаются и передаются. При заполнении ресурсов под 90% наблюдается нестабильный прием. Решал копать в сторону ограничений на входные и выходные порты. Посмотрел туториалы от Xilinx и задал set_input_delay в соответствии с времянками из даташиты на 88E1111. PHY формирует данные в режиме center-aligned с Tsu = 2ns и Thd = 0 ns (см. вложение). Эти параметры и ввел в расчет set_input_delay. Выходит, что max delay 6 ns, а min 0 ns.

88E1111_GTX.thumb.PNG.4e49018fe3608b5b1abf23e36e631ebf.PNG

# Input Delay Constraint

# Center-Aligned Rising Edge Source Synchronous Inputs
# input    ____           __________    
# clock        |_________|          |_____
#                        |                 
#                 dv_bre | dv_are    
#                <------>|<------>  
#          __    ________|________    __
# data     __XXXX____Rise_Data____XXXX__

# 88E1111 4.9.2 GMII Transmit Timing
set clk_eth_ns 8.0;
create_clock -name clk_eth_in -period $clk_eth_ns [get_ports gmii_rx_clk_i]; # 125 MHz
  
set input_clock_period  $clk_eth_ns;    # Period of input clock
set dv_bre              2.000;             # Data valid before the rising clock edge
set dv_are              0.000;             # Data valid after the rising clock edge
set gmii_input_ports         [list gmii_rx_dv_i gmii_rx_er_i gmii_rx_data_i[*]];     # List of input ports

set_input_delay -clock clk_eth_in -max [expr $input_clock_period - $dv_bre] [get_ports $gmii_input_ports];
set_input_delay -clock clk_eth_in -min $dv_are [get_ports $gmii_input_ports];

Снова собрал почти пустой проект и получил следующий репорт имплементации по одному из зафейленых путей:

report.thumb.PNG.e196f3c2b6c5ad0d1cb94be6e5c2a1d4.PNG

Timing Report

Slack (VIOLATED) :        -0.092ns  (required time - arrival time)
  Source:                 gmii_rx_data_i[3]
                            (input port clocked by clk_eth_in  {rise@0.000ns fall@4.000ns period=8.000ns})
  Destination:            i_eth/i_eth_gmii/i_gmii/mac_rx_data_reg[3]/D
                            (rising edge-triggered cell FDRE clocked by clk_eth_in  {rise@0.000ns fall@4.000ns period=8.000ns})
  Path Group:             clk_eth_in
  Path Type:              Setup (Max at Slow Process Corner)
  Requirement:            8.000ns  (clk_eth_in rise@8.000ns - clk_eth_in rise@0.000ns)
  Data Path Delay:        6.432ns  (logic 1.252ns (19.460%)  route 5.180ns (80.540%))
  Logic Levels:           1  (IBUF=1)
  Input Delay:            6.000ns
  Clock Path Skew:        4.407ns (DCD - SCD + CPR)
    Destination Clock Delay (DCD):    4.407ns = ( 12.407 - 8.000 ) 
    Source Clock Delay      (SCD):    0.000ns
    Clock Pessimism Removal (CPR):    0.000ns
  Clock Uncertainty:      0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
    Total System Jitter     (TSJ):    0.071ns
    Total Input Jitter      (TIJ):    0.000ns
    Discrete Jitter          (DJ):    0.000ns
    Phase Error              (PE):    0.000ns

    Location             Delay type                Incr(ns)  Path(ns)    Netlist Resource(s)
  -------------------------------------------------------------------    -------------------
                         (clock clk_eth_in rise edge)
                                                      0.000     0.000 r  
                         input delay                  6.000     6.000    
    M22                                               0.000     6.000 r  gmii_rx_data_i[3] (IN)
                         net (fo=0)                   0.000     6.000    gmii_rx_data_i[3]
    M22                  IBUF (Prop_ibuf_I_O)         1.252     7.252 r  gmii_rx_data_i_IBUF[3]_inst/O
                         net (fo=1, routed)           5.180    12.432    i_eth/i_eth_gmii/i_gmii/mac_rx_data_reg[7]_0[3]
    SLICE_X3Y80          FDRE                                         r  i_eth/i_eth_gmii/i_gmii/mac_rx_data_reg[3]/D
  -------------------------------------------------------------------    -------------------

                         (clock clk_eth_in rise edge)
                                                      8.000     8.000 r  
    R22                                               0.000     8.000 r  gmii_rx_clk_i (IN)
                         net (fo=0)                   0.000     8.000    gmii_rx_clk_i
    R22                  IBUF (Prop_ibuf_I_O)         1.122     9.122 r  gmii_rx_clk_i_IBUF_inst/O
                         net (fo=1, routed)           1.834    10.956    i_eth/i_eth_gmii/i_gmii/gmii_rx_clk_i_IBUF
    BUFGCTRL_X0Y0        BUFG (Prop_bufg_I_O)         0.083    11.039 r  i_eth/i_eth_gmii/i_gmii/i_bufg/O
                         net (fo=818, routed)         1.368    12.407    i_eth/i_eth_gmii/i_gmii/gmii_rx_clk_i
    SLICE_X3Y80          FDRE                                         r  i_eth/i_eth_gmii/i_gmii/mac_rx_data_reg[3]/C
                         clock pessimism              0.000    12.407    
                         clock uncertainty           -0.035    12.371    
    SLICE_X3Y80          FDRE (Setup_fdre_C_D)       -0.031    12.340    i_eth/i_eth_gmii/i_gmii/mac_rx_data_reg[3]
  -------------------------------------------------------------------
                         required time                         12.340    
                         arrival time                         -12.432    
  -------------------------------------------------------------------
                         slack                                 -0.092    

 

Не верится, что ПЛИС не поспевает защелкнуть данные даже при почти пустом проекте.

Читал разные предыдущие посты по set_input_delay, но не нашел решения.

Что я делаю не так? Что забыл добавить? Прошу помощи

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну во-первых, на картинке у вас тайминги передачи от хоста (плисины) в фи, то есть GTX_CLK это выход плисины, так же как и TXD.

 

А на приём там сетап 2,5 нс, что уже вполне достаточно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Dr.Alex said:

Ну во-первых, на картинке у вас тайминги передачи от хоста (плисины) в фи, то есть GTX_CLK это выход плисины, так же как и TXD.

 

А на приём там сетап 2,5 нс, что уже вполне достаточно.

Ёлки палки. Глаз замылился. Спасибо)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...