Jump to content
    

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

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

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

Share this post


Link to post
Share on other sites

Угу, как минимум тем, что в каждой из 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 люта на сумматор %(

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...