<> <> <> <> <<>> IMPORTS IO; <<>> Library GrantDriveTop, GrantDriveRest, MCmdDrive, DoDrive, BiasGen, RequestDrive, BarrelShifter, PEDrive, PriorityEncoder, PreGrantDrive, Gates; CellType "Arbiter" PORTS [Rq0, Rq1, Rq2, Rq3, Rq4, Rq5, Rq6, Rq7, Rq8, Rq9, Rq10, Rq11, Rq12, Rq13, Rq14, Rq15, Rst, NewRequest, PhA, nPhA, PhB, nPhB -- in -- =BIT, Gt0, Gt1, Gt2, Gt3, Gt4, Gt5, Gt6, Gt7, Gt8, Gt9, Gt10, Gt11, Gt12, Gt13, Gt14, Gt15, MCmd0, MCmd1, MCmd2, MCmd3 -- out -- =BIT, Vdd, Gnd=BIT] Expand Keep, NoRequest, NoGrant, DoGrant, DoShift, Reset: BIT; nReset: BIT _ "H"; nlRq0, nlRq1, nlRq2, nlRq3, nlRq4, nlRq5, nlRq6, nlRq7, nlRq8, nlRq9, nlRq10, nlRq11, nlRq12, nlRq13, nlRq14, nlRq15: BIT; RqOut0, RqOut1, RqOut2, RqOut3, RqOut4, RqOut5, RqOut6, RqOut7, RqOut8, RqOut9, RqOut10, RqOut11, RqOut12, RqOut13, RqOut14, RqOut15: BIT; S1Out0, S1Out1, S1Out2, S1Out3, S1Out4, S1Out5, S1Out6, S1Out7, S1Out8, S1Out9, S1Out10, S1Out11, S1Out12, S1Out13, S1Out14, S1Out15: BIT; shift0, shift1, shift2, shift3, shift4, shift5, shift6, shift7, shift8, shift9, shift10, shift11, shift12, shift13, shift14, shift15: BIT; peIn0, peIn1, peIn2, peIn3, peIn4, peIn5, peIn6, peIn7, peIn8, peIn9, peIn10, peIn11, peIn12, peIn13, peIn14, peIn15: BIT; peOut0, peOut1, peOut2, peOut3, peOut4, peOut5, peOut6, peOut7, peOut8, peOut9, peOut10, peOut11, peOut12, peOut13, peOut14, peOut15: BIT; S2Out0, S2Out1, S2Out2, S2Out3, S2Out4, S2Out5, S2Out6, S2Out7, S2Out8, S2Out9, S2Out10, S2Out11, S2Out12, S2Out13, S2Out14, S2Out15: BIT; nPGt0, nPGt1, nPGt2, nPGt3, nPGt4, nPGt5, nPGt6, nPGt7, nPGt8, nPGt9, nPGt10, nPGt11, nPGt12, nPGt13, nPGt14, nPGt15: BIT; BiasMinus: BIAS _ "-"; BiasPlus: BIAS _ "+"; i1: Inverter[in: Rst, out: nReset]; i2: Inverter[in: nReset, out: Reset]; bg1: BiasGen[]; CEDAR FOR i: NAT IN [0..16) DO [] _ to.class.CellInstance[erInstance: to.instance, instanceName: IO.PutFR["RD%g", IO.card[i]], typeName: "RequestDrive", interfaceNodes: IO.PutFR["Request: Rq%g, Grant: Gt%g, nlRq: nlRq%g, RqOut: RqOut%g", IO.card[i], IO.card[i], IO.card[i], IO.card[i]]]; ENDLOOP; ; b1: BarrelShifter[left0: RqOut0, left1: RqOut1, left2: RqOut2, left3: RqOut3, left4: RqOut4, left5: RqOut5, left6: RqOut6, left7: RqOut7, left8: RqOut8, left9: RqOut9, left10: RqOut10, left11: RqOut11, left12: RqOut12, left13: RqOut13, left14: RqOut14, left15: RqOut15, right0: S1Out0, right1: S1Out1, right2: S1Out2, right3: S1Out3, right4: S1Out4, right5: S1Out5, right6: S1Out6, right7: S1Out7, right8: S1Out8, right9: S1Out9, right10: S1Out10, right11: S1Out11, right12: S1Out12, right13: S1Out13, right14: S1Out14, right15: S1Out15]; CEDAR FOR i: NAT IN [0..16) DO [] _ to.class.CellInstance[erInstance: to.instance, instanceName: IO.PutFR["sp1%g", IO.card[i]], typeName: "StaticPrecharge", interfaceNodes: IO.PutFR["clock: nPhA, out: S1Out%g", IO.card[i]]]; [] _ to.class.CellInstance[erInstance: to.instance, instanceName: IO.PutFR["PED%g", IO.card[i]], typeName: "PEDrive", interfaceNodes: IO.PutFR["ShifterOut: S1Out%g, encoderDrive: peIn%g", IO.card[i], IO.card[i]]]; ENDLOOP; ; pe1: PriorityEncoder[]; b2: BarrelShifter[right0: peOut0, right1: peOut1, right2: peOut2, right3: peOut3, right4: peOut4, right5: peOut5, right6: peOut6, right7: peOut7, right8: peOut8, right9: peOut9, right10: peOut10, right11: peOut11, right12: peOut12, right13: peOut13, right14: peOut14, right15: peOut15, left0: S2Out0, left1: S2Out1, left2: S2Out2, left3: S2Out3, left4: S2Out4, left5: S2Out5, left6: S2Out6, left7: S2Out7, left8: S2Out8, left9: S2Out9, left10: S2Out10, left11: S2Out11, left12: S2Out12, left13: S2Out13, left14: S2Out14, left15: S2Out15]; CEDAR FOR i: NAT IN [0..16) DO [] _ to.class.CellInstance[erInstance: to.instance, instanceName: IO.PutFR["sp2%g", IO.card[i]], typeName: "StaticPrecharge", interfaceNodes: IO.PutFR["clock: nPhA, out: S2Out%g", IO.card[i]]]; [] _ to.class.CellInstance[erInstance: to.instance, instanceName: IO.PutFR["PGD%g", IO.card[i]], typeName: "PreGrantDrive", interfaceNodes: IO.PutFR["ShifterOut: S2Out%g, nlRequest: nlRq%g, nPreGrant: nPGt%g", IO.card[i], IO.card[i], IO.card[i]]]; ENDLOOP; ; GDT0: GrantDriveTop[nPreGrant: nPGt0, Grant: Gt0, Shift: shift1]; CEDAR FOR i: NAT IN [1..15) DO [] _ to.class.CellInstance[erInstance: to.instance, instanceName: IO.PutFR["GDR%g", IO.card[i]], typeName: "GrantDriveRest", interfaceNodes: IO.PutFR["nPreGrant: nPGt%g, Grant: Gt%g, Shift: shift%g", IO.card[i], IO.card[i], IO.card[i+1]]]; ENDLOOP; ; GDR15: GrantDriveRest[nPreGrant: nPGt15, Grant: Gt15, Shift: shift0]; mcd1: MCmdDrive[]; dd1: DoDrive[] EndCellType