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

    

Констрейны выходного порта RGMII

Коллеги, опять я запутался. С приёмником как то быстро разобрался, а с передатчиком завис.

Альтера, третий циклон.

Вот описание:

# Set Output Delay
create_generated_clock \
    -source {comp21|altpll_component|auto_generated|pll1|inclk[0]} \
    -phase 90.00 \
    -duty_cycle 50.00 \
    -name {ETH_TX_CLK} \
    {comp21|altpll_component|auto_generated|pll1|clk[0]}
create_generated_clock \
    -source {comp21|altpll_component|auto_generated|pll1|inclk[0]} \
    -duty_cycle 50.00 \
    -name {clk125} \
    {comp21|altpll_component|auto_generated|pll1|clk[1]}

create_generated_clock -name tx_output_clock -source [get_pins {comp21|altpll_component|auto_generated|pll1|clk[0]}] [get_ports {eth_tx_clk}]

set_output_delay -clock tx_output_clock -max 2.0 [get_ports eth_txd*] 
set_output_delay -clock tx_output_clock -min -2.0 [get_ports eth_txd*] -add_delay
set_output_delay -clock tx_output_clock -clock_fall -max 2.0 [get_ports eth_txd*] -add_delay
set_output_delay -clock tx_output_clock -clock_fall -min -2.0 [get_ports eth_txd*] -add_delay

set_output_delay -clock tx_output_clock -max 2.0 [get_ports {eth_tx_en}]
set_output_delay -clock tx_output_clock -min -2.0 [get_ports {eth_tx_en}] -add_delay
set_output_delay -clock tx_output_clock -clock_fall -max 2.0 [get_ports {eth_tx_en}] -add_delay
set_output_delay -clock tx_output_clock -clock_fall -min -2.0 [get_ports {eth_tx_en}] -add_delay

set_false_path -fall_from [get_clocks clk125] -rise_to [get_clocks tx_output_clock] -setup
set_false_path -rise_from [get_clocks clk125] -fall_to [get_clocks tx_output_clock] -setup
set_false_path -fall_from [get_clocks clk125] -fall_to [get_clocks tx_output_clock] -hold
set_false_path -rise_from [get_clocks clk125] -rise_to [get_clocks tx_output_clock] -hold

Здесь clk125 - клок для модулей Ethernet.

На картинке реакция таймквеста :

 

1). Правильно ли написан скрипт?

2). Почему Clock Delay для Launch имеет отрицательную задержку?

3). Почему в столбце From Node параметром является клок а не выход регистра?

4). Почему такие большие задержки? Может в настройках Fittera нужно что то подкрутить?

5). Что делать?

post-18832-1535007064_thumb.png

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


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

Выходные данные идут из FAST OUTPUT REG ?

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


Ссылка на сообщение
Поделиться на другие сайты
Выходные данные идут из FAST OUTPUT REG ?

Пробовал и так и этак. Результат нулевой - слеки остаются такими же с точностью до третьего знака.

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


Ссылка на сообщение
Поделиться на другие сайты
Пробовал и так и этак. Результат нулевой - слеки остаются такими же с точностью до третьего знака.

Можно ссылку на документацию, согласно которой ограничения задавались?

У меня просто на марвелл ограничения другие стоят

#**************************************************************
# Set Output Delay
#**************************************************************
#88e1111-DS Register 20.1 = 1 Tsetup=-0.9ns/Thold=2.7ns GTX_CLK+0deg (page 218)
set_output_delay -clock { clk125_txclk } -rise -max -0.9 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay
set_output_delay -clock { clk125_txclk } -fall -max -0.9 -add_delay  [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}]
set_output_delay -clock { clk125_txclk } -rise -min 2.7 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay
set_output_delay -clock { clk125_txclk } -fall -min 2.7 -add_delay  [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}]

Просто 4 нс на нестабильность - многовато получается.

PS. Можно еще сдвиг по фазе убрать, плюс на самих DDIO задержка огромная - т. е. там походу холд не вытягивается еще или запас очень маленький (он задержку подкрутил ненулевую).

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


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

Чип AR8035.

А на вопросы ответов не знаете? Особенно интересует 2-й и 3-й.

Кстати, только сейчас заметил - в Вашем варианте по сравнению с моим знаки разные для -max и -min. Где же истина?

Я руководствовался AN477.

Кстати, удалил фазовый сдвиг 90 градусов - сразу полегчало.

Ну и кто может объяснить суть написанного в AN477? Но непонятки остались...

post-18832-1535013798_thumb.png

post-18832-1535018220_thumb.png

post-18832-1535019326_thumb.png

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


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

А чего у Вас холд отрицательный? В доке же положительный холд. Ставьте 1.65 без минуса

И сетап 2.2 в доке, а у вас 2 в констрейнте

По входу констрейнты будут 1.65 холд и 2 (2.2?) сетап соотв.

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


Ссылка на сообщение
Поделиться на другие сайты
Кстати, только сейчас заметил - в Вашем варианте по сравнению с моим знаки разные для -max и -min. Где же истина?

В моем варианте по документации очень хитро все расписано относительно периода. У Вас проще. Я сейчас тупить могу, но как я понял:

для выходных задержек все прописывается относительно фронта/среза GTX_CLK - максимальное время установки 2.2. нс, минимальное время удержания 1.65. Соответственно получается (тут еще потребуется добавить нестабильность разводки по плате):

set_output_delay -clock { clk125_txclk } -rise -max 2.2 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay
set_output_delay -clock { clk125_txclk } -fall -max 2.2 -add_delay  [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}]
set_output_delay -clock { clk125_txclk } -rise -min -1.65 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay
set_output_delay -clock { clk125_txclk } -fall -min -1.65 -add_delay  [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}]

Ну и при таких ограничениях производитель гарантирует работоспособность.

2). Почему Clock Delay для Launch имеет отрицательную задержку?

Я не знаю как у Вас pll настроена - при разных настройках временной анализ нулевой точки может отличаться.

3). Почему в столбце From Node параметром является клок а не выход регистра?

Для входных/выходных ограничений это нормально - нас же интересует анализ в том числе и относительно клока.

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


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

Думаю что Вы не правы. Посмотрите внимательно следующую картинку.

 

В моем варианте по документации очень хитро все расписано относительно периода. У Вас проще. Я сейчас тупить могу, но как я понял:

для выходных задержек все прописывается относительно фронта/среза GTX_CLK - максимальное время установки 2.2. нс, минимальное время удержания 1.65. Соответственно получается (тут еще потребуется добавить нестабильность разводки по плате):

set_output_delay -clock { clk125_txclk } -rise -max 2.2 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay
set_output_delay -clock { clk125_txclk } -fall -max 2.2 -add_delay  [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}]
set_output_delay -clock { clk125_txclk } -rise -min -1.65 [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}] -add_delay
set_output_delay -clock { clk125_txclk } -fall -min -1.65 -add_delay  [get_ports {TX_CONTROL RGMII_OUT[0] RGMII_OUT[1] RGMII_OUT[2] RGMII_OUT[3]}]

Ну и при таких ограничениях производитель гарантирует работоспособность.

Согласен, теперь со знаками всё нормально.

А Вы тоже не делали сдвиг 90 градусов?

post-18832-1535098861_thumb.png

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


Ссылка на сообщение
Поделиться на другие сайты
Согласен, теперь со знаками всё нормально.

А Вы тоже не делали сдвиг 90 градусов?

Плохо разводилось (приходилось гвоздями прибивать клокконтрол), в документации советуют 90 градусов ставить. В трех проектах используется один и тот же контроллер, везде без сдвига. Работает стабильно, кстати, в режиме точка-точка при грамотном размере программного буфера UDP работает без пропусков, хотя все программисты утверждают о невозможности этого :biggrin:

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


Ссылка на сообщение
Поделиться на другие сайты
Плохо разводилось (приходилось гвоздями прибивать клокконтрол), в документации советуют 90 градусов ставить. В трех проектах используется один и тот же контроллер, везде без сдвига. Работает стабильно, кстати, в режиме точка-точка при грамотном размере программного буфера UDP работает без пропусков, хотя все программисты утверждают о невозможности этого :biggrin:

Знакомая ситуация - я уже давно всё прибиваю. У меня этот контроллер работал с Аррией - так там вообще никаких проблем не было. А вот с циклоном застрял, сейчас разводится без слэков а вот Digital Loopback никак не запускается. Вы не знаете, при работе этого режима проверяется ли CRC принятого физикой пакета? У меня такое впечатление что в физике символы из DDR в SDR собираются с ошибкой. Это если они при отправке у меня байты на тетрады не правильно бьются. А как проверить - х.з.

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


Ссылка на сообщение
Поделиться на другие сайты
Думаю что Вы не правы. Посмотрите внимательно следующую картинку.

Внимательно смотрите что постите - на этом скрине тайминг для микросхемы PHY, а не плисины. Т.е. Вы должны взять даташит на фай, и сравнить его тайминг с этими требованиями. Если не совпадет, придется корректировать констрейнты плис.

 

А так, для плис типовые констрейнты указаны в таблице под вейвформой, и холд там положительный, а не отрицательный. Можно конечно и отрицательный сделать, но это Вы сами у себя крадете ресурсы.

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


Ссылка на сообщение
Поделиться на другие сайты
Внимательно смотрите что постите - на этом скрине тайминг для микросхемы PHY, а не плисины. Т.е. Вы должны взять даташит на фай, и сравнить его тайминг с этими требованиями. Если не совпадет, придется корректировать констрейнты плис.

 

А так, для плис типовые констрейнты указаны в таблице под вейвформой, и холд там положительный, а не отрицательный. Можно конечно и отрицательный сделать, но это Вы сами у себя крадете ресурсы.

 

Выходные задержки FPGA всегда вычислялись руководствуясь сетапом и холдом микросхемы-приёмника. Значение холда в уравнение входит со знаком минус.

И при чём здесь сетапы и холды FPGA? С ними STA сам разберётся.

post-18832-1535181092_thumb.png

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


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

- выходные задержки FPGA расчитываются действительно исходя из вейвформ микросхемы-приемника (если интерфейс - колхоз березка), либо исходя из требования стандарта (если интерфейс стандартный). RGMII - стандарт, вейвформы с таймингом для него Вы сами привели в одном из первых постов. Поэтому цифры надо брать из таблицы под вейвформой.

- Вы о чем спросили в первом посте, про констрейнты? Я и пишу про констрейнты - сетапы и холды. Да будет Вам известно, что ключ -max это констрейнт проверки интерфейса по сетапу, а ключ -min соотв. констрейнт проверки интерфейса по холду. Пишете про STA, но похоже плохо понимаете что это это, и как работает.

- В формуле холд используется с минусом, верно. Но в констрейнт записывается значение, соотвествующее вейвформе. На вейвформе холд показан положительным, т.к. сигнал снимается позже фронта клока. Отрицательный холд, это когда сигнал снимается ДО фронта клока. То же и в таблице - цифра указана с плюсом. Если Вы в констрейнт холда запишете не с плюсом (как требуется в данном случае) а с минусом, то ничего не нарушите поскольку констрейнт просто стал жесче. Но вытянет ли это требование САПР - другой вопрос.

 

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

 

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


Ссылка на сообщение
Поделиться на другие сайты
- выходные задержки FPGA расчитываются действительно исходя из вейвформ микросхемы-приемника (если интерфейс - колхоз березка), либо исходя из требования стандарта (если интерфейс стандартный). RGMII - стандарт, вейвформы с таймингом для него Вы сами привели в одном из первых постов. Поэтому цифры надо брать из таблицы под вейвформой.

- Вы о чем спросили в первом посте, про констрейнты? Я и пишу про констрейнты - сетапы и холды. Да будет Вам известно, что ключ -max это констрейнт проверки интерфейса по сетапу, а ключ -min соотв. констрейнт проверки интерфейса по холду. Пишете про STA, но похоже плохо понимаете что это это, и как работает.

- В формуле холд используется с минусом, верно. Но в констрейнт записывается значение, соотвествующее вейвформе. На вейвформе холд показан положительным, т.к. сигнал снимается позже фронта клока. Отрицательный холд, это когда сигнал снимается ДО фронта клока. То же и в таблице - цифра указана с плюсом. Если Вы в констрейнт холда запишете не с плюсом (как требуется в данном случае) а с минусом, то ничего не нарушите поскольку констрейнт просто стал жесче. Но вытянет ли это требование САПР - другой вопрос.

 

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

Да Вы батенька хамить начинаете.

Эту картинку тоже проигнорируете?

Здесь Th = 0,4нс означает что данные должны оставаться стабильными не менее чем 0,4нс после фронта клока на внешнем девайсе.

Но в set_output_delay это значение входит со знаком минус. Оно и понятно - и сетап и холд отсчитываются от одного и того же фронта клока, но находятся от него по разные стороны. Если за нулевую точку отсчёта времени принять момент фронта то тогда логично предположить что сетап и холд должны иметь разные знаки. А на "вейвформах" отображается не само время, а его модуль.

post-18832-1535199437_thumb.png

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация