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