SM 0 20 февраля, 2009 Опубликовано 20 февраля, 2009 · Жалоба 149 LC для acex1k, но думаю можно еще немного выжать %) Угу, как минимум тем, что в каждой из stage у каждого сумматора есть еще по входному переносу, на который можно подать входной бит :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 20 февраля, 2009 Опубликовано 20 февраля, 2009 · Жалоба Угу, как минимум тем, что в каждой из 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 люта на сумматор %( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться