private static IPCoreVariant LookupVariant(IPCore coreData, string deviceName, string speedGrade, string iseVersion, IEnumerable <IPCoreVariantParam> paramSet) { var coreVar = coreData.variants.Where( v => v.deviceName == deviceName && v.iseVersion == iseVersion && v.speedGrade == speedGrade && v.parameters.Join(paramSet, x => x.name, y => y.name, (x, y) => (x.value == y.value)) .All(r => r)) .FirstOrDefault(); return(coreVar); }
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 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(); } }
private static IPCoreVariant LookupVariant(IPCore coreData, string deviceName, string speedGrade, string iseVersion, IEnumerable<IPCoreVariantParam> paramSet) { var coreVar = coreData.variants.Where( v => v.deviceName == deviceName && v.iseVersion == iseVersion && v.speedGrade == speedGrade && v.parameters.Join(paramSet, x => x.name, y => y.name, (x, y) => (x.value == y.value)) .All(r => r)) .FirstOrDefault(); return coreVar; }