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); }
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); } }
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); } }
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); } }