dataBuffer: TristateBuffer[nDataIn: nmux, Drive: Read, nDrive: nRead, Output: Data];
bitBuffer: TristateBuffer[nDataIn: ndata, Drive: Write, nDrive: nWrite, Output: mux];
nbitBuffer: TristateBuffer[nDataIn: Data, Drive: Write, nDrive: nWrite, Output: nmux];
Cedar
{selectSubNodes: RoseTypes.UnnamedConsNE ← NEW[RoseTypes.NodeExpressionRep.unnamedCons ← [unnamedCons [elts: NIL]]];
bitSubNodes: RoseTypes.UnnamedConsNE ← NEW[RoseTypes.NodeExpressionRep.unnamedCons ← [unnamedCons [elts: NIL]]];
nbitSubNodes: RoseTypes.UnnamedConsNE ← NEW[RoseTypes.NodeExpressionRep.unnamedCons ← [unnamedCons [elts: NIL]]];
FOR muxCount:
CARDINAL
DECREASING
IN [0..8)
DO
selectSubNodes.elts ← CONS[NEW[ NodeExpressionRep.primary ← [primary[ node: to.class.NodeInstance[erInstance: to.instance, name: IO.PutFR["Select%g", IO.int[muxCount]], type: SwitchTypes.bitType], selector: [whole [ ]]]]], selectSubNodes.elts];
bitSubNodes.elts ← CONS[NEW[ NodeExpressionRep.primary ← [primary[ node: to.class.NodeInstance[erInstance: to.instance, name: IO.PutFR["Bit%g", IO.int[muxCount]], type: SwitchTypes.bitType], selector: [whole [ ]]]]], bitSubNodes.elts];
nbitSubNodes.elts ← CONS[NEW[ NodeExpressionRep.primary ← [primary[ node: to.class.NodeInstance[erInstance: to.instance, name: IO.PutFR["nBit%g", IO.int[muxCount]], type: SwitchTypes.bitType], selector: [whole [ ]]]]], nbitSubNodes.elts];
[] ← to.class.CellInstance[erInstance: to.instance, instanceName: IO.PutFR["MuxTran%g", IO.int[muxCount]], typeName: "nE", interfaceNodes: IO.PutFR["gate: Select%g, ch1: Bit%g, ch2: mux", IO.int[muxCount], IO.int[muxCount]]];
[] ← to.class.CellInstance[erInstance: to.instance, instanceName: IO.PutFR["nMuxTran%g", IO.int[muxCount]], typeName: "nE", interfaceNodes: IO.PutFR["gate: Select%g, ch1: nBit%g, ch2: nmux", IO.int[muxCount], IO.int[muxCount]]];
ENDLOOP;
to.class.Equivalence[erInstance: to.instance, a: NEW[NodeExpressionRep.primary ← [primary [node: RoseCreate.LookupNode[from: thisCell, path: LIST["Select"]], selector: [whole [ ]]]]], b: selectSubNodes];
to.class.Equivalence[erInstance: to.instance, a: NEW[NodeExpressionRep.primary ← [primary [node: RoseCreate.LookupNode[from: thisCell, path: LIST["Bit"]], selector: [whole [ ]]]]], b: bitSubNodes];
to.class.Equivalence[erInstance: to.instance, a: NEW[NodeExpressionRep.primary ← [primary [node: RoseCreate.LookupNode[from: thisCell, path: LIST["nBit"]], selector: [whole [ ]]]]], b: nbitSubNodes]
};