DIRECTORY Core, CoreClasses; CoreCreate: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Core.ROPE; RopeList: TYPE = LIST OF ROPE; Design: TYPE = Core.Design; CellType: TYPE = Core.CellType; CellInstance: TYPE = CoreClasses.CellInstance; Wire: TYPE = Core.Wire; Attributes: TYPE = LIST OF Attribute; Attribute: TYPE = RECORD [key: ATOM, val: REF ANY _ NIL]; CreateError: ERROR [type: CreateErrorType, message: ROPE]; CreateErrorType: TYPE = {BadBinding, DuplicateName, InvariantFailed, MissingParameter, NotRecordCell}; CreateRecordCell: PROC [design: Design, name: ROPE, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [cell: CellType]; CreateSequenceCell: PROC [design: Design, name: ROPE, baseCell: CellType, count: NAT, sequencePorts: RopeList _ NIL, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [cell: CellType]; CreateIdentityCell: PROC [design: Design, name: ROPE, baseCell: CellType, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [cell: CellType]; FetchCell: PROC [design: Design, name: ROPE] RETURNS [cell: CellType]; CreateCellInstance: PROC [design: Design, in: CellType, type: CellType, bind: ROPE _ NIL, bindings: RopeList _ NIL, name: ROPE _ NIL, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [instance: CellInstance]; CreateWireSequenceType: PROC [design: Design, name: ROPE _ NIL, count: NAT, base: Wire _ NIL, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [wire: Wire]; CreateWireRecordType: PROC [design: Design, name: ROPE _ NIL, components: LIST OF Wire, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [wire: Wire]; CreateWireType: PROC [design: Design, name: ROPE _ NIL, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [wire: Wire]; CreateWire: PROC [design: Design, in: CellType, name: ROPE _ NIL, names: RopeList _ NIL, type: Wire _ NIL, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [wire: Wire]; CreatePublicWire: PROC [design: Design, on: CellType, name: ROPE _ NIL, names: RopeList _ NIL, type: Wire _ NIL, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL] RETURNS [wire: Wire]; PutAttributeOnCell: PROC [design: Design, on: CellType, attribute: Attribute _ [NIL, NIL], attributes: Attributes _ NIL]; END. `CoreCreate.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Barth, August 26, 1985 6:57:06 pm PDT Bertrand Serlet October 4, 1985 3:39:36 pm PDT Theory This interface provides some procedures useful for the structural definition of an integrated circuit. It takes the view that a system can be decomposed into cell types which contain cells that are interconnected by wires. A wire is an electrical equipotential region. A public wire is a wire inside a cell type to which an external wire may be connected. A cell has a list of public wires which together define the interface of the cell. Common Types and Errors Cells Creates a record cell and attaches it to the design. Raises CreateError[DuplicateName] if a cell of the specified name already exists. Like CreateRecordCell but creates the cell by iterating the base cell. Creates a new cell type which refers to the baseCell CellType but has a new property list. Searches for the named cell type. Returns NIL if not found Creates an instance within the cell. If multiple bindings are given then only the last instance is returned. Raises CreateError[NotRecordCell] if the "in" cell is not a record cell. The binding rope is parsed first and any formal-actual pairs found in the rope are bound. If any formals are left unbound then the wire of the cell is searched and any wire whose name matches an unbound formal will be bound to the formal. The wires of the formal-actual pairs are compared for structural equivalence. CreateError[BadBinding] is raised if the binding fails for any reason. binding ::= formal : selector ,.. formal ::= name selector ::= ( name ?( . name | [ num ] | [ num .. num ) ) ) | constructor constructor ::= [ selector ,.. ] name ::= letter | name ( letter | digit ) -- no spaces in this or following rules num ::= digit | num digit Wires Creates a sequence wire type. The components are numbered from least significant to most significant starting at 0 and increasing by one. Creates a record wire type. Creates an atomic wire type. Creates a wire within the cell. If type is NIL an atomic wire is created. Raises CreateError[NotRecordCell] if the cell is not a record cell. Raises CreateError[NoName] if no names are given. If multiple names are given then only the last wire is returned. Like CreateWire but makes the wire a public wire of the cell type. Attributes ส๚˜– "Cedar" stylešœ™Icode– "Cedar" stylešœ ฯmœ1™