검증

virtuoso,calibre를 이용하여 flatten netlist 만드는 방법

쥴리정 2024. 5. 10. 18:19

레이아웃 검증을 하다 보면 flatten netlist를 만들어야 하는 경우가 가끔 생긴다.

그 중 가장 큰 이유는 TOP level에서 LVS 검증 시 subcircuit name 이 중복되는 경우를 피하기 위함인데, 여러 부서에서 만든 블럭들을 합체하여 CHIP을 구성하는 경우나, IP를 외부에서 구입하여 사용할 경우가 대표적인 경우가 되겠다.

 

Virtuoso tool이 여러 라이브러리 중에 같은 이름의 instance가 있을 경우에는 cdl-out 시 이름을 자동으로 분리해 주기 때문에, virtuoso tool에서 전체 chip의 cdl netlist 바로 추출하여 LVS에 사용할 수 있는 경우라면 굳이 faltten netlist를 만들 필요는 없다. 

그러나 이 경우가 아닐 때 내가 LVS 검증 완료한 cdl netlist를  flatten netlist로 만드는 방법을 알아보자.

 

<Virtuoso 에서 flatten netlist 만들기>

내가 검증한 블럭의 netlist를 virtuoso에서 cdl-out하여 다른 수정사항 없이 바로 검증하였다면 해당 블럭의 faltten netlist를 virtuoso에서 바로 뽑을 수 있다.

먼저 평소대로 해당 블럭의 netlist를 한 번 cdl out을 통하여 뽑은 후 CIW 창에 cdlNetlistType 을 입력후 엔터를 치면 아마 hnl 이라는 output이 출력될 것이다. 이를 fnl로 바꿔 주고 cdl out을 하면 flatten netlist를 뽑을 수 있다.

바꿔주는 방법은 vi 에디터로 .simrc 에 아래의 두 줄을 추가해 준다.

.simfile은 virtuoso 가 cdl-out을 실행 할 때 불러오는 파일로, .cdsinit 파일과 같은 위치에 있으면 된다. 

 

.simrc 파일에 추가

 

      cdlNetlistType = `fnl

      auCdlFnlRetainPathInInstAndNets  = t

 

Virtuoso를 다시 띄우거나 .simrc 파일을 CIW창에서 로드한 후 다시 cdl out을 실행하면 flatten netlist로 뽑힐 것이다.

 

<calibre 로 flatten netlist 만들기>

Calibre로 LVS를 clear하였다면 svdb로부터 flatten netlist를 추출할 수 있다.

먼저, flatten netlist를 추출할 디렉토리를 만들고 LVS rule 파일을 복사해 온다.

calibre LVS rule file에 MASK SVDB DIRECTORY가 없거나 SI로 지정되어 있다면 "MASK SVDB DIRECTORY "svdb" QUERY CCI" 로 바꿔준 후 LVS를 실행한다.

이렇게 되어 있다면 아래와 같이 수정한다.

 

LVS 완료 후 svdb 디렉토리가 있는 터미널 창에서 아래의 명령어로 calibre를 실행한다.

 

calibre -query svdb

 

calibre를 실행하면 아래와 같이 출력될 것이다.

 

이 상태에서 "layout netlist hierarchy flat" 입력

 

OK 메세지 출력 후 "layout netlist write filename" 을 입력하면 filename(아래의 경우 test.flatten)으로 flatten netlist가 저장이 된다.

 

그럼 "terminate"를 입력하여 calibre를 빠져나온 후 출력된 flatten netlist로 LVS를 다시 실행하여 확인해 본다.

 

Calibre 라이센스가 있을 경우에는 위의 방법으로 flatten netlist를 만드는 것이 가장 간단하다.

 

 

라이센스 등의 문제로 위의 virtuoso나 calibre 를 사용할 수 없을 때에는?

Flatten 하는 프로그램을 자신있는 랭귀지로 만드는 것이 속편한 방법.

하지만 블럭이나 IP 사이즈가 커질수록, hierarchy depth가 많아질수록 코드를 검증하기 어려워진다.

IP 사이즈가 아주 큰 경우에는 같은 알고리즘으로 작성하였더라도 flatten하는 속도에도 많은 차이가 난다.

테스트 결과 Phython 보다는 PERL이 훨씬 빨랐다. 아마 C로 작성 가능하다면 C로 작성하는 것이 속도면에서는 가장 유리할 듯.

간단한 블럭은 어려움 없이 검증할 수 있으므로 업무에 한가한 시간이 있다면 한 번 짜보는 것도 권해본다.