Mercurial > hg > Applications > Tokio
diff Examples/multiply/mul_al @ 0:cfb7c6b24319
Initial revision
author | kono |
---|---|
date | Thu, 30 Aug 2007 14:57:44 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Examples/multiply/mul_al Thu Aug 30 14:57:44 2007 +0900 @@ -0,0 +1,66 @@ +mul2(X1,X0,Y1,Y0,M3,M2,M1,M0) :- + cell(0, 0, X0,Y0,M0, C00), + cell(0, 0, X1,Y0,S10,C10), + cell(S10,C00,X0,Y1,M1, C01), + cell(0 ,C10,X1,Y1,S11,C11), + cell(S11,C01,0, 0, M2, M3 ), + cell(0, C11,0, 0, _, _ ). + + +cell(Sin,Cin,X,Y,Sout,Cout) :- + #delay(Sin,S1), + #delay(Cin,C1), + #and(X,Y,L1), + #delay(L1,L2), + #half_adder(S1,C1,S2,C2), + #delay(C2,C4), + #half_adder(S2,L2,S3,C3), + #delay(S3,Sout), + #or(C3,C4,Cout). + +delay(X,X1) :- + @X1 = X. + +half_adder(A,B,S,C) :- + A = 0, B = 0, + @S = 0, @C = 0. +half_adder(A,B,S,C) :- + A = 0, B = 1, + @S = 1, @C = 0. +half_adder(A,B,S,C) :- + A = 1, B = 0, + @S = 1, @C = 0. +half_adder(A,B,S,C) :- + A = 1, B = 1, + @S = 0, @C = 1. + +or(A,B,C) :- + A = 0, B = 0, + @C = 0. +or(A,B,C) :- + A = 0, B = 1, + @C = 1. +or(A,B,C) :- + A = 1, B = 0, + @C = 1. +or(A,B,C) :- + A = 1, B = 1, + @C = 1. + +and(A,B,C) :- + A = 0, B = 0, + @C = 0. +and(A,B,C) :- + A = 0, B = 1, + @C = 0. +and(A,B,C) :- + A = 1, B = 0, + @C = 0. +and(A,B,C) :- + A = 1, B = 1, + @C = 1. + +test2 :- + length(12), + mul2(1,1,1,1,M3,M2,M1,M0), + #write((M3,M2,M1,M0)).