quato_a 3 11 января, 2022 Опубликовано 11 января, 2022 · Жалоба Доброго времени суток! К ПЛИС 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. # 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]; Снова собрал почти пустой проект и получил следующий репорт имплементации по одному из зафейленых путей: 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, но не нашел решения. Что я делаю не так? Что забыл добавить? Прошу помощи Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 11 января, 2022 Опубликовано 11 января, 2022 · Жалоба Ну во-первых, на картинке у вас тайминги передачи от хоста (плисины) в фи, то есть GTX_CLK это выход плисины, так же как и TXD. А на приём там сетап 2,5 нс, что уже вполне достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quato_a 3 11 января, 2022 Опубликовано 11 января, 2022 · Жалоба 1 hour ago, Dr.Alex said: Ну во-первых, на картинке у вас тайминги передачи от хоста (плисины) в фи, то есть GTX_CLK это выход плисины, так же как и TXD. А на приём там сетап 2,5 нс, что уже вполне достаточно. Ёлки палки. Глаз замылился. Спасибо) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться