реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Ethernet и USB на одном Cyclone
Владимир_О
сообщение Jun 15 2012, 09:03
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 24-10-11
Из: Санкт-Петербург
Пользователь №: 67 915



Возникла необходимость создать устройство, подключающееся в слот PCIe и выполняющее функции USB-хоста и сетевой карты Ethernet одновременно. Как правильно организовать конфигурационное пространство PCIe, чтобы плата определялась ПО компьютера и как USB-хост, и как сетевая карта? Такое возможно? Если нет, то возможно ли динамическое реконфигурирование? Насколько я понимаю, за определение типа устройства отвечает поле CLASS CODE в конфигурационном пространстве, и оно только одно...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jun 15 2012, 12:27
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Владимир_О @ Jun 15 2012, 13:03) *
Возникла необходимость создать устройство, подключающееся в слот PCIe и выполняющее функции USB-хоста и сетевой карты Ethernet одновременно. Как правильно организовать конфигурационное пространство PCIe, чтобы плата определялась ПО компьютера и как USB-хост, и как сетевая карта? Такое возможно? Если нет, то возможно ли динамическое реконфигурирование? Насколько я понимаю, за определение типа устройства отвечает поле CLASS CODE в конфигурационном пространстве, и оно только одно...

Как пример... Берем Exar преобразователь PCIe в UART... Его цепляем к микроконтроллеру у которого есть USB и Ethernet... Далее все просто...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Jun 15 2012, 12:59
Сообщение #3


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



А какой именно Ethernet нужен ?
И... что вы хотите делать с данными, которые будете передавать в USB устройства ? - только честно - тут все свои, хе-хе.
Go to the top of the page
 
+Quote Post
Владимир_О
сообщение Jun 18 2012, 07:29
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 24-10-11
Из: Санкт-Петербург
Пользователь №: 67 915



Цитата(Boris_TS @ Jun 15 2012, 16:59) *
А какой именно Ethernet нужен ?
И... что вы хотите делать с данными, которые будете передавать в USB устройства ? - только честно - тут все свои, хе-хе.


Гигабитный.
С USB будет осуществляться загрузка ОС.

Тут вопрос не в том, как это реализовать схемотехнически, а скорее в том, какая прошивка должна быть в PCIe-контроллере(Cyclone IV Altera) на плате, чтобы все правильно распозналось и функционироввло.
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 18 2012, 08:52
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



USB можно - смотри в сторону стандартов EHCI и UHCI (ну и OHCI для комплекта). А вот с Ethernet'ом будет сложнее - не уверен, что существует общий стандарт на host часть 'общего' Ethernet контролера. Придется прикидываться кем то конкретным (или свои драйвера писать)
Go to the top of the page
 
+Quote Post
Timmy
сообщение Jun 18 2012, 09:11
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(Владимир_О @ Jun 15 2012, 13:03) *
Возникла необходимость создать устройство, подключающееся в слот PCIe и выполняющее функции USB-хоста и сетевой карты Ethernet одновременно. Как правильно организовать конфигурационное пространство PCIe, чтобы плата определялась ПО компьютера и как USB-хост, и как сетевая карта? Такое возможно? Если нет, то возможно ли динамическое реконфигурирование? Насколько я понимаю, за определение типа устройства отвечает поле CLASS CODE в конфигурационном пространстве, и оно только одно...

Теоретически возможно. В PCI это называется multifunction device, и каждая функция имеет своё конфигурационное адресное пространство, которое выбирается полем "function" в адресе при конфигурационных циклах. Другое дело, что надо ещё найти или написать корку, которая поддерживает mutifunction на PCIe, например, корка lattice это не умеет.
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Jun 18 2012, 14:21
Сообщение #7


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(Владимир_О @ Jun 18 2012, 11:29) *
Гигабитный.
С USB будет осуществляться загрузка ОС.

Тут вопрос не в том, как это реализовать схемотехнически, а скорее в том, какая прошивка должна быть в PCIe-контроллере(Cyclone IV Altera) на плате, чтобы все правильно распозналось и функционироввло.

Мда, вопрос, конечно, не в схемотехнике... вопрос в системотехнике.
Вопрос исключительно системного характера:
Если вы хотите использовать какие-либо стандартные драйвера, то вы должны сделать стандартное же устройство. Это значит, что это стандартное устройство употребит все BAR PCI(e) устройства. Если необходимо реализовать более 1 устройства, и как минимум одно из них должно быть стандартным, то вам нужно PCI multi function device, обладающий несколькими конфигурационным пространствами. О чём было написано выше:
Цитата(Timmy @ Jun 18 2012, 13:11) *
Теоретически возможно. В PCI это называется multifunction device, и каждая функция имеет своё конфигурационное адресное пространство, которое выбирается полем "function" в адресе при конфигурационных циклах. Другое дело, что надо ещё найти или написать корку, которая поддерживает mutifunction на PCIe, например, корка lattice это не умеет.
Добавлю, Xilinx в Virtex-5 тоже этого сделать не могла. Есть ли поддержка в Virtex-6/7 – не знаю,.. но что-то сильно сомневаюсь.
Думаю, что и Altera далеко не ушла от соседей, но: кто знает ?

А стандартных Gigabit Ethernet NIC - просто нет.

Поэтому, проще поставить PCI-E switch и прицепить к нему несколько устройств, в т.ч. и микросхемы:
1. стандартный USB EHCI host.
2. покупной PCI-E Gigabit Ethernet NIC (Marvell. Realtek и пр.).
Иначе это всё превратиться в редкостный маразм.

И всё-таки чем вам не подходит внешний USB EHCI host ?
Зачем вы эту гадость (USB) хотите упхать в ПЛИС ?
Зачем вы хотите туда же и Gigabit Ethernet положить ?

Шифровать передаваемые данные хотите ? - так напишите об этом честно ! Как я говорил раньше - тут все свои.
Go to the top of the page
 
+Quote Post
Владимир_О
сообщение Jun 19 2012, 05:56
Сообщение #8


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 24-10-11
Из: Санкт-Петербург
Пользователь №: 67 915



Цитата(Boris_TS @ Jun 18 2012, 18:21) *
Мда, вопрос, конечно, не в схемотехнике... вопрос в системотехнике.
Вопрос исключительно системного характера:
Если вы хотите использовать какие-либо стандартные драйвера, то вы должны сделать стандартное же устройство. Это значит, что это стандартное устройство употребит все BAR PCI(e) устройства. Если необходимо реализовать более 1 устройства, и как минимум одно из них должно быть стандартным, то вам нужно PCI multi function device, обладающий несколькими конфигурационным пространствами. О чём было написано выше:
Добавлю, Xilinx в Virtex-5 тоже этого сделать не могла. Есть ли поддержка в Virtex-6/7 – не знаю,.. но что-то сильно сомневаюсь.
Думаю, что и Altera далеко не ушла от соседей, но: кто знает ?

А стандартных Gigabit Ethernet NIC - просто нет.

Поэтому, проще поставить PCI-E switch и прицепить к нему несколько устройств, в т.ч. и микросхемы:
1. стандартный USB EHCI host.
2. покупной PCI-E Gigabit Ethernet NIC (Marvell. Realtek и пр.).
Иначе это всё превратиться в редкостный маразм.

И всё-таки чем вам не подходит внешний USB EHCI host ?
Зачем вы эту гадость (USB) хотите упхать в ПЛИС ?
Зачем вы хотите туда же и Gigabit Ethernet положить ?

Шифровать передаваемые данные хотите ? - так напишите об этом честно ! Как я говорил раньше - тут все свои.


К вопросу реализации - у меня все так и реализовано - в ПЛИС - PCIe-ядро и мастер внутренней шины, на внешних микросхемах - USB(MAX3421E) и Ethernet(Marvell).
А вот первая часть ответа мне весьма полезна, спасибо.
Проще говоря, мне бы хотелось, чтобы моя плата, на которой реализован и USB-хост, и Ethernet-контроллер, смогла работать со стандартными драйверами. Если это сложнореализуемо, то придется все же заняться драйвером...
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Jun 19 2012, 06:40
Сообщение #9


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(Владимир_О @ Jun 19 2012, 09:56) *
К вопросу реализации - у меня все так и реализовано - в ПЛИС - PCIe-ядро и мастер внутренней шины, на внешних микросхемах - USB(MAX3421E) и Ethernet(Marvell).
А вот первая часть ответа мне весьма полезна, спасибо.

С USB я не работал плотно, и что именно реализовано в MAX3421E быстро оценить не могу.
«Ethernet(Marvell)» - как я понял у вас стоит Ethernet Phy (аля 88e1111).

Цитата(Владимир_О @ Jun 19 2012, 09:56) *
Проще говоря, мне бы хотелось, чтобы моя плата, на которой реализован и USB-хост, и Ethernet-контроллер, смогла работать со стандартными драйверами. Если это сложнореализуемо, то придется все же заняться драйвером...

Если нет необходимости шифровать данные передаваемые по Ethernet/USB, то, как я и писал выше, проще (по совокупности трудозатрат) поставить 3 стандартные специализированные микросхемы. В противном случае, ваши программисты просто затрахаются реализовывать полноценные Ethernet драйвера, которые необходимо будет писать под каждую операционную систему,.. а потом еще и поддерживать. Поэтому, для Ethernet, я бы рекомендовал использовать Marvell Yukon (например 88E8057).

А вот если необходимо извращать данные, то для Ethernet другого пути нет - полный самопал. Для USB устройств извращать данные на уровне PCI-E (или вырасщенного на его основе в ПЛИС OHCI), на мой взгляд, - бессмысленно; ибо в общем случае, топология USB устройства - весьма сильно варьируется.

P.S. Кстати, даже если Вы решитесь создать своё самопальное устройство, то вам всё равно потребуется как-то сделать так, чтобы с ним работало сразу 2 разных драйвера: USB Host и Ethernet NIC. Обычно для этого требуется создать 2 "устройства", т.е. вырастить 2 конфигурационных пространства на PCI... можно, конечно, и сваять это всё програмно (драйвер обманка, из которого "растут" USB Host и Ethernet NIC драйвера), но это чреватый и очень мутный путь, хотя тоже - вполне реализуемый.
Go to the top of the page
 
+Quote Post
Владимир_О
сообщение Jun 19 2012, 13:24
Сообщение #10


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 24-10-11
Из: Санкт-Петербург
Пользователь №: 67 915



Цитата(Boris_TS @ Jun 19 2012, 10:40) *
С USB я не работал плотно, и что именно реализовано в MAX3421E быстро оценить не могу.
«Ethernet(Marvell)» - как я понял у вас стоит Ethernet Phy (аля 88e1111).


Если нет необходимости шифровать данные передаваемые по Ethernet/USB, то, как я и писал выше, проще (по совокупности трудозатрат) поставить 3 стандартные специализированные микросхемы. В противном случае, ваши программисты просто затрахаются реализовывать полноценные Ethernet драйвера, которые необходимо будет писать под каждую операционную систему,.. а потом еще и поддерживать. Поэтому, для Ethernet, я бы рекомендовал использовать Marvell Yukon (например 88E8057).

А вот если необходимо извращать данные, то для Ethernet другого пути нет - полный самопал. Для USB устройств извращать данные на уровне PCI-E (или вырасщенного на его основе в ПЛИС OHCI), на мой взгляд, - бессмысленно; ибо в общем случае, топология USB устройства - весьма сильно варьируется.

P.S. Кстати, даже если Вы решитесь создать своё самопальное устройство, то вам всё равно потребуется как-то сделать так, чтобы с ним работало сразу 2 разных драйвера: USB Host и Ethernet NIC. Обычно для этого требуется создать 2 "устройства", т.е. вырастить 2 конфигурационных пространства на PCI... можно, конечно, и сваять это всё програмно (драйвер обманка, из которого "растут" USB Host и Ethernet NIC драйвера), но это чреватый и очень мутный путь, хотя тоже - вполне реализуемый.


Спасибо.
Ситуация определенно проясняется для меня, что само по себе радует. Вот теперь, на основании вышесказанного, задался вопросом - может ли плата с Ethernet'ом работать slave'ом на PCIe шине? То бишь драйвер должен постоянно опрашивать эту плату или же она сама по приходу пакета в режиме мастера должна инициировать транзакции на шине?
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Jun 19 2012, 13:47
Сообщение #11


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(Владимир_О @ Jun 19 2012, 17:24) *
Ситуация определенно проясняется для меня, что само по себе радует. Вот теперь, на основании вышесказанного, задался вопросом - может ли плата с Ethernet'ом работать slave'ом на PCIe шине? То бишь драйвер должен постоянно опрашивать эту плату или же она сама по приходу пакета в режиме мастера должна инициировать транзакции на шине?

Без Bus Master'а Gigabit Ethernet реализовывать бессмысленно.
У меня было как-то так:
1. приходящие пакеты начинают складываться в FIFO;
2. как только хоть 1 целый пакет принят - выставляется IRQ.
3. по IRQ самопальный NIC Driver настраивает Bus Master (куда и сколько лить данных).
4. после переливки части данных из FIFO - новое IRQ, и опять драйвер смотрит, что он может забрать из ОЗУ (машины) и куда Bus Master'у складировать новые пакеты.

Вот как-то так оно и работало на вот этом монстрике:

Прикрепленное изображение

Да, да, помимо Ethernet и USB Host'а, тут еще PATA и SATA... Так что о маразмах, говорю не понаслышке,.. а по собственному опыту + опыту коллег.
P.S. я делал Ethernet часть, на которой удавалось передавать файлы (по ftp) со скоростями от 110 до 112 МБайт/с.
Go to the top of the page
 
+Quote Post
Владимир_О
сообщение Jun 22 2012, 08:59
Сообщение #12


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 24-10-11
Из: Санкт-Петербург
Пользователь №: 67 915



Цитата(Boris_TS @ Jun 19 2012, 17:47) *
Без Bus Master'а Gigabit Ethernet реализовывать бессмысленно.
У меня было как-то так:
1. приходящие пакеты начинают складываться в FIFO;
2. как только хоть 1 целый пакет принят - выставляется IRQ.
3. по IRQ самопальный NIC Driver настраивает Bus Master (куда и сколько лить данных).
4. после переливки части данных из FIFO - новое IRQ, и опять драйвер смотрит, что он может забрать из ОЗУ (машины) и куда Bus Master'у складировать новые пакеты.

Вот как-то так оно и работало на вот этом монстрике:

Прикрепленное изображение

Да, да, помимо Ethernet и USB Host'а, тут еще PATA и SATA... Так что о маразмах, говорю не понаслышке,.. а по собственному опыту + опыту коллег.
P.S. я делал Ethernet часть, на которой удавалось передавать файлы (по ftp) со скоростями от 110 до 112 МБайт/с.


То бишь Ethernet был гигабитным... Если не секрет, как получали 125 МГц для его работы?
Go to the top of the page
 
+Quote Post
Boris_TS
сообщение Jun 22 2012, 11:28
Сообщение #13


Злополезный
****

Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188



Цитата(Владимир_О @ Jun 22 2012, 12:59) *
То бишь Ethernet был гигабитным... Если не секрет, как получали 125 МГц для его работы?

В разных платах по разному, но всегда из высокостабильных 25 МГц: в ряде плат я использовать ПЛИС (Virtex-5/6) PLL для 25->125, в другом ряде плат использовал саму 88E1111 для этой цели.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01576 секунд с 7
ELECTRONIX ©2004-2016