public virtual string TransformText() { this.GenerationEnvironment = null; #line 9 "" this.Write(@"library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; -- library SYSTEM_TYPES; use work.SYSTEM_TYPES.ALL; -- library CUSTOM_TYPES; use work.CUSTOM_TYPES.ALL; -- User defined packages here -- #### USER-DATA-IMPORTS-START -- #### USER-DATA-IMPORTS-END entity "); #line default #line hidden #line 23 "" this.Write(this.ToStringHelper.ToStringWithCulture(Network.Name)); #line default #line hidden #line 23 "" this.Write(" is\n port(\n\n"); #line default #line hidden #line 26 "" var feedbacks = RS.FeedbackBusses.ToArray(); var processes = Network.Processes.Where(x => !x.IsSimulation).ToArray(); #line default #line hidden #line 30 "" this.Write("\n"); #line default #line hidden #line 31 "" foreach (var bus in Network.Busses.Where(x => x.IsTopLevelInput || x.IsTopLevelOutput)) { var signaltype = "inout"; if (bus.IsTopLevelInput && !bus.IsTopLevelOutput) { signaltype = "in"; } else if (bus.IsTopLevelOutput && !bus.IsTopLevelInput) { signaltype = "out"; } #line default #line hidden #line 39 "" this.Write(" -- Top-level bus "); #line default #line hidden #line 39 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 39 "" this.Write(" signals\n"); #line default #line hidden #line 40 "" foreach (var signal in bus.Signals) { #line default #line hidden #line 41 "" this.Write(" "); #line default #line hidden #line 41 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(bus.InstanceName + "_" + signal.Name))); #line default #line hidden #line 41 "" this.Write(": "); #line default #line hidden #line 41 "" this.Write(this.ToStringHelper.ToStringWithCulture(signaltype)); #line default #line hidden #line 41 "" this.Write(" "); #line default #line hidden #line 41 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.VHDLWrappedTypeName(signal))); #line default #line hidden #line 41 "" this.Write(";\n"); #line default #line hidden #line 42 "" } #line default #line hidden #line 43 "" this.Write("\n"); #line default #line hidden #line 44 "" } #line default #line hidden #line 45 "" this.Write("\n"); #line default #line hidden #line 46 "" foreach (var bus in Network.Busses.Where(x => !(x.IsTopLevelInput || x.IsTopLevelOutput || x.IsInternal))) { #line default #line hidden #line 47 "" this.Write(" -- Interconnection bus "); #line default #line hidden #line 47 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 47 "" this.Write(" signals\n"); #line default #line hidden #line 48 "" foreach (var signal in bus.Signals) { #line default #line hidden #line 49 "" this.Write(" "); #line default #line hidden #line 49 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(bus.InstanceName + "_" + signal.Name))); #line default #line hidden #line 49 "" this.Write(": inout "); #line default #line hidden #line 49 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.VHDLWrappedTypeName(signal))); #line default #line hidden #line 49 "" this.Write(";\n"); #line default #line hidden #line 50 "" } #line default #line hidden #line 51 "" } #line default #line hidden #line 52 "" this.Write(@" -- User defined signals here -- #### USER-DATA-ENTITYSIGNALS-START -- #### USER-DATA-ENTITYSIGNALS-END -- Enable signal ENB : in Std_logic; -- Finished signal FIN : out Std_logic; -- Reset signal RST : in Std_logic; -- Clock signal CLK : in Std_logic ); end "); #line default #line hidden #line 69 "" this.Write(this.ToStringHelper.ToStringWithCulture(Network.Name)); #line default #line hidden #line 69 "" this.Write(";\n\narchitecture RTL of "); #line default #line hidden #line 71 "" this.Write(this.ToStringHelper.ToStringWithCulture(Network.Name)); #line default #line hidden #line 71 "" this.Write(" is \n -- User defined signals here\n -- #### USER-DATA-SIGNALS-START\n -- #### " + "USER-DATA-SIGNALS-END\n\n"); #line default #line hidden #line 76 "" if (feedbacks.Any()) { #line default #line hidden #line 77 "" this.Write(" -- Feedback signals\n"); #line default #line hidden #line 78 "" foreach (var signal in feedbacks.SelectMany(x => x.Signals)) { #line default #line hidden #line 79 "" this.Write(" signal "); #line default #line hidden #line 79 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("current_" + (signal.Parent as AST.Bus).InstanceName + "_" + signal.Name))); #line default #line hidden #line 79 "" this.Write(", "); #line default #line hidden #line 79 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("next_" + (signal.Parent as AST.Bus).InstanceName + "_" + signal.Name))); #line default #line hidden #line 79 "" this.Write(": "); #line default #line hidden #line 79 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.VHDLWrappedTypeName(signal))); #line default #line hidden #line 79 "" this.Write(";\n"); #line default #line hidden #line 80 "" } #line default #line hidden #line 81 "" } #line default #line hidden #line 82 "" this.Write("\n -- Process ready triggers\n"); #line default #line hidden #line 84 "" foreach (var p in processes) { #line default #line hidden #line 85 "" this.Write("\n signal "); #line default #line hidden #line 86 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("FIN_" + p.InstanceName))); #line default #line hidden #line 86 "" this.Write(this.ToStringHelper.ToStringWithCulture(p.IsClocked ? string.Empty : ", " + Naming.ToValidName("RDY_" + p.InstanceName))); #line default #line hidden #line 86 "" this.Write(" : std_logic;\n"); #line default #line hidden #line 87 "" } #line default #line hidden #line 88 "" this.Write("\n\n\n\n -- The primary ready driver signal\n signal RDY : std_logic;\n\nbegin\n\n"); #line default #line hidden #line 97 "" foreach (var p in processes) { #line default #line hidden #line 98 "" this.Write("\n -- Entity "); #line default #line hidden #line 99 "" this.Write(this.ToStringHelper.ToStringWithCulture(p.InstanceName)); #line default #line hidden #line 99 "" this.Write(" signals\n "); #line default #line hidden #line 100 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(p.InstanceName))); #line default #line hidden #line 100 "" this.Write(": entity work."); #line default #line hidden #line 100 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(p.Name))); #line default #line hidden #line 100 "" this.Write("\n"); #line default #line hidden #line 101 "" var lastel = p.SharedVariables.Cast <object>().Concat(p.SharedSignals).LastOrDefault(); if (lastel != null) { #line default #line hidden #line 104 "" this.Write(" generic map(\n"); #line default #line hidden #line 105 "" foreach (var variable in p.SharedVariables) { #line default #line hidden #line 106 "" this.Write(" "); #line default #line hidden #line 106 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("reset_" + variable.Name))); #line default #line hidden #line 106 "" this.Write(" => "); #line default #line hidden #line 106 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.GetResetExpression(variable))); #line default #line hidden #line 106 "" this.Write(this.ToStringHelper.ToStringWithCulture(variable == lastel ? "" : ",")); #line default #line hidden #line 106 "" this.Write("\n"); #line default #line hidden #line 107 "" } #line default #line hidden #line 108 "" foreach (var variable in p.SharedSignals) { #line default #line hidden #line 109 "" this.Write(" "); #line default #line hidden #line 109 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("reset_" + variable.Name))); #line default #line hidden #line 109 "" this.Write(" => "); #line default #line hidden #line 109 "" this.Write(this.ToStringHelper.ToStringWithCulture(RS.GetResetExpression(variable))); #line default #line hidden #line 109 "" this.Write(this.ToStringHelper.ToStringWithCulture(variable == lastel ? "" : ",")); #line default #line hidden #line 109 "" this.Write("\n"); #line default #line hidden #line 110 "" } #line default #line hidden #line 111 "" this.Write(" )\n"); #line default #line hidden #line 112 "" } #line default #line hidden #line 113 "" this.Write(" port map (\n"); #line default #line hidden #line 114 "" foreach (var bus in p.InputBusses.Union(p.OutputBusses)) { var isInput = p.InputBusses.Contains(bus); var isOutput = p.OutputBusses.Contains(bus); var isBoth = isInput && isOutput; var type = "Input/Output"; if (isInput && !isOutput) { type = "Input"; } else if (isOutput && !isInput) { type = "Output"; } var output_prefix = string.Empty; var input_prefix = string.Empty; if (feedbacks.Contains(bus)) { input_prefix = output_prefix = "current_"; } var busname = RS.GetLocalBusName(bus, p); var signals = bus.Signals.AsEnumerable(); if (isOutput && !isBoth) { signals = RS.WrittenSignals(p, bus); } #line default #line hidden #line 135 "" this.Write(" -- "); #line default #line hidden #line 135 "" this.Write(this.ToStringHelper.ToStringWithCulture(type)); #line default #line hidden #line 135 "" this.Write(" bus "); #line default #line hidden #line 135 "" this.Write(this.ToStringHelper.ToStringWithCulture(bus.Name)); #line default #line hidden #line 135 "" this.Write("\n"); #line default #line hidden #line 136 "" foreach (var signal in signals) { #line default #line hidden #line 137 "" if (isInput || isBoth) { #line default #line hidden #line 138 "" this.Write(" "); #line default #line hidden #line 138 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(busname + "_" + signal.Name))); #line default #line hidden #line 138 "" this.Write(" => "); #line default #line hidden #line 138 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(input_prefix + bus.InstanceName + "_" + signal.Name))); #line default #line hidden #line 138 "" this.Write(",\n"); #line default #line hidden #line 139 "" } else { #line default #line hidden #line 140 "" this.Write(" "); #line default #line hidden #line 140 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(busname + "_" + signal.Name))); #line default #line hidden #line 140 "" this.Write(" => "); #line default #line hidden #line 140 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName(output_prefix + bus.InstanceName + "_" + signal.Name))); #line default #line hidden #line 140 "" this.Write(",\n"); #line default #line hidden #line 141 "" } #line default #line hidden #line 142 "" } #line default #line hidden #line 143 "" this.Write("\n"); #line default #line hidden #line 144 "" if (isBoth) { #line default #line hidden #line 145 "" foreach (var signal in bus.Signals) { #line default #line hidden #line 146 "" this.Write(" "); #line default #line hidden #line 146 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("out_" + busname + "_" + signal.Name))); #line default #line hidden #line 146 "" this.Write(" => "); #line default #line hidden #line 146 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("next_" + bus.InstanceName + "_" + signal.Name))); #line default #line hidden #line 146 "" this.Write(",\n"); #line default #line hidden #line 147 "" } #line default #line hidden #line 148 "" } #line default #line hidden #line 149 "" this.Write("\n"); #line default #line hidden #line 150 "" } #line default #line hidden #line 151 "" this.Write("\n CLK => CLK,\n RDY => "); #line default #line hidden #line 153 "" this.Write(this.ToStringHelper.ToStringWithCulture(p.IsClocked ? "RDY" : Naming.ToValidName("RDY_" + p.InstanceName))); #line default #line hidden #line 153 "" this.Write(",\n FIN => "); #line default #line hidden #line 154 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("FIN_" + p.InstanceName))); #line default #line hidden #line 154 "" this.Write(",\n ENB => ENB,\n RST => RST\n );\n\n"); #line default #line hidden #line 159 "" } #line default #line hidden #line 160 "" this.Write("\n -- Connect ready signals\n"); #line default #line hidden #line 162 "" foreach (var p in processes) { var parents = RS.DependsOn(p).Select(x => x.InstanceName).Distinct().ToArray(); if (parents.Length == 0) { if (!p.IsClocked) { #line default #line hidden #line 166 "" this.Write(" "); #line default #line hidden #line 166 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("RDY_" + p.InstanceName))); #line default #line hidden #line 166 "" this.Write(" <= RDY;\n"); #line default #line hidden #line 167 "" } } else if (parents.Length == 1) { #line default #line hidden #line 169 "" this.Write(" "); #line default #line hidden #line 169 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("RDY_" + p.InstanceName))); #line default #line hidden #line 169 "" this.Write(" <= "); #line default #line hidden #line 169 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("FIN_" + parents.First()))); #line default #line hidden #line 169 "" this.Write(";\n"); #line default #line hidden #line 170 "" } else { #line default #line hidden #line 171 "" this.Write(" -- Setup the RDY signal for "); #line default #line hidden #line 171 "" this.Write(this.ToStringHelper.ToStringWithCulture(p.InstanceName)); #line default #line hidden #line 171 "" this.Write("\n process(\n "); #line default #line hidden #line 173 "" this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(", " + Environment.NewLine + " ", parents.Select(x => string.Format(Naming.ToValidName("FIN_" + x)))))); #line default #line hidden #line 173 "" this.Write("\n )\n begin\n if "); #line default #line hidden #line 176 "" this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(" AND ", parents.Skip(1).Select(x => string.Format("{0} = {1}", Naming.ToValidName("FIN_" + parents.First()), Naming.ToValidName("FIN_" + x)))))); #line default #line hidden #line 176 "" this.Write(" then\n "); #line default #line hidden #line 177 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("RDY_" + p.InstanceName))); #line default #line hidden #line 177 "" this.Write(" <= "); #line default #line hidden #line 177 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("FIN_" + parents.First()))); #line default #line hidden #line 177 "" this.Write(";\n end if;\n end process;\n"); #line default #line hidden #line 180 "" } #line default #line hidden #line 181 "" } #line default #line hidden #line 182 "" this.Write("\n -- Setup the FIN feedback signals\n"); #line default #line hidden #line 184 "" if (processes.Length == 1) { #line default #line hidden #line 185 "" this.Write(" FIN <= "); #line default #line hidden #line 185 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("FIN_" + processes.First().InstanceName))); #line default #line hidden #line 185 "" this.Write(";\n"); #line default #line hidden #line 186 "" } else { #line default #line hidden #line 187 "" this.Write(" process(\n "); #line default #line hidden #line 188 "" this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(", " + Environment.NewLine + " ", processes.Select(x => Naming.ToValidName("FIN_" + x.InstanceName))))); #line default #line hidden #line 188 "" this.Write("\n )\n begin\n if "); #line default #line hidden #line 191 "" this.Write(this.ToStringHelper.ToStringWithCulture(string.Join(" AND ", processes.Skip(1).Select(x => string.Format("{0} = {1}", Naming.ToValidName("FIN_" + processes.First().InstanceName), Naming.ToValidName("FIN_" + x.InstanceName)))))); #line default #line hidden #line 191 "" this.Write(" then\n FIN <= "); #line default #line hidden #line 192 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("FIN_" + processes.First().InstanceName))); #line default #line hidden #line 192 "" this.Write(";\n end if;\n end process;\n"); #line default #line hidden #line 195 "" } #line default #line hidden #line 196 "" this.Write(@" -- Propagate all clocked and feedback signals process( CLK, RST) variable readyflag: std_logic; begin if RST = '1' then RDY <= '0'; readyflag := '1'; elsif rising_edge(CLK) then if ENB = '1' then readyflag := not readyflag; RDY <= readyflag; "); #line default #line hidden #line 211 "" if (feedbacks.Any()) { #line default #line hidden #line 212 "" this.Write(" -- Forward feedback signals\n"); #line default #line hidden #line 213 "" foreach (var signal in feedbacks.SelectMany(x => x.Signals)) { #line default #line hidden #line 214 "" this.Write(" current_"); #line default #line hidden #line 214 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName((signal.Parent as AST.Bus).InstanceName + "_" + signal.Name))); #line default #line hidden #line 214 "" this.Write(" <= next_"); #line default #line hidden #line 214 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName((signal.Parent as AST.Bus).InstanceName + "_" + signal.Name))); #line default #line hidden #line 214 "" this.Write(";\n"); #line default #line hidden #line 215 "" } #line default #line hidden #line 216 "" } #line default #line hidden #line 217 "" this.Write(" end if;\n end if;\n end process;\n\n"); #line default #line hidden #line 221 "" if (feedbacks.Where(x => x.IsTopLevelOutput).Any()) { #line default #line hidden #line 222 "" this.Write(" -- Send feedback outputs to the actual output\n"); #line default #line hidden #line 223 "" foreach (var signal in feedbacks.Where(x => x.IsTopLevelOutput).SelectMany(x => x.Signals)) { #line default #line hidden #line 224 "" this.Write(" "); #line default #line hidden #line 224 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName((signal.Parent as AST.Bus).InstanceName + "_" + signal.Name))); #line default #line hidden #line 224 "" this.Write(" <= "); #line default #line hidden #line 224 "" this.Write(this.ToStringHelper.ToStringWithCulture(Naming.ToValidName("next_" + (signal.Parent as AST.Bus).InstanceName + "_" + signal.Name))); #line default #line hidden #line 224 "" this.Write(";\n"); #line default #line hidden #line 225 "" } #line default #line hidden #line 226 "" } #line default #line hidden #line 227 "" this.Write("\n\n-- User defined processes here\n-- #### USER-DATA-CODE-START\n-- #### USER-DATA-C" + "ODE-END\n\nend RTL;"); #line default #line hidden return(this.GenerationEnvironment.ToString()); }