Цитата(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
а дальше пусть синтезатор разбирается. Но тормоза будут еще те %)