Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ? по Triple-Speed Ethernet
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Jackov
Здравствуйте, товарищи.
Мы на работе осваиваем новую технологию - Ethernet, мне поручили разобраться с мегафункцией Triple-Speed Ethernet.
При изучении документации возникли кое-какие вопросы.
1. Шина Avalon-MM предназначена для конфигурирования мегафункции путём установки регистров. Шина адреса 7-ми разрядная, это позволяет адресоваться к 256 регистрам, на стр. 4-27 об этом так и написано. Тем не менее, последний доступный регистр имеет адрес 0x31C, а это уже 10 разрядов. Нестыковочка, однако.
2. Мегафункция у меня в режиме мультипорт. Как я понимаю, на каждый порт мегафункции должна быть подключена своя микросхема PHY. Просматривая карту регистров, мы видим два регистра по адресам 0x03C и 0x040 (стр. 4-31), в них необходимо записать адреса микросхем PHY. Но их всего два! А если у меня мегафункция настроена на 8 портов, что тогда? Такая же история и с адресными пространствами этих PHY, размещённых по адресам 0x200–0x27C и 0x280–0x2FC (стр. 4-34).
Сижу под квартусом 9.1. Всякие ниосы запрещены. Только пользовательская логика, только хардкор. sm.gif Хотя к сути, я думаю, это отношения не имеет.
Прошу помочь знающих людей, а то я чёта в стену упёрся. Поиск юзал - не помог.
Даташит прикреплён.
Заранее благодарен.
krux
1) разрядность шины CSR зависит от канальности
address[(log2(MAX_CHANNELS)+7):0]

2) даже если все PHY висят физически на одном MDIO, к ним можно получить доступ через "окно" первого порта.
Jackov
Цитата(krux @ Sep 29 2013, 18:34) *
1) разрядность шины CSR зависит от канальности
address[(log2(MAX_CHANNELS)+7):0]

Это понятно. У меня мегафункция в режиме мультипорт, а количество портов - 1, вот и получается, согласно формуле, 8-ми разрядная шина адреса (к стати да, сверху очепятка, не 7 а 8 конечно же).

Цитата(krux @ Sep 29 2013, 18:34) *
2) даже если все PHY висят физически на одном MDIO, к ним можно получить доступ через "окно" первого порта.

Правильно ли я понимаю, регистр MDIO_ADDR0 (0x03C) и окно PHY Device 0 Internal Registers (0x200 – 0x27C) образуют как бы пару, а MDIO_ADDR1 (0x040) и окно PHY Device 1 Internal Registers (0x280 – 0x2FC) образуют как бы вторую пару? Т.е., чтобы обратиться к какой-нибудь PHY, мне что надо сделать?
Мне надо в регистр MDIO_ADDR0 записать адрес этой PHY, после чего окно "PHY Device 0 Internal Registers" отобразится на нужную PHY. Таким образом, в регистре MDIO_ADDR0 значения нужно менять динамически, каждый раз перезаписывая перед обращением к другой PHY. Я правильно мыслю? Если правильно, то встаёт вопрос: зачем нужна вторая пара. Для второго MDIO? Но MDIO-интерфейс всегда один, не зависимо от количества портов.
И да, на стр. 4-28, только сегодня обнаружил такую строчку "The following registers are shared among all instances of a multi-port MAC:". Я её понимаю так: в мегафункции все регистры делятся на общие и на предназначенные для каждого порта (для второго порта (т.е. для первого, если считать от нуля) они начинаются со смещения 0х400), согласно последнему абзацу на стр. 4-27, и под строчкой перечислены как раз общие регистры. Но в перечислении указаны только регистры MDIO_ADDR0 и MDIO_ADDR1, а Окна там отсутствуют. Неужто буржуи забыли написать?

krux
Цитата(Jackov @ Sep 30 2013, 23:27) *
Правильно ли я понимаю, регистр MDIO_ADDR0 (0x03C) и окно PHY Device 0 Internal Registers (0x200 – 0x27C) образуют как бы пару, а MDIO_ADDR1 (0x040) и окно PHY Device 1 Internal Registers (0x280 – 0x2FC) образуют как бы вторую пару? Т.е., чтобы обратиться к какой-нибудь PHY, мне что надо сделать?
Мне надо в регистр MDIO_ADDR0 записать адрес этой PHY, после чего окно "PHY Device 0 Internal Registers" отобразится на нужную PHY. Таким образом, в регистре MDIO_ADDR0 значения нужно менять динамически, каждый раз перезаписывая перед обращением к другой PHY. Я правильно мыслю?

да

Цитата(Jackov @ Sep 30 2013, 23:27) *
Если правильно, то встаёт вопрос: зачем нужна вторая пара. Для второго MDIO? Но MDIO-интерфейс всегда один, не зависимо от количества портов.

Второй MDIO в корке TSE изначально сделан только с одной целью - для того чтобы сделать поддержку трансиверов GX/GT. При их использовании, настройка параметров трансиверов производится через это второе окно. Если вы не работаете через GT-трансиверы, то оно вам в 99% случаев не понадобится.


quick & dirty way to initialize TSE w/ 88e1111 PHY
Нажмите для просмотра прикрепленного файла
Jackov
Цитата(krux @ Sep 30 2013, 23:13) *
Второй MDIO в корке TSE изначально сделан только с одной целью - для того чтобы сделать поддержку трансиверов GX/GT. При их использовании, настройка параметров трансиверов производится через это второе окно. Если вы не работаете через GT-трансиверы, то оно вам в 99% случаев не понадобится.

Ага, вон оно как, спасибо! ))
Осталось только с первым вопросом разобраться...
Jackov
Цитата(Jackov @ Sep 30 2013, 23:25) *
Осталось только с первым вопросом разобраться...

Всё, я понял.
Кажись косяк в документации. Если присмотреться, регистры нумеруются с шагом по 4. Такое впечатление, что предполагается 8-ми разрядная шина данных, при 32-х разрядных регистрах. Тогда, чтобы установить весь регистр, к примеру command_config, нужно произвести запись по адресам 0x008, 0x009, 0x00А, 0x00В. Может быть оно так и было в предыдущих версиях мегафункции, но потом перешли на 32-х разрядную шину данных, а документацию откорректировать забыли. Получается, для того чтобы обратиться к регистру, его адрес нужно делить на 4, у command_config это будет 0x002. Посмотрел в даташит от 2013 года, там с этим делом уже всё нормально.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.