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

 
 
 
Reply to this topicStart new topic
> Потоковая обработка адресных данных
void F()
сообщение Aug 16 2014, 14:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 16-08-14
Пользователь №: 82 563



Добрый день, уважаемые.
Необходимо сделать некую систему виртуальных адресов через смещение. (звучит странно, знаю) Вообщем, через ПЛИС проходит адресная 24бит шина и для нее нужно вычислить смещение, подобное: через каждые N адреса прибавлять K.
ADDRвых = ADDRвх + (ADDRвх/N)*K
Тут получается одно сложение, умножение, целочисленное деление; скорость потока данных ~80MHz. Как это можно реализовать на не шибко-быстрой ПЛИС типа Циклона-1 или MAX2? Возможно формулу можно как-то упростить, но я не вижу как.
Есть еще один вариант: хранить виртуальные адреса в памяти, и на-лету их подставлять, но переписывать эту кучу адресов слишком долго, а хранить уж подавно.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 16 2014, 14:43
Сообщение #2


Гуру
******

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



Цитата(void F() @ Aug 16 2014, 18:34) *
Добрый день, уважаемые.
Необходимо сделать некую систему виртуальных адресов через смещение. (звучит странно, знаю) Вообщем, через ПЛИС проходит адресная 24бит шина и для нее нужно вычислить смещение, подобное: через каждые N адреса прибавлять K.
ADDRвых = ADDRвх + (ADDRвх/N)*K
Тут получается одно сложение, умножение, целочисленное деление; скорость потока данных ~80MHz. Как это можно реализовать на не шибко-быстрой ПЛИС типа Циклона-1 или MAX2? Возможно формулу можно как-то упростить, но я не вижу как.
Есть еще один вариант: хранить виртуальные адреса в памяти, и на-лету их подставлять, но переписывать эту кучу адресов слишком долго, а хранить уж подавно.
Заранее спасибо.

Написано "прибавлять K", а в формуле - стоит знак умножения...
А самое главное, что много вздохов, охов и ахов, а вот о том, идут ли адреса рандомно или берстами не сказано.
И так же не сказано, о латентности. Какова она может быть?
А так - делайте конвейер, и все...



--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
void F()
сообщение Aug 16 2014, 14:58
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 16-08-14
Пользователь №: 82 563



Цитата(iosifk @ Aug 16 2014, 14:43) *
Написано "прибавлять K", а в формуле - стоит знак умножения...
А самое главное, что много вздохов, охов и ахов, а вот о том, идут ли адреса рандомно или берстами не сказано.
И так же не сказано, о латентности. Какова она может быть?
А так - делайте конвейер, и все...

Прибавлять K после каждых N - это важно, поэтому умножение. Все адреса делятся на пакеты по Nшт и после каждого пакета нужно прибавить K. Пример:
K = 2; N = 4;
Ain: 0, 1, 2, 3, 4, 5, 6, 7
Aout: 0, 1, 2, 3, 6, 7, 8, 9

Адреса идут последовательно, иногда случайно. Латентность лучше бы ~4-8ns.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 16 2014, 15:09
Сообщение #4


Гуру
******

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



Цитата(void F() @ Aug 16 2014, 18:58) *
Прибавлять K после каждых N - это важно, поэтому умножение. Все адреса делятся на пакеты по Nшт и после каждого пакета нужно прибавить K. Пример:
K = 2; N = 4;
Ain: 0, 1, 2, 3, 4, 5, 6, 7
Aout: 0, 1, 2, 3, 6, 7, 8, 9

Адреса идут последовательно, иногда случайно. Латентность лучше бы ~4-8ns.

Формула не понятна. Если числа целые, то 1/2 даст 0, а у Вас в примере нет ни деления ни умножения.
Просто стоит счетчик, который считает и по окончании счета появляется дополнительное сложение...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
void F()
сообщение Aug 16 2014, 15:29
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 16-08-14
Пользователь №: 82 563



Цитата(iosifk @ Aug 16 2014, 15:09) *
Формула не понятна. Если числа целые, то 1/2 даст 0, а у Вас в примере нет ни деления ни умножения.
Просто стоит счетчик, который считает и по окончании счета появляется дополнительное сложение...

Все правильно с нулем, а в примере есть момент: Ain = 4, то Aout = (4/4)*2 + 4 = 6 и т.д.
Со счетчиком все понятно, если адреса идут всегда последовательно, но может быть иная ситуация; в примере я показал последовательность лишь для понятности.

Сообщение отредактировал void F() - Aug 16 2014, 15:30
Go to the top of the page
 
+Quote Post
r_dot
сообщение Aug 17 2014, 00:28
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 237
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 791



Цитата(void F() @ Aug 16 2014, 17:34) *
... скорость потока данных ~80MHz.
... Латентность лучше бы ~4-8ns.
... ADDRвых = ADDRвх + (ADDRвх/N)*K

Вы не указываете, но быстродействие сильно зависит от разрядности ADDR.
Попробуйте использовать минимально-необходимую разрядность.
Если использовать N и K = только степени двойки (и как можно меньше), то умножение и деление можно делать сдвигами (на мультиплексорах).
Тогда, если всё будет где-то бит 8-9, то может и получится 4ns на "ПЛИС типа Циклона-1 или MAX2".
Go to the top of the page
 
+Quote Post
void F()
сообщение Aug 17 2014, 18:54
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 16-08-14
Пользователь №: 82 563



Спасибо за ответы.
Минимальная необходимая разрядность 24бита sad.gif.
Попытаюсь привести случайный поток данных к последовательности.
Go to the top of the page
 
+Quote Post

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

 


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


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