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

Как пример... Берем Exar преобразователь PCIe в UART... Его цепляем к микроконтроллеру у которого есть USB и Ethernet... Далее все просто...
Boris_TS
А какой именно Ethernet нужен ?
И... что вы хотите делать с данными, которые будете передавать в USB устройства ? - только честно - тут все свои, хе-хе.
Владимир_О
Цитата(Boris_TS @ Jun 15 2012, 16:59) *
А какой именно Ethernet нужен ?
И... что вы хотите делать с данными, которые будете передавать в USB устройства ? - только честно - тут все свои, хе-хе.


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

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

Теоретически возможно. В PCI это называется multifunction device, и каждая функция имеет своё конфигурационное адресное пространство, которое выбирается полем "function" в адресе при конфигурационных циклах. Другое дело, что надо ещё найти или написать корку, которая поддерживает mutifunction на PCIe, например, корка lattice это не умеет.
Boris_TS
Цитата(Владимир_О @ 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 положить ?

Шифровать передаваемые данные хотите ? - так напишите об этом честно ! Как я говорил раньше - тут все свои.
Владимир_О
Цитата(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-контроллер, смогла работать со стандартными драйверами. Если это сложнореализуемо, то придется все же заняться драйвером...
Boris_TS
Цитата(Владимир_О @ 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 драйвера), но это чреватый и очень мутный путь, хотя тоже - вполне реализуемый.
Владимир_О
Цитата(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 шине? То бишь драйвер должен постоянно опрашивать эту плату или же она сама по приходу пакета в режиме мастера должна инициировать транзакции на шине?
Boris_TS
Цитата(Владимир_О @ 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 МБайт/с.
Владимир_О
Цитата(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 МГц для его работы?
Boris_TS
Цитата(Владимир_О @ Jun 22 2012, 12:59) *
То бишь Ethernet был гигабитным... Если не секрет, как получали 125 МГц для его работы?

В разных платах по разному, но всегда из высокостабильных 25 МГц: в ряде плат я использовать ПЛИС (Virtex-5/6) PLL для 25->125, в другом ряде плат использовал саму 88E1111 для этой цели.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.