2023년 12월 30일 토요일

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [6]/ 자동 배선(Auto-Placement)

ETRI 0.5um CMOS Std-Cell DK 예제: ALU8 [6]

VI. 자동 배선(Auto-Routing)
    VI-1. QRouter: 자동배선 도구
    VI-2. 자동배선에 영향을 주는 인자
    VI-3. 자동 배선에 실패 했을 때 조치
    VI-4. 배선이 완료된 DEF

----------------------------------------------

VI. 자동 배선(Auto-Routing)

자동 배선(auto-routing)은 표준 셀이 배치된 DEF 네트리스트를 읽어 배선을 실시한다. QFlow에 자동배선을 수행하는 명령은 아래와 같다.

    % qflow route ALU_wrapper


VI-1. QRouter: 자동배선 도구

QFlow의 자동 배선 도구는 QRouter 다[link]. 표준 셀들이 배치된 영역 위에 각 셀들의 핀들 사이를 미로찾기 방식으로 배선을 수행 한다.

[QFlow]Running qrouter 1.4.86.T
    qrouter -noc  -s ALU_wrapper.cfg
    =========================
    ./layout/ALU_wrapper.def (Unrouted)
      |
    ./layout/ALU_wrapper.cfg
      |
+-----V-------------------------+
|QRouterRoute         <--------- [Std-Cell LEF/Route Rule]
|                               | 
|    -> Routed DEF  -------------->./layout/ALU_wrapper.def (Routed)
+---------------+---------------+
                |
                V
            Migration
    =========================

배선에 사용할 메탈 층의 선폭(width)과 간격(spacing)은 공정의 디자인 룰(레이아웃을 그리는 기하학적 규정[link])을 따른다. 이 배선의 규칙은 표준 셀의 LEF에 기술되어 있다. 표준셀 LEF는 셀들의 물리 정보가 담겨 있다. 셀의 크기, 원점 죄표, 배선 불가영역(OBS, obstruction)등이 표시된다. 표준 셀 내부에서 사용된 메탈 선의 좌표로 외부의 자동 배선 도구가 배선에 피해야 하는 역역임을 나타낸다. 자동 배선은 설계자가 간여할 수 있는 부분은 없다. 배선에 사용할 많은 수의 셀과 엄청난 량의 배선 갯수를 감안 하면 비록 자동화 도구가 미덥지 않더라도 맞겨두자.

VI-2. 자동배선에 영향을 주는 인자

자동 배선에 영향을 주는 인자는 셀 배치 밀집도와 배치 가로세로비다. QFlow의 기본 밀집도는 1.0 이며 가로세로비는 0.75다. 이 배치 인자를 바꾸려면 QFlow 프로젝트 파일 project_vars.sh에서 initial_delsity 값을 변경한다. 배치 가로세로비는 .par 파일에서 TWMC*chip.aspect.ration 값을 변경한다.

VI-3. 자동 배선에 실패 했을 때 조치

자동 배선도구는 배치도구에서 출력한 셀들의 배치 좌표와 연결관계만 기록된 미배선 DEF(unrouted DEF)를 가지고 배선을 실시한다. 배선은 표준 셀의 OBS영역을 지날 수 없다. 표준 셀들이 밀집도(density)에 따라 배선이 가능한 영역이 확보된다. 자동 배선에 실패하면 취할 수 있는 조치는 밀집도를 낮춰 배치부터 다시해줘야 한다.

./synthesis/ALU_wrapper.rtlnopwr.v
      |
./layout/ALU_wrapper.cel
      |
+-----V-------------------------+
|GrayWolfPlacement  <---------------------+
|    -> Unrouted DEF            |           |
+-----------------+-------------+  [project_vars.sh]
                  |                [  initial_density=0.66]
                  |                [ALU_wrapper.par]
      +-----------+                [  TWMC*chip.aspect.ratio:1.0]
      |                                     |
+-----V-------------------------+           |
|QRouterRoute                 |           |
|    -> Routed DEF              |           |
+---------------+---------------+           |
                |                           |
      +--------(?)-[Fail]-------------------+
      |
      V
  Migration

예제의 경우 QFlow의 배치 기본 값을 적용하면 배선에 실패한다. 밀집도와 비율을 각각 0.62와 1.0으로 변경 후 배치를 다시 실시하면 배선에 성공할 것이다.

--------------------------------
Qflow project setup
--------------------------------
Technology set to etri050 from existing qflow_vars.sh file
Regenerating files for existing project ALU_wrapper

Running qrouter 1.4.86.T
qrouter -noc  -s ALU_wrapper.cfg
*** Running stage1 routing with defaults
Nets remaining: 300
Nets remaining: 200
Nets remaining: 100
Nets remaining: 90
Nets remaining: 80
Nets remaining: 70
Progress: Stage 1 total routes completed: 798
Failed net routes: 63
*** Running stage2 routing with options mask 10, effort 10
Nets remaining: 60
Nets remaining: 50
.......
Nets remaining: 4
Nets remaining: 2
Nets remaining: 1
Progress: Stage 3 total routes completed: 3018
No failed routes!
*** Writing DEF file ALU_wrapper_route.def
Final: No failed routes!
*** Writing RC file ALU_wrapper_route.rc
DEF2Verilog -v .../synthesis/ALU_wrapper.rtlnopwr.v \
    -o .../synthesis/ALU_wrapper_postroute.v \
    -p vdd -g gnd  -l .../etri050_stdcells.lef ALU_wrapper_route.def

VI-4. 배선이 완료된 DEF

배선이 완료된 DEF는 셀의 배치와 핀의 위치에 변화가 없으나 NETS에 메탈 배선층과 접점(VIA)이 추가된 것을 볼 수 있다. 

NETS 380 ;
- _28_
  ( _309_ Y ) 
  ( BUFX2_insert22 A ) 
  ( BUFX2_insert23 A ) 
  ( BUFX2_insert24 A ) 
  ( BUFX2_insert25 A ) 
+ ROUTED metal2 ( 55800 18315 ) M3_M2 
  NEW metal3 ( 55800 18315 ) ( * 18300 ) ( 54300 * ) ( * 18315 ) M3_M2 
  NEW metal2 ( 57600 33915 ) M3_M2 
  NEW metal3 ( 57600 33915 ) ( 57000 * ) M3_M2 
  NEW metal2 ( 57000 33900 ) ( * 27600 ) M3_M2 
  NEW metal3 ( 57000 27600 ) ( 55200 * ) M3_M2 
  NEW metal2 ( 55200 27600 ) ( * 21600 ) M3_M2 
  NEW metal3 ( 55200 21600 ) ( * 21000 ) ( 53100 * ) ( * 20700 ) ( 52800 * ) M3_M2 
  NEW metal2 ( 52800 20700 ) ( * 19500 ) M3_M2 
  NEW metal3 ( 52800 19500 ) ( 54300 * ) M3_M2 
  NEW metal2 ( 54300 19500 ) ( * 18300 ) 
  NEW metal2 ( 56400 33915 ) M3_M2 
  NEW metal3 ( 56400 33915 ) ( * 33900 ) ( 57000 * ) 
  NEW metal2 ( 56700 36600 ) ( * 33900 ) M3_M2 ;

- _28__bF$buf0
  ( _371_ B ) 
......
- oACC[7]
  ( PIN oACC[7] ) 
  ( _626_ Y ) 
+ ROUTED metal2 ( 16200 59400 ) ( * 57600 ) M3_M2 
  NEW metal3 ( 16200 57600 ) ( * 56700 ) ( 16500 * ) ( * 56685 ) M3_M2 ;
END NETS

----------------------------------------------

[목차][이전][다음]


댓글 없음:

댓글 쓰기