예제 #1
0
        private IEnumerable <string> GetCSVString(VHDLParserEntity entity, HDLEntitySignal signal, FPGA.FPGATypes.Direction direction)
        {
            int to   = Math.Max(signal.MSB, signal.LSB);
            int from = Math.Min(signal.MSB, signal.LSB);

            for (int index = to; index >= from; index--)
            {
                // no nam
                string line = signal.SignalName + "(" + index + ")," + signal.SignalDirection + "," + direction + "," + entity.EntityName + "," + signal.MetaData.Column;
                yield return(line);
            }
        }
        protected override void DoCommandAction()
        {
            if (PrintBegin)
            {
                OutputManager.WriteVHDLOutput("begin");
                OutputManager.WriteVHDLOutput("");
            }

            string componentPrefix = "static_placeholder_";

            // out parameters to UpdateSignalData
            Dictionary <string, List <int> >    signalWidths;
            Dictionary <string, string>         directions;
            List <Tuple <string, List <int> > > interfaces;
            List <string> ifSignals;
            List <string> signalsForInterface;
            List <string> signalsDeclarationsForMappingAndKeep;

            GetSignalList(PartialAreaName, false, out signalWidths, out directions, out interfaces, out ifSignals, out signalsForInterface, out signalsDeclarationsForMappingAndKeep);

            // TODO move to parser
            VHDLParser vhdlParser = new VHDLParser(VHDLModule);

            foreach (VHDLParserEntity ent in vhdlParser.GetEntities())
            {
                OutputManager.WriteVHDLOutput("-- conditional instantiation of module " + ent.EntityName + " in partial area " + PartialAreaName);
                string enumType = "build_" + ent.EntityName + "_in_" + PartialAreaName;
                enumType = enumType.ToUpper();
                OutputManager.WriteVHDLOutput("mod_sel_build_" + ent.EntityName + "_in_" + PartialAreaName + ": if module_selector = " + enumType + " generate");
                OutputManager.WriteVHDLOutput("");

                string prefix = ent.EntityName + "_";
                //String module_name = this.ModulePrefix + this.PartialAreaNames;
                string placeHolderName = componentPrefix + PartialAreaName;

                OutputManager.WriteVHDLOutput("\t" + "-- the instantiation of the placeholder for the static system");
                OutputManager.WriteVHDLOutput("\t" + "inst_" + componentPrefix + PartialAreaName + " : " + placeHolderName + " port map (");
                for (int j = 0; j < interfaces.Count; j++)
                {
                    string mapping = "\t" + "\t" + interfaces[j].Item1 + " => " + prefix + interfaces[j].Item1 + "_" + PartialAreaName + (j < interfaces.Count - 1 ? "," : "");
                    OutputManager.WriteVHDLOutput(mapping);
                }
                OutputManager.WriteVHDLOutput("\t" + ");");

                OutputManager.WriteVHDLOutput("\t" + "-- the instantiation of module " + ent.EntityName);
                OutputManager.WriteVHDLOutput("\t" + "inst_" + PartialAreaName + "_" + ent.EntityName + " : " + ent.EntityName + " port map (");

                List <string> mappings = new List <string>();
                for (int j = 0; j < ent.InterfaceSignals.Count; j++)
                {
                    HDLEntitySignal s = ent.InterfaceSignals[j];
                    bool            signalWillBeMappedToPlaceHolderSignal = interfaces.Any(tupel => tupel.Item1.Equals(s.SignalName));
                    if (signalWillBeMappedToPlaceHolderSignal)
                    {
                        Tuple <string, List <int> > ifElement = interfaces.FirstOrDefault(tupel => tupel.Item1.Equals(s.SignalName));
                        string mapping = "\t" + "\t" + s.SignalName + " => " + prefix + ifElement.Item1 + "_" + PartialAreaName + s.Range;
                        mappings.Add(mapping);
                    }
                    else
                    {
                        // TODO #
                        string mapping = "\t" + "\t" + s.SignalName + " => " + s.SignalName;
                        mappings.Add(mapping);
                    }
                }
                for (int j = 0; j < mappings.Count; j++)
                {
                    OutputManager.WriteVHDLOutput(mappings[j] + (j < mappings.Count - 1 ? "," : ""));
                }
                OutputManager.WriteVHDLOutput("\t" + ");");

                OutputManager.WriteVHDLOutput("");
                OutputManager.WriteVHDLOutput("end generate;");
                OutputManager.WriteVHDLOutput("");
            }

            if (CloseArchitecture)
            {
                OutputManager.WriteVHDLOutput("end architecture;");
            }
        }