// csamul8.e four csa4 used to make 8 x 8 bit multiplier // uses add8c.e and csa4.e components // a times b = p, product define csamul8(a[8], b[8], p[16]) signal z4[4] <= #b0000; signal z3[3] <= #b000; signal pt[3]; // partial product signal ps[3]; signal co[8]; // partial carry signal c1[8]; signal c2[8]; signal cout; // unused output of adder signal so[8]; // partial sum signal s1[8]; signal s2[8]; signal s3[8]; circuits mul0 use csa4(a[3:0], b[3:0], z4, z4, pt, so[3:0], co[3:0], p[2:0]); mul1 use csa4(a[7:4], b[3:0], z4, z4, z3, so[7:4], co[7:4], pt); mul2 use csa4(a[3:0], b[7:4], s1[3:0], co[3:0], ps, s2[3:0], c1[3:0], p[6:4]); mul3 use csa4(a[7:4], b[7:4], s1[7:4], co[7:4], z3, s2[7:4], c1[7:4], ps); add use add8c(s3, c1, #b0, p[15:8], cout); s1 <= #b0.so[7:1] after 1ns; p[3] <= so[0] after 1ns; s3 <= #b0.s2[7:1] after 1ns; p[7] <= s2[0] after 1ns; end circuits; end csamul8;