Цитата(SM @ May 13 2009, 14:08)

assign temp_a = (in_data & 64'h5555555555555555) + ((in_data >> 1) & 64'h5555555555555555);
assign temp_b = (temp_a & 64'h3333333333333333) + ((temp_a >> 2) & 64'h3333333333333333);
assign temp_c = (temp_b & 64'h0707070707070707) + ((temp_b >> 4) & 64'h0707070707070707);
assign temp_d = (temp_c & 64'h000F000F000F000F) + ((temp_c >> 8) & 64'h000F000F000F000F);
assign temp_e = (temp_d & 64'h0000001F0000001F) + ((temp_d >> 16) & 64'h0000001F0000001F);
assign temp_f = (temp_e & 64'h000000000000003F) + ((temp_e >> 32) & 64'h000000000000003F);
119 элементов против 193 следующей реализации:
Код
always @(*)
begin
temp_f = 0;
for(int i=0; i<64; i++)
if(in_data[i])
temp_f++;
end
Синтезатор еще далек от идеала
Но, зато, судя по времянке быстродействие второго способа не намного хуже, чем первого.
Надо бы для проверки в TQA загнать.
P.S. Пока проверял - не заметил сообщения выше
Сообщение отредактировал des333 - May 13 2009, 10:52