Programming 언어/Skill

[SKILL] 원클릭으로 DRC 돌리기

호드맨 2017. 1. 5. 12:44

예전에 귀차니즘이라고 표현했지만, 사실 작성해 두면 편리한 기능이라서 만들어 놓고 계속해서 업그레이드를 하고 있는 기능이다. 그래서 최근에 다시 버전 업된 것으로 강좌 글을 써보겠지만, 예전 글들도 남겨놓는다. 지금도 잘 동작하니 간단히 쓰기에 나쁘지는 않고 기록도 되기 때문이다.

함수 하나로 calibre DRC template 파일을 작성한 뒤 실행시키고, ipcWait를 한 뒤 RVE를 실행하도록 한 방식이다. 당연히 지금은 이렇게 하지 않는다. ipcWait가 걸려있는 동안 virtuoso 환경도 멈추기 때문에 비효율적이다. touch 기능을 이용해서 calibre DRC가 끝난 것을 detecting 한 뒤 완료 메시지를 띄우거나 RVE를 실행시킬 수 있다. 최신 방식은 최신 강좌 글에 적어 보기로 하고 여기선 예전 방식 그대로 남겨 놓는다.

 

procedure(run_drc()
   prog(()
      cv=hiGetCurrentWindow()->cellView
      _RUNDIR=getWorkingDir()

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

      out_file=outfile(sprintf(_tmp "%s/../VERIFY/DRC/%s/_calibre.drc_" _RUNDIR cv->cellName))
      fprintf(out_file "LAYOUT PATH  \"%s/../VERIFY/GDS/%s.gds\"\n" _RUNDIR cv->cellName)
      fprintf(out_file "LAYOUT PRIMARY \"%s\"\n" cv->cellName)
      fprintf(out_file "LAYOUT SYSTEM GDSII\n")
      fprintf(out_file "\n")
      fprintf(out_file "DRC RESULTS DATABASE \"%s.drc.results\" ASCII\n" cv->cellName)
      fprintf(out_file "DRC MAXIMUM RESULTS 1000\n")
      fprintf(out_file "DRC MAXIMUM VERTEX 4096\n")
      fprintf(out_file "\n")
      fprintf(out_file "DRC CELL NAME NO\n")
      fprintf(out_file "DRC SUMMARY REPORT \"%s.drc.summary\" REPLACE HIER\n" cv->cellName)
      fprintf(out_file "\n")
      fprintf(out_file "VIRTUAL CONNECT COLON YES\n")
      fprintf(out_file "VIRTUAL CONNECT REPORT NO\n")
      fprintf(out_file "\n")
      fprintf(out_file "DRC ICSTATION YES\n")
      fprintf(out_file "\n")
      fprintf(out_file "\n")
      fprintf(out_file sprintf(_tmp "INCLUDE \"%s/../VERIFY/RULE/calibre.drc\"\n" _RUNDIR))
      close(out_file)

      ipcProcess=ipcBeginProcess(sprintf(_tmp "cd %s/../VERIFY/DRC/%s ; calibre -drc -hier -turbo -turbo_litho -hyper -nowait %s/../VERIFY/DRC/%s/_calibre.drc_" _RUNDIR cv->cellName _RUNDIR cv->cellName))
      ipcWait(ipcProcess)
      ipcProcess=ipcBeginProcess(sprintf(_tmp "calibre -rve %s/../VERIFY/DRC/%s/%s.drc.results" _RUNDIR cv->cellName cv->cellName))
   )
)

이 방식으로 사용하더라도, ipcWait 구문부터 제거하면 DRC를 실행하면서 virtuoso 환경에서 작업이 가능하다. 단 언제 작업이 끝났는지 확인할 방법은 Terminal을 열어보는 수밖에 없기 때문에 번거롭기는 마찬가지. RVE를 열어 두었다면 자동으로 refresh 되기에 확인하는 방법이 조금 수월하다. 그래도 시간과 능력이 허락한다면 추후 올릴 최신 버전을 만들어 보도록 하자. 최대한 알아보기 쉽게 작성하도록 하겠다.