Verification 7

[Calibre] Sliced DRC - 브레인스토밍

주로 IP 단위의 layout을 담당하고 있기 때문에 cadence 社의 innovus나 synopsys 社의 icc 툴에 대해선 거의 모른다. 하지만 최종 단계인 chip top level에서의 검증을 도와주는 경우가 많은데 어떤 수정이 있은 뒤 DRC 검증을 위해 몇 시간을 기다려달라는 얘기를 많이 듣게 된다. 최종 검증 때 혹은 그 이외의 상황에서도 정식 방법으로는 전체 검증을 다시 해야 하는 게 맞고, 그 절차는 바뀌면 안 된다.(골든 룰!) 하지만 DRC를 하나하나 해결해나가는 상황, 또 매우 적은 에러가 있으며 어떤 방식으로 그 에러가 해결되는지 시도해 봐야 하는 상황에서도 몇 시간씩 걸려서 결과를 보는 것은 비효율적이라 생각한다. 기존에도 이런 runtime 이슈로 몇 가지 시도를 해왔고, ..

Layout/Verification 2023.11.11

[Perl] DRC error 항목 select check

verification 과정 중 하나인 DRC (Design Rule Check)는 DB가 큰 경우 많은 시간이 걸리게 된다. 최종 DB의 검증을 위해서는 모든 DRC rule을 체크해야 하지만, 아직 수정 중이거나 특정 항목만 체크해도 되는 경우에는 "DRC SELECT CHECK " 방법으로 검증 시간을 단축할 수 있다. 처음부터 특정 항목만 찾아서 검증할 수 있지만, 한번 DRC 돌고난 report 파일을 가지고, 에러가 발생한 RULE만 골라내서 돌려보자. 그 방법은 여러가지가 있고 선택하기 나름이지만 이번에는 Perl script 를 통해 작성해 보자. 코드는 아래와 같다. #!/usr/bin/perl -w use File::Find; use strict; use warnings; my ( $r..

[SVRF] PAD to clamp (diode) path 저항 계산 - 3편

2편에서 추출한 LPE 결과가 있다면 이제 끝이 보인다. 추출된 파일은 3개의 파일로 구성되는데 1. out.pex.netlist 2. out.pex.netlist.pex 3. out.pex.netlist.TEST.pxi 로 구성되며, 1번 파일에는 DB의 device들이 있으며 2번 파일에는 modeling 부분이 subckt으로 지정되어 있다. 마지막으로 3번에는 2번 파일에서 정의된 modeling 부분을 instance call 하게끔 되어 있다. 여기서 필요한 부분은 3번 파일 부분으로 instance call 부분을 살펴보면 한쪽은 AVDD08이고, 나머지는 VIA1에 붙어있는 M1이 port로 지정돼 있다. N_AVDD08_R111@XXX_pos와 같은 형식인데 sed 명령어로 해당 pos에..

Layout/Verification 2017.02.06

[SVRF] PAD to clamp (diode) path 저항 계산 - 2편

앞서 1편에서는 원본 DB에서 원하는 NET만 추출하는 것을 해 보았다. 이번 편이 가장 복잡한데, 구상한 알고리즘대로 차례대로 진행해 보겠다. 먼저 원하는 NET을 추출한 DB의 경우 PAD에 Pin이 있을 테고, 그와 연결된 Metal, Via가 있을 것이다. 물론 반대쪽 끝에는 pin이 없다. 원하는 NET의 LPE를 추출할 것인데, LVS를 Correct 시킬 필요는 없다. svdb만 만들어지면 되므로 가짜 CDL netlist를 작성해 보자. 작성한 TEST.cdl 파일은 아래와 같다. .SUBCKT TEST AVDD08 R111 AVDD08 bottom rm1 a=1 .ENDS rm1 (Metal1 저항) 이 하나 놓인 가짜 CDL netlist다. 껍데기라지만, 실제 DB에 device가 하..

Layout/Verification 2017.02.06

[SVRF] PAD to clamp (diode) path 저항 계산 - 1편

ESD (Electro Static Discharge) spec을 만족시키기 위해서 PAD to Clamp 혹은 PAD to Primary Diode까지의 저항값을 구할 필요가 있다. 해당 값이 너무 크게 되면 Core device에 충격이 가해져서 chip이 깨질 수 있다. 정확한 값을 구하는 것은 RedHawk의 Totem tool을 이용하는 경우가 많지만, 세팅과 실행에 많은 Runtime이 소모되고 한 번에 통과하지 못할 경우 그 iteration은 정말 지옥 같다. 그래서 SKILL을 이용해 대략적인 저항값만이라도 계산하도록 하여 빠른 결괏값을 도출하고자 하였다. 저항값이 높은 부분을 우선적으로 고치고 최종적인 확인은 정해진 Tool을 이용하면 될 것이다. 현재 사용하는 공정은 대부분 9 Met..

Layout/Verification 2017.02.06

[dbdiff] create Calibre XOR (gds,oasis) rule

요즘은 DB의 용량이 커지다 보니, sub block 은 크게 상관없지만, TOP level로 갈수록 GDS format 보다는 OASIS format을 좀 더 사용하고 있다. metal revision 등을 위해 OASIS vs OASIS 혹은, GDS vs OASIS 해야 할 경우가 있는데 compare_gds 명령어로는 OASIS DB 인식이 되지 않았다.간단한 해결 방법이 있는데, gui 환경의 fast XOR을 이용하는 것이다. gui를 띄워서 해야 하는 번거로움이 있지만 동작은 잘한다. gui 없이 하는 방법이 있는데 아래 영상에서 잘 소개되어 있다. 사실 영상 후반부에 설명되어 있지만 gui로 하는 것과 같은 방식이며, 알고 나면 간단히 dbdiff 명령어로 해결할 수도 있다. dbdiff ..

Layout/Verification 2017.01.16

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

예전 작성했던 글중 인기 많았던 씨리즈(?)인 원클릭으로 LVS 돌리는 방법이다. 역시나 몇 년이나 지난 만큼 최근 사용하는 코드는 많이 업그레이드 되었지만, 기록 차원에서 남겨둔다. 새로운 강좌글을 작성할 때 기초 단계 정도로 참고할 수 있을 것 같다. 방식은 export GDS, CDL 등과 유사하다. template 파일을 작성하고 ipc (inter process communicate)를 통해 calibre LVS를 실행하게 된다.procedure(run_lvs() prog(() cv=hiGetCurrentWindow()->cellView _RUNDIR=getWorkingDir() ipcProcess=ipcBeginProcess(sprintf(_tmp, "mkdir ..