CreateWholeChip:
PUBLIC
PROC [innerCt: CoreCreate.CellType]
RETURNS [cellType: CoreCreate.CellType] = {
padlist: PadFrame.Pads ← NIL;
chipside: CHAR;
count: NAT;
innames: LIST OF CoreCreate.WR ← NIL;
CP:
PROC [side:
CHAR, pos:
NAT]
RETURNS [
NAT] = {
RETURN[
(SELECT side FROM 'A =>136-pos, 'B => 102-pos, 'C => 68-pos, 'D => 34-pos, ENDCASE => 0)];
};
AddtoList:
PROC [name: CoreCreate.
WR, list:
LIST
OF CoreCreate.
WR]
RETURNS [
LIST
OF CoreCreate.
WR] ={
RETURN[
IF GList.Member[name, list] OR GList.Member[name, LIST["Gnd", "Vdd"]] THEN list
ELSE CONS[name, list]]
};
MPad:
PROC [
padname: CoreCreate.WR,
type: ATOM,
pa1, pa2, pa3, pa4: CoreCreate.PA ← []] = {
count ← count + 1;
padlist ← PadFrame.AddPad[padlist, padname, type, CP[chipside, count], pa1, pa2, pa3, pa4];
IF pa1 # [] THEN innames ← AddtoList[pa1.actual , innames];
IF pa2 # [] THEN innames ← AddtoList[pa2.actual , innames];
IF pa3 # [] THEN innames ← AddtoList[pa3.actual , innames];
IF pa4 # [] THEN innames ← AddtoList[pa4.actual , innames];
};
ASide: PROC = {
-- A Side of Chip
chipside ← 'A;
count ← 0;
MPad[xpd[14],$IOTst,["toChip","PDin22"],["fromChip","PDout22"],["enable","DPadEnb"]];
MPad[xpd[15],$IOTst,["toChip","PDin23"],["fromChip","PDout23"],["enable","DPadEnb"]];
MPad[xpd[16],$IOTst,["toChip","PDin24"],["fromChip","PDout24"],["enable","DPadEnb"]];
MPad[xpd[17],$IOTst,["toChip","PDin25"],["fromChip","PDout25"],["enable","DPadEnb"]];
MPad["PadGnd",$PadGnd];
MPad[xpd[18],$IOTst,["toChip","PDin26"],["fromChip","PDout26"],["enable","DPadEnb"]];
MPad[xpd[19],$IOTst,["toChip","PDin27"],["fromChip","PDout27"],["enable","DPadEnb"]];
MPad[xpd[20],$IOTst,["toChip","PDin28"],["fromChip","PDout28"],["enable","DPadEnb"]];
MPad["PadVdd",$PadVdd];
MPad["XCE'",$In,["toChip","CE'"]];
MPad[xpd[21],$IOTst,["toChip","PDin29"],["fromChip","PDout29"],["enable","DPadEnb"]];
MPad[xpd[22],$IOTst,["toChip","PDin30"],["fromChip","PDout30"],["enable","DPadEnb"]];
MPad[xpd[23],$IOTst,["toChip","PDin31"],["fromChip","PDout31"],["enable","DPadEnb"]];
MPad[xpd[24],$IOTst,["toChip","PDin32"],["fromChip","PDout32"],["enable","DPadEnb"]];
MPad[xpd[25],$IOTst,["toChip","PDin33"],["fromChip","PDout33"],["enable","DPadEnb"]];
MPad["Vdd",$Vdd];
MPad["SealRing",$PadGnd];
MPad["Gnd",$Gnd];
MPad[xpd[26],$IOTst,["toChip","PDin34"],["fromChip","PDout34"],["enable","DPadEnb"]];
MPad[xpd[27],$IOTst,["toChip","PDin35"],["fromChip","PDout35"],["enable","DPadEnb"]];
MPad[xpd[28],$IOTst,["toChip","PDin36"],["fromChip","PDout36"],["enable","DPadEnb"]];
MPad[xpd[29],$IOTst,["toChip","PDin37"],["fromChip","PDout37"],["enable","DPadEnb"]];
MPad[xpd[30],$IOTst,["toChip","PDin38"],["fromChip","PDout38"],["enable","DPadEnb"]];
MPad[xpd[31],$IOTst,["toChip","PDin39"],["fromChip","PDout39"],["enable","DPadEnb"]];
MPad["PadVdd",$PadVdd];
MPad["XPDTP",$IOTst,["toChip","PDTPin"],["fromChip","PDTPout"],["enable","DPadEnb"]];
MPad[xd[0],$IOTst,["toChip","Din0"],["fromChip","Dout0"],["enable","DataDir"]];
MPad[xd[1],$IOTst,["toChip","Din1"],["fromChip","Dout1"],["enable","DataDir"]];
MPad["PadGnd",$PadGnd];
MPad[xd[2],$IOTst,["toChip","Din2"],["fromChip","Dout2"],["enable","DataDir"]];
MPad[xd[3],$IOTst,["toChip","Din3"],["fromChip","Dout3"],["enable","DataDir"]];
MPad[xd[4],$IOTst,["toChip","Din4"],["fromChip","Dout4"],["enable","DataDir"]];
MPad[xd[5],$IOTst,["toChip","Din5"],["fromChip","Dout5"],["enable","DataDir"]];
};
BSide: PROC = {
-- B Side of Chip
chipside ← 'B;
count ← 0;
MPad[xa[3],$In,["toChip","A3"]];
MPad[xa[4],$In,["toChip","A4"]];
MPad[xd[6],$IOTst,["toChip","Din6"],["fromChip","Dout6"],["enable","DataDir"]];
MPad[xd[7],$IOTst,["toChip","Din7"],["fromChip","Dout7"],["enable","DataDir"]];
MPad["PadGnd",$PadGnd];
MPad[xd[8],$IOTst,["toChip","Din8"],["fromChip","Dout8"],["enable","DataDir"]];
MPad[xd[9],$IOTst,["toChip","Din9"],["fromChip","Dout9"],["enable","DataDir"]];
MPad["PadVdd",$PadVdd];
MPad[xd[10],$IOTst,["toChip","Din10"],["fromChip","Dout10"],["enable","DataDir"]];
MPad[xd[11],$IOTst,["toChip","Din11"],["fromChip","Dout11"],["enable","DataDir"]];
MPad[xd[12],$IOTst,["toChip","Din12"],["fromChip","Dout12"],["enable","DataDir"]];
MPad[xd[13],$IOTst,["toChip","Din13"],["fromChip","Dout13"],["enable","DataDir"]];
MPad[xd[14],$IOTst,["toChip","Din14"],["fromChip","Dout14"],["enable","DataDir"]];
MPad[xd[15],$IOTst,["toChip","Din15"],["fromChip","Dout15"],["enable","DataDir"]];
MPad["XIOW'",$In,["toChip","IOW'"]];
MPad["Gnd",$Gnd];
MPad["PadGnd",$PadGnd];
MPad["XCLOCK2",$In,["toChip","CLOCK2"]];
MPad["Vdd",$Vdd];
MPad["XIOR'",$In,["toChip","IOR'"]];
MPad[xa[5],$In,["toChip","A5"]];
MPad["XIORDY",$Tristate,["fromChip","Gnd"],["enable","IORDY"]];
MPad["XHOSTRESET",$In,["toChip","HOSTRESET"]];
MPad[xa[6],$In,["toChip","A6"]];
MPad[xa[7],$In,["toChip","A7"]];
MPad["PadVdd",$PadVdd];
MPad[xa[8],$In,["toChip","A8"]];
MPad["XLPRESET",$Out,["fromChip","LPRESET"]];
MPad["PadGnd",$PadGnd];
MPad["XHOLDA",$In,["toChip","HOLDA"]];
MPad["XHOLD",$Out,["fromChip","HOLD"]];
MPad["XPIRQ",$In,["toChip","PIRQ"]];
MPad["XXIRQ0",$Out,["fromChip","XIRQ0"]];
};
CSide: PROC = {
-- C Side of Chip
chipside ← 'C;
count ← 0;
MPad["Substrate",$Gnd];
MPad[xa[9],$In,["toChip","A9"]];
MPad[xpa[0],$Tristate, ["fromChip","PA0"],["enable","RPadEnb"]];
MPad[xpa[1],$Tristate, ["fromChip","PA1"],["enable","RPadEnb"]];
MPad[xpa[2],$Tristate, ["fromChip","PA2"],["enable","RPadEnb"]];
MPad[xpa[3],$Tristate, ["fromChip","PA3"],["enable","RPadEnb"]];
MPad[xpa[4],$Tristate, ["fromChip","PA4"],["enable","RPadEnb"]];
MPad[xpa[5],$Tristate, ["fromChip","PA5"],["enable","RPadEnb"]];
MPad["PadVdd",$PadVdd];
MPad[xpa[6],$Tristate, ["fromChip","PA6"],["enable","RPadEnb"]];
MPad[xpa[7],$Tristate, ["fromChip","PA7"],["enable","RPadEnb"]];
MPad[xpa[8],$Tristate, ["fromChip","PA8"],["enable","RPadEnb"]];
MPad[xpa[9],$Tristate, ["fromChip","PA9"],["enable","RPadEnb"]];
MPad[xpa[10 ],$Tristate, ["fromChip","PA10"],["enable","RPadEnb"]];
MPad[xpa[11],$Tristate, ["fromChip","PA11"],["enable","RPadEnb"]];
MPad["Gnd",$Gnd];
MPad["SealRing",$PadGnd];
MPad["Vdd",$Vdd];
MPad["XWENT'",$Out,["fromChip","WENT'"]];
MPad["XWENW'",$Out,["fromChip","WENW'"]];
MPad["XCAS'",$Tristate,["fromChip","CAS'"],["enable","RPadEnb"]];
MPad[xrasbar[0],$Tristate,["fromChip","RAS0'"],["enable","RPadEnb"]];
MPad[xrasbar[1],$Tristate,["fromChip","RAS1'"],["enable","RPadEnb"]];
MPad[xrasbar[2],$Tristate,["fromChip","RAS2'"],["enable","RPadEnb"]];
MPad["PadVdd",$PadVdd];
MPad[xrasbar[3],$Tristate,["fromChip","RAS3'"],["enable","RPadEnb"]];
MPad[xa[10],$In,["toChip","A10"]];
MPad["XRASX'",$Tristate,["fromChip","RASX'"],["enable","RPadEnb"]];
MPad["PadGnd",$PadGnd];
MPad["XMEMRDY",$In,["toChip","MEMRDY"]];
MPad[xa[11],$In,["toChip","A11"]];
MPad["XPDWP",$IOTst,["toChip","PDWPin"],["fromChip","PDWPout"],["enable","DPadEnb"]];
MPad[xpdhi[0],$IOTst,["toChip","PDin0"],["fromChip","PDout0"],["enable","DPadEnb"]];
};
DSide: PROC = {
-- D Side of Chip
chipside ← 'D;
count ← 0;
MPad[xa[12],$In,["toChip","A12"]];
MPad["XHINT",$Out,["fromChip","HINT"]];
MPad[xpdhi[1],$IOTst,["toChip","PDin1"],["fromChip","PDout1"],["enable","DPadEnb"]];
MPad[xpdhi[2],$IOTst,["toChip","PDin2"],["fromChip","PDout2"],["enable","DPadEnb"]];
MPad["PadGnd",$PadGnd];
MPad[xpdhi[3],$IOTst,["toChip","PDin3"],["fromChip","PDout3"],["enable","DPadEnb"]];
MPad[xpdhi[4],$IOTst,["toChip","PDin4"],["fromChip","PDout4"],["enable","DPadEnb"]];
MPad["PadVdd",$PadVdd];
MPad[xpdhi[5],$IOTst,["toChip","PDin5"],["fromChip","PDout5"],["enable","DPadEnb"]];
MPad[xpdtag[0],$IOTst,["toChip","PDin6"],["fromChip","PDout6"],["enable","DPadEnb"]];
MPad[xpdtag[1],$IOTst,["toChip","PDin7"],["fromChip","PDout7"],["enable","DPadEnb"]];
MPad[xpd[0],$IOTst,["toChip","PDin8"],["fromChip","PDout8"],["enable","DPadEnb"]];
MPad[xpd[1],$IOTst,["toChip","PDin9"],["fromChip","PDout9"],["enable","DPadEnb"]];
MPad[xpd[2],$IOTst,["toChip","PDin10"],["fromChip","PDout10"],["enable","DPadEnb"]];
MPad[xpd[3],$IOTst,["toChip","PDin11"],["fromChip","PDout11"],["enable","DPadEnb"]];
MPad["Gnd",$Gnd];
MPad["PadGnd",$PadGnd];
MPad["XCLOCKOUT",$Out,["fromChip","CLOCKOUT"]];
MPad["Vdd",$Vdd];
MPad[xpd[4],$IOTst,["toChip","PDin12"],["fromChip","PDout12"],["enable","DPadEnb"]];
MPad[xpd[5],$IOTst,["toChip","PDin13"],["fromChip","PDout13"],["enable","DPadEnb"]];
MPad[xpd[6],$IOTst,["toChip","PDin14"],["fromChip","PDout14"],["enable","DPadEnb"]];
MPad[xpd[7],$IOTst,["toChip","PDin15"],["fromChip","PDout15"],["enable","DPadEnb"]];
MPad[xpd[8],$IOTst,["toChip","PDin16"],["fromChip","PDout16"],["enable","DPadEnb"]];
MPad[xpd[9],$IOTst,["toChip","PDin17"],["fromChip","PDout17"],["enable","DPadEnb"]];
MPad["PadVdd",$PadVdd];
MPad[xpd[10],$IOTst,["toChip","PDin18"],["fromChip","PDout18"],["enable","DPadEnb"]];
MPad[xpd[11],$IOTst,["toChip","PDin19"],["fromChip","PDout19"],["enable","DPadEnb"]];
MPad["PadGnd",$PadGnd];
MPad[xpd[12],$IOTst,["toChip","PDin20"],["fromChip","PDout20"],["enable","DPadEnb"]];
MPad[xpd[13],$IOTst,["toChip","PDin21"],["fromChip","PDout21"],["enable","DPadEnb"]];
MPad[xa[1],$In,["toChip","A1"]];
MPad[xa[2],$In,["toChip","A2"]];
};
xpd: Core.Wire ← CoreCreate.Seq["XPD", 32];
xpdhi: Core.Wire ← CoreCreate.Seq["XPDHI", 6];
xpdtag: Core.Wire ← CoreCreate.Seq["XPDTAG", 2];
xa: Core.Wire ← CoreCreate.Seq["XA", 16];
xd: Core.Wire ← CoreCreate.Seq["XD", 16];
xpa: Core.Wire ← CoreCreate.Seq["XPA", 12];
xrasbar: Core.Wire ← CoreCreate.Seq["XRAS'", 4];
public: Core.Wire ← CoreCreate.WireList[
LIST[
xpd, xpdtag, xpdhi, xa, xd, xpa, xrasbar,
"PadGnd", "PadVdd", "Gnd", "Vdd",
"XCE'", "XPDTP", -- side A
"XIOW'", "XCLOCK2", "XIOR'", "XIORDY", "XHOSTRESET", "XLPRESET", "XHOLDA", "XHOLD", "XPIRQ", "XXIRQ0", -- side B
"XWENT'", "XWENW'", "XCAS'", "XRASX'", "XMEMRDY", "XPDWP", -- side C
"XHINT", "XCLOCKOUT" -- side D
]];
ASide[];
BSide[];
CSide[];
DSide[];
cellType ←
PadFrame.CreatePadFrame[
name: "WholeMiChip",
public: public,
onlyInternal: CoreCreate.WireList[innames],
innerInstance: CoreCreate.Instance[innerCt],
pads: padlist,
params: [
nbPadsX: 34,
nbPadsY: 34,
outerChanWidth: 8*40, -- width of channel at periphery in CnD units
powerCellWidth: 8*212 + 8, -- width of channel at periphery in CnD units
horizLayer: "met",
vertLayer: "met2",
library: "TamarinPads.dale"]
];
};