0
|
1 mul2(X1,X0,Y1,Y0,M3,M2,M1,M0) :-
|
|
2 cell(0, 0, X0,Y0,M0,C00),
|
|
3 cell(0, 0, X1,Y0,S10,C10)
|
|
4 &&
|
|
5 cell(S10,C00,X0,Y1,M1, C01),
|
|
6 cell(0 ,C10,X1,Y1,S11,C11)
|
|
7 &&
|
|
8 cell(S11,C01,0, 0,M2 , M3),
|
|
9 cell(0, C11,0, 0, _, _ ).
|
|
10
|
|
11
|
|
12 cell(Sin,Cin,X,Y,Sout,Cout) :-
|
|
13 and(X,Y,L1),S1 <- Sin,C1<- Cin
|
|
14 &&
|
|
15 full_adder(S1,C1,L1,Sout,Cout).
|
|
16
|
|
17 full_adder(S1,C1,L1,Sout,Cout) :-
|
|
18 half_adder(S1,C1,S2,C2),L2 <- L1
|
|
19 &&
|
|
20 half_adder(S2,L2,S3,C3),
|
|
21 C4 <- C2
|
|
22 &&
|
|
23 or(C3,C4,Cout),
|
|
24 Sout <- S3.
|
|
25
|
|
26 half_adder(A,B,S,C) :-
|
|
27 length(1),
|
|
28 A = 0, B = 0,
|
|
29 @S = 0, @C = 0.
|
|
30 half_adder(A,B,S,C) :-
|
|
31 length(1),
|
|
32 A = 0, B = 1,
|
|
33 @S = 1, @C = 0.
|
|
34 half_adder(A,B,S,C) :-
|
|
35 length(1),
|
|
36 A = 1, B = 0,
|
|
37 @S = 1, @C = 0.
|
|
38 half_adder(A,B,S,C) :-
|
|
39 length(1),
|
|
40 A = 1, B = 1,
|
|
41 @S = 0, @C = 1.
|
|
42
|
|
43 or(A,B,C) :-
|
|
44 length(1),
|
|
45 A = 0, B = 0,
|
|
46 @C = 0.
|
|
47 or(A,B,C) :-
|
|
48 length(1),
|
|
49 A = 0, B = 1,
|
|
50 @C = 1.
|
|
51 or(A,B,C) :-
|
|
52 length(1),
|
|
53 A = 1, B = 0,
|
|
54 @C = 1.
|
|
55 or(A,B,C) :-
|
|
56 length(1),
|
|
57 A = 1, B = 1,
|
|
58 @C = 1.
|
|
59
|
|
60 and(A,B,C) :-
|
|
61 length(1),
|
|
62 A = 0, B = 0,
|
|
63 @C = 0.
|
|
64 and(A,B,C) :-
|
|
65 length(1),
|
|
66 A = 0, B = 1,
|
|
67 @C = 0.
|
|
68 and(A,B,C) :-
|
|
69 length(1),
|
|
70 A = 1, B = 0,
|
|
71 @C = 0.
|
|
72 and(A,B,C) :-
|
|
73 length(1),
|
|
74 A = 1, B = 1,
|
|
75 @C = 1.
|
|
76
|
|
77 test1 :-
|
|
78 mul2(1,1,1,1,M3,M2,M1,M0),
|
|
79
|
|
80 fin(write((M3,M2,M1,M0))),
|
|
81 keep(write((M3,M2,M1,M0))).
|