view 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 source

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)).