dxp 58 1 августа Опубликовано 1 августа · Жалоба 5 минут назад, Okie_from_Muskogee сказал: Если данные защелкиваются в iddr и клок сразу идет в IO клоковую цепь и на iddr, то в set_input_delay смысла нету. Что он может изменить? Он позволяет контролировать, что тайминги в порядке. В частности, благодаря этому я увидел, что без IDELAY не обойтись. Этот констрейн не для регулировки, а для контроля (STA). Как и констрейн выходной задержки. 5 минут назад, Okie_from_Muskogee сказал: Задержку данных нужно регулировать через iodelay, подбирая вручную или запускать автоподстройку. А можно установить статически значение, глядя на отчёт STA. Но для этого нужен констрейн. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Okie_from_Muskogee 0 1 августа Опубликовано 1 августа · Жалоба 41 minutes ago, dxp said: Этот констрейн не для регулировки, а для контроля (STA). Как и констрейн выходной задержки. Да, но на работоспособность он не влияет. А вы пишете, что 5 hours ago, dxp said: При этом у Forencich'а совсем нет констрейнов по этому интерфейсу -- set_input_delay/set_output_delay. Ну, это как-то вообще не серьёзно -- такие интерфейсы без констрейнов не работают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 1 августа Опубликовано 1 августа · Жалоба 2 minutes ago, Okie_from_Muskogee said: Да, но на работоспособность он не влияет. А вы пишете, что Вообще то влияет - так как это констрейн позволяет учитывать тайминги внешних цепей - в частности внешнего PHY. Но опять же - откуда в библиотеке знать какой именно PHY будут юзать? Поэтому эти контстрейны остаются на совести разработчика, как и необходимость использования задержек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 1 августа Опубликовано 1 августа · Жалоба 14 минут назад, Okie_from_Muskogee сказал: Да, но на работоспособность он не влияет. Без него у меня IDELAY не было. Т.ч. ещё как влияет. И для IDELAY нужно было правильное значение выставить (по умолчанию там 0, с ним не работает -- не сходятся тайминги, я подобрал 15). 14 минут назад, Okie_from_Muskogee сказал: А вы пишете, что Я имел в виду "не работают" в смысле "не могут использоваться в полной мере правильно". Кстати, благодаря такому констрейну можно ведь и подбор задержки сделать с помощью тула -- он же видит тайминги и требования и может сам подобрать адекватное значение. Имхо, это не сложно. 7 минут назад, RobFPGA сказал: Но опять же - откуда в библиотеке знать какой именно PHY будут юзать? Вроде как сами интерфейсы GMII/GRMII стандартизированы, там тайминги должны быть одни и те же ±. Корка от Xilinx, например, не конкретизирует PHY. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Okie_from_Muskogee 0 1 августа Опубликовано 1 августа · Жалоба 5 minutes ago, dxp said: Я имел в виду "не работают" в смысле "не могут использоваться в полной мере правильно". Ok then 11 minutes ago, RobFPGA said: Вообще то влияет - так как это констрейн позволяет учитывать тайминги внешних цепей - в частности внешнего PHY. Я писал про ситуацию с IDDR, что резултат P&R в этом случае не зависит от наличия/отсутствия таких констрейнтов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 1 августа Опубликовано 1 августа · Жалоба 6 minutes ago, dxp said: Вроде как сами интерфейсы GMII/GRMII стандартизированы, там тайминги должны быть одни и те же ±. Корка от Xilinx, например, не конкретизирует PHY. Но внутри корки вроде как и не задаются input/output delay констрейны ... Это опять же ответственность разработчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 1 августа Опубликовано 1 августа · Жалоба 3 минуты назад, RobFPGA сказал: Но внутри корки вроде как и не задаются input/output delay констрейны ... у них в Example Project задаются. С другой стороны, вот смотрим даташит на KSX9031 (Microchip), там нет tsu, th для rgmii интерфейса. Есть только отсылка к RGMII V2.0 SPEC. Для tx интерфейса сказано, что надо задержку клока на 2 нс сделать со стороны МАС, а для rx сказано, что PHY задерживает клок 1.2 нс (и что эту задержку можно увеличить при желании через специальные регистры до 2.58 нс). 14 минут назад, Okie_from_Muskogee сказал: Я писал про ситуацию с IDDR, что резултат P&R в этом случае не зависит от наличия/отсутствия таких констрейнтов. Да, сам по себе этот констрейн не заставит синтезатор вставить элемент задержки. Но констрейн показывает, что этот элемент необходим, и вынуждает разработчика делать это. Цель же: получить работоспособный дизайн. Без констрейна у меня он не получился, хотя функционалка в симе работала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 33 1 августа Опубликовано 1 августа · Жалоба 10 minutes ago, dxp said: у них в Example Project задаются. Example это внешний проект по отношению к библиотеке/корке ... Так что IO задержки определяются физикой конкретной платы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 1 августа Опубликовано 1 августа · Жалоба Тем не менее спека RGMII требует задержку клока на 2 нс. Это-то как-то нетрадиционно -- более классический (и, имхо, правильный вариант) будет указать tsu/th для PHY, и там уже разработчики сами сообразят, на сколько клок задерживать. Но авторы спеки видимо решили навести унификацию, чтобы любые RGMII PHY были взаимозаменяемыми. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 2 августа Опубликовано 2 августа · Жалоба 18 hours ago, dxp said: Учиться по такому коду тяжело (документации нет, комментирован слабо, объём большой). Применять, допиливая... Verilog-2001? Нет уж, увольте, слишком привык к удобствам SV. Т.ч. либо брать как есть, либо переписывать, а это уже совсем другая работа. Претензия правильная - конечно, было бы здорово, если бы все было документировано и комментировано как следует. "- Жизнь хороша, и жить хорошо! - А хорошо жить - еще лучше!" (С) Кавказская пленница. 🙂 Но тут ситуация другая: дареному коню в зубы не смотрят. Ведь еще сложнее что-либо изучать или осваивать в случае "полного отсутствия какого-либо присутствия"🙂 А тут - более-менее функционально законченное решение, к тому же, вроде, в основном функционально работоспособное. Если ты такие еще не делал - очень полезно заглянуть внутрь и изучить, как опорный вариант. В общем, кривая обучения/освоения/нового проекта идет вверх сильно круче, чем со старта на пустом месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 2 августа Опубликовано 2 августа · Жалоба 3 часа назад, Raven сказал: еще сложнее что-либо изучать или осваивать в случае "полного отсутствия какого-либо присутствия"🙂 А тут - более-менее функционально законченное решение, к тому же, вроде, в основном функционально работоспособное. Если ты такие еще не делал - очень полезно заглянуть внутрь и изучить, как опорный вариант. В общем, кривая обучения/освоения/нового проекта идет вверх сильно круче, чем со старта на пустом месте. С такой формулировкой полностью согласен. Будем считать референсом. 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 2 августа Опубликовано 2 августа · Жалоба В 01.08.2024 в 12:57, dxp сказал: По констрейнам. Там есть вот такие: set_multicycle_path -from [get_clocks rgmii_rxclk] -to ${rxclk} -setup 0 set_multicycle_path -from [get_clocks rgmii_rxclk] -to ${rxclk} -hold -1 Тут rgmii_rxclk -- это виртуальный клок, по которому поступают данные на вход, rxclk -- это клок на rgmii_rxc пине (который Clock Capable) и который тактирует входную логики этого интерфейса внутри ПЛИС. Технически тут мультицикл используется для т.н. сдвига "окна". Но зачем это сделано и как работает, я не догоняю. Может кто-нибудь объяснить? А по этому вопросу может кто-нибудь объяснить? Зачем окно анализа сдвигают на такт назад? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 2 августа Опубликовано 2 августа · Жалоба я кстати сразу решил поискать этот констрейн на клок, но не нашел Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 7 августа Опубликовано 7 августа · Жалоба В 01.08.2024 в 08:57, dxp сказал: При этом у Forencich'а совсем нет констрейнов по этому интерфейсу -- set_input_delay/set_output_delay. Ну, это как-то вообще не серьёзно -- такие интерфейсы без констрейнов не работают. Как уже выше написали, констрейнты на RGMII не обязательны. Если все триггеры расположены в ножках, то задержка будет минимальная и в основном зависящая уже от разводки платы. А смещение клока относительно данных (по RX и по TX) задается настоечными регистрами PHY по MDIO. Хотя не все микросхемы PHY это позволяют. Marvell 88e1111 - может внутри себя двигать клок. А вот например, недавно работал с такой микросхемой как DM9119INP (DAVICOM Semiconductor) - она не позволяет. Двигал клок внутри ПЛИС на PLL. Что касается самой сути поста - продукт или пример. То скорей всего пример. Ведь никто не гарантирует сто процентную работоспособность бесплатного кода, по доброй воле выложенного в интернете. Такие вещи можно использовать для прототипирования или макетирования. Для коммерческих изделий лучше писать самому. ИМХО Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 58 7 августа Опубликовано 7 августа · Жалоба 1 час назад, gin сказал: Как уже выше написали, констрейнты на RGMII не обязательны. Если все триггеры расположены в ножках, то задержка будет минимальная и в основном зависящая уже от разводки платы. Ну, вот я так сделал сначала, всё просинтезировалось, ошибок нет. А потом констрейны применил и увидел, что тайминги не сходятся. Т.е. дизайн не рабочий. Фиксить это, подбирая экспериментально задержку на внешней микросхеме (речь про приём данных по RGMII)? Вслепую? Или всё же, видя эту ошибку, поискать более правильное решение -- вставить элементы задержки и подобрать для них корректное значение, ориентируясь на отчёт STA (он сразу показывает слаки). Я предпочитаю второй вариант. Констрейны в ПЛИС (особенно input/output) чаще всего нужны не для управления синтезом, а для коррекции (если синтезатор умеет -- у Альтеры было слово специальное: timing-driven synthesis) и, главным образом, для контроля корректности таймингов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться