Перейти к содержанию
    

Есть ли стандартная функция: количество единичных

149 LC для acex1k, но думаю можно еще немного выжать %)

Угу, как минимум тем, что в каждой из stage у каждого сумматора есть еще по входному переносу, на который можно подать входной бит :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Угу, как минимум тем, что в каждой из stage у каждого сумматора есть еще по входному переносу, на который можно подать входной бит :)

 

вы правы, 141 LC для Acex1k :)

 

module ones(i, o);

  input wire [63:0] i;
  output wire [6:0] o;

  genvar g0;

  logic [1:0] stage0 [0 : 15];  // 16
  logic [2:0] stage1 [0 : 7];   // 8
  logic [3:0] stage2 [0 : 3];   // 4
  logic [4:0] stage3_0    ;   // 2
  logic [4:0] stage3_1    ;   // 2
  logic [5:0] stage4      ;   // 1

  generate

    for (g0 = 0; g0 < 16; g0++) begin : stage0_gen
      add_1bits
      add_1bits
      (
        .a     ( i      [3*g0 + 0] ),
        .b     ( i      [3*g0 + 1] ),
        .icarry( i      [3*g0 + 2] ),
        .sum   ( stage0 [g0][0]    ),
        .ocarry( stage0 [g0][1]    )
      );
    end
  endgenerate
  //
  assign stage1[0] = stage0[0]  + stage0[1]  + i[48];
  assign stage1[1] = stage0[2]  + stage0[3]  + i[49];
  assign stage1[2] = stage0[4]  + stage0[5]  + i[50];
  assign stage1[3] = stage0[6]  + stage0[7]  + i[51];
  assign stage1[4] = stage0[8]  + stage0[9]  + i[52];
  assign stage1[5] = stage0[10] + stage0[11] + i[53];
  assign stage1[6] = stage0[12] + stage0[13] + i[54];
  assign stage1[7] = stage0[14] + stage0[15] + i[55];
  //
  assign stage2[0] = stage1[0]  + stage1[1]  + i[56];
  assign stage2[1] = stage1[2]  + stage1[3]  + i[57];
  assign stage2[2] = stage1[4]  + stage1[5]  + i[58];
  assign stage2[3] = stage1[6]  + stage1[7]  + i[59];
  //
  assign stage3_0  = stage2[0]  + stage2[1]  + i[60];
  assign stage3_1  = stage2[2]  + stage2[3]  + i[61];
  //
  assign stage4    = stage3_0   + stage3_1   + i[62];
  //
  assign o         = stage4                  + i[63];

endmodule

 

ЗЫ. ква выкидывает все CARRY_SUM и городит первые сумматоры на лютах, по 2 люта на сумматор %(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...