public static string ModuleVariablesInitBlock(IEnumerable <Variable> variables) { string varsInit = "-- _moduleVariablesInitBlock\n"; foreach (var variable in variables) { if (!variable.IsConstant) { if (variable.ArraySize == 0) { varsInit += String.Format(Smv.VarInitializationBlock, variable.Name, Smv.InitialValue(variable)); } else { for (int i = 0; i < variable.ArraySize; i++) { varsInit += String.Format(Smv.VarInitializationBlock, variable.Name + Smv.ArrayIndex(i), Smv.InitialValue(variable)); } } } } return(varsInit); }
public static string InternalBuffersInitialization(IEnumerable <FBInstance> instances, IEnumerable <Connection> connections, IEnumerable <Event> nonFilteredEvents, IEnumerable <Variable> nonFilteredVariables, IEnumerable <InstanceParameter> instanceParameters, bool mainModule = false) { string buffersInit = ""; foreach (FBInstance instance in instances) { var instanceVariables = nonFilteredVariables.Where(v => v.FBType == instance.InstanceType && v.Direction != Direction.Internal && !v.IsConstant); var instanceEvents = nonFilteredEvents.Where(ev => ev.FBType == instance.InstanceType && ev.Direction != Direction.Internal); foreach (Event ev in instanceEvents) { //Connection inputConnection; //if (!_isInputFromComponent(ev, connections, instance.Name, out inputConnection)) //{ buffersInit += String.Format(Smv.VarInitializationBlock, instance.Name + "_" + ev.Name, Smv.False); //} } foreach (Variable variable in instanceVariables) { Connection inputConnection; if (_nonInitializableVar(variable)) { continue; // do not initialize SMV variables for FB_DELAY and E_CYCLE data IOs } if (_isInputFromComponent(variable, connections, instance.Name, out inputConnection)) { continue; } // if(! _isInputFromComponent) InstanceParameter instanceParameter = instanceParameters.FirstOrDefault(p => p.InstanceName == instance.Name && p.Name == variable.Name); if (variable.ArraySize == 0) { string value = instanceParameter == null?Smv.InitialValue(variable) : Smv.ClearInitialValue(instanceParameter.Value, variable); buffersInit += String.Format(Smv.VarInitializationBlock, instance.Name + "_" + variable.Name, value); } else { string[] values; if (instanceParameter == null) { values = new string[variable.ArraySize]; for (int i = 0; i < variable.ArraySize; i++) { values[i] = Smv.InitialValue(variable); } } else { char[] trimChars = { '[', ']' }; values = instanceParameter.Value.Trim(trimChars).Split(','); if (values.Count() != variable.ArraySize) { throw new Exception("Invalid array value " + instanceParameter.Value); } } for (int i = 0; i < variable.ArraySize; i++) { buffersInit += String.Format(Smv.VarInitializationBlock, instance.Name + "_" + variable.Name + Smv.ArrayIndex(i), Smv.ClearInitialValue(values[i], variable)); } } } if (!mainModule) { buffersInit += String.Format(Smv.VarInitializationBlock, instance.Name + "_" + Smv.Alpha, Smv.False); buffersInit += String.Format(Smv.VarInitializationBlock, instance.Name + "_" + Smv.Beta, Smv.False); } buffersInit += "\n"; } return(buffersInit); }