dxp 34 17 марта, 2015 Опубликовано 17 марта, 2015 · Жалоба Всем привет! Есть плата с PHY Marvell 88E1111 и FPGA Cyclone IVE, в последней реализуется уровень МАС, связь между ПЛИС и трансивером осуществляется посредством GMII. Для проверки целостности аппаратных интерфейсов используется включение петель. Auto-Negotiation проходит, вроде, успешно, Loopback в сторону линии (хоста) работает. Столкнулся с проблемой при включении loopback со стороны MAC уровня. Этот режим включается битом 0.14, читаю регистр 0, там значение 0x1140, что означает: Auto-Negotiation: Enable Copper Duplex Mode: Full-duplex Speed Selection: 10 = 1000 Mbps Вроде, всё чинно, скорость правильная (и флаг в статусном регистре тоже соответствует ей), остаётся только включить loopback. Если включить 14-й бит, то значение регистра должно быть: 0x5140. Прописываю это значение, сразу заметно изменение - трансивер, как и положено, теряет линк и энергопотребление заметно снижается. Теперь передаю тестовый паттерн, ожидая его возврата. И вот тут-то возникает затык: от трансивера ничего не приходит. Далее долгий и безрезультатный поиск нюансов (вдруг что-то забыл включить или какой-то важный момент упущен), но нет, вроде, просто всё - включаешь один бит и всё должно работать, если скорость установлена правильно (а она, вроде, правильно - при включенном режиме Auto-Negotiation биты 20.6:4 в 110). Уже перепробовав всё что можно, почти случайно прописал в регистр 0 значение 0x6140, и, о чудо, loopback заработал. Эксперименты показали, что работает именно 6 в старшей тетраде, остальные биты на работоспособность данного режима не влияют. И вот всё это повергает в недоумение. По факту получается, что эта 6 означает: Loopback: Enable Speed Selection (LSB): 1 Auto-Negotiation: Disable Пробовал варианты 0x4 и 0x7 в старшую тетраду, оба не работают. В общем, не ясны два момента: 1. Как и почему влияют "левые" биты на работоспособность loopback? 2. Прописывание значений в указанные биты, согласно документации, не приводит к активации связанной с ними функциональности - для того, чтобы они повлияли нужно либо произвести Software Reset, либо войти и выйти в Power Down, ничего этого не делается, так почему же это влияет? В общем, кто в курсе вопроса, просветите, пожалуйста? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sorok-odin 5 17 марта, 2015 Опубликовано 17 марта, 2015 · Жалоба 0x6140 - биты 6,13 = 11 - зарезервированное значение, может быть что угодно, например режим 10 или 100. Может у вас тест на 1000 не проходит т.к. не все линии целы. Какая частота клоков? Попробуйте тест на скорости 100 и 10. Сам МАК настроен на 1000? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitan 2 17 марта, 2015 Опубликовано 17 марта, 2015 · Жалоба биты 20.6:4 в 110). Забвано, но в release note есть раздел про то, как надо включать loopback, и там написано - configure mac to 1000 - 20.6:4 = '011' :) - reg0 = 0x8140 (force to 1000) - reg0 = 0x4140 (enable loopback) - loopback - reg0 = 0x8140 (diable loopback) Попробуйте, авось, получится... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 17 марта, 2015 Опубликовано 17 марта, 2015 · Жалоба 0x6140 - биты 6,13 = 11 - зарезервированное значение, может быть что угодно, например режим 10 или 100. Может у вас тест на 1000 не проходит т.к. не все линии целы. Какая частота клоков? Попробуйте тест на скорости 100 и 10. Сам МАК настроен на 1000? Клоки 125 Мгц, на другой скорости оно вообще работать, как понимаю, не будет. Забвано, но в release note есть раздел про то, как надо включать loopback, и там написано А где такой документ можно посмотреть? У меня datasheet достаточно свежий, November 20, 2012. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sorok-odin 5 17 марта, 2015 Опубликовано 17 марта, 2015 (изменено) · Жалоба Клоки 125 Мгц, на другой скорости оно вообще работать, как понимаю, не будет. Почему же, если задать биты 6,13 = 01, то при включени кольца будет соответственно режим 100 Мбит при RX_CLK и TX_CLK 25 МГц. Наверное стоило сразу пояснить какие клоки я имею ввиду, не путать с 125CLK Изменено 17 марта, 2015 пользователем sorok-odin Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 17 марта, 2015 Опубликовано 17 марта, 2015 · Жалоба Почему же, если задать биты 6,13 = 01, то при включени кольца будет соответственно режим 100 Мбит при RX_CLK и TX_CLK 25 МГц. Наверное стоило сразу пояснить какие клоки я имею ввиду, не путать с 125CLK TX_CLK у меня не используется, только GTX_CLK и RX_CLK, на обоих конролировал осциллографом, 125 МГц. И в сигналтапе я смотрю, так и проверяю, работает или нет. Оно либо вообще не работает - RX_DV мёртвый, либо работает правильно, а ведь исходящий клок у меня железно 125 МГц - его ПЛИС генерит, и он никак не может зависеть от режимов работы трансивера, и если этот исходящий поток приходит обратно без потерь (когда петля работает при этих странных настройках), то и RX_CLK тоже должен быть 125 МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 17 марта, 2015 Опубликовано 17 марта, 2015 · Жалоба сделайте хотя-бы "fast output register" на выводах, и про вывод тактового сигнала через ALTDDIO подумайте и вообще про source-synchronous interface почитайте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 18 марта, 2015 Опубликовано 18 марта, 2015 · Жалоба сделайте хотя-бы "fast output register" на выводах, и про вывод тактового сигнала через ALTDDIO подумайте и вообще про source-synchronous interface почитайте Докладываю. Все сигналы наружу, кроме GTX_CLK, размещены в выходных триггерах I/O элементов, GTX_CLK выведен через упомянутую вами ATLDDIO_OUTPUT со сдвигом в полпериода (4 нс). Входной клок RX_CLK заведён на dedicated CLK pin ПЛИС, с него на отдельную PLL, включенную в souce-synchronous compensation mode, с которой берётся клок для тактирования приёмной части. Все входные сигналы (кроме входного клока, разумеется) защёлкиваются во входных триггерах I/O элеменов по вышеупомянутому клоку. Все сигналы обконстрейнены в TimeQuest'е, Всё это тщательно контролировалось разными способами, начиная от анализа предупреждений синтезатора и просмотром размещения через ChipPlanner, и заканчивая наблюдением выходных сигналов, в частности, TX_EN относительно GTX_CLK, хорошим осциллографом на плате, там всё хорошо. Что-то вы уж совсем меня за безграмотного лоха держите. Либо невнимательно читали стартовый пост - там описана проблема совсем иного рода, нежели та, которая могла бы возникнуть из-за неграмотного проектирования приёмо-передающей логики внутри ПЛИС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitan 2 18 марта, 2015 Опубликовано 18 марта, 2015 · Жалоба А где такой документ можно посмотреть? В экстранете. Еще есть упоминание, что нельзя включать MAC loopback при включенном режиме Auto-media select. У Вас, кстати, медиа какая? И еще надо выключить sleep mode (energy detect) при работе с MAC loopback. При выходе из loopback надо этой же записью делать софт-ресет. Auto-MDI-X тоже надо выключить. Вы все это делаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 18 марта, 2015 Опубликовано 18 марта, 2015 · Жалоба В экстранете. Не попалось. :( Еще есть упоминание, что нельзя включать MAC loopback при включенном режиме Auto-media select. У Вас, кстати, медиа какая? И еще надо выключить sleep mode (energy detect) при работе с MAC loopback. Это в том же документе упомянуто? Медиа у меня медная. При выходе из loopback надо этой же записью делать софт-ресет. Auto-MDI-X тоже надо выключить. Вы все это делаете? Да, вроде всё получилось, делал по рекомендации из этого поста, они почти те же, что и ваши. Auto-Media Detect и МDI/MDI-X Crossover у меня выключено аппаратной конфигурацией. Программно сделал: 1. Включил DIS_SLEEP (16.9:8 = 00). 2. Выключил Auto-Negotiation (0.12 = 0). 3. Software Reset (0.15 = 1). 4. Включил Loopback (0.14 = 1). В итоге заработало. Т.е. у меня исходно не были сделаны две вещи: не была выключена Energy Detect и не была выключена Auto-Negotiation. Но ведь в даташите ни слова об этом не сказано! Я не понимаю, по замыслу производителя потребитель должен откуда об этом узнать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitan 2 18 марта, 2015 Опубликовано 18 марта, 2015 · Жалоба Не попалось. :( Смотрите внимательнее. Док. № MV-S300723. Это в том же документе упомянуто? Медиа у меня медная. Да, вроде всё получилось, делал по рекомендации из этого поста, они почти те же, что и ваши. Это они же и есть. :) Я не понимаю, по замыслу производителя потребитель должен откуда об этом узнать? Из документа MV-S400049-00, в котором сказано, что окромя даташита надо читать еще release notes для конкретной ревизии чипа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 34 18 марта, 2015 Опубликовано 18 марта, 2015 · Жалоба Смотрите внимательнее. Док. № MV-S300723. Да, по названию документа удалось найти, правда, только online версию. Узнал ещё кое-что интересное, в частности, что для ревизии В2 задающий резистор RSET должен иметь номинал не 5.0 кОм, а 4.87 кОм. Из документа MV-S400049-00, в котором сказано, что окромя даташита надо читать еще release notes для конкретной ревизии чипа. А вот этот документ найти не удалось. На фтп про 88Е1111 прилично информации, включая даташит уже за 2012 год (в котором, тем не менее, нет информации, которая есть в MV-S300723 от 2005 года), но этих важных доков, к сожалению, нет. Благодарность вам за чёткие ответы по делу. :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vitan 2 18 марта, 2015 Опубликовано 18 марта, 2015 · Жалоба А вот этот документ найти не удалось. Экстранет - это для официальных юзеров. Там много чего еще есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться