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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Сериализация большого количества параллельных данных., Как правильно сделать?
count_enable
сообщение Mar 28 2013, 11:36
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Есть несколько тысяч однобитных сигналов. В каждом цикле любое их количество может быть активным. Надо последовательно перебрать все входы, и при "1" на входе, на выходе надо подать номер входящего сигнала и строб DATARDY. И так пока все активные сигналы не будут переданы. После чего выставляем строб готовности, защелкиваем новое состояние входов и повторяем процесс. Такой себе демультиплексер, только с поддержкой множественных активных сигналов.
Ситуация осложняется тем, что в среднем активных сигналов будет меньше 10% от общего количества. Поэтому было бы хорошо сократить число циклов, необходимых для просмотра всех входов.
Мои идеи:

- Машиной состояний пройтись в цикле по всем входам. Никакой оптимизации, количество циклов всегда постоянно и не зависит от входов.

- при помощи конструктива for i in 0 to n_inputs loop пройтись только по активным входам. К сожалению, я сомневаюсь что на несколько тысяч входных сигналов цикл сгенерирует хороший дизайн.

- При помощи OR построить что-то типа бинарного дерева поиска, перебирая только активные ветви. Ускорение перебора увеличением сложности. К тому же хорошо будет работать только на сгруппированых сигналах, имея "010101010" на входах никакого ускорения не получится.

- Спросить опытных людей, как бы они решили такую проблему. Цель синтеза Spartan 6.
Go to the top of the page
 
+Quote Post
decom
сообщение Mar 28 2013, 11:54
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 150
Регистрация: 9-12-12
Из: Саранск
Пользователь №: 74 770



Как вариант комбинация первого и второго. Сгруппировать в группы по 16 сигналов, и добавить параллельно дерево поиска. Если ни хотя б один сигнал в группе активен, его передать, если в группе все неактивные не передавать.
Далее сгруппировать по ОR группы, тогда можно отсекать по 4,8, 16 групп сразу.
Самый тяжелый случай будет когда будет активен каждый 16 сигнал по всему дизайну, придется передать все.
Плата за это, всегда разная длина цикла, плюс накладные расходы, чтобы разобраться с адресами активных битов.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 28 2013, 13:23
Сообщение #3


Гуру
******

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



Цитата(count_enable @ Mar 28 2013, 15:36) *
в среднем активных сигналов будет меньше 10% от общего количества.


А от этих 10% как часто будут "изменения состояний"?
Может быть надо передавать не сами "активные состояния", а их изменения? Возможно, при этом объем данных на передачу уменьшится?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Maverick
сообщение Mar 28 2013, 14:32
Сообщение #4


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



может это поможет.... - возможное решение коммутации...
у Xilinx тоже есть аналогичные appnotes

Цитата(count_enable @ Mar 28 2013, 13:36) *
Такой себе демультиплексер, только с поддержкой множественных активных сигналов.
- Спросить опытных людей, как бы они решили такую проблему. Цель синтеза Spartan 6.

Еще подумайте насчет использования CPLD там архитектура более подходящая для задачи... (мое мнение)


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
count_enable
сообщение Mar 28 2013, 14:47
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Это не отдельное устройство, а входящий кодер для нейронной сети. Сеть работает на сигналах Address-Event, и внутренние шины типа АЕ. Есть глобальный "медленный клок", который задает темп входящих данных в сеть (один образец по терминологии НС), и нормальный клок, который в несколько тысяч раз быстрее. Импульсы на входах могут измениться каждый "медленный клок" полностью. Вариант с передачей только разницы состояний не прокатит.
Как я понимаю, петля for годится только для синтеза небольших (<50) групп элементов.
Go to the top of the page
 
+Quote Post
kreakozeablik
сообщение Mar 28 2013, 15:49
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 2-01-09
Пользователь №: 42 888



Входные данные загружаются в регистр. Затем, пока не будут обработаны все сигналы, производится сдвиг и увеличение на 1 счетчика. При появлении на выходе регистра «1», выдаем значение счетчика в качестве искомого номера.
Go to the top of the page
 
+Quote Post
count_enable
сообщение Mar 28 2013, 20:27
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Цитата(kreakozeablik @ Mar 28 2013, 18:49) *
Входные данные загружаются в регистр. Затем, пока не будут обработаны все сигналы, производится сдвиг и увеличение на 1 счетчика. При появлении на выходе регистра «1», выдаем значение счетчика в качестве искомого номера.

Так это именно мой первый вариант. Он очевиден, но неэкономичен - даже при самых нулях на входах, генерация выхода будет занимать столько же циклов, сколько сами 1.
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 29 2013, 07:30
Сообщение #8


Гуру
******

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



Цитата(count_enable @ Mar 28 2013, 18:47) *
Есть глобальный "медленный клок", который задает темп входящих данных в сеть (один образец по терминологии НС), и нормальный клок, который в несколько тысяч раз быстрее.
Огласите времянки 'медленного и быстрого' клока. И что делать, если вдруг будут активны все входные сигналы и за отведенное время их физически не удастся передать?

Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 29 2013, 07:36
Сообщение #9


Гуру
******

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



Цитата(count_enable @ Mar 29 2013, 00:27) *
Так это именно мой первый вариант. Он очевиден, но неэкономичен - даже при самых нулях на входах, генерация выхода будет занимать столько же циклов, сколько сами 1.

Есть такая память САМ - это то, что Вам возможно подойдет...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
count_enable
сообщение Mar 29 2013, 11:09
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



"Медленный клок" это 1/100 сек, быстрый - как позволит дизайн и плисина. Работа исследовательская, так что нету строгих рамок, но производительность важна.

Не совсем понял, как здесь можно использовать САМ.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 29 2013, 11:32
Сообщение #11


Гуру
******

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



Цитата(count_enable @ Mar 29 2013, 15:09) *
Не совсем понял, как здесь можно использовать САМ.


В САМ записываются биты.
Если в САМ не 0, то читается адрес ненулевой строки.
Аналогично работают поисковые таблицы в свитчах.


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 29 2013, 12:04
Сообщение #12


Гуру
******

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



Цитата(count_enable @ Mar 29 2013, 15:09) *
"Медленный клок" это 1/100 сек, быстрый - как позволит дизайн и плисина.
При таком отношении частот вполне можно не заморачиваться и сделать как вы и описали в 1м посте, например с помощью длинного сдвигового регистра (как советовал kreakozeablik)
Цитата
Работа исследовательская, так что нету строгих рамок, но производительность важна.
Производительность чего? Между 2мя 'медленными' клоками вы выкачаете все данные, а потом можете их обрабатывать хоть на 100MHz на отсчет rolleyes.gif

Вы лучше озаботьтесь как будете заводить в плисину 'несколько тысяч сигналов'. У нее банально не хватит ног 1111493779.gif
Go to the top of the page
 
+Quote Post
count_enable
сообщение Mar 29 2013, 12:27
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 310
Регистрация: 28-01-13
Из: Лондон
Пользователь №: 75 384



Данные поступают синхронно с "медленным клоком", а сама сеть асинхронна. Чем быстрее будет ответ на входной образец, тем лучше.
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 31 2013, 14:11
Сообщение #14


Гуру
******

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



Цитата(count_enable @ Mar 29 2013, 16:27) *
Данные поступают синхронно с "медленным клоком", а сама сеть асинхронна. Чем быстрее будет ответ на входной образец, тем лучше.
Тогда делите все входные сигналы на группы, и делайте параллельные шифраторы внутри них. Выходы сливайте попарно (или по 3/4/etc) в выходы. Их так же сливайте вместе. В результате получится дерево. Деревья смежных уровней соединяйте друг с другом через FIFO
Go to the top of the page
 
+Quote Post
S_Hawk
сообщение Apr 8 2013, 19:21
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 3-06-08
Пользователь №: 38 035



Если есть, допустим, 100 тактов, разбиваем весь входной набор на группы по 100 бит.
Для каждой группы создаем сдвиговый регистр, счетчик и фифо.
На каждом из 100 тактов:
если крайний бит == 1, заносим значение счетчика в фифо.
увеличиваем счетчик,
сдвигаем регистр на 1 бит.

Остается только слить все фифо вместе...
Go to the top of the page
 
+Quote Post

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

 


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


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