TEMPLATE halfadder { CELL { CELLTYPE = block ; ATTRIBUTE { adder } PIN [:0] a_in { DIRECTION = input ; } PIN [:0] out { DIRECTION = output ; } FUNCTION { BEHAVIOR { out = a_in + c_in ; } } TEMPLATE carry_propagate { GROUP low_bits { 0 : } VECTOR ( ?! a_in[low_bits] -> ?! out[] ) { ENERGY = 1 ; } } GROUP high_bits { 0 : } carry_propagate = dynamic { high_bit = high_bits ; } } } halfadder { cellname = halfadder_8 ; msb = 7 ; }