Exemplo n.º 1
0
        static void Main(string[] args)
        {
            string InFile = "test";
            if (args.Length == 1)
            {
                InFile = args[0];
            }
            module = new Module();
            string InFileName = InFile + ".vqm";
            string[] InFileData = System.IO.File.ReadAllLines(InFileName);
            string[] CleanStrings = ClearData(InFileData);
            for (int i = 0; i < CleanStrings.Length; i++)
            {
                ProccessString(CleanStrings[i]);
            }
            List<Node> Nodes = new List<Node>();
            List<NetLink> Links = new List<NetLink>();
            //Заполнение констант
            FillConst(Nodes);
            //Заполнение портов
            FillPorts(Nodes);
            //Заполнение ячеек
            FillCells(Nodes);
            //Заполнение DupСоеденений
            //FillDup(Nodes);
            //Заполнение Соеденений
            FillLinkCell(Links);
            FillLinkPorts(Links);
            //Удаление пустых и односложных Wire
            while (WireOptimize(Links)) { }

            FillDup(Nodes);
            FillLostDupLinks(Links);
            //Пересздание DUP

            var newLinks = new List<NetLink>();
            var newNodes = new List<Node>();
            foreach (var link in Links)
            {
                var mlinks = Links.Where(t => t.FromDev == link.FromDev && t.FromPort == link.FromPort).ToList();
                if (mlinks.Count > 1)
                {
                    var newDup = new Node { NodeName = "RDUP_" + GlobalDup, NodeType = "DUP" + mlinks.Count };
                    GlobalDup++;
                    var newLink = new NetLink { FromDev = link.FromDev, FromPort = link.FromPort ,ToDev = newDup.NodeName,ToPort = "I0"};
                    newNodes.Add(newDup);
                    newLinks.Add(newLink);
                    int p = 0;
                    foreach (var llink in mlinks)
                    {
                        llink.FromDev = newDup.NodeName;
                        llink.FromPort = "O" + p;
                        p++;
                    }
                }
            }
            Nodes.AddRange(newNodes);
            Links.AddRange(newLinks);

            //ConvertLostLink2Dup(Nodes, Links);
            //Выгрузка

            Console.WriteLine("Nodes {0}",Nodes.Count);
            Console.WriteLine("Cells {0}",module.Cells.Count);
            Console.WriteLine("Wires {0}",Links.Count);

            string OutFileName = InFile + ".MNET";
            string Ofile = "";

            for (int i = 0; i < Nodes.Count; i++)
            {
                Ofile += "NODE:" + Nodes[i].NodeType + ":" + Nodes[i].NodeName + "\r\n";
            }

            for (int i = 0; i < Links.Count; i++)
            {
                Ofile += "WIRE:" + Links[i].FromDev + "-" + Links[i].FromPort + ":" + Links[i].ToDev + "-" + Links[i].ToPort + "\r\n";
            }
            System.IO.File.WriteAllText(OutFileName, Ofile);
        }
Exemplo n.º 2
0
 private static void FillDup(List<Node> Nodes)
 {
     for (int i = 0; i < module.Wires.Count; i++)
     {
         Node N = new Node();
         N.NodeName = module.Wires[i].Name;
         N.NodeType = "DUP" + GetWireOutConnetionNum(module.Wires[i].Name);
         Nodes.Add(N);
     }
 }
Exemplo n.º 3
0
 private static void FillPorts(List<Node> Nodes)
 {
     for (int i = 0; i < module.Ports.Count; i++)
     {
         Node node = new Node();
         node.NodeName = module.Ports[i].Name;
         node.NodeType = module.Ports[i].Ptype == PortType.IN ? "INPort" : "OUTPort";
         Nodes.Add(node);
     }
 }
Exemplo n.º 4
0
 private static void FillCells(List<Node> Nodes)
 {
     for (int i = 0; i < module.Cells.Count; i++)
     {
         Node node = new Node();
         node.NodeName = module.Cells[i].Name;
         switch (module.Cells[i].CelType)
         {
             case CellType.cycloneii_lcell_comb:
                 node.NodeType = "C2LUT_" + module.Cells[i].lut_mask + "_" + module.Cells[i].sum_lutc_input;
                 break;
             case CellType.cycloneii_lcell_ff:
                 node.NodeType = "TRIG_D";
                 break;
             default:
                 break;
         }
         Nodes.Add(node);
     }
 }