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