public  void SetProp(PropEnum propEnum, int propValue)
    {
        md5PropDic.Clear();
        if (!propKeyDic.ContainsKey(propEnum))
        {
            propKeyDic.Add(propEnum, -1);
        }
        else
        {
            falsePropList[propKeyDic[propEnum]] = Sec(propValue);
        }

        foreach (var key in propKeyDic.Keys)
        {
            int k = propKeyDic[key];
            long v = 0;
            if (k == -1)
            {
                v = Sec(propValue);
            }
            else
            {
                v = falsePropList[k];
            }
            tempRelPropDic.Add(key, v);
            md5PropDic.Add(key, Md5Sec(v.ToString()));
        }

        propKeyDic.Clear();

        falsePropList = new long[tempRelPropDic.Count * 2];

        List<int> indexList = new List<int>();
        for (int i = 0; i < falsePropList.Length; i++)
        {
            indexList.Add(i);
        }
        List<int> tempIndexList = new List<int>();
        foreach (var key in tempRelPropDic.Keys)
        {
            int index = indexList[rand.Next(indexList.Count)];
            indexList.Remove(index);
            falsePropList[index] = tempRelPropDic[key];
            propKeyDic.Add(key, index);
            tempIndexList.Add(index);
        }
        tempRelPropDic.Clear();

        for (int i = 0; i < falsePropList.Length; i++)
        {
            long v = falsePropList[i];
            if (v == 0)
            {
                falsePropList[i] = falsePropList[tempIndexList[rand.Next(tempIndexList.Count)]];
            }
        }

        Utility.SortDictionary<PropEnum, int>(ref propKeyDic, (x, y) => { return rand.Next(100) > 50 ? 1 : 0; });
        Utility.SortDictionary<PropEnum, string>(ref md5PropDic, (x, y) => { return rand.Next(100) > 50 ? 1 : 0; });
    }
        public static void UpdateCache(ResourceRecord rec)
        {
            var dev = new DeviceRecordsDevice();

            dev.name      = rec.Device.ToString();
            dev.timestamp = DateTime.Now;
            var rlist = new List <DeviceRecordsDeviceResource>();

            rlist.Add(new DeviceRecordsDeviceResource()
            {
                name   = PropEnum.ToString(EDeviceResource.SliceRegisters, EPropAssoc.PARReport),
                amount = rec.SliceRegisters
            });
            rlist.Add(new DeviceRecordsDeviceResource()
            {
                name   = PropEnum.ToString(EDeviceResource.SliceLUTs, EPropAssoc.PARReport),
                amount = rec.SliceLUTs
            });
            rlist.Add(new DeviceRecordsDeviceResource()
            {
                name   = PropEnum.ToString(EDeviceResource.OccupiedSlices, EPropAssoc.PARReport),
                amount = rec.OccupiedSlices
            });
            rlist.Add(new DeviceRecordsDeviceResource()
            {
                name   = PropEnum.ToString(EDeviceResource.RAMB18s, EPropAssoc.PARReport),
                amount = rec.RAMB18s
            });
            rlist.Add(new DeviceRecordsDeviceResource()
            {
                name   = PropEnum.ToString(EDeviceResource.RAMB36s, EPropAssoc.PARReport),
                amount = rec.RAMB36s
            });
            rlist.Add(new DeviceRecordsDeviceResource()
            {
                name   = PropEnum.ToString(EDeviceResource.DSP48E1s, EPropAssoc.PARReport),
                amount = rec.DSP48E1s
            });
            dev.providedResources = rlist.ToArray();
            var drecs = DeviceRecords;
            int idx   = Array.FindIndex(drecs.device, d => d.name == dev.name);

            if (idx < 0)
            {
                drecs.device = drecs.device.Concat(new DeviceRecordsDevice[] { dev }).ToArray();
            }
            else
            {
                drecs.device[idx] = dev;
            }
            using (var wr = new StreamWriter(DeviceCachePath))
            {
                DeviceDataSerializer.Serialize(wr, drecs);
                wr.Close();
            }
        }
        /// <summary>
        /// Initializes the core generator description from a component instance.
        /// </summary>
        /// <param name="desc">description to initialize</param>
        /// <param name="component">component instance</param>
        public static void FromComponent(this CoreGenDescription desc, Component component)
        {
            Type type           = component.GetType();
            var  componentProps = type.GetProperties(BindingFlags.Instance |
                                                     BindingFlags.Public |
                                                     BindingFlags.NonPublic);
            var cgProps = componentProps.Where(p => Attribute.IsDefined(p, typeof(CoreGenProp)));
            List <CoreGenCommand> cmds = new List <CoreGenCommand>();

            foreach (PropertyInfo pi in cgProps)
            {
                var  cgProp    = (CoreGenProp)Attribute.GetCustomAttribute(pi, typeof(CoreGenProp));
                var  attrs     = pi.GetCustomAttributes(typeof(PresentOn), true);
                var  conds     = attrs.Select(o => ((PresentOn)o).PresenceCondition);
                bool fulfilled = !conds.Any() ||
                                 conds.Any(c => cgProps.Any(p => object.Equals(c, p.GetValue(component, new object[0]))));
                if (!fulfilled)
                {
                    continue;
                }
                object propValue    = pi.GetValue(component, new object[0]);
                string propValueStr = PropEnum.ToString(propValue, EPropAssoc.CoreGen);
                switch (cgProp.Usage)
                {
                case ECoreGenUsage.Select:
                    desc.Select(propValueStr, propValue.GetType());
                    break;

                case ECoreGenUsage.CSet:
                {
                    string propIDStr = PropEnum.ToString(pi, EPropAssoc.CoreGen);
                    desc.CSet(propIDStr, propValueStr, propValue.GetType());
                }
                break;

                default:
                    throw new NotImplementedException();
                }
            }
            desc.Generate();
        }
Exemple #4
0
        public void SaveToXSTScript(string path)
        {
            var sw = new StreamWriter(path);

            if (TempDir != null)
            {
                sw.WriteLine("set -tmpdir \"" + TempDir + "\"");
            }
            if (XstHdpDir != null)
            {
                sw.WriteLine("set -xsthdpdir \"" + XstHdpDir + "\"");
            }
            sw.WriteLine("run");
            foreach (var prop in typeof(XSTFlow).GetProperties())
            {
                if (!Attribute.IsDefined(prop, typeof(FlowProp)))
                {
                    continue;
                }
                object value = prop.GetValue(this, new object[0]);
                if (value == null)
                {
                    continue;
                }
                var flowProp = (FlowProp)Attribute.GetCustomAttribute(prop, typeof(FlowProp));
                sw.Write("-" + flowProp.ID);
                sw.Write(" ");
                if (value.GetType().IsEnum)
                {
                    sw.WriteLine(PropEnum.ToString(value, EPropAssoc.XST));
                }
                else
                {
                    sw.WriteLine(value.ToString());
                }
            }
            sw.WriteLine();
            sw.Close();
        }
Exemple #5
0
 public static string GetSqlTypeOfCoregenProp(Type type)
 {
     if (type.IsEnum)
     {
         var props  = PropEnum.EnumProps(type);
         int maxlen = props.Max(_ => _.IDs.Any() ? _.IDs.Values.Max(v => v.Length) : (_.EnumValue != null ? _.EnumValue.ToString().Length : 0));
         return("VARCHAR(" + maxlen + ")");
     }
     else if (type == typeof(sbyte) ||
              type == typeof(byte) ||
              type == typeof(short) ||
              type == typeof(ushort) ||
              type == typeof(int))
     {
         return("INTEGER");
     }
     else if (type == typeof(bool))
     {
         return("BOOLEAN");
     }
     else if (type == typeof(float) ||
              type == typeof(double))
     {
         return("DECIMAL");
     }
     else if (type == typeof(string))
     {
         return("TEXT");
     }
     else if (type == typeof(byte[]))
     {
         return("BLOB");
     }
     else
     {
         return("TEXT");
     }
 }
        internal static void FromProject(this CoreGenDescription desc, XilinxProject proj, EPropAssoc assoc)
        {
            PropertyBag pbag = proj.PBag.Copy(assoc);

            if (assoc == EPropAssoc.CoreGenProj)
            {
                string fname = Path.GetFileNameWithoutExtension(desc.Path);
                string wdir  = "./tmp/" + fname + "/";
                pbag.PutProperty(EXilinxProjectProperties.CoreGen_WorkingDirectory, wdir);
            }
            IList <PropDesc> allProps = PropEnum.EnumProps(typeof(EXilinxProjectProperties));

            foreach (PropDesc pd in allProps)
            {
                if (!pd.IDs.ContainsKey(assoc))
                {
                    continue;
                }

                object value = pbag.GetProperty((EXilinxProjectProperties)pd.EnumValue);
                desc.Set(pd.IDs[assoc], PropEnum.ToString(value, assoc), value.GetType());
            }
        }
        public static void UpdateCache(Component core, PerformanceRecord prec)
        {
            string className = GetClassName(core);
            var    coreData  = LoadIPCoreData(className);

            if (coreData == null)
            {
                coreData = new IPCore()
                {
                    className = className,
                    generator = "",
                    variants  = new IPCoreVariant[0]
                };
            }
            var paramSet = ExtractPerformanceParameters(core);
            var coreVar  = LookupVariant(coreData,
                                         prec.Device.ToString(),
                                         prec.SpeedGrade.ToString(),
                                         prec.ISEVersion.ToString(),
                                         paramSet);
            var rlist = new List <IPCoreVariantResource>();

            rlist.Add(new IPCoreVariantResource()
            {
                name   = PropEnum.ToString(EDeviceResource.SliceRegisters, EPropAssoc.PARReport),
                amount = prec.SliceRegisters
            });
            rlist.Add(new IPCoreVariantResource()
            {
                name   = PropEnum.ToString(EDeviceResource.SliceLUTs, EPropAssoc.PARReport),
                amount = prec.SliceLUTs
            });
            rlist.Add(new IPCoreVariantResource()
            {
                name   = PropEnum.ToString(EDeviceResource.OccupiedSlices, EPropAssoc.PARReport),
                amount = prec.OccupiedSlices
            });
            rlist.Add(new IPCoreVariantResource()
            {
                name   = PropEnum.ToString(EDeviceResource.RAMB18s, EPropAssoc.PARReport),
                amount = prec.RAMB18s
            });
            rlist.Add(new IPCoreVariantResource()
            {
                name   = PropEnum.ToString(EDeviceResource.RAMB36s, EPropAssoc.PARReport),
                amount = prec.RAMB36s
            });
            rlist.Add(new IPCoreVariantResource()
            {
                name   = PropEnum.ToString(EDeviceResource.DSP48E1s, EPropAssoc.PARReport),
                amount = prec.DSP48E1s
            });
            if (coreVar == null)
            {
                coreVar = new IPCoreVariant()
                {
                    deviceName = prec.Device.ToString(),
                    iseVersion = prec.ISEVersion.ToString(),
                    package    = "",
                    speedGrade = prec.SpeedGrade.ToString(),
                    timestamp  = DateTime.Now,
                    minPeriod  = prec.MinPeriod.ScaleTo(ETimeUnit.ns),
                    parameters = paramSet.ToArray()
                };
                coreData.variants = coreData.variants.Concat(new IPCoreVariant[] { coreVar }).ToArray();
            }
            coreVar.consumedResources = rlist.ToArray();
            string path = GetIPCoreDataPath(className);

            using (var wr = new StreamWriter(path))
            {
                IPCoreDataSerializer.Serialize(wr, coreData);
                wr.Close();
            }
        }
Exemple #8
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();

            if (PartName != null)
            {
                cmd.Append("-p " + PartName);
            }
            cmd.Append(" -ol \"" + PropEnum.ToString(PlacerEffort, EPropAssoc.MAP) + "\"");
            if (PlacerExtraEffort != EPlacerExtraEffortMap.None)
            {
                throw new NotImplementedException();
            }
            cmd.Append(" -t " + StartingPlacerCostTable);
            cmd.Append(" -logic_opt ");
            if (CombinatorialLogicOptimization)
            {
                cmd.Append("\"on\"");
            }
            else
            {
                cmd.Append("\"off\"");
            }
            cmd.Append(" -register_duplication ");
            cmd.Append("\"" + PropEnum.ToString(RegisterDuplication, EPropAssoc.MAP) + "\"");
            cmd.Append(" -global_opt \"" + PropEnum.ToString(GlobalOptimization, EPropAssoc.MAP) + "\"");
            cmd.Append(" -equivalent_register_removal ");
            if (EquivalentRegisterRemoval)
            {
                cmd.Append("\"on\"");
            }
            else
            {
                cmd.Append("\"off\"");
            }
            if (IgnoreUserTimingConstraints)
            {
                cmd.Append(" -x");
            }
            if (TrimUnconnectedSignals)
            {
                cmd.Append(" -u");
            }
            if (IgnoreKeepHierarchy)
            {
                cmd.Append(" -ignore_keep_hierarchy");
            }
#if false
            //FIXME: Which architectures allow for this property?
            cmd.Append(" -cm \"" + PropEnum.ToString(OptimizationStrategyCoverMode, EPropAssoc.MAP) + "\"");
#endif
            if (GenerateDetailedMapReport)
            {
                cmd.Append(" -detail");
            }
            cmd.Append(" -ir \"" + PropEnum.ToString(UseRLOCConstraints, EPropAssoc.MAP) + "\"");
            cmd.Append(" -pr \"" + PropEnum.ToString(PackIORegistersIntoIOBs, EPropAssoc.MAP) + "\"");
            if (MaximumCompression)
            {
                cmd.Append(" -c");
            }
            cmd.Append(" -lc \"" + PropEnum.ToString(LUTCombining, EPropAssoc.MAP) + "\"");
            if (MapSliceLogicIntoUnusedBlockRAMs)
            {
                cmd.Append(" -bp");
            }
            cmd.Append(" -power ");
            if (PowerReduction)
            {
                cmd.Append("\"on\"");
            }
            else
            {
                cmd.Append("\"off\"");
            }
            if (PowerActivityFile != null)
            {
                cmd.Append(" -activityfile \"" + PowerActivityFile + "\"");
            }
            cmd.Append(" -mt \"" + MultiThreading + "\"");
            if (Overwrite)
            {
                cmd.Append(" -w");
            }
            if (OutputFile != null)
            {
                cmd.Append(" -o \"" + OutputFile + "\"");
            }
            cmd.Append(" \"" + InputFile + "\"");
            if (PRFFile != null)
            {
                cmd.Append(" " + PRFFile);
            }

            return(proj.AddToolToBatch(batch, proj.ProjectPath, "map", cmd.ToString()));
        }
Exemple #9
0
        public ProcessPool.Tool AddToBatch(XilinxProject proj, ProcessPool.ToolBatch batch)
        {
            var cmd = new StringBuilder();

            cmd.Append("-ol \"" + PropEnum.ToString(OverallEffortLevel, EPropAssoc.PAR) + "\"");
#if false
            //FIXME: Supporting device families?
            cmd.Append(" -pl \"" + PropEnum.ToString(PlacerEffortLevel, EPropAssoc.PAR) + "\"");
            cmd.Append(" -rl \"" + PropEnum.ToString(RouterEffortLevel, EPropAssoc.PAR) + "\"");
#endif
            if (ExtraEffortLevel != EExtraEffortLevel.None)
            {
                cmd.Append(" -xl \"" + PropEnum.ToString(ExtraEffortLevel, EPropAssoc.PAR) + "\"");
            }
            if (MultiThreading > 1)
            {
                cmd.Append(" -mt \"" + MultiThreading + "\"");
            }
#if false
            //FIXME: Supporting device families?
            cmd.Append(" -t \"" + PlacerCostTableEntry + "\"");
#endif
            if (KeepCurrentPlacement)
            {
                cmd.Append(" -p");
            }
            if (ReentrantRoute)
            {
                cmd.Append(" -k");
            }
            if (DontRunRouter)
            {
                cmd.Append(" -r");
            }
            if (Overwrite)
            {
                cmd.Append(" -w");
            }
            if (SmartGuideFile != null)
            {
                cmd.Append(" -smartguide \"" + SmartGuideFile + "\"");
            }
            if (IgnoreUserTimingConstraintsAutoGen)
            {
                cmd.Append(" -x");
            }
            if (NoPadReport)
            {
                cmd.Append(" -nopad");
            }
            cmd.Append(" -power \"" + PropEnum.ToString(PowerReduction, EPropAssoc.PAR) + "\"");
            if (PowerActivityFile != null)
            {
                cmd.Append(" -activityfile \"" + PowerActivityFile + "\"");
            }
            if (FilterFile != null)
            {
                cmd.Append(" -filter \"" + FilterFile + "\"");
            }
            if (IgnoreUserTimingConstraintsNoGen)
            {
                cmd.Append(" -ntd");
            }
            cmd.Append(" -intstyle silent");
            if (ISERepositoryFile != null)
            {
                cmd.Append(" -ise \"" + ISERepositoryFile + "\"");
            }
            if (FilterFile != null)
            {
                cmd.Append(" -filter \"" + FilterFile + "\"");
            }
            cmd.Append(" \"" + InputFile + "\"");
            cmd.Append(" \"" + OutputFile + "\"");
            if (PhysicalConstraintsFile != null)
            {
                cmd.Append(" \"" + PhysicalConstraintsFile + "\"");
            }

            return(proj.AddToolToBatch(batch, proj.ProjectPath, "par", cmd.ToString()));

            batch.Add(proj.ISEBinPath, proj.ProjectPath, "par", cmd.ToString());
        }
    public  long GetProp(PropEnum propEnum)
    {
        #if ARPG_Server
        return serverDataDic[propEnum];
        #endif

        long res = falsePropList[propKeyDic[propEnum]];
        string tempRes = Md5Sec(res.ToString());
        if (tempRes == md5PropDic[propEnum])
        {
            //Debug.Log("Get:" + propEnum + " value:" + Sec(res));
            return Sec(res);
        }
        else
        {
            return 0;
        }
    }