public static string InputVariablesSampleBasic(IEnumerable <Variable> variables, IEnumerable <WithConnection> withConnections) { string varChangeBlocks = ""; foreach (Variable variable in variables.Where(v => v.Direction == Direction.Input)) { if (!variable.IsConstant) { if (variable.ArraySize == 0) { varChangeBlocks += String.Format(Smv.NextCaseBlock, variable.Name, FbSmvCommon.VarSamplingRule(variable.Name, withConnections, true)); } else { for (int i = 0; i < variable.ArraySize; i++) { varChangeBlocks += String.Format(Smv.NextCaseBlock, variable.Name + Smv.ArrayIndex(i), FbSmvCommon.VarSamplingRule(variable.Name, withConnections, true, i)); } } } } return(varChangeBlocks); }
public static string InternalDataConnections(IEnumerable <Connection> internalBuffers, IEnumerable <WithConnection> withConnections, IEnumerable <Variable> allVariables, IEnumerable <FBInstance> instances) { string dataConnections = "-- _internalDataConnections\n"; foreach (Connection connection in internalBuffers.Where(conn => conn.Type == ConnectionType.Data)) { bool srcComponent; bool dstComponent; string dstSmvVar = Smv.ConvertConnectionVariableName(connection.Destination, Smv.ModuleParameters.Variable, out dstComponent); string srcSmvVar = Smv.ConvertConnectionVariableName(connection.Source, Smv.ModuleParameters.Variable, out srcComponent); string srcString = ""; /*if (srcComponent && dstComponent) * { * //srcString = "\t" + srcSmvVar + " : " + Smv.True + ";\n"; //TODO: make direct connections without double-buffering * var srcVar = _findVariable(connection.Source, allVariables, instances); * * if (srcVar.ArraySize == 0) * dataConnections += String.Format(Smv.NextVarAssignment + "\n", dstSmvVar, srcSmvVar); * else * { * for (int i = 0; i < srcVar.ArraySize; i++) * { * dataConnections += String.Format(Smv.NextVarAssignment + "\n", dstSmvVar + Smv.ArrayIndex(i), srcSmvVar + Smv.ArrayIndex(i)); * } * } * } * else */ if (!srcComponent && dstComponent) { var dstVar = _findVariable(connection.Destination, allVariables, instances); if (dstVar.ArraySize == 0) { srcString = FbSmvCommon.VarSamplingRule(connection.Source, withConnections, false); dataConnections += String.Format(Smv.NextCaseBlock + "\n", dstSmvVar, srcString); } else { for (int i = 0; i < dstVar.ArraySize; i++) { srcString = FbSmvCommon.VarSamplingRule(connection.Source, withConnections, false, i); dataConnections += String.Format(Smv.NextCaseBlock + "\n", dstSmvVar + Smv.ArrayIndex(i), srcString); } } } else if (srcComponent && !dstComponent) { IEnumerable <string> samplingEvents = _getSamplingEventNamesForVariable(connection.Destination, withConnections); MultiMap <string> eventConnectionsMap = _getEventConnectionsMap(internalBuffers); string eventSeed = ""; foreach (string ev in samplingEvents) { string src = ""; foreach (string parentEvent in eventConnectionsMap[ev]) { bool dontCare; src += Smv.ConvertConnectionVariableName(parentEvent, Smv.ModuleParameters.Event, out dontCare) + Smv.Or; } eventSeed += String.Format("({0}){1}", src.TrimEnd(Smv.OrTrimChars), Smv.Or); } var srcVar = _findVariable(connection.Source, allVariables, instances); if (srcVar.ArraySize == 0) { srcString = String.Format("\t{0} : {1};\n", eventSeed.TrimEnd(Smv.OrTrimChars), srcSmvVar); dataConnections += String.Format(Smv.NextCaseBlock + "\n", dstSmvVar, srcString); } else { for (int i = 0; i < srcVar.ArraySize; i++) { srcString = String.Format("\t{0} : {1};\n", eventSeed.TrimEnd(Smv.OrTrimChars), srcSmvVar + Smv.ArrayIndex(i)); dataConnections += String.Format(Smv.NextCaseBlock + "\n", dstSmvVar + Smv.ArrayIndex(i), srcString); } } } } return(dataConnections); }