honeycomb0 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 (изменено) · Жалоба Здравствуйте! Посоветуйте, как было бы проще собрать устройство, которое на входе получает байт, а на выходе ставит 8 ножек согласно битам из принятого байта (в просто-народе "бит-бангинг"). Главное требование, оно же и ограничение - выход должен строго работать на частоте 100МГц. Может есть какие-то готовые решения (что-то вроде дешевого анализатора спектра, только наоборот)? Каким я вижу одно из возможных решений: взять кортекс М4 с USB2.0, и настроить DMA для USB и GPIO. Хост (на ПК) будет построчно читать из файла байты, и слать их по USB на МК. Единственное, в чем я вижу сложность, это как мне строго задать частоту всего пайплайна, чтобы на выходе ножка порта дергалась каждые 10нс? Насколько такое решение вообще реализуемо? (Простите, за возможно делитанский вопрос.) Изменено 18 февраля, 2017 пользователем honeycomb0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба 8 ножек ...на частоте 100МГц. Итого имеем 800Mbit/s, USB HS не справится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба Сомневаюсь, что контроллер в принципе умеет махать ногами на частоте 100МГц Такое нужно делать на ПЛИС. Ну и крепко думать насчет интерфейса потому что USB 2.0 не справится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slavka012 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба Надо проц c USB 3.0 и минимум 500МГц Единственное, в чем я вижу сложность :laugh: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба . Хост (на ПК) будет построчно читать из файла байты, и слать их по USB на МК. Единственное, в чем я вижу сложность, это как мне строго задать частоту всего пайплайна, чтобы на выходе ножка порта дергалась каждые 10нс? Файл загружаем, например в стартовый набор с ПЛИС. Там должна быть внутр. память и если ее не хватает, то есть и внешняя. Или грузим во флэшь, а уже из нее потом в память... Далее в ПЛИС делаем ДМА и слова/байты/биты как угодно пишем в порт... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
honeycomb0 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба Всем спасибо за ответы! да, на самом деле я что-то не подумал написал про USB... Попробую реализовать на ПЛИС. Минимальная длина сигнала, который надо непрерывно генерировать имеет 12000 бит, а значит надо будет организовать 12 килобайт памяти. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Александр77 1 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба В ПЛИС можно 12000 бит "уложить" в 12кбит, что будет в 8 раз меньше Ваших 12 кБайт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
honeycomb0 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 (изменено) · Жалоба В ПЛИС можно 12000 бит "уложить" в 12кбит, что будет в 8 раз меньше Ваших 12 кБайт. Все так, только у меня же 8 параллельных каналов (8 ножек). И каждый канал непрерывно должен "выпалить" 12000 бит. Изменено 18 февраля, 2017 пользователем honeycomb0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба FT600Q, если RD зажать (соединить c RXF) будет данные на 100МГц выплёвывать. шина правда 16ти разрядная, но для USB3 200МБайт/с тоже не проблема. у блэкфинов, (bf592, bf700 в qfn корпусах) есть нормальный параллельный порт 50МГц х 16бит. который мультиплексором 8 х 2:1 можно превратить в 100МГц х 8бит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба Опередили немного. Тоже потом подумал, что под это дело можно шину использовать, а не ногами в режиме GPIO дергать. В принципе если вы готовы хранить данные в девайсе и постоянная их передача не требуется, то можете передать свои 12килобайт и через медленный интерфейс. Всё это складывается в буфер а потом выдается на шину с частотой 100мгц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
honeycomb0 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба FT600Q, если RD зажать (соединить c RXF) будет данные на 100МГц выплёвывать. шина правда 16ти разрядная, но для USB3 200МБайт/с тоже не проблема. у блэкфинов, (bf592, bf700 в qfn корпусах) есть нормальный параллельный порт 50МГц х 16бит. который мультиплексором 8 х 2:1 можно превратить в 100МГц х 8бит. Спасибо _pv за наводку! Не знал про FT600Q, в мою задачу вписывается идеально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба Кстати учтите, что USB вам скорее всего не будет гарантировать времянку. Т.е. выполнить требование выход должен строго работать на частоте 100МГц. уповая только на USB у вас скорее всего не получится. Спецификацию USB3 не читал, но в 2.0 все эти быстрые режимы реализуются по принципу "в среднем будет быстро" ))) Так что задачу надо будет решать в комплексе, с учетом всех требований. Я ж говорю если время от отправки с PC до выдачи этих бит на шину не важно, то можете 12КБ хоть по UART передать в девайс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
honeycomb0 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба Кстати учтите, что USB вам скорее всего не будет гарантировать времянку. Т.е. выполнить требование уповая только на USB у вас скорее всего не получится. Спецификацию USB3 не читал, но в 2.0 все эти быстрые режимы реализуются по принципу "в среднем будет быстро" ))) Так что задачу надо будет решать в комплексе, с учетом всех требований. Я ж говорю если время от отправки с PC до выдачи этих бит на шину не важно, то можете 12КБ хоть по UART передать в девайс. Спасибо, буду иметь в виду. По поводу передачи 12КБ в память, это пока самый реализуемый вариант, я согласен. Единственная проблема - будет ощутимая задержка между сигналами (сигнал в данном случае - это последовательность из 12000 бит на каждом из 8ми каналов). Т.е. У меня сигнал длиной в 120мкс (10нс на каждый бит), поэтому перезаписывая неспеша по UART'у после каждого 120мкс сигнала очень мучительно... В идеале, ПК читает длинный файл и пихает в FIFO, котороый и тайминги соблюдает и не дает ПК переполнить буфер. Ну тут, действительно, задача на USB3 с небольшим ПЛИС от Lattice вырисовывается... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба Блэкфины, USB, FIFO.... И это для элементарной задачи!?? Надо выдать 8 параллельных цифровых сигналов заранее подготовленных? Ещё в моей радиоэлектронной юности такое делалось элементарным чипом ПЗУ + счётчик на его адресных линиях. Сейчас ещё проще: 2 чипа Flash с quad-SPI интерфейсом спасут отца русской демократии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
honeycomb0 0 18 февраля, 2017 Опубликовано 18 февраля, 2017 · Жалоба Бюджетный вариант: ПЛИС с 12КБ памяти, вместо UART'а контроллер с USB2.0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться