/**************************/ /* 4bit adder */ /**************************/ declare fadder { input a, b, ci ; output s, co ; instrin enable ; instr_arg enable(a, b, ci); } module add4{ input ina<4>, inb<4> ; output sum<4> ; instrin enable ; sel_v c0,c1,c2,st3,st2,st1,st0 ; fadder fa0, fa1, fa2, fa3 ; instruct enable par { st0 = fa0.enable(ina<0>, inb<0>, 0b0).s; c0 = fa0.enable(ina<0>,inb<0>, 0b0).co; st1 = fa1.enable(ina<1>, inb<1>, c0).s; c1 = fa1.enable(ina<1>, inb<1>, c0).co; st2 = fa2.enable(ina<2>, inb<2>, c1).s; c2 = fa2.enable(ina<2>, inb<2>, c1).co; st3 = fa3.enable(ina<3>, inb<3>, c2).s; sum = st3||st2||st1||st0; } } /**************************/ /* 1bit Full adder */ /**************************/ module fadder { input a, b, ci ; output s, co ; instrin enable ; instruct enable par { s = (a & ^b & ^ci)|(^a & b & ^ci)|(^a & ^b & ci)|(a & b & ci) ; co = (a & b )|(b & ci)|(a & ci) ; } }