Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передать по USB c ПЛИС на ПК
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
enzaime
Здравствуйте, такая проблема хочется организовать передачу данных от пк в плис и наоборот с минимальными усилиями, т.е. желательно готвое и простое решение ( может микросхема, которая выполняет эту задачу или что-то такое) Как я это представляю: к плис припаивается микросхема, кодирующая/декодирующая данные по usb (даже не принципиален usb протокол, чтобы по кабелю передавалось) протоколу, на пк ставится драйвер от производителя микросхемы, далее ,например, на с++ подключение библиотеки и использование функций, например по такому алгоритму:
1.подключить библиотеку
2. открыть порт передачи
3. передать массив
4. дождаться окончания передачи
5. принять ответ
6. закрыть порт

а на плис что-то вроде этого:

тактовый сигнал
количетсво слов (31 до 0) (бит)
шина данных(31 до 0) (бит)

по положительному фронту тактового сигнала сохранить в ram память c шины данных, пока не передадутся все слова

опытные люди подскажите есть ли такое или я губу раскатал?
гуглил: первый результат http://jorisvr.nl/usb/ , но мне показалось это каким-то сложным и кустарным что ли.
плис 5ceba7f23c8n http://www.digikey.com/product-detail/en/5...3C8N-ND/3879489
интересует именно для fpga а не hps (я видел что в hps реализованы протоколы передачи, но чтобы использовать hps это нужно как-то очень хитро что-то делать как мне кажется, в общем я пока думаю, что на fpga будет проще)
вот как-то так
Vascom
В ПЛИС удобно использовать UART, и внешнюю микросхему для преобразования сигнала в USB, например на FT232R.
enzaime
В плис прошивка соответствующая uart контроллеру, а выходной сигнал от плис преобразуется микросхемой в usb? http://www.ftdichip.com/Products/ICs/FT232R.htm
Со строны пк, похоже всё так как я себе и представлял, но непонятно что за код внутри плис, может есть какой-то стандартный пример или что-то такое? Может это какая-то функция предоставляемая фирмой Altera в программе Quartus II? И в чём удобство? Простота кода? Меньше самому в чём-то заморачиваться?
count_enable
Здесь имхо, де-факто стандартом стало семейстов cy7. Оно позволяет легко сделать 16-бит параллельное FIFO со стороны плисины, видел несколько плат с так реализованным интерфейсом. Весьма быстро и сравнительно просто.
enzaime
Т.е. для передачи данных в плис должна быть фифо и ещё что-то?
Мне пока неясно даже в общих чертах структура проекта в плис, пока я понимаю что это что-то такое:
1. Если пришёл сигнал начала передачи, то ко 2
2. Сохранить в фифо, то что приходит пока не пришёл сигнал конца передачи иначе в 3
3. Закончить передачу в 1
Может ли кто-то указать, где я наврал и неправильно понял?
count_enable
При помощи микросхем CY7 - CY8 легко реализовать интерфейс "8/16-bit parallel FIFO <-> USB". FPGA должна предоставлять приёмник и передатчик совместимые со стандартом CY7. Так как подобные FIFO относительно несложные и позволяют сделать быстрый (полные 480 Мбит) интерфейс, эти микросхемы стали весьма популярными у плисоводов. Видел неоднократно их в работе. В FT тоже есть аналогичные микросхемы, но с ними не работал, ничего сказать не могу

Сначала определитесь со скоростью какая нужна. Если 9600 бод, то конечно смысла нет городить фифо. Для средних скоростей порядка 1-10 МБод думаю самым простым будет SPI. VHDL SPI-slave это десяток строчек. На FT232FH и подобных можно сделать битбэнг SPI-мастер. Если нужно быстрее - тогда фифо.
Александр77
Среди семейства FT, кроме 232, есть FT245 с параллельным портом (достоинство в том, что не надо делать uart). Есть еще FT2232H, буквально комбайн - можно использовать и как 232, и как 245, а также есть режим синхронного FIFO, используя который можно достичь скорости ~ 10 МБ/с.
DSIoffe
Я бы тоже предложил FT2232H, для начала в составе вот такой платки: ftp://ftp.efo.ru/pub/ftdichip/Documents/D...i_Module_16.pdf , очень удобно. Намного проще Cypress. Или вот такую штуку: ftp://ftp.efo.ru/pub/ftdichip/Documents/D...Morph-IC-II.pdf , но это я не пробовал. У меня есть готовые тексты на VHDL и Delphi, если Вам не лень разбираться - пишите, вышлю.
Александр77
Морфик уже история, циклон 2 не поддерживается новым софтом.
Плата хоть и аппетитная, но обладает на мой взгляд недостатком, нет конфигурационного пзу, как следствие перед применением приходится ее грузить.
enzaime
Цитата
Сначала определитесь со скоростью какая нужна. Если 9600 бод, то конечно смысла нет городить фифо. Для средних скоростей порядка 1-10 МБод думаю самым простым будет SPI. VHDL SPI-slave это десяток строчек. На FT232FH и подобных можно сделать битбэнг SPI-мастер. Если нужно быстрее - тогда фифо.


Предположим скорость 9600 бод. Тогда в плис должен быть SPI-slave. Что-то вроде этого: https://sites.google.com/site/vanyambausesl...-interfejsa-spi
и используя микросхему FT232FH, заставив её работать в режиме SPI-мастер, можно передавать данные от пк в плис. Я правильно понял?
alevnew
Цитата(Александр77 @ Nov 2 2015, 19:49) *
Среди семейства FT, кроме 232, есть FT245 с параллельным портом (достоинство в том, что не надо делать uart). Есть еще FT2232H, буквально комбайн - можно использовать и как 232, и как 245, а также есть режим синхронного FIFO, используя который можно достичь скорости ~ 10 МБ/с.

Я пробовал, в режиме асинхронного FIFO - достигается 9 МБайт/сек.
Синхронный не пробовал, но там обещают вроде до 30 МБайт/сек.
А вообще да, я тоже рекомендую FT2232H. Асинхронный режим неплох.
В синхронном, на мой взгляд, недостаток (хотя и условный), то тактовая задается самой микрухой и появляется на выходе только после инициализации на стороне ПК.
Из-за собственного клока придется делать в ПЛИС буферный двухклоковый FIFO.
P.S. Достоинство FT2232H - бесплатный драйвер от производителя. Для CY7Cxxx придется изголяться с подписыванием драйверов.
count_enable
Цитата
Предположим скорость 9600 бод.
На такой скорости самым разумным будет UART. В плис или самописная, или готовая корка (их тысячи, уарт довольно простой). Со стороны ПК любой USB-UART преобразователь. Хоть новомодный китайский CH340, хоть старомодный китайский PL2303, хоть любой FT232. Самое приятное в том что интерфейс видится как обычный ком-порт, и с ним легко работать в любом языке программирования. Проще вообще некуда. Стабильная скорость до 1 Мбод.
iosifk
Цитата(count_enable @ Nov 7 2015, 15:28) *
На такой скорости самым разумным будет UART. В плис или самописная, или готовая корка (их тысячи, уарт довольно простой). Со стороны ПК любой USB-UART преобразователь. .....
Проще вообще некуда. Стабильная скорость до 1 Мбод.

Вообще то не все так просто. Кроме передачи байтов есть еще слово "протокол передачи данных". И либо передача символьными кодами 2 посылки на байт, простейший автомат для сборки-разборки протокола,
либо передача-прием с байт-стаффингом. Но тогда со стороны ПК тоже понадобится самодельный софт...

Я бы рекомендовал не Уарт, а SPI бит на 16 или более. Там сразу можно передавать пакет..
Александр77
Цитата(alevnew @ Nov 7 2015, 09:05) *
Я пробовал, в режиме асинхронного FIFO - достигается 9 МБайт/сек.
Синхронный не пробовал, но там обещают вроде до 30 МБайт/сек.

Мои коллеги, переходили рубеж в 10-12 МБайт/с, но с платой биглбона.
От меня требовалась передача примерно 8,5МБайт/с.
Выше скорость в синхронном режиме я не пробовал.
Anton1990
Цитата(enzaime @ Nov 2 2015, 14:10) *
Здравствуйте, такая проблема хочется организовать передачу данных от пк в плис и наоборот с минимальными усилиями, т.е. желательно готвое и простое решение ( может микросхема, которая выполняет эту задачу или что-то такое) Как я это представляю: к плис припаивается микросхема, кодирующая/декодирующая данные по usb (даже не принципиален usb протокол, чтобы по кабелю передавалось) протоколу, на пк ставится драйвер от производителя микросхемы, далее ,например, на с++ подключение библиотеки и использование функций, например по такому алгоритму:
1.подключить библиотеку
2. открыть порт передачи
3. передать массив
4. дождаться окончания передачи
5. принять ответ
6. закрыть порт

а на плис что-то вроде этого:

тактовый сигнал
количетсво слов (31 до 0) (бит)
шина данных(31 до 0) (бит)

по положительному фронту тактового сигнала сохранить в ram память c шины данных, пока не передадутся все слова

опытные люди подскажите есть ли такое или я губу раскатал?
гуглил: первый результат http://jorisvr.nl/usb/ , но мне показалось это каким-то сложным и кустарным что ли.
плис 5ceba7f23c8n http://www.digikey.com/product-detail/en/5...3C8N-ND/3879489
интересует именно для fpga а не hps (я видел что в hps реализованы протоколы передачи, но чтобы использовать hps это нужно как-то очень хитро что-то делать как мне кажется, в общем я пока думаю, что на fpga будет проще)
вот как-то так


Используй FT2232H в режиме HostEmulation. Это вроде проде процессорной шины. Очень удобно и легко, примеров куча. Короче я с первого раза сделал схему, развел плату FT2232h+xc144 от ксилинкс, создал проект плис, написал прогу. Все готово. Обмен работает. За подробностями обращаяся ежели чего.
count_enable
Цитата(iosifk @ Nov 7 2015, 15:32) *
Вообще то не все так просто. Кроме передачи байтов есть еще слово "протокол передачи данных". И либо передача символьными кодами 2 посылки на байт, простейший автомат для сборки-разборки протокола,
либо передача-прием с байт-стаффингом. Но тогда со стороны ПК тоже понадобится самодельный софт...

Я бы рекомендовал не Уарт, а SPI бит на 16 или более. Там сразу можно передавать пакет..
SPI на 100% потребует самописного софта, а уарт можно отладить любым терминалом. Я так понял ТС требует самого минимума: передать поток байт в плис, и прочитать поток байт из плис. Лично мне удобнее всего было бы уартом, тем более что преобразователей под рукой полный ящик. Но конечно эту задачу можно решить десятком способов, и все правильные.
iosifk
Цитата(count_enable @ Nov 7 2015, 19:27) *
SPI на 100% потребует самописного софта, а уарт можно отладить любым терминалом. Я так понял ТС требует самого минимума: передать поток байт в плис, и прочитать поток байт из плис. Лично мне удобнее всего было бы уартом, тем более что преобразователей под рукой полный ящик. Но конечно эту задачу можно решить десятком способов, и все правильные.

Вы не поняли. USB-SPI со стороны ПК так же видится как УАРТ. Так что тут проблем нет.
Проблемы в том, что передавать надо не "байты", а "данные". Так вот, данные бывают "от кого", "кому" и "сколько"... Потому и говорю о протоколе передачи данных, который "сидит" над UART или SPI... И если УАРТ это только 8 бит, то в SPI можно разместить кадр данных... И не надо делать байт-стаффинг...
Maverick
повторюсь...
можно с opencores попробовать
во вложении...
count_enable
Цитата
Вы не поняли. USB-SPI со стороны ПК так же видится как УАРТ.
Да, я незнаком с такими переходниками. А если я отправлю один байт, то ведомый получит 0xXX 0x00 или же конвертер будет ждать два байта?
iosifk
Цитата(count_enable @ Nov 8 2015, 00:26) *
Да, я незнаком с такими переходниками. А если я отправлю один байт, то ведомый получит 0xXX 0x00 или же конвертер будет ждать два байта?

Есть альтернатива:
1. Делать разборку протокола а ПЛИС, наворачивая автоматы, стаффинг и пр. Но при этом переходник - простейший, например FT2232 - байт в байт...
2. Весь протокол переложить в переходник. Например любой стартовый набор на микроконтроллер с USB-COM. В нем на Си написать поддлержку протокола по USB-COM. Все стаффинги, CRC, перезапросы и пр. А от микроконтроллера - по SPI в ПЛИС. На 16 битов можно положить кадр: КОП, адрес, данные. При этом в ПЛИС будет минимальные затраты на обработку протокола. Для меня все равно где делать, но мне кажется, что проще на Си, чем в ПЛИС... А что касается софта, то для Wake исходники и примеры выложены...
DSIoffe
Цитата(alevnew @ Nov 7 2015, 09:05) *
В синхронном, на мой взгляд, недостаток (хотя и условный), то тактовая задается самой микрухой и появляется на выходе только после инициализации на стороне ПК.
Из-за собственного клока придется делать в ПЛИС буферный двухклоковый FIFO.

По-моему, это достоинство: халявные 60 МГц для тактирования той же ПЛИС sm.gif Я вообще обошёлся без микросхемы генератора. Если мало - можно подключить ФАПЧ.
Александр77
Цитата(DSIoffe @ Nov 10 2015, 14:45) *
По-моему, это достоинство: халявные 60 МГц для тактирования той же ПЛИС sm.gif Я вообще обошёлся без микросхемы генератора. Если мало - можно подключить ФАПЧ.

Эта халява работает только в режиме синхронного FIFO. Если бы вывод генератора не отключался - было бы намного интереснее.
Насколько могу судить, стабильностью генератор не отличается.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.