Winger11 0 March 27, 2019 Posted March 27, 2019 · Report post Подскажите, пожалуйста, у кого есть удачный опыт применения данного IP. Использую его в режиме 1 Gb с внешней шиной RGMII. Снаружи на плате стоит внешний PHY-чип, который позволяет запускать встроенный генератор пакетов в сторону МАС, а также реализовывать loopback. С приемом пакетов от генератора, вроде бы, все нормально. А вот когда я посылаю пакет по RGMII и принимаю его обратно, начинаются проблемы, на каком-то этапе сигнал явно не так тактируется. Т.е. я, к примеру, посылаю пакет 0х01 0х02 0х30 0х40 0х05 0х06, а получаю 0х01 0х02 0х00 0х00 0х05 0х06. Поскольку в RGMII сигнал тактируется обоими фронтами клока по 4 бита, тут явно ситуация, когда один фронт не попадает в данные. Само ядро в плане тактовых сигналов не особо сложное - если в настройках указать "include shared logic in Core", то на вход достаточно подать 125 МГц и 200 МГЦ для блоков idelayctrl. Правда, потом нашел в описании фразу: "HR I/O do not include ODELAY components and another method is required to introduce the required 2 ns offset between the clock and data". У меня как раз используются HR-пины, т.е., насколько я понял, надо самому на MMCM делать 2 частоты 125 МГц, смещенные на 90 градусов друг относительно друга, и подавать их на ядро. Реализовал такую схему, но эффекта никакого - выходные данные RGMII тактируются некорректно. Заранее спасибо Quote Share this post Link to post Share on other sites More sharing options...
new123 0 March 27, 2019 Posted March 27, 2019 (edited) · Report post У меня альтера. Корки не стал пользовать, сам написал RGMII с PHY чипом. Было несколько нюансов: 1) Протащить через altera ddio и данные и управляющий сигнал (TX_EN) на чип вместе. 2) Сдвинуть обязательно тактовый клок для PHY на 90 градусов. Чтобы точно рассинхрона не было. 3) ну на всякий случай, чтобы точно слаков не было, иначе подобная каша лезла Еще кстати сам PHY чип же может сдвигать на 90 градусов. Надо его даташит глянуть. Там настроечные дефолтные регистры Edited March 27, 2019 by new123 Quote Share this post Link to post Share on other sites More sharing options...
gin 0 March 28, 2019 Posted March 28, 2019 · Report post 16 часов назад, new123 сказал: 2) Сдвинуть обязательно тактовый клок для PHY на 90 градусов. Чтобы точно рассинхрона не было. скорей всего именно это и нужно сделать. Хотя, можно клок не сдвигать, а записать в один из регистров PHY, чтобы тот сам клок двигал. Quote Share this post Link to post Share on other sites More sharing options...
Winger11 0 March 28, 2019 Posted March 28, 2019 · Report post 2 hours ago, gin said: скорей всего именно это и нужно сделать. Хотя, можно клок не сдвигать, а записать в один из регистров PHY, чтобы тот сам клок двигал. Я пробовал и так, и так. Даже если не сдвигать вручную, в ядре есть настройка "include shared logic in Core", и в этом случае ядро само делает сдвинутый на 90 градусов клок. Я посмотрел схематику implemented design - там все корректно. Внутри ядра имплементируется MMCM, несдвинутый клок используется для всей логики ядра, а также выдается наружу в качестве tx_clk, чтобы тактировать этим клоком всю пользовательскую логику, относящуюся к TX. А сдвинутый на 90 клок из этого внутреннего ММСМ выдается на тактовую линию rgmii_txc, чтобы внешний PHY мог ее использовать для тактирования линий данных rgmii_txd[3:0] и rgmii_tx_ctl. И в регистры PHY я прописываю, чтобы он брал этот клок для тактирования и не добавлял от себя дополнительной задержки. Quote Share this post Link to post Share on other sites More sharing options...
Winger11 0 March 28, 2019 Posted March 28, 2019 · Report post 19 hours ago, new123 said: У меня альтера. Корки не стал пользовать, сам написал RGMII с PHY чипом. Было несколько нюансов: 1) Протащить через altera ddio и данные и управляющий сигнал (TX_EN) на чип вместе. А пример констрейна для этого можете прислать? Остальное, что вы написали, я, вроде бы, учел. Слэков нет, но что-то плывёт :) Сейчас еще посмотрел в example_design ядра - там пины для всей шины rgmii обозначены с IOSTANDARD HSTL_I_18. Может быть, этот High Speed имеет значение... Quote Share this post Link to post Share on other sites More sharing options...
new123 0 March 28, 2019 Posted March 28, 2019 (edited) · Report post 4 hours ago, gin said: а записать в один из регистров PHY, чтобы тот сам клок двигал. для моего Marvell не было описания, пришлось самому двигать 1 hour ago, Winger11 said: А пример констрейна для этого можете прислать? на тот момент, когда я это делал, я плохо понимал что это. И ничего не описывал. Слизал только со статьи этот момент. Что это желательная обязаловка (протащить и дату и tx_en через одну шину ddio). И при нагрузке стало ровнее. Месяца 4 назад я посвятил себя констрейнам в моем мега проекте =))), описал только все частоты и логи через гигабитный езернет вообще стали работать при любой нагрузке без всяких проблем. Edited March 28, 2019 by new123 Quote Share this post Link to post Share on other sites More sharing options...
druzhin 0 April 13, 2019 Posted April 13, 2019 · Report post On 3/27/2019 at 8:19 PM, Winger11 said: Подскажите, пожалуйста, у кого есть удачный опыт применения данного IP. У меня есть опыт! Я применял! Ксилинксовский MAC гигабит, гнали жирный поток данных с устройства на сервер, обратно получали тонкую струйку управления. MAC сидел на шине axi под microblaze, он жрал данные от DMA, тоже с корегена. Потом, году в 2016-2017, перешли на ком-блок, который сами же и допиливаем под свои нужды, comblock.com. Если надо подробности - в понедельник на работе. Quote Share this post Link to post Share on other sites More sharing options...