示例#1
0
 public AssignmentSignal AssignmentPort(ISignalsParentSection parent, Port port)
 {
     return(new AssignmentSignal(port, parent)
     {
         Name = port.Name
     });
 }
        public static AssignmentSignal Parse(ISignalsParentSection parent, string text, SignalDefenition defaultDefenition = null)
        {
            var signalStr = Regex.Match(text, PC.VHDLName + PC.MFS + PC.Enumeration).Value;
            var name      = Regex.Match(signalStr, PC.VHDLName).Value;

            name = string.IsNullOrEmpty(name)  ? Regex.Match(text, ParsConstants.VHDLName).Value : name;
            EnumerationBase enumeration = null;

            if (!String.IsNullOrEmpty(signalStr))
            {
                var enumerationStr = Regex.Match(signalStr, PC.Enumeration).Value;
                enumeration = EnumerationParser.Parse(enumerationStr);
                if (enumeration == null)
                {
                    return(null);
                }
            }

            var  isComponentPort = false;
            bool?isSource        = null;
            var  defenition      = defaultDefenition ?? parent.Document.Signals.GetSignalDefenition(name);

            if (defenition == null)
            {
                //Error unknown signal
                defenition = parent.Document.Entity.Ports.FirstOrDefault(x => x.Name == name);

                if (defenition == null)
                {
                    var component = parent.Document.Components
                                    .FirstOrDefault(x => x.Name == parent.EntityName);
                    if (component != null)
                    {
                        defenition = component.Ports.FirstOrDefault(f => f.Name == name);
                    }
                    else
                    {
                        defenition = new Port(null)
                        {
                            Name = name, PortType = PortTypes.In
                        };                                                                   //TODO Delete
                    }
                }
                isComponentPort = true;
                isSource        = (defenition as Port).PortType != PortTypes.In;
            }

            return(new AssignmentSignal(defenition, parent)
            {
                Name = Regex.Match(text, ParsConstants.VHDLName).Value,
                IsComponentPort = isComponentPort,
                IsSource = isSource,
                Enumeration = enumeration
            });
        }
示例#3
0
        public AssignmentSignal AssignmentSignal(ISignalsParentSection parent, SignalDefenition defenition, EnumerationBase enumeration = null)
        {
            if (!_routes.ContainsKey(defenition.Name))
            {
                return(null);
            }
            enumeration = enumeration ?? defenition.Enumeration?.CloneEnumeration();
            var result = new AssignmentSignal(defenition, parent)
            {
                Name = defenition.Name, Enumeration = enumeration
            };

            _routes[defenition.Name].AddSignal(result);
            return(result);
        }
 public AssignmentSignal(SignalDefenition defenition, ISignalsParentSection parent)
 {
     Defenition           = defenition;
     SignalsParentSection = parent;
 }