Пример #1
0
        /// <summary>
        /// Constructor when reading subcircuit instances
        /// </summary>
        /// <param name="parent">Parent</param>
        /// <param name="subckt">Subcircuit definition</param>
        public SubcircuitPath(Netlist netlist, SubcircuitPath parent, Subcircuit subckt)
        {
            // Same global parameters
            globalparameters = parent.globalparameters;

            // Same globals
            Globals = parent.Globals;

            // Build parameters
            Parameters = GenerateParameters(netlist, subckt.Definition, subckt.Parameters);

            // Build instance path
            if (parent.InstancePath != null)
            {
                InstancePath = parent.InstancePath.Grow(subckt.Name.Name);
            }
            else
            {
                InstancePath = subckt.Name;
            }

            // Build the definition path
            if (parent.DefinitionPath != null)
            {
                DefinitionPath = parent.DefinitionPath.Grow(subckt.Definition.Name.Name);
            }
            else
            {
                DefinitionPath = subckt.Definition.Name;
            }

            // Node map
            NodeMap = GenerateNodeMap(subckt.Definition, subckt.Pins);

            // Add globals to the nodemap
            foreach (var id in Globals)
            {
                if (!NodeMap.ContainsKey(id))
                {
                    NodeMap.Add(id, id);
                }
            }

            // Check for recursively called paths
            if (parent.DefinitionPath != null)
            {
                for (int i = 0; i < parent.DefinitionPath.Path.Length; i++)
                {
                    if (parent.DefinitionPath.Path[i] == subckt.Definition.Name.Name)
                    {
                        throw new ParseException($"Subcircuit definition {subckt.Definition} is called recursively");
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Constructor when reading subcircuit definitions
        /// </summary>
        /// <param name="parent">Parent path</param>
        /// <param name="definition">Subcircuit definition</param>
        public SubcircuitPath(SubcircuitPath parent, SubcircuitDefinition definition)
        {
            // Same global parameters
            globalparameters = parent.globalparameters;

            // No parameters or instances
            Parameters   = null; // Should not be used!
            InstancePath = null;

            // Build the definition path
            if (parent.DefinitionPath != null)
            {
                DefinitionPath = parent.DefinitionPath.Grow(definition.Name.Name);
            }
            else
            {
                DefinitionPath = definition.Name;
            }

            // No node map
            NodeMap = null; // Should not be used!
        }