!******************************************************************** %routinespec pstack(%string(31) name,%integer bits,words, %integername controlx,controly,pushcony,popcony,phi1x,phi2x,phi3x,phi4x, %integer pushyref,popyref) %routinespec pplacepads(%string(31) chipname,cellname,%integer portsref,n) !********************************************************************* %externalroutinespec stack(%string(31) name,%integer bits,words, %integername controlx,controly,pushcony,popcony,phi1x,phi2x,phi3x,phi4x, %integerarrayname pushy,popy) %recordformat connf(%integer type,side,c,w,%string(4) layer) %externalroutinespec placepads(%string(31) chipname,cellname, %c %record(connf)%arrayname ports,%integer n) !--------------------------------------------------------------------- %externalroutine pstack(%string(31) name,%integer bits,words, %integername controlx,controly,pushcony,popcony,phi1x,phi2x,phi3x,phi4x, %integer pushyref,popyref) %integerarray pushy,popy(1:bits) %integer i stack(name,bits,words,controlx,controly,pushcony,popcony, phi1x,phi2x,phi3x,phi4x,pushy,popy) %for i=1,1,bits %cycle integer(pushyref+2*i-2)=pushy(i) integer(popyref+2*i-2)=popy(i) %repeat %end !--------------------------------------------------------------------------- %externalroutine pplacepads(%string(31) chipname,cellname,%integer portsref,n) %record(connf)%array ports(1:n) %integer i,j j=portsref %for i=1,1,n %cycle { order of record items reversed! } ports(i)_type=integer(j+6) ports(i)_side=integer(j+4) ports(i)_c=integer(j+2) ports(i)_w=integer(j) ports(i)_layer=string(j+8) j=j+11 ; newline %repeat placepads(chipname,cellname,ports,n) %end !---------------------------------------------------------------------------- %endoffile