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(); }
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(); }
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(); } }
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())); }
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; } }