TEMPLATE adder { CELL { CELLTYPE = block ; ATTRIBUTE { adder } PIN [:0] a_in { DIRECTION = input ; } PIN [:0] b_in { DIRECTION = input ; } PIN c_in { DIRECTION = input ; } PIN [:0] out { DIRECTION = output ; } FUNCTION { BEHAVIOR { out = a_in + b_in + c_in ; } } GROUP carry_bits { 0 : } VECTOR ( 01 c_in -> 01 out[carry_bits] ) { ENERGY = 1 ; } VECTOR ( 10 c_in -> 10 out[carry_bits] ) { ENERGY = 1 ; } VECTOR ( 10 c_in -> 01 out[carry_bits] ) { ENERGY = 1 ; } VECTOR ( 01 c_in -> 10 out[carry_bits] ) { ENERGY = 1 ; } TEMPLATE carry_propagate { GROUP low_bits { 0 : } VECTOR ( 01 a_in[low_bits] -> 01 out[] ) { ENERGY = 1 ; } VECTOR ( 10 a_in[low_bits] -> 10 out[] ) { ENERGY = 1 ; } VECTOR ( 10 a_in[low_bits] -> 01 out[] ) { ENERGY = 1 ; } VECTOR ( 01 a_in[low_bits] -> 10 out[] ) { ENERGY = 1 ; } VECTOR ( 01 b_in[low_bits] -> 01 out[] ) { ENERGY = 1 ; } VECTOR ( 10 b_in[low_bits] -> 10 out[] ) { ENERGY = 1 ; } VECTOR ( 10 b_in[low_bits] -> 01 out[] ) { ENERGY = 1 ; } VECTOR ( 01 b_in[low_bits] -> 10 out[] ) { ENERGY = 1 ; } } GROUP high_bits { 0 : } carry_propagate { high_bit = high_bits ; } } } adder { cellname = adder_8 ; msb_in = 7 ; msb_out = 8 ; }