/* 16bits Carry Lookahead Adder */ %i "cadd8.sfl" submod_class cadd16 { input a<16>, b<16>; input inv_b; input c_in; output out<16>, p<16>, g<16>, e<16>; output c_ou, v_ou; instrin do; instr_arg do(a, b, inv_b, c_in); } module cadd16 { input a<16>,b<16>; input inv_b; input c_in; output out<16>, p<16>, g<16>, e<16>; output c_ou, v_ou; instrin do; cadd8 add1; cadd8 add2; instruct do par { p = add2.do(a<15:8>, b<15:8>, inv_b, ((c_in & add1.pout) | add1.gout)).p || add1.do(a<7:0>, b<7:0>, inv_b, c_in).p; g = add2.do(a<15:8>, b<15:8>, inv_b, ((c_in & add1.pout) | add1.gout)).g || add1.do(a<7:0>, b<7:0>, inv_b, c_in).g; e = add2.do(a<15:8>, b<15:8>, inv_b, ((c_in & add1.pout) | add1.gout)).e || add1.do(a<7:0>, b<7:0>, inv_b, c_in).e; out = add2.do(a<15:8>, b<15:8>, inv_b, ((c_in & add1.pout) | add1.gout)).out || add1.do(a<7:0>, b<7:0>, inv_b, c_in).out; c_ou = (((c_in & add1.pout) | add1.gout) & add2.pout) | add2.gout; v_ou = ((((c_in & add1.pout) | add1.gout) & add2.pout) | add2.gout) @ (p<14> & p<13> & p<12> & p<11> & p<10> & p<9> & p<8> & ((c_in & add1.pout) | add1.gout)) | (p<14> & p<13> & p<12> & p<11> & p<10> & p<9> & g<8>) | (p<14> & p<13> & p<12> & p<11> & p<10> & g<9>) | (p<14> & p<13> & p<12> & p<11> & g<10>) | (p<14> & p<13> & p<12> & g<11>) | (p<14> & p<13> & g<12>) | (p<14> & g<13>) | g<14>; } }