Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: shift
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Egel
У кого-нибудь есть мысли - как реализовать логический, циклический и арифметический сдвиг на одном 64-разрядном сдвигателе? Все это дело за такт - без конвейеров. Операнд - 64-разрядное число.

Если писать


assign vix = {vxod[63:0], x1, x2, x3, ...} >> sh[5:0];

Где х1, х2 .... - сигналы с мультиплексоров - соответственно ноль, бит операнда или знак операнда.

То синтезируется - 128-разрядный сдвигатель.

Было бы не плохо сделать сдвиг вправо/влево также на одном. По этому поводу была задумка сделать операцию mirror (т.е. полную инверсию операнда) на входе и выходе.

Если кто что подскажет - буду признателен.
des00
Цитата(Egel @ Aug 31 2009, 07:27) *
У кого-нибудь есть мысли - как реализовать логический, циклический и арифметический сдвиг на одном 64-разрядном сдвигателе? Все это дело за такт - без конвейеров. Операнд - 64-разрядное число.


а что сложного то ?

Код
//логический
unsigned pipa, popa;
pipa = n_rigth_left ? pipa << shift : pipa >> shift;

//арифметический
signed pipa, popa;
pipa = n_rigth_left ? pipa <<< shift : pipa >>> shift;

//циклический
typedef unsigned this_t;
typedef unsigned shift_t;
pipa = round_shift(popa, shift, n_rigth_left);

function automatic data_t round_shift (input data_t data, shift_t shift, bit n_rigth_left );
  for (int i = 0; i < shift; i++) begin
    if (n_rigth_left)
      data = {data[$high(data)-1 : 0], data[$high(data)]};
    else
      data = {data[0], data[$high(data) : 1]};
  end
  return data;
endfunction


а дальше пусть синтезатор разбирается. Но тормоза будут еще те %)
yes
Цитата(des00 @ Sep 1 2009, 07:34) *
а дальше пусть синтезатор разбирается. Но тормоза будут еще те %)


там должно синтезироватся n-мультиплексоров, где n - разрядность shift
даже в примитивной FPGA, это всего n (для 64х битного слова - 6(?) уровней логики), что во многих случаях не сложно

а во многих FPGA стоят дополнительные элементы для мультиплексирования - то есть еще проще

для АЗИКов вроде бы никогда барель-шифтеры не вызывают проблем со времянкой также
des00
Цитата(yes @ Sep 8 2009, 06:15) *
там должно синтезироватся n-мультиплексоров, где n - разрядность shift
даже в примитивной FPGA, это всего n (для 64х битного слова - 6(?) уровней логики), что во многих случаях не сложно

а во многих FPGA стоят дополнительные элементы для мультиплексирования - то есть еще проще

для АЗИКов вроде бы никогда барель-шифтеры не вызывают проблем со времянкой также


так то оно так. но тут 3 одновременно разных сдвигателя, в одном случае надо пихать 0, в другом знак, в третем N ый бит. это даст разрастание логики. собрал для 32 бит 3 сдвигателя квартус оценил в 1655 плиток. ИМХО такое количество плиток, зажатое между двумя 32 бита регистрами, на фпга быстрым не бывает %)
Bad0512
Поглядите в сторону хардверных умножителей 18 * 25 - есть такие в Spartan3A например. У Xilinx на их основе реализован framer для HD/SD SDI.
Сдвиг делается умножением на соответствующую степень двойки.
des00
Цитата(yes @ Sep 8 2009, 05:15) *
там должно синтезироватся n-мультиплексоров, где n - разрядность shift
даже в примитивной FPGA, это всего n (для 64х битного слова - 6(?) уровней логики), что во многих случаях не сложно

а во многих FPGA стоят дополнительные элементы для мультиплексирования - то есть еще проще

для АЗИКов вроде бы никогда барель-шифтеры не вызывают проблем со времянкой также


ради любви к исскуству уделил немного внимания сему делу. Получил занятные результаты :

для 32-х бит :
1. решение в лоб 1635 LC
2. умное решение в лоб 1480 LC
3. умное решение на уровне архитектуры 1258 LC
4. лобовое решение на уровне архитектуры для 32-х бит делать "заломало", для 4-х бит результат почти равен варианту 3.

для оценки datapath должен быть что то вроде : мультиплексор 32в1 23LC на бит итого 736LC.

кому интересно в атаче код

ЗЫ. собиралось КВА 9.0 сп1 , он конечно еще не шибко умный, но кое что могет %))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.