public virtual string TransformText() { this.GenerationEnvironment = null; #line 1 "" this.Write(""); #line default #line hidden #line 7 "" this.Write("\n#include <iostream>\n#include <cstring>\n#include \""); #line default #line hidden #line 10 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name)); #line default #line hidden #line 10 "" this.Write(".hpp\"\n\n// Insert additional includes and methods here\n// #### USER-DATA-EXTRA-STA" + "RT\n// #### USER-DATA-EXTRA-END\n\n\n"); #line default #line hidden #line 17 "" var busses = RSP.Process.InputBusses.Concat(RSP.Process.OutputBusses).Concat(RSP.Process.InternalBusses).Distinct().OrderBy(x => x.Name).ToArray(); var members = RSP.Process.SharedVariables.Cast <DataElement>().Union(RSP.Process.SharedSignals).ToArray(); #line default #line hidden #line 21 "" this.Write("\n"); #line default #line hidden #line 22 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name)); #line default #line hidden #line 22 "" this.Write("::"); #line default #line hidden #line 22 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name)); #line default #line hidden #line 22 "" this.Write("(\n"); #line default #line hidden #line 23 "" foreach (var bus in busses) { #line default #line hidden #line 24 "" this.Write(" "); #line default #line hidden #line 24 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 24 "" this.Write("* p"); #line default #line hidden #line 24 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process))); #line default #line hidden #line 24 "" this.Write(this.ToStringHelper.ToStringWithCulture((bus == busses.Last() && members.Length == 0) ? "" : ",")); #line default #line hidden #line 24 "" this.Write("\n"); #line default #line hidden #line 25 "" } #line default #line hidden #line 26 "" foreach (var v in members) { var rt = RS.TypeScope.GetType(v); if (rt.IsArray) { #line default #line hidden #line 29 "" this.Write(" size_t init_size_"); #line default #line hidden #line 29 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 29 "" this.Write(",\n"); #line default #line hidden #line 30 "" } #line default #line hidden #line 31 "" this.Write(" const "); #line default #line hidden #line 31 "" this.Write(this.ToStringHelper.ToStringWithCulture(Type(v))); #line default #line hidden #line 31 "" this.Write(" init_"); #line default #line hidden #line 31 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 31 "" this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ",")); #line default #line hidden #line 31 "" this.Write("\n"); #line default #line hidden #line 32 "" } #line default #line hidden #line 33 "" this.Write(") {\n"); #line default #line hidden #line 34 "" foreach (var bus in busses) { #line default #line hidden #line 35 "" this.Write(" bus_"); #line default #line hidden #line 35 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process))); #line default #line hidden #line 35 "" this.Write(" = p"); #line default #line hidden #line 35 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process))); #line default #line hidden #line 35 "" this.Write(";\n"); #line default #line hidden #line 36 "" } #line default #line hidden #line 37 "" this.Write("\n"); #line default #line hidden #line 38 "" foreach (var v in members) { var rt = RS.TypeScope.GetType(v); if (rt.IsArray) { var eltype = rt.ElementName; #line default #line hidden #line 43 "" this.Write(" size_"); #line default #line hidden #line 43 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 43 "" this.Write(" = init_size_"); #line default #line hidden #line 43 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 43 "" this.Write(";\n "); #line default #line hidden #line 44 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 44 "" this.Write(" = new "); #line default #line hidden #line 44 "" this.Write(this.ToStringHelper.ToStringWithCulture(eltype)); #line default #line hidden #line 44 "" this.Write("[size_"); #line default #line hidden #line 44 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 44 "" this.Write("];\n std::memcpy("); #line default #line hidden #line 45 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 45 "" this.Write(", init_"); #line default #line hidden #line 45 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 45 "" this.Write(", size_"); #line default #line hidden #line 45 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 45 "" this.Write(" * sizeof("); #line default #line hidden #line 45 "" this.Write(this.ToStringHelper.ToStringWithCulture(eltype)); #line default #line hidden #line 45 "" this.Write("));\n"); #line default #line hidden #line 46 "" } else { #line default #line hidden #line 47 "" this.Write(" "); #line default #line hidden #line 47 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 47 "" this.Write(" = init_"); #line default #line hidden #line 47 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 47 "" this.Write(";\n"); #line default #line hidden #line 48 "" } #line default #line hidden #line 49 "" } #line default #line hidden #line 50 "" this.Write("\n // Insert additional initialization here\n // #### USER-DATA-INIT-START\n " + " // #### USER-DATA-INIT-END\n}\n\nvoid "); #line default #line hidden #line 56 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name)); #line default #line hidden #line 56 "" this.Write("::onTick() {\n // Insert additional pre- clock-tick code here\n // #### USER-" + "DATA-PRE-START\n // #### USER-DATA-PRE-END\n\n"); #line default #line hidden #line 61 "" foreach (var line in RS.Renderer.RenderMethod(RSP.Process.MainMethod)) { #line default #line hidden #line 62 "" this.Write(" "); #line default #line hidden #line 62 "" this.Write(this.ToStringHelper.ToStringWithCulture(line)); #line default #line hidden #line 62 "" this.Write("\n"); #line default #line hidden #line 63 "" } #line default #line hidden #line 64 "" this.Write("\n // Insert additional post- clock-tick code here\n // #### USER-DATA-POST-S" + "TART\n // #### USER-DATA-POST-END\n}\n"); #line default #line hidden #line 69 "" if (RSP.Process.Methods != null && RSP.Process.Methods.Any(x => !x.Ignore)) { #line default #line hidden #line 70 "" this.Write("\n// Internal methods\n"); #line default #line hidden #line 72 "" foreach (var s in RSP.Process.Methods.Where(x => !x.Ignore)) { #line default #line hidden #line 73 "" var rettype = (s.ReturnVariable == null || s.ReturnVariable.CecilType.IsSameTypeReference(typeof(void))) ? "void" : Type(s.ReturnVariable); #line default #line hidden #line 76 "" this.Write(this.ToStringHelper.ToStringWithCulture(rettype)); #line default #line hidden #line 76 "" this.Write(" "); #line default #line hidden #line 76 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name)); #line default #line hidden #line 76 "" this.Write("::"); #line default #line hidden #line 76 "" this.Write(this.ToStringHelper.ToStringWithCulture(s.Name)); #line default #line hidden #line 76 "" this.Write("("); #line default #line hidden #line 76 "" this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(", ", s.Parameters.Select(x => $"{Type(x)} {x.Name}")))); #line default #line hidden #line 76 "" this.Write(") {\n"); #line default #line hidden #line 77 "" foreach (var line in RS.Renderer.RenderMethod(s)) { #line default #line hidden #line 78 "" this.Write(" "); #line default #line hidden #line 78 "" this.Write(this.ToStringHelper.ToStringWithCulture(line)); #line default #line hidden #line 78 "" this.Write("\n"); #line default #line hidden #line 79 "" } #line default #line hidden #line 80 "" this.Write("}\n"); #line default #line hidden #line 81 "" } #line default #line hidden #line 82 "" } #line default #line hidden return(this.GenerationEnvironment.ToString()); }
public virtual string TransformText() { this.GenerationEnvironment = null; #line 1 "" this.Write(""); #line default #line hidden #line 6 "" this.Write("#include <iostream>\n#include <fstream>\n#include <sstream>\n#include \"SystemTypes.h" + "pp\"\n#include \""); #line default #line hidden #line 10 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusDefinitionsFileName(Network))); #line default #line hidden #line 10 "" this.Write("\"\n#include \""); #line default #line hidden #line 11 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.SharedDefinitionsFileName(Network))); #line default #line hidden #line 11 "" this.Write("\"\n\n"); #line default #line hidden #line 13 "" foreach (var process in Network.Processes) { #line default #line hidden #line 14 "" this.Write("#include \""); #line default #line hidden #line 14 "" this.Write(this.ToStringHelper.ToStringWithCulture(process.Name)); #line default #line hidden #line 14 "" this.Write(".hpp\"\n"); #line default #line hidden #line 15 "" } #line default #line hidden #line 16 "" this.Write("\n// Insert additional includes and classes here\n// #### USER-DATA-INCLUDE-START\n/" + "/ #### USER-DATA-INCLUDE-END\n\nclass "); #line default #line hidden #line 21 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 21 "" this.Write(" {\n\n// Insert additional variables and methods here\n// #### USER-VARIABLE-INCLUDE" + "-START\n// #### USER-VARIABLE-INCLUDE-END\n\nprivate:\n\n // Internal Busses\n"); #line default #line hidden #line 30 "" foreach (var bus in Network.Busses.Where(x => !(x.IsTopLevelInput || x.IsTopLevelOutput))) { #line default #line hidden #line 31 "" this.Write(" "); #line default #line hidden #line 31 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 31 "" this.Write(" bus_"); #line default #line hidden #line 31 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus))); #line default #line hidden #line 31 "" this.Write(";\n"); #line default #line hidden #line 32 "" } #line default #line hidden #line 33 "" this.Write("\n // Processes\n"); #line default #line hidden #line 35 "" foreach (var process in Network.Processes) { #line default #line hidden #line 36 "" this.Write(" "); #line default #line hidden #line 36 "" this.Write(this.ToStringHelper.ToStringWithCulture(process.Name)); #line default #line hidden #line 36 "" this.Write(" proc_"); #line default #line hidden #line 36 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(process))); #line default #line hidden #line 36 "" this.Write(";\n"); #line default #line hidden #line 37 "" } #line default #line hidden #line 38 "" this.Write("\n // The trace input file, if any\n std::ifstream* trace_input;\n\n // The " + "current trace input line\n std::string input_line;\n\n // The currently simul" + "ated cycle\n size_t cycle;\n\npublic:\n // Top level input/output busses\n"); #line default #line hidden #line 50 "" foreach (var bus in Network.Busses.Where(x => (x.IsTopLevelInput || x.IsTopLevelOutput))) { #line default #line hidden #line 51 "" this.Write(" "); #line default #line hidden #line 51 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 51 "" this.Write(" bus_"); #line default #line hidden #line 51 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus))); #line default #line hidden #line 51 "" this.Write(";\n"); #line default #line hidden #line 52 "" } #line default #line hidden #line 53 "" this.Write("\n // Default constructor\n "); #line default #line hidden #line 55 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 55 "" this.Write(@"(); // Helper method for running a complete simulation from a // trace file size_t RunSimulation(const char* inputfile); // Opens the file and prepares the input for driving signals // and post simulation verification void LoadTraceInput(const char* inputfile); // Drives the input signals with the values found in the // tracefile passed to the constructor bool DriveFromTraceInput(); // Prepares the simulation for the next tick void FinishCycle(); // Performs a single iteration of the program void OnTick(); // Performs post-tick verification of all signals void VerifyTrace(); // Shuts down the simulation, closing all open files void Stop(); // Gets the current cycle size_t Cycle() { return cycle; } };"); #line default #line hidden return(this.GenerationEnvironment.ToString()); }
public virtual string TransformText() { this.GenerationEnvironment = null; #line 1 "" this.Write(""); #line default #line hidden #line 7 "" this.Write("#ifndef SME_"); #line default #line hidden #line 7 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name.ToUpper())); #line default #line hidden #line 7 "" this.Write("_HPP\n#define SME_"); #line default #line hidden #line 8 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name.ToUpper())); #line default #line hidden #line 8 "" this.Write("_HPP\n\n#include \"SystemTypes.hpp\"\n#include \""); #line default #line hidden #line 11 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.SharedDefinitionsFileName(Network))); #line default #line hidden #line 11 "" this.Write("\"\n#include \""); #line default #line hidden #line 12 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusDefinitionsFileName(Network))); #line default #line hidden #line 12 "" this.Write("\"\n\n"); #line default #line hidden #line 14 "" var busses = RSP.Process.InputBusses.Concat(RSP.Process.OutputBusses).Concat(RSP.Process.InternalBusses).Distinct().OrderBy(x => x.Name).ToArray(); var members = RSP.Process.SharedVariables.Cast <DataElement>().Union(RSP.Process.SharedSignals).ToArray(); #line default #line hidden #line 19 "" this.Write("\nclass "); #line default #line hidden #line 20 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name)); #line default #line hidden #line 20 "" this.Write(" : public IProcess {\n // Insert additional private variables and methods here\n" + " // #### USER-DATA-PRIVATE-START\n // #### USER-DATA-PRIVATE-END\n\nprivate:\n" + ""); #line default #line hidden #line 26 "" if (RSP.Process.SharedVariables.Any()) { #line default #line hidden #line 27 "" this.Write(" // Shared variables\n"); #line default #line hidden #line 28 "" foreach (var v in RSP.Process.SharedVariables) { #line default #line hidden #line 29 "" this.Write(" "); #line default #line hidden #line 29 "" this.Write(this.ToStringHelper.ToStringWithCulture(Type(v))); #line default #line hidden #line 29 "" this.Write(" "); #line default #line hidden #line 29 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 29 "" this.Write(";\n"); #line default #line hidden #line 30 "" if (v.CecilType.IsArrayType()) { #line default #line hidden #line 31 "" this.Write(" size_t size_"); #line default #line hidden #line 31 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 31 "" this.Write(";\n"); #line default #line hidden #line 32 "" } #line default #line hidden #line 33 "" } #line default #line hidden #line 34 "" this.Write("\n"); #line default #line hidden #line 35 "" } #line default #line hidden #line 36 "" if (RSP.Process.SharedSignals.Any()) { #line default #line hidden #line 37 "" this.Write(" // Shared signals\n"); #line default #line hidden #line 38 "" foreach (var v in RSP.Process.SharedSignals) { #line default #line hidden #line 39 "" this.Write(" "); #line default #line hidden #line 39 "" this.Write(this.ToStringHelper.ToStringWithCulture(Type(v))); #line default #line hidden #line 39 "" this.Write(" "); #line default #line hidden #line 39 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 39 "" this.Write(";\n"); #line default #line hidden #line 40 "" if (v.CecilType.IsArrayType()) { #line default #line hidden #line 41 "" this.Write(" size_t size_"); #line default #line hidden #line 41 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 41 "" this.Write(";\n"); #line default #line hidden #line 42 "" } #line default #line hidden #line 43 "" } #line default #line hidden #line 44 "" this.Write("\n"); #line default #line hidden #line 45 "" } #line default #line hidden #line 46 "" this.Write(" // Bus pointers\n"); #line default #line hidden #line 47 "" foreach (var bus in busses) { #line default #line hidden #line 48 "" this.Write(" "); #line default #line hidden #line 48 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 48 "" this.Write("* bus_"); #line default #line hidden #line 48 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process))); #line default #line hidden #line 48 "" this.Write(";\n"); #line default #line hidden #line 49 "" } #line default #line hidden #line 50 "" this.Write("\n"); #line default #line hidden #line 51 "" if (RSP.Process.Methods != null && RSP.Process.Methods.Any(x => !x.Ignore)) { #line default #line hidden #line 52 "" this.Write(" // Internal methods\n"); #line default #line hidden #line 53 "" foreach (var s in RSP.Process.Methods.Where(x => !x.Ignore)) { #line default #line hidden #line 54 "" var rettype = (s.ReturnVariable == null || s.ReturnVariable.CecilType.IsSameTypeReference(typeof(void))) ? "void" : Type(s.ReturnVariable); #line default #line hidden #line 57 "" this.Write(" "); #line default #line hidden #line 57 "" this.Write(this.ToStringHelper.ToStringWithCulture(rettype)); #line default #line hidden #line 57 "" this.Write(" "); #line default #line hidden #line 57 "" this.Write(this.ToStringHelper.ToStringWithCulture(s.Name)); #line default #line hidden #line 57 "" this.Write("("); #line default #line hidden #line 57 "" this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(", ", s.Parameters.Select(x => $"{Type(x)} {x.Name}")))); #line default #line hidden #line 57 "" this.Write(");\n"); #line default #line hidden #line 58 "" } #line default #line hidden #line 59 "" } #line default #line hidden #line 60 "" this.Write("\npublic:\n "); #line default #line hidden #line 62 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name)); #line default #line hidden #line 62 "" this.Write("(\n"); #line default #line hidden #line 63 "" foreach (var bus in busses) { #line default #line hidden #line 64 "" this.Write(" "); #line default #line hidden #line 64 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 64 "" this.Write("* p"); #line default #line hidden #line 64 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus, RSP.Process))); #line default #line hidden #line 64 "" this.Write(this.ToStringHelper.ToStringWithCulture((bus == busses.Last() && members.Length == 0) ? "" : ",")); #line default #line hidden #line 64 "" this.Write("\n"); #line default #line hidden #line 65 "" } #line default #line hidden #line 66 "" foreach (var v in members) { var rt = RS.TypeScope.GetType(v); if (rt.IsArray) { #line default #line hidden #line 69 "" this.Write(" size_t init_size_"); #line default #line hidden #line 69 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 69 "" this.Write(",\n"); #line default #line hidden #line 70 "" } #line default #line hidden #line 71 "" this.Write(" const "); #line default #line hidden #line 71 "" this.Write(this.ToStringHelper.ToStringWithCulture(Type(v))); #line default #line hidden #line 71 "" this.Write(" init_"); #line default #line hidden #line 71 "" this.Write(this.ToStringHelper.ToStringWithCulture(v.Name)); #line default #line hidden #line 71 "" this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ",")); #line default #line hidden #line 71 "" this.Write("\n"); #line default #line hidden #line 72 "" } #line default #line hidden #line 73 "" this.Write(" );\n\n void onTick();\n};\n\n#endif /* SME_"); #line default #line hidden #line 78 "" this.Write(this.ToStringHelper.ToStringWithCulture(RSP.Process.Name.ToUpper())); #line default #line hidden #line 78 "" this.Write("_HPP */\n"); #line default #line hidden return(this.GenerationEnvironment.ToString()); }
public virtual string TransformText() { this.GenerationEnvironment = null; #line 1 "" this.Write(""); #line default #line hidden #line 6 "" this.Write("#include \""); #line default #line hidden #line 6 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.SimulatorFileName(Network))); #line default #line hidden #line 6 "" this.Write(".hpp\"\n\n// The names of all signals\nstd::string "); #line default #line hidden #line 9 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 9 "" this.Write("_SIGNAL_NAMES[] = {\n"); #line default #line hidden #line 10 "" foreach (var signal in RS.DriverSignals.Concat(RS.VerifySignals)) { var cpptype = RS.TypeScope.GetType(signal); if (cpptype.IsArray) { var eltype = cpptype.ElementName; var length = (int)RS.GetArrayLength(signal).DefaultValue; for (var i = 0; i < length; i++) { #line default #line hidden #line 17 "" this.Write(" \""); #line default #line hidden #line 17 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.TestBenchSignalName(signal))); #line default #line hidden #line 17 "" this.Write("("); #line default #line hidden #line 17 "" this.Write(this.ToStringHelper.ToStringWithCulture(i)); #line default #line hidden #line 17 "" this.Write(")\",\n"); #line default #line hidden #line 18 "" } #line default #line hidden #line 19 "" } else { #line default #line hidden #line 20 "" this.Write(" \""); #line default #line hidden #line 20 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.TestBenchSignalName(signal))); #line default #line hidden #line 20 "" this.Write("\",\n"); #line default #line hidden #line 21 "" } #line default #line hidden #line 22 "" } #line default #line hidden #line 23 "" this.Write("};\n\n"); #line default #line hidden #line 25 "" foreach (var process in Network.Processes) { var members = process .SharedVariables.Cast <AST.DataElement>() .Union(process.SharedSignals) //.Where(x => RS.TypeScope.GetType(x).IsArray) .Where(x => (x.DefaultValue is SME.AST.ArrayCreateExpression) || (x.DefaultValue is Array)); foreach (var v in members) { var rt = RS.TypeScope.GetType(v); var eltype = rt.ElementName; var arraylen = RS.GetArrayLength(v).DefaultValue; #line default #line hidden #line 36 "" this.Write("const "); #line default #line hidden #line 36 "" this.Write(this.ToStringHelper.ToStringWithCulture(eltype)); #line default #line hidden #line 36 "" this.Write(" init_"); #line default #line hidden #line 36 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(process))); #line default #line hidden #line 36 "" this.Write("_"); #line default #line hidden #line 36 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(v.Name))); #line default #line hidden #line 36 "" this.Write("["); #line default #line hidden #line 36 "" this.Write(this.ToStringHelper.ToStringWithCulture(arraylen)); #line default #line hidden #line 36 "" this.Write("] = "); #line default #line hidden #line 36 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.Renderer.GetInitializer(v))); #line default #line hidden #line 36 "" this.Write(";\n"); #line default #line hidden #line 37 "" } #line default #line hidden #line 38 "" } #line default #line hidden #line 39 "" this.Write("\n\n"); #line default #line hidden #line 41 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 41 "" this.Write("::"); #line default #line hidden #line 41 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 41 "" this.Write("() \n :\n"); #line default #line hidden #line 43 "" foreach (var bus in Network.Busses) { #line default #line hidden #line 44 "" this.Write(" bus_"); #line default #line hidden #line 44 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus))); #line default #line hidden #line 44 "" this.Write("(),\n"); #line default #line hidden #line 45 "" } #line default #line hidden #line 46 "" foreach (var process in Network.Processes) { var busses = process.InputBusses.Concat(process.OutputBusses).Concat(process.InternalBusses).Distinct().OrderBy(x => x.Name).ToArray(); var members = process.SharedVariables.Cast <AST.DataElement>().Union(process.SharedSignals).ToArray(); #line default #line hidden #line 51 "" this.Write(" proc_"); #line default #line hidden #line 51 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(process))); #line default #line hidden #line 51 "" this.Write("(\n"); #line default #line hidden #line 52 "" foreach (var bus in busses) { #line default #line hidden #line 53 "" this.Write(" &bus_"); #line default #line hidden #line 53 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(bus))); #line default #line hidden #line 53 "" this.Write(this.ToStringHelper.ToStringWithCulture((bus == busses.Last() & members.Length == 0) ? "" : ", ")); #line default #line hidden #line 53 "" this.Write("\n"); #line default #line hidden #line 54 "" } #line default #line hidden #line 55 "" foreach (var v in members) { var initializer = RS.Renderer.GetInitializer(v); if (!string.IsNullOrWhiteSpace(initializer)) { var rt = RS.TypeScope.GetType(v); if (rt.IsArray) { var eltype = rt.ElementName; var arraylen = RS.GetArrayLength(v).DefaultValue; #line default #line hidden #line 64 "" this.Write(" "); #line default #line hidden #line 64 "" this.Write(this.ToStringHelper.ToStringWithCulture(arraylen)); #line default #line hidden #line 64 "" this.Write(",\n"); #line default #line hidden #line 65 "" if ((v.DefaultValue is SME.AST.ArrayCreateExpression) || v.DefaultValue is Array) { #line default #line hidden #line 68 "" this.Write(" init_"); #line default #line hidden #line 68 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(process))); #line default #line hidden #line 68 "" this.Write("_"); #line default #line hidden #line 68 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(v.Name))); #line default #line hidden #line 68 "" this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ",")); #line default #line hidden #line 68 "" this.Write("\n"); #line default #line hidden #line 69 "" } else { #line default #line hidden #line 70 "" this.Write(" new "); #line default #line hidden #line 70 "" this.Write(this.ToStringHelper.ToStringWithCulture(eltype)); #line default #line hidden #line 70 "" this.Write("["); #line default #line hidden #line 70 "" this.Write(this.ToStringHelper.ToStringWithCulture(arraylen)); #line default #line hidden #line 70 "" this.Write("]()"); #line default #line hidden #line 70 "" this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ",")); #line default #line hidden #line 70 "" this.Write("\n"); #line default #line hidden #line 71 "" } #line default #line hidden #line 72 "" } else { #line default #line hidden #line 73 "" this.Write(" "); #line default #line hidden #line 73 "" this.Write(this.ToStringHelper.ToStringWithCulture(initializer)); #line default #line hidden #line 73 "" this.Write(this.ToStringHelper.ToStringWithCulture(v == members.Last() ? "" : ",")); #line default #line hidden #line 73 "" this.Write("\n"); #line default #line hidden #line 74 "" } #line default #line hidden #line 75 "" } #line default #line hidden #line 76 "" } #line default #line hidden #line 77 "" this.Write(" ),\n"); #line default #line hidden #line 78 "" } #line default #line hidden #line 79 "" this.Write(" trace_input(NULL),\n input_line(),\n cycle(0)\n{\n\n}\n\nsize_t "); #line default #line hidden #line 86 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 86 "" this.Write(@"::RunSimulation(const char* inputfile) { LoadTraceInput(inputfile); // Ignore the reset cycle DriveFromTraceInput(); while(true) { if (!DriveFromTraceInput()) { size_t res = cycle; Stop(); return res; } OnTick(); VerifyTrace(); FinishCycle(); } } void "); #line default #line hidden #line 105 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 105 "" this.Write(@"::LoadTraceInput(const char* inputfile) { if (trace_input != NULL) throw MessageException(""Already have an input trace file open""); // Open the trace file and validate the headers trace_input = new std::ifstream(inputfile); if (trace_input->bad()) { trace_input->close(); throw MessageException(""Trace input file not found, or not able to open""); } if (!std::getline(*trace_input, input_line)) { throw MessageException(""Trace input file was empty""); } if (cycle != 0) { throw MessageException(""Cannot load input file after the simulation has started""); } std::string token; std::istringstream headerlinestream(input_line); size_t field = 0; while(std::getline(headerlinestream, token, ',')) { if (token.compare("); #line default #line hidden #line 129 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 129 "" this.Write("_SIGNAL_NAMES[field]) != 0) {\n\n std::stringstream sstm;\n ss" + "tm << \"Field #\" << field << \" should be named \" << "); #line default #line hidden #line 132 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 132 "" this.Write("_SIGNAL_NAMES[field] << \" but is named \" << token << \", the trace file cannot be " + "used\";\n throw MessageException(sstm.str());\n }\n field++" + ";\n }\n\n cycle = 0;\n}\n\n"); #line default #line hidden #line 141 "" var driver_signal_count = 0; #line default #line hidden #line 142 "" this.Write("\nbool "); #line default #line hidden #line 143 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 143 "" this.Write(@"::DriveFromTraceInput() { if (trace_input == NULL) { throw MessageException(""Trace input file is not loaded""); } if (!std::getline(*trace_input, input_line)) { return false; } size_t i; std::string token; std::istringstream valuestream(input_line); size_t field = 0; "); #line default #line hidden #line 158 "" foreach (var signal in RS.DriverSignals) { var cpptype = RS.TypeScope.GetType(signal); if (cpptype.IsArray) { var eltype = cpptype.ElementName; var length = (int)RS.GetArrayLength(signal).DefaultValue; driver_signal_count += length; #line default #line hidden #line 165 "" this.Write(" for (i = 0; i < "); #line default #line hidden #line 165 "" this.Write(this.ToStringHelper.ToStringWithCulture(length)); #line default #line hidden #line 165 "" this.Write("; i++) {\n if (!std::getline(valuestream, token, \',\')) {\n std::s" + "tringstream sstm;\n sstm << \"Unexpected end-of-line in cycle \" << cycl" + "e << \", field \" << field << \", "); #line default #line hidden #line 168 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 168 "" this.Write("[\" << i << \"]\" << std::endl;\n throw MessageException(sstm.str());\n " + " }\n if (token.compare(\"U\") != 0)\n bus_"); #line default #line hidden #line 172 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus))); #line default #line hidden #line 172 "" this.Write("."); #line default #line hidden #line 172 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 172 "" this.Write("(i, parse_"); #line default #line hidden #line 172 "" this.Write(this.ToStringHelper.ToStringWithCulture(eltype)); #line default #line hidden #line 172 "" this.Write("(token)); \n field++;\n }\n"); #line default #line hidden #line 175 "" } else { driver_signal_count++; #line default #line hidden #line 179 "" this.Write(" if (!std::getline(valuestream, token, \',\')) {\n std::stringstream sstm;" + "\n sstm << \"Unexpected end-of-line in cycle \" << cycle << \", field \" << fi" + "eld << \", "); #line default #line hidden #line 181 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 181 "" this.Write("[\" << i << \"]\" << std::endl;\n throw MessageException(sstm.str());\n }\n " + " if (token.compare(\"U\") != 0)\n bus_"); #line default #line hidden #line 185 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus))); #line default #line hidden #line 185 "" this.Write("."); #line default #line hidden #line 185 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 185 "" this.Write("(parse_"); #line default #line hidden #line 185 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.TypeScope.GetType(signal).Name)); #line default #line hidden #line 185 "" this.Write("(token));\n field++;\n"); #line default #line hidden #line 187 "" } #line default #line hidden #line 188 "" this.Write("\n"); #line default #line hidden #line 189 "" } #line default #line hidden #line 190 "" this.Write("\n return true;\n}\n\nvoid "); #line default #line hidden #line 194 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 194 "" this.Write("::FinishCycle() \n{\n cycle++;\n"); #line default #line hidden #line 197 "" if (Network.Busses.Any(x => x.IsClocked)) { #line default #line hidden #line 198 "" this.Write(" // Propagate clocked busses\n"); #line default #line hidden #line 199 "" foreach (var bus in Network.Busses.Where(x => x.IsClocked)) { #line default #line hidden #line 200 "" this.Write(" bus_"); #line default #line hidden #line 200 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 200 "" this.Write(".Propagate();\n"); #line default #line hidden #line 201 "" } #line default #line hidden #line 202 "" } #line default #line hidden #line 203 "" this.Write("}\n\nvoid "); #line default #line hidden #line 205 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 205 "" this.Write("::OnTick()\n{\n\n"); #line default #line hidden #line 208 "" foreach (var p in Network.Processes.Where(x => x.IsClocked).Distinct()) { #line default #line hidden #line 209 "" this.Write(" proc_"); #line default #line hidden #line 209 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(p))); #line default #line hidden #line 209 "" this.Write(".onTick();\n"); #line default #line hidden #line 210 "" } #line default #line hidden #line 211 "" foreach (var b in Network.Busses.Where(x => x.IsClocked).Distinct()) { #line default #line hidden #line 212 "" this.Write(" bus_"); #line default #line hidden #line 212 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(b))); #line default #line hidden #line 212 "" this.Write(".propagate_signals();\n"); #line default #line hidden #line 213 "" } #line default #line hidden #line 214 "" this.Write("\n\n"); #line default #line hidden #line 216 "" foreach (var n in Graph.ExecutionPlan) { var pn = GetProcess(n.Item); if (pn != null && !pn.IsClocked) { #line default #line hidden #line 220 "" this.Write(" proc_"); #line default #line hidden #line 220 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ProcessNameToValidName(pn))); #line default #line hidden #line 220 "" this.Write(".onTick();\n"); #line default #line hidden #line 221 "" } #line default #line hidden #line 222 "" foreach (var b in n.Item.OutputBusses.Distinct()) { #line default #line hidden #line 223 "" this.Write(" bus_"); #line default #line hidden #line 223 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(GetBus(b)))); #line default #line hidden #line 223 "" this.Write(".forward_signals();\n"); #line default #line hidden #line 224 "" } #line default #line hidden #line 225 "" foreach (var b in n.PropagateAfter) { #line default #line hidden #line 226 "" this.Write(" bus_"); #line default #line hidden #line 226 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(GetBus(b)))); #line default #line hidden #line 226 "" this.Write(".propagate_signals();\n"); #line default #line hidden #line 227 "" } #line default #line hidden #line 228 "" foreach (var b in n.Item.InternalBusses) { #line default #line hidden #line 229 "" this.Write(" bus_"); #line default #line hidden #line 229 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(GetBus(b)))); #line default #line hidden #line 229 "" this.Write(".forward_signals();\n bus_"); #line default #line hidden #line 230 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(GetBus(b)))); #line default #line hidden #line 230 "" this.Write(".propagate_signals();\n"); #line default #line hidden #line 231 "" } #line default #line hidden #line 232 "" } #line default #line hidden #line 233 "" this.Write("}\n\nvoid "); #line default #line hidden #line 235 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 235 "" this.Write("::VerifyTrace()\n{\n if (trace_input == NULL) {\n throw MessageException(\"" + "Trace input file is not loaded\");\n }\n\n size_t i;\n size_t field = 0;\n " + " std::string token;\n std::istringstream valuestream(input_line);\n\n // Forw" + "ard past the "); #line default #line hidden #line 246 "" this.Write(this.ToStringHelper.ToStringWithCulture(driver_signal_count)); #line default #line hidden #line 246 "" this.Write(" signals\n for(i = 0; i < "); #line default #line hidden #line 247 "" this.Write(this.ToStringHelper.ToStringWithCulture(driver_signal_count)); #line default #line hidden #line 247 "" this.Write("; i++) {\n if (!std::getline(valuestream, token, \',\')) {\n throw " + "MessageException(\"Unexpected end-of-stream\");\n }\n field++;\n }\n\n" + " bool source_is_undef;\n\n"); #line default #line hidden #line 256 "" foreach (var signal in RS.VerifySignals) { var cpptype = RS.TypeScope.GetType(signal); var typecast = cpptype.Name == "system_uint8" ? "(int)" : ""; if (cpptype.IsArray) { typecast = cpptype.ElementName == "system_uint8" ? "(int)" : ""; var eltype = cpptype.ElementName; var length = (int)RS.GetArrayLength(signal).DefaultValue; #line default #line hidden #line 264 "" this.Write(" for (i = 0; i < "); #line default #line hidden #line 264 "" this.Write(this.ToStringHelper.ToStringWithCulture(length)); #line default #line hidden #line 264 "" this.Write(@"; i++) { if (!std::getline(valuestream, token, ',')) { std::stringstream sstm; sstm << ""Unexpected end-of-line in cycle "" << cycle << "", field "" << field << std::endl; throw MessageException(sstm.str()); } source_is_undef = false; try { "); #line default #line hidden #line 273 "" this.Write(this.ToStringHelper.ToStringWithCulture(eltype)); #line default #line hidden #line 273 "" this.Write(" tmpval = bus_"); #line default #line hidden #line 273 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus))); #line default #line hidden #line 273 "" this.Write("."); #line default #line hidden #line 273 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 273 "" this.Write("(i);\n } catch (InvalidReadException e) {\n source_is_undef = tru" + "e;\n }\n\n if (token.compare(\"U\") == 0 && source_is_undef) {\n " + " // Don\'t care\n } else if (token.compare(\"U\") != 0 && bus_"); #line default #line hidden #line 280 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus))); #line default #line hidden #line 280 "" this.Write("."); #line default #line hidden #line 280 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 280 "" this.Write("(i) != parse_"); #line default #line hidden #line 280 "" this.Write(this.ToStringHelper.ToStringWithCulture(eltype)); #line default #line hidden #line 280 "" this.Write("(token)) {\n std::stringstream sstm;\n sstm << \"Error in cycl" + "e \" << cycle << std::endl;\n sstm << \"Expected value \" << "); #line default #line hidden #line 283 "" this.Write(this.ToStringHelper.ToStringWithCulture(typecast)); #line default #line hidden #line 283 "" this.Write("parse_"); #line default #line hidden #line 283 "" this.Write(this.ToStringHelper.ToStringWithCulture(eltype)); #line default #line hidden #line 283 "" this.Write("(token) << \", but got \" << "); #line default #line hidden #line 283 "" this.Write(this.ToStringHelper.ToStringWithCulture(typecast)); #line default #line hidden #line 283 "" this.Write("bus_"); #line default #line hidden #line 283 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus))); #line default #line hidden #line 283 "" this.Write("."); #line default #line hidden #line 283 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 283 "" this.Write("(i) << \" for field \" << "); #line default #line hidden #line 283 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 283 "" this.Write("_SIGNAL_NAMES[field] << \" (raw: \" << token << \")\" << std::endl;\n throw" + " MessageException(sstm.str());\n }\n field++;\n }\n\n"); #line default #line hidden #line 289 "" } else { #line default #line hidden #line 290 "" this.Write(@" if (!std::getline(valuestream, token, ',')) { std::stringstream sstm; sstm << ""Unexpected end-of-line in cycle "" << cycle << "", field "" << field << std::endl; throw MessageException(sstm.str()); } source_is_undef = false; try { "); #line default #line hidden #line 298 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.TypeScope.GetType(signal).Name)); #line default #line hidden #line 298 "" this.Write(" tmpval = bus_"); #line default #line hidden #line 298 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus))); #line default #line hidden #line 298 "" this.Write("."); #line default #line hidden #line 298 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 298 "" this.Write("();\n } catch (InvalidReadException e) {\n source_is_undef = true;\n }\n" + "\n if (token.compare(\"U\") == 0 && source_is_undef) {\n // Don\'t care\n " + " } else if (token.compare(\"U\") != 0 && bus_"); #line default #line hidden #line 305 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus))); #line default #line hidden #line 305 "" this.Write("."); #line default #line hidden #line 305 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 305 "" this.Write("() != parse_"); #line default #line hidden #line 305 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.TypeScope.GetType(signal).Name)); #line default #line hidden #line 305 "" this.Write("(token)) {\n std::stringstream sstm;\n sstm << \"Error in cycle \" << c" + "ycle << std::endl;\n sstm << \"Expected value \" << "); #line default #line hidden #line 308 "" this.Write(this.ToStringHelper.ToStringWithCulture(typecast)); #line default #line hidden #line 308 "" this.Write("parse_"); #line default #line hidden #line 308 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.TypeScope.GetType(signal).Name)); #line default #line hidden #line 308 "" this.Write("(token) << \", but got \" << "); #line default #line hidden #line 308 "" this.Write(this.ToStringHelper.ToStringWithCulture(typecast)); #line default #line hidden #line 308 "" this.Write("bus_"); #line default #line hidden #line 308 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.BusNameToValidName(signal.Parent as AST.Bus))); #line default #line hidden #line 308 "" this.Write("."); #line default #line hidden #line 308 "" this.Write(this.ToStringHelper.ToStringWithCulture(signal.Name)); #line default #line hidden #line 308 "" this.Write("() << \" for field \" << "); #line default #line hidden #line 308 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 308 "" this.Write("_SIGNAL_NAMES[field] << \" (raw: \" << token << \")\" << std::endl;\n throw Mes" + "sageException(sstm.str());\n }\n field++;\n"); #line default #line hidden #line 312 "" } #line default #line hidden #line 313 "" } #line default #line hidden #line 314 "" this.Write("}\n\nvoid "); #line default #line hidden #line 316 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.AssemblyNameToFileName(Network))); #line default #line hidden #line 316 "" this.Write("::Stop()\n{\n if (trace_input != NULL) {\n trace_input->close();\n d" + "elete trace_input;\n }\n}\n"); #line default #line hidden return(this.GenerationEnvironment.ToString()); }