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

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

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

Все правильно с нулем, а в примере есть момент: Ain = 4, то Aout = (4/4)*2 + 4 = 6 и т.д.
Со счетчиком все понятно, если адреса идут всегда последовательно, но может быть иная ситуация; в примере я показал последовательность лишь для понятности.
r_dot
Цитата(void F() @ Aug 16 2014, 17:34) *
... скорость потока данных ~80MHz.
... Латентность лучше бы ~4-8ns.
... ADDRвых = ADDRвх + (ADDRвх/N)*K

Вы не указываете, но быстродействие сильно зависит от разрядности ADDR.
Попробуйте использовать минимально-необходимую разрядность.
Если использовать N и K = только степени двойки (и как можно меньше), то умножение и деление можно делать сдвигами (на мультиплексорах).
Тогда, если всё будет где-то бит 8-9, то может и получится 4ns на "ПЛИС типа Циклона-1 или MAX2".
void F()
Спасибо за ответы.
Минимальная необходимая разрядность 24бита sad.gif.
Попытаюсь привести случайный поток данных к последовательности.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.