|
|
  |
Потоковая обработка адресных данных |
|
|
|
Aug 16 2014, 14:34
|
Участник

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

|
Добрый день, уважаемые. Необходимо сделать некую систему виртуальных адресов через смещение. (звучит странно, знаю) Вообщем, через ПЛИС проходит адресная 24бит шина и для нее нужно вычислить смещение, подобное: через каждые N адреса прибавлять K. ADDRвых = ADDRвх + (ADDRвх/N)*K Тут получается одно сложение, умножение, целочисленное деление; скорость потока данных ~80MHz. Как это можно реализовать на не шибко-быстрой ПЛИС типа Циклона-1 или MAX2? Возможно формулу можно как-то упростить, но я не вижу как. Есть еще один вариант: хранить виртуальные адреса в памяти, и на-лету их подставлять, но переписывать эту кучу адресов слишком долго, а хранить уж подавно. Заранее спасибо.
|
|
|
|
|
Aug 16 2014, 14:43
|
Гуру
     
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
Aug 16 2014, 14:58
|
Участник

Группа: Участник
Сообщений: 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.
|
|
|
|
|
Aug 16 2014, 15:09
|
Гуру
     
Группа: Модераторы
Сообщений: 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
|
|
|
|
|
Aug 16 2014, 15:29
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Aug 17 2014, 00:28
|
Местный
  
Группа: Свой
Сообщений: 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".
|
|
|
|
|
Aug 17 2014, 18:54
|
Участник

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

|
Спасибо за ответы. Минимальная необходимая разрядность 24бита  . Попытаюсь привести случайный поток данных к последовательности.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|