Floorplan(.fp)과 IO Constraint(.io) 파일이란 무엇인가요?

Floorplan file(.fp)과 IO constraint file(.io)은 chip의 물리적 구조를 정의하는 파일입니다. Die 크기, macro 배치, IO pad 위치를 기술하며, P&R의 시작점이 됩니다. OpenROAD Floorplan 정의 방법...

Floorplan(.fp)과 IO Constraint(.io) 파일이란 무엇인가요?
Photo by Axel Richter / Unsplash

Floorplan file(.fp)과 IO constraint file(.io)은 chip의 물리적 구조를 정의하는 파일입니다. Die 크기, macro 배치, IO pad 위치를 기술하며, P&R의 시작점이 됩니다.

OpenROAD Floorplan 정의 방법 (OpenROAD)

OpenROAD에서 floorplan은 주로 initialize_floorplan 명령어로 정의. TCL 기반.

1. 기본 명령어 구조

initialize_floorplan \
  -die_area {llx lly urx ury} \
  -core_area {llx lly urx ury} \
  -sites <site_name>

2. 주요 정의 방식

① Die/Core Area 직접 지정 (µm 단위)

initialize_floorplan \
  -die_area  {0 0 200 200} \
  -core_area {10 10 190 190} \
  -sites CoreSite
Die area = 칩 전체 크기
Core area = 실제 셀이 배치되는 영역 (margin 고려)

② Utilization + Aspect Ratio로 지정

initialize_floorplan \
  -utilization 40 \
  -aspect_ratio 1.0 \
  -core_space 2.0 \
  -sites CoreSite
파라미터 설명
-utilization 코어 면적 대비 셀 점유율 (%)
-aspect_ratio H/W 비율 (1.0 = 정사각형)
-core_space Core와 Die 사이 margin (µm)

3. I/O Pin 배치

place_pins \
  -hor_layers metal3 \
  -ver_layers metal4

또는 pin 위치를 직접 지정:

place_pin \
  -pin_name clk \
  -layer metal4 \
  -location {100 0} \
  -pin_size {2 2}

4. Power Planning (PDN)

add_global_connection -net VDD -pin_pattern {^VDD$} -power
add_global_connection -net VSS -pin_pattern {^VSS$} -ground

set_voltage_domain -power VDD -ground VSS

define_pdn_grid -name "Core"
add_pdn_stripe -layer metal1 -width 0.17 -followpins
add_pdn_stripe -layer metal4 -width 1.6  -pitch 10.0 -offset 2.0
add_pdn_stripe -layer metal5 -width 1.6  -pitch 10.0 -offset 2.0
add_pdn_connect -layers {metal4 metal5}

pdngen

5. Macro 배치

place_cell \
  -inst_name sram_inst \
  -origin {50 50} \
  -orient R0

또는 macro_placement 자동 배치:

macro_placement \
  -halo {5 5} \
  -channel {10 10}

6. 전체 Floorplan Flow 예시

# 1. Read design
read_lef  tech.lef
read_lef  cells.lef
read_def  design.def   ;# or read_verilog + link_design

# 2. Floorplan 초기화
initialize_floorplan \
  -utilization 45 \
  -aspect_ratio 1.0 \
  -core_space 2.0 \
  -sites FreePDK45_38x28_10R_NP_162NW_34O

# 3. I/O Pin 배치
place_pins -hor_layers metal3 -ver_layers metal2

# 4. PDN 구성
source pdn.tcl
pdngen

# 5. 결과 저장
write_def floorplan.def

  • Synopsys IC Compiler와 비교하면 create_floorplaninitialize_floorplan 대응이라고 보면 됨

IO Constraint File 예제

OpenROAD에서 IO pin 위치는 io_placer가 담당하고, constraint는 별도 파일로 정의합니다.


1. IO Placer 기본 명령

place_pins \
  -hor_layers metal3 \
  -ver_layers metal4 \
  -corner_avoidance 0 \
  -min_distance 0.4

이건 자동 배치고, 위치를 직접 제어하려면 constraint 파일이 필요해.


2. IO Constraint File 형식 (.io 파일)

OpenROAD IOPlacer는 아래 두 가지 방식으로 constraint를 받아:

set_io_pin_constraint 명령 방식 (TCL)

# 특정 핀을 특정 edge에 배치
set_io_pin_constraint \
  -pin_names {clk rst_n} \
  -region top:*

set_io_pin_constraint \
  -pin_names {data_in[*]} \
  -region left:*

set_io_pin_constraint \
  -pin_names {data_out[*]} \
  -region right:*
Region 값 의미
top:* 상단 전체
bottom:* 하단 전체
left:* 좌측 전체
right:* 우측 전체
top:20-80 상단 중 20%~80% 구간

② 구간(interval) 지정

# top edge의 특정 좌표 구간에 배치 (µm)
set_io_pin_constraint \
  -pin_names {clk} \
  -region top:50-100

# bottom edge에 특정 핀 그룹 배치
set_io_pin_constraint \
  -pin_names {addr[0] addr[1] addr[2] addr[3]} \
  -region bottom:10-90

③ 정확한 좌표 지정 (place_pin)

핀 위치를 µm 단위로 직접 고정할 때:

place_pin \
  -pin_name clk \
  -layer metal4 \
  -location {100.0 0.0} \
  -pin_size {1.6 2.0}

place_pin \
  -pin_name rst_n \
  -layer metal4 \
  -location {120.0 0.0} \
  -pin_size {1.6 2.0}

3. .io Constraint 파일 분리 작성 (ORFS 스타일)

OpenROAD-flow-scripts에서는 보통 별도 파일로 분리해서 관리:

designs/
└── my_design/
    ├── config.mk
    ├── constraint.sdc
    └── io_constraints.tcl   ← 여기

io_constraints.tcl 예시:

# =============================================
# IO Pin Constraints
# Design : my_design
# =============================================

# Clock / Reset → top edge
set_io_pin_constraint -pin_names {clk}   -region top:45-55
set_io_pin_constraint -pin_names {rst_n} -region top:55-65

# Input data bus → left edge
set_io_pin_constraint \
  -pin_names {din[0] din[1] din[2] din[3] \
              din[4] din[5] din[6] din[7]} \
  -region left:*

# Output data bus → right edge
set_io_pin_constraint \
  -pin_names {dout[0] dout[1] dout[2] dout[3] \
              dout[4] dout[5] dout[6] dout[7]} \
  -region right:*

# Control signals → bottom edge
set_io_pin_constraint \
  -pin_names {wr_en rd_en cs_n valid} \
  -region bottom:*

config.mk에서 파일 참조:

export IO_CONSTRAINTS = $(DESIGN_DIR)/io_constraints.tcl

4. place_pins 호출 시 constraint 적용

# constraint 파일 먼저 source
source io_constraints.tcl

# 그 다음 place_pins 실행 → constraint 반영됨
place_pins \
  -hor_layers metal3 \
  -ver_layers metal4 \
  -min_distance 0.4
순서가 중요: set_io_pin_constraintplace_pins 순으로 실행해야 제대로 반영돼.

5. 핀 그룹핑 (같은 간격으로 묶기)

# 버스 핀들을 그룹으로 묶어서 균등 배치
set_io_pin_constraint \
  -pin_names {din[*]} \
  -region left:* \
  -group          ;# 그룹 내 pin들 인접 배치

6. 확인 명령

# 배치된 핀 정보 확인
report_io_pins

# GUI에서 확인
gui::show

💡 Synopsys ICC2와 비교

Synopsys ICC2 OpenROAD
IO 제약 파일 set_pin_physical_constraints set_io_pin_constraint
위치 지정 set_pin_physical_constraints -pin_name clk -layers {M4} -point {x y} place_pin -pin_name clk -layer M4 -location {x y}
Edge 지정 -side {top/bottom/left/right} -region top/bottom/left/right:range

IO Constraint 설명

IO pad는 chip의 4변(top, bottom, left, right)에 배치됩니다. 각 pad의 위치는 offset(해당 변의 시작점으로부터의 거리)으로 지정합니다. Corner에는 전용 corner cell을 배치합니다.

IO pad 배치 시 고려사항은 다음과 같습니다. 관련 logic block에 가까운 변에 해당 IO를 배치합니다. VDD/VSS pad를 signal pad 사이에 균일하게 분포시킵니다. Bonding diagram과 package pin assignment에 맞춰야 합니다. ESD 보호 구조가 포함된 IO cell을 사용합니다.

TCL 기반 Floorplan의 장점

현대 P&R tool은 floorplan을 TCL script로 기술합니다. Script 형태이므로 변수, 반복문, 조건문을 사용할 수 있어 parameterized floorplan이 가능합니다. 같은 script에 die size만 바꿔서 다른 variant를 만들 수 있습니다.

정리

Floorplan file은 die area, power grid, macro placement, blockage를 정의합니다. IO constraint file은 pad의 위치를 chip 변별로 지정합니다. 둘 다 P&R의 시작점이며, 이후 모든 단계의 품질에 영향을 미칩니다.

글 참여 도구

공유하기 토론 참여
이 글이 어떤 도움을 줬나요? 공개 숫자 없이 품질 개선 신호로만 사용합니다.

비공개 제보

오류나 추가 설명이 필요한가요?

공개 토론 대신 편집자에게 직접 보낼 수정·질문·다음 글 요청을 남겨주세요.

VLSI Korea

비공개 제보 보내기

작성한 내용은 [email protected]로 전달됩니다.

어떻게 받을까요?

익명 모드는 이름과 이메일을 보내지 않습니다. 다만 전송 서비스가 IP 등 기술 정보를 처리할 수 있어 절대적인 익명성을 보장하지는 않습니다.

ENGINEER DISCUSSION

현장에서는 어떻게 보고 계신가요?

동의, 반론, 보완 자료와 현업 경험을 남겨주세요. 답글 알림이 다시 토론으로 연결됩니다.

VLSI KOREA BRIEFING

매일, 중요한 신호만.

반도체 설계와 산업의 변화를 현직 엔지니어 관점에서 정리합니다. 무료이며 페이월이 없습니다.

FOR BUSINESS

이런 기술 콘텐츠가 필요하신가요?

기업용 기술 콘텐츠, 스폰서드 딥다이브, 사내 브리핑을 명확한 범위와 가격으로 진행합니다.

협업 방식·가격 보기 →
VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
MY VLSI

내 읽기 보관함

저장한 글과 읽던 글을 한곳에서 이어보세요.