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

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의 시작점이며, 이후 모든 단계의 품질에 영향을 미칩니다.

Enjoyed this article?

Get deep-dive semiconductor analysis and career insights delivered weekly. Free forever — no paywall, no upsell. Funded by sponsorships with a strict editorial firewall (Editorial Standards).

Work with me

Consulting · Collaboration · Support

Paid 1:1 technical consulting, speaker invitations, collaboration proposals, or just want to say thanks — all welcome.

View options →
VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
Support