protected override void DoCommandAction() { string bufferFileName = XDLInFile.Equals(XDLOutFile) ? Path.GetTempFileName() : XDLOutFile; TextWriter resultingBlocker = new StreamWriter(bufferFileName, false); StreamReader xdlInFile = new StreamReader(XDLInFile); string currentLine = ""; string lastLine1 = ""; string lastLine2 = ""; while ((currentLine = xdlInFile.ReadLine()) != null) { // filter out dummy clock nets if (BUFGInstanceName.Equals("NULL")) { resultingBlocker.WriteLine(currentLine); } else { // cut out clock nets if (Regex.IsMatch(currentLine, "dummy_GOA_net.*CLK")) { } else { resultingBlocker.WriteLine(currentLine); } } // search for outpin "BUFG_Instance_name" O, might be spread over multiple lines // net "Inst_system/sys_clk_s" , // outpin "Inst_system/clock_generator_0/clock_generator_0/Using_DCM0.DCM0_INST/Using_BUFG_for_CLKDV.CLKDV_BUFG_INST" // O , lastLine1 = lastLine2; lastLine2 = currentLine; // remove line feed lastLine2 = Regex.Replace(lastLine2, "\n", ""); // scan last four line for a match string multiLine = lastLine1 + lastLine2; bool multiLineHit = Regex.IsMatch(multiLine, "outpin.*" + BUFGInstanceName + ".*O"); // scan the current line for a match bool singleLineHit = Regex.IsMatch(currentLine, "outpin.*" + BUFGInstanceName + ".*O"); if (multiLineHit || singleLineHit) { multiLine = ""; lastLine1 = ""; lastLine2 = ""; foreach (string blockerFileName in XDLBlockerFiles) { StreamReader blockerFile = new StreamReader(blockerFileName); string currentBlockerLine = ""; while ((currentBlockerLine = blockerFile.ReadLine()) != null) { if (Regex.IsMatch(currentBlockerLine, "inpin.*CLK")) { // convert // net "dummy_ModuleBlocker_clock0<302>", inpin "SLICE_X82Y126" CLK,; // net "dummy_GOA_netMACCSITE2_X18Y24CLK", inpin "MACCSITE2_X18Y24" CLK,; // to // inpin "SLICE_X82Y126" CLK, string[] atoms = Regex.Split(currentBlockerLine, ",");// ($net, $inpin) = split(/,/, $_ ,2); string net = atoms[0]; string inpin = atoms[1] + ","; // # cut last ';' inpin = Regex.Replace(inpin, ";", ""); // $inpin =~ tr/;/ /; resultingBlocker.WriteLine(inpin); } } blockerFile.Close(); } } } // add blocker xdl code without header, footer and without dummy clock nets (keep instance and net "...BlockSelection" net) foreach (string blockerFileName in XDLBlockerFiles) { StreamReader blockerFile = new StreamReader(blockerFileName); string currentBlockerLine = ""; while ((currentBlockerLine = blockerFile.ReadLine()) != null) { if (Regex.IsMatch(currentBlockerLine, "(design )|(module )|(endmodule)")) { continue; } if (!BUFGInstanceName.Equals("NULL") && Regex.IsMatch(currentBlockerLine, "(dummy_goa_net.*clock)|(dummy_GOA_net.*CLK)")) { continue; } resultingBlocker.WriteLine(currentBlockerLine); } blockerFile.Close(); } xdlInFile.Close(); resultingBlocker.Close(); // overwrite XDLOutfile with temp file and delete temp file if (XDLInFile.Equals(XDLOutFile)) { File.Copy(bufferFileName, XDLOutFile, true); File.Copy(bufferFileName, XDLOutFile + "before_sort", true); File.Delete(bufferFileName); } SimpleSortDesignFast simpleSortCmd = new SimpleSortDesignFast(); simpleSortCmd.XDLInFile = XDLOutFile; simpleSortCmd.XDLOutFile = XDLOutFile; CommandExecuter.Instance.Execute(simpleSortCmd); }
protected override void DoCommandAction() { StreamReader reader = new StreamReader(XDLInFile); string line = ""; bool update = false; bool outbufFound = false; List <string> unmodifiedBuffer = new List <string>(); List <string> modifiedBuffer = new List <string>(); string bufferFileName = ""; if (XDLInFile.Equals(XDLOutFile)) { bufferFileName = Path.GetTempFileName(); } else { bufferFileName = XDLOutFile; } TextWriter result = new StreamWriter(bufferFileName, false); while ((line = reader.ReadLine()) != null) { if (Regex.IsMatch(line, "^inst.*IOB")) { update = true; outbufFound = false; unmodifiedBuffer.Add(line); modifiedBuffer.Add(line); } else if (Regex.IsMatch(line, ";")) { update = false; unmodifiedBuffer.Add(line); modifiedBuffer.Add(line); if (!outbufFound) { for (int i = 0; i < modifiedBuffer.Count; i++) { result.WriteLine(modifiedBuffer[i]); } } else { for (int i = 0; i < unmodifiedBuffer.Count; i++) { result.WriteLine(unmodifiedBuffer[i]); } } unmodifiedBuffer.Clear(); modifiedBuffer.Clear(); } else if (update) { unmodifiedBuffer.Add(line); if (Regex.IsMatch(line, "OUTBUF:")) { outbufFound = true; } if (Regex.IsMatch(line, "PRE_EMPHASIS::#OFF")) { line = Regex.Replace(line, "PRE_EMPHASIS::#OFF", ""); } modifiedBuffer.Add(line); } else { result.WriteLine(line); } } reader.Close(); result.Close(); // overwrite XDLOutfile with temp file and delete temp file if (XDLInFile.Equals(XDLOutFile)) { File.Copy(bufferFileName, XDLOutFile, true); File.Delete(bufferFileName); } }
protected override void DoCommandAction() { string bufferFileName = ""; string instBufferFileName = Path.GetTempFileName(); string netBufferFileName = Path.GetTempFileName(); if (XDLInFile.Equals(XDLOutFile)) { bufferFileName = Path.GetTempFileName(); } else { bufferFileName = XDLOutFile; } TextWriter result = new StreamWriter(bufferFileName, false); TextWriter instBuffer = new StreamWriter(instBufferFileName, false); TextWriter netBuffer = new StreamWriter(netBufferFileName, false); StreamReader inFile = new StreamReader(XDLInFile); bool scanForKeyWord = true; bool readDesign = false; bool readModule = false; bool readInst = false; bool readNet = false; bool readConfig = false; StringBuilder blockBuffer = new StringBuilder(); string keyWordBuffer = ""; foreach (string c in Read(inFile)) { blockBuffer.Append(c); if (scanForKeyWord) { keyWordBuffer += c; if (Regex.IsMatch(keyWordBuffer, @"^\s*design")) { readDesign = true; scanForKeyWord = false; } else if (Regex.IsMatch(keyWordBuffer, @"^\s*module")) { readModule = true; scanForKeyWord = false; } else if (Regex.IsMatch(keyWordBuffer, @"^\s*inst")) { readInst = true; scanForKeyWord = false; } else if (Regex.IsMatch(keyWordBuffer, @"^\s*net")) { readNet = true; scanForKeyWord = false; } else if (Regex.IsMatch(keyWordBuffer, @"^\s*cfg")) { readConfig = true; scanForKeyWord = false; } } if (readDesign) { if (c.Equals(";")) { result.Write(blockBuffer.ToString()); readDesign = false; blockBuffer.Clear(); scanForKeyWord = true; keyWordBuffer = ""; } } else if (readModule) { if (Regex.IsMatch(blockBuffer.ToString(), "endmodule.*;")) { result.Write(blockBuffer.ToString()); readModule = false; blockBuffer.Clear(); scanForKeyWord = true; keyWordBuffer = ""; } } else if (readInst) { if (c.Equals(";")) { instBuffer.Write(blockBuffer.ToString()); readInst = false; blockBuffer.Clear(); scanForKeyWord = true; keyWordBuffer = ""; } } else if (readNet) { if (c.Equals(";")) { netBuffer.Write(blockBuffer.ToString()); readNet = false; blockBuffer.Clear(); scanForKeyWord = true; keyWordBuffer = ""; } } else if (readConfig) { if (c.Equals(";")) { readConfig = false; blockBuffer.Clear(); scanForKeyWord = true; keyWordBuffer = ""; } } } instBuffer.Close(); netBuffer.Close(); inFile.Close(); // append inst and net buffer to result TextReader rd = new StreamReader(instBufferFileName); string buffer = ""; while ((buffer = rd.ReadLine()) != null) { result.WriteLine(buffer); } rd.Close(); rd = new StreamReader(netBufferFileName); buffer = ""; while ((buffer = rd.ReadLine()) != null) { result.WriteLine(buffer); } rd.Close(); result.Close(); // overwrite XDLOutfile with temp file and delete temp file if (XDLInFile.Equals(XDLOutFile)) { File.Copy(bufferFileName, XDLOutFile, true); File.Delete(bufferFileName); } }