Programming 언어/Skill

[SKILL] 원클릭으로 LPE를 추출해보자

호드맨 2017. 1. 9. 13:18

원클릭으로 시리즈의 마지막이었던 calibre LPE 방법이다. 지금은 FinFet 공정으로 오면서 calibre PEX 가 아닌 calibre XACT로 바뀌었지만 방식은 크게 다르지 않다. template 파일을 만들고, 이 경우에서는 실행하는 batch 파일을 작성하여 실행하도록 만들었다.

 

역시나 최근 작성한 것은 Cell, Corner, Temperature 별로 폴더를 나누었을 뿐 크게 바뀌진 않았다. 동작 상으로 Run 결과를 touch 문으로 기다리는 정도만 달라진 것 같다.

 

run lpe procedure-> 총 파일 4개를 작성했는데, netlist 물고 있는 파일, rule 참조하는 파일,
C, CC용 batch 파일이다. 각각 작성 후 ipc 통해서 실행하게 끔 해놓았다.
 
procedure(run_lpe()
   prog(()
      cv=hiGetCurrentWindow()->cellView
      _RUNDIR=getWorkingDir()

      ipcProcess=ipcBeginProcess(sprintf(_tmp "mkdir %s/../VERIFY/LPE/%s" _RUNDIR cv->cellName ))

      out_file1=outfile(sprintf(_tmp "%s/../VERIFY/LPE/%s/_source.net_" _RUNDIR cv->cellName))
      fprintf(out_file1 ".INCLUDE \"%s/../VERIFY/RULE/source_added\"\n" _RUNDIR)
      fprintf(out_file1 ".INCLUDE \"%s/../VERIFY/NET/%s.net\"\n" _RUNDIR cv->cellName)
      close(out_file1)

      out_file2=outfile(sprintf(_tmp "%s/../VERIFY/LPE/%s/_calibre.xrc_" _RUNDIR cv->cellName))
      fprintf(out_file2 "LAYOUT PATH  \"%s/../VERIFY/GDS/%s.gds\"\n" _RUNDIR cv->cellName)
      fprintf(out_file2 "LAYOUT PRIMARY \"%s\"\n" cv->cellName)
      fprintf(out_file2 "LAYOUT SYSTEM GDSII\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "SOURCE PATH \"_source.net_\"\n")
      fprintf(out_file2 "SOURCE PRIMARY \"%s\"\n" cv->cellName)
      fprintf(out_file2 "SOURCE SYSTEM SPICE\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "MASK SVDB DIRECTORY \"svdb\" QUERY XCALIBRE\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "LVS REPORT \"%s.lvs.report\"\n" cv->cellName)
      fprintf(out_file2 "\n")
      fprintf(out_file2 "PEX NETLIST \"%s.pex.netlist\" HSPICE 1 SOURCENAMES\n" cv->cellName)
      fprintf(out_file2 "PEX REDUCE ANALOG NO\n")
      fprintf(out_file2 "PEX NETLIST UPPERCASE KEYWORDS NO\n")
      fprintf(out_file2 "PEX NETLIST VIRTUAL CONNECT NO\n")
      fprintf(out_file2 "PEX NETLIST NOXREF NET NAMES YES\n")
      fprintf(out_file2 "PEX NETLIST MUTUAL RESISTANCE YES\n")
      fprintf(out_file2 "LVS REPORT OPTION NONE\n")
      fprintf(out_file2 "LVS FILTER UNUSED OPTION NONE SOURCE\n")
      fprintf(out_file2 "LVS FILTER UNUSED OPTION NONE LAYOUT\n")
      fprintf(out_file2 "LVS POWER NAME \"VDDA\" \"VDD\"\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "LVS GROUND NAME \"VSSA\" \"VSS\"\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "LVS RECOGNIZE GATES ALL\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "VIRTUAL CONNECT COLON YES\n")
      fprintf(out_file2 "VIRTUAL CONNECT REPORT NO\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "DRC ICSTATION YES\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "\n")
      fprintf(out_file2 "INCLUDE \"/misc/data/T013G/C6FRRL_R1P0/VERIFY/RULE/calibre.xrc\"\n")
      close(out_file2)

      out_file3=outfile(sprintf(_tmp "%s/../VERIFY/LPE/%s/runme_C" _RUNDIR cv->cellName))
      fprintf(out_file3 "calibre -lvs -phdb -hier %s/../VERIFY/LPE/%s/_calibre.xrc_\n" _RUNDIR cv->cellName)
      fprintf(out_file3 "calibre -xrc -pdb -rc %s/../VERIFY/LPE/%s/_calibre.xrc_\n" _RUNDIR cv->cellName _RUNDIR cv->cellName)
      fprintf(out_file3 "calibre -xrc -fmt -c %s/../VERIFY/LPE/%s/_calibre.xrc_\n" _RUNDIR cv->cellName _RUNDIR cv->cellName)
      close(out_file3)

      out_file4=outfile(sprintf(_tmp "%s/../VERIFY/LPE/%s/runme_CC" _RUNDIR cv->cellName))
      fprintf(out_file4 "calibre -lvs -phdb -hier %s/../VERIFY/LPE/%s/_calibre.xrc_\n" _RUNDIR cv->cellName)
      fprintf(out_file4 "calibre -xrc -pdb -c %s/../VERIFY/LPE/%s/_calibre.xrc_\n" _RUNDIR cv->cellName _RUNDIR cv->cellName)
      fprintf(out_file4 "calibre -xrc -fmt -c %s/../VERIFY/LPE/%s/_calibre.xrc_\n" _RUNDIR cv->cellName _RUNDIR cv->cellName)
      close(out_file4)

      ipcProcess=ipcBeginProcess(sprintf(_tmp "cd %s/../VERIFY/LPE/%s ; chmod +x runme_C* ; runme_C ; mkdir C ; mv %s.pex.netlist* ./C ; runme_CC ; mkdir CC ; mv %s.pex.netlist* ./CC " _RUNDIR cv->cellName cv->cellName cv->cellName))
   )
)