示例#1
0
        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());
        }