DIRECTORY CD, CDImports, CoreCreate, PW, PWCore, Sisyph, TilingClass USING [CreateTiling, LayoutNeighborX, LayoutNeighborY, TileArray, TileArrayRec, TileRec, TileRowRec]; Tamarin: CEDAR PROGRAM IMPORTS CDImports, CoreCreate, PW, PWCore, Sisyph, TilingClass = BEGIN OPEN CoreCreate; tamarinDesign: PUBLIC CD.Design; tamarinCx: Sisyph.Context; Extract: PROC [name: ROPE] RETURNS [cellType: CellType] ~ { cellType _ Sisyph.ExtractSchematicByName[name: name, cx: tamarinCx]; }; CSeq: PROC [inX: BOOL, name: ROPE, ct: CellType, count: NAT, wrs: LIST OF WR] RETURNS [cellType: CellType] = { cellType _ SequenceCell[name: name, baseCell: ct, count: count, sequencePorts: WireList[wrs]]; IF inX THEN PWCore.SetArrayX[cellType] ELSE PWCore.SetArrayY[cellType]; }; CSeqX: PROC [name: ROPE, ct: CellType, count: NAT, wrs: LIST OF WR] RETURNS [cellType: CellType] = {cellType _ CSeq[TRUE, name, ct, count, wrs]}; CSeqY: PROC [name: ROPE, ct: CellType, count: NAT, wrs: LIST OF WR] RETURNS [cellType: CellType] = {cellType _ CSeq[FALSE, name, ct, count, wrs]}; CreateShifter: PROC [] RETURNS [cellType: CellType] ~ { cellType _ CSeqX["Shifter", Extract["ShiftSlice.sch"], dpWidth, LIST["D1", "D2", "R"]]; }; CreateShifterGuts: PROC [height: NAT] RETURNS [cellType: CellType] ~ { cellType _ CSeqY["ShifterMiddle", Extract["ShiftBase.sch"], height, LIST["Select"]]; }; CreateBarrelShifter: PUBLIC PROC RETURNS [cellType: CellType] = { select: Wire _ Seq["Select", 16]; shResult: Wire _ Seq["shResult", 32]; D1Bus: Wire _ Seq["D1Bus", 32]; D2Bus: Wire _ Seq["D2Bus", 32]; shTopOut: Wire _ Seq["shTopOut", 32]; RBus: Wire _ Seq["RBus", 32]; spass: Wire _ Seq["spass", 16]; tileArray: TilingClass.TileArray _ NEW[TilingClass.TileArrayRec[18]]; tileArray[17] _ NEW[TilingClass.TileRowRec[32]]; FOR i: NAT IN [0..32) DO tileArray[17][i] _ NEW[TilingClass.TileRec _ [ type: Sisyph.ES[".ShiftTop.sch", tamarinCx], flatten: TRUE, renaming: LIST[["Vdd", "Vdd"], ["Gnd", "Gnd"], ["D1", D1Bus[i]], ["D2", D2Bus[i]], ["R", RBus[i]], ["ShiftTopOut", shTopOut[i]]] ]]; ENDLOOP; FOR row: NAT DECREASING IN [1..16] DO tileArray[row] _ NEW[TilingClass.TileRowRec[32]]; FOR i: NAT IN (0..32) DO tileArray[row][i] _ NEW[TilingClass.TileRec _ [ type: Sisyph.ES["ShiftBase.sch", tamarinCx], flatten: TRUE, renaming: LIST[ ["Select", select[16-row]] ] ]]; ENDLOOP; tileArray[row][0] _ NEW[TilingClass.TileRec _ [ type: Sisyph.ES["ShiftBase.sch", tamarinCx], flatten: TRUE, renaming: LIST[ ["Select", select[16-row]], ["ShiftPass", spass[row]] ] ]]; ENDLOOP; tileArray[0] _ NEW[TilingClass.TileRowRec[32]]; FOR i: NAT IN (0..32) DO tileArray[0][i] _ NEW[TilingClass.TileRec _ [ type: Sisyph.ES["ShiftBottom.sch", tamarinCx], flatten: TRUE, renaming: LIST[ ["Vdd", "Vdd"], ["Gnd", "Gnd"], ["D1", D1Bus[i]], ["D2", D2Bus[i]], ["R", RBus[i]] ] ]]; ENDLOOP; tileArray[0][0] _ NEW[TilingClass.TileRec _ [ type: Sisyph.ES["ShiftBottom.sch", tamarinCx], flatten: TRUE, renaming: LIST[ ["Vdd", "Vdd"], ["Gnd", "Gnd"], ["D1", D1Bus[0]], ["D2", D2Bus[0]], ["R", RBus[0]], ["RS1In", "RS1In"] ] ]]; cellType _ TilingClass.CreateTiling[ name: "BarrelShifter", public: Wires[D1Bus, D2Bus, RBus, "Vdd", "Gnd", select, "ShiftBotCtl", spass, "RS1In"], tileArray: tileArray, neighborX: TilingClass.LayoutNeighborX, neighborY: TilingClass.LayoutNeighborY ]; }; dpWidth: NAT _ 34; numTagBits: NAT _ 2; tamarinDesign _ PW.OpenDesign["EUCircuits"]; [] _ CDImports.Load[tamarinDesign, "SSI"]; [] _ CDImports.Load[tamarinDesign, "EE"]; [] _ CDImports.Load[tamarinDesign, "Logic"]; tamarinCx _ Sisyph.Create[design: tamarinDesign]; END. 8Tamarin.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Louis Monier November 6, 1986 6:08:02 pm PST Last Edited by: Ross February 17, 1987 12:27:39 pm PST -- Shifter -- ShifterGuts -- 17 is the top and I'll start building there -- line n of shifter is tileArray[16-n] -- 0 is the bottom ΚΫ– "cedar" style˜codešœ ™ Kšœ Οmœ1™Kšœ˜Kšžœžœ ˜—K˜Kšœžœžœ˜ Kšœ˜šŸœžœžœžœ˜;KšœD˜DK˜—K˜šŸœžœžœžœžœžœžœžœžœ˜nšœ#˜#Kšœ˜Kšœ˜—Kšžœžœžœ˜GK˜—KšŸœžœžœžœžœžœžœžœ)žœ˜‘KšŸœžœžœžœžœžœžœžœ)žœ˜’K˜K˜KšΟc ™ šŸ œžœžœ˜8šœ?˜?Kšžœ˜—K˜K˜Kš ™šŸœžœ žœžœ˜GšœC˜CKšžœ ˜—K˜——K˜šŸœž œžœ˜AKšœ!˜!Kšœ%˜%Kšœ˜Kšœ˜K˜%Kšœ˜K˜K˜Kšœ#žœ˜EK™.Kšœžœ˜0šžœžœžœ ž˜šœžœ˜.Kšœ žœ˜,Kšœ žœ˜šœ žœE˜SKšœ-˜-——Kšœ˜Kšžœ˜—Kšœ'™'šžœžœž œ ž˜%Kšœžœ˜1šžœžœžœ ž˜šœžœ˜/Kšœ žœ˜,Kšœ žœ˜Kšœ žœ˜,—Kšœ˜Kšžœ˜—šœžœ˜/Kšœ žœ˜,Kšœ žœ˜Kšœ žœ9˜GKšœ˜—Kšžœ˜—K™Kšœžœ˜/šžœžœžœ ž˜šœžœ˜-Kšœ žœ˜.Kšœ žœ˜šœ žœ"˜0Kšœ4˜4——Kšœ˜Kšžœ˜—šœžœ˜-Kšœ žœ˜.Kšœ žœ˜šœ žœ"˜0KšœH˜H—Kšœ˜—K˜šœ$˜$Kšœ˜KšœX˜XKšœ˜Kšœ'˜'Kšœ&˜&Kšœ˜—Kšœ˜—K˜K˜Kšœ žœ˜Kšœ žœ˜K˜Kšœžœ˜-Kšœ*˜*Kšœ)˜)Kšœ,˜,Kšœ1˜1K˜K˜K˜K˜Kšžœ˜K˜—…—/