Place & Route

P&RPlace and Route의 약자로 회로를 배치하고 라우팅하는 과정을 의미합니다.

과정을 간략하게 설명하자면,

 

1. 주어진 논리 회로를 물리적인 위치에 배치하고, 신호가 흐르는 경로를 선정합니다.

2. 라우팅 단계에서 신호가 최적의 경로로 흐를 수 있도록 회로의 연결을 최적화합니다.

3. 이후에는 레이아웃 디자인을 최적화하고, 결과를 설계자의 의도와 맞는지 다시 검증하고 제품을 제작합니다.

 

 

P&R은 주로 Design house에서 진행하는 업무입니다.

Fabless에서는 원하는 칩에 맞게 RTL 설계를 진행한다면,

Design house에서는 구동시키는 조건에 맞게 Gate를 배치하고 VDD VSS를 배선하는 작업을 합니다.

Digital Chip Design

위 그림에서 붉게 마킹한부분 뿐만 아니라 Design house로 표시된 부분전체가 Innovus tool을 이용하여 작업하는 영역입니다.

 

이번 Auto P&R Posting은 Cadence의 Innovus를 사용합니다.

 

[pnr_108@npit-digital-rnd spi]$ pwd
/home/pnr_108/project/spi
[pnr_108@npit-digital-rnd spi]$ ls
lib  pnr  sim  syn

4가지 디렉토리를 설정한 이유는 작업 흐름 때문에
합성 단계에서 필요한 파일과 경로를 설정해두어야 사용하기 편하기 때문입니다.

 


설계자 제공 파일(설계자에게 받아야 하는)

netlist 파일 (Source file) - gate 변경
sdc 파일 - in/out put delay, CLK 정보
 

공정사 제공 파일(공정사에게 받아야 하는)

디지털 라이브러리 lib - gate가 어떻게 동작하는지(북극의 환경에서, 사막의 환경에서 Simulation)
lef 파일 - 정보 포함 (Width, Length) gate 자리에 tech.lef -> macro.lef 순서로 올려야 한다.(macro.lef에 있는 정보가 tech.lef에서 가져오는 것이 있기 때문입니다.)


 

 


Innovus 실행

 

[pnr_108@npit-digital-rnd ~]$ cd
[pnr_108@npit-digital-rnd ~]$ mkdir project
[pnr_108@npit-digital-rnd ~]$ ls
kopo_edu1  kopo_edu2  project
[pnr_108@npit-digital-rnd ~]$ cd project
[pnr_108@npit-digital-rnd ~/project]$ mkdir spi
[pnr_108@npit-digital-rnd ~/project]$ mkdir dtmf
[pnr_108@npit-digital-rnd ~/project]$ ls
dtmf  spi
[pnr_108@npit-digital-rnd ~/project]$ cd spi
[pnr_108@npit-digital-rnd spi]$ mkdir sim syn pnr
[pnr_108@npit-digital-rnd spi]$ ls
pnr  sim  syn
[pnr_108@npit-digital-rnd spi]$ mkdir lib
[pnr_108@npit-digital-rnd spi]$ ls
lib  pnr  sim  syn
[pnr_108@npit-digital-rnd spi]$ cd syn
[pnr_108@npit-digital-rnd syn]$ mkdir outputs
[pnr_108@npit-digital-rnd syn]$ ls
outputs
[pnr_108@npit-digital-rnd syn]$ cd outputs/
[pnr_108@npit-digital-rnd outputs]$ cp /home/pnr_108/kopo_edu1/syn/outputs/* ./
[pnr_108@npit-digital-rnd outputs]$ ls
spi_delays.sdf  spi_netlist.v  spi_sdc.sdc
[pnr_108@npit-digital-rnd outputs]$ pwd
/home/pnr_108/project/spi/syn/outputs

// [pnr_108@npit-digital-rnd lib]$ cp /home/pnr_108/kopo_edu1/edu_lib/* ./
// cp: omitting directory ‘/home/pnr_108/kopo_edu1/edu_lib/lef’
// cp: omitting directory ‘/home/pnr_108/kopo_edu1/edu_lib/lib’
// [pnr_108@npit-digital-rnd lib]$ cp -r /home/pnr_108/kopo_edu1/edu_lib/* ./

[pnr_108@npit-digital-rnd lib]$ mkdir lef lib
[pnr_108@npit-digital-rnd lib]$ ls
lef  lib
[pnr_108@npit-digital-rnd lib]$ cd lef
[pnr_108@npit-digital-rnd lef]$ cp /home/pnr_108/kopo_edu1/edu_lib/lef/* ./
[pnr_108@npit-digital-rnd lef]$ ls
all.lef
[pnr_108@npit-digital-rnd lef]$ cd ../
[pnr_108@npit-digital-rnd lib]$ cd lib
[pnr_108@npit-digital-rnd lib]$ cp /home/pnr_108/kopo_edu1/edu_lib/lef/lib/* ./
cp: No match.
[pnr_108@npit-digital-rnd lib]$ cp /home/pnr_108/kopo_edu1/edu_lib/lib/* ./
[pnr_108@npit-digital-rnd lib]$ ls
fast.lib                  ram_128x16A_slow_syn.lib     ram_256x16A_typical_syn.lib  slow.lib                 tpz973gtc.lib               tpz973gwc-lite.lib
pllclk_fast.lib           ram_128x16A_typical_syn.lib  rom_512x16A_fast_syn.lib     tpz973gbc.lib            tpz973gtc-lite.lib          tpz973gwc-lite_slow.lib
pllclk_slow.lib           ram_256x16A_fast_syn.lib     rom_512x16A_slow_syn.lib     tpz973gbc-lite_fast.lib  tpz973gtc-lite_typical.lib  typical.lib
ram_128x16A_fast_syn.lib  ram_256x16A_slow_syn.lib     rom_512x16A_typical_syn.lib  tpz973gbc-lite.lib       tpz973gwc.lib

[pnr_108@npit-digital-rnd lib]$ cd ../
[pnr_108@npit-digital-rnd lib]$ cd ../
[pnr_108@npit-digital-rnd spi]$ cd pnr
[pnr_108@npit-digital-rnd pnr]$ innovus

맨 뒤에 4줄만 보면 됩니다. 위쪽은 제 기억용이고, pnr 폴더에서 innovus를 입력해 실행하는 모습입니다.

 

Innovus started

 

로드 화면 / 초기 화면

 

 


1. Innovus Set-up

 

P&R 순서

P&R의 첫 번째 순서는 Setup입니다. Setup에서는 P&R에서 사용할 파일들(netlist, lib, lef 등)의 위치를 알려주고 이를 사용할 수 있게 만들어주는 작업입니다.

Design Import / Add Netlist

Netlist file을 불러옵니다. 그 후 아래 Technology/Physical Libraries에서 OA가 아닌 LEF를 클릭 후 lef 파일을 추가해 줍니다.


MMMC Setting은 조건 설정입니다.
 

fast.lib와 slow.lib를 사용하여 환경을 설정합니다.
fast.lib와 slow.lib 에서의 clk pulse의 rising / falling time은 다르기 때문에 이를 고려하기 위해 MMMC 설정에서 두 개를 고려합니다.

 


 

 

 

Setup


- Rising Edge에서 Data를 읽는다고 가정
- 읽는 Rising Time이 10ns 이내여야 한다. 
- worst_case에서 확인해야 Setup violation을 줄일 수 있다.


 
Hold


- Falling Edge에서 Data를 읽는다고 가정
- 읽는 Falling Time이 10ns 이상 유지되어야 한다. 
- 그렇기 때문에 안정적으로 고쳐줘야함
- Best_case = fast.lib를 이용한 min_delay = 시간이 짧다(=delay가 적다.)
왜냐하면 worst_case는 delay시간이 비교적 길어지니까 불안정한 Pulse 변경구간이 비교적 짧다.

MMMC 확장자는 .view

Setup확장자는 .globals

수정한 내용을 보려면 가장 최근 명령어 file에 들어가면 됩니다.
cmd뒤에 숫자가 가장 큰게 제일 최신 명령어이기 때문에 저는 cmd1로 들어갈 것입니다.

innovus 2> vi innovus.cmd1

들어가면 아래와 같이 코드가 나옵니다.

#######################################################
#
#  Innovus Command Logging File
#  Created on Sun May 19 10:43:46 2024
#
#######################################################

#@(#)CDS: Innovus v22.14-s061_1 (64bit) 10/18/2023 11:21 (Linux 3.10.0-693.el7.x86_64)
#@(#)CDS: NanoRoute 22.14-s061_1 NR231009-1305/22_14-UB (database version 18.20.617) {superthreading v2.20}
#@(#)CDS: AAE 22.14-s016 (64bit) 10/18/2023 (Linux 3.10.0-693.el7.x86_64)
#@(#)CDS: CTE 22.14-s019_1 () Oct 15 2023 21:00:30 ( )
#@(#)CDS: SYNTECH 22.14-s011_1 () Oct  3 2023 04:55:33 ( )
#@(#)CDS: CPE v22.14-s052
#@(#)CDS: IQuantus/TQuantus 21.2.2-s297 (64bit) Mon Oct 2 17:11:06 PDT 2023 (Linux 3.10.0-693.el7.x86_64)

set_global _enable_mmmc_by_default_flow      $CTE::mmmc_default
suppressMessage ENCEXT-2799
win
set enc_check_rename_command_name 1
save_global Default.globals
save_global Default.globals
set init_gnd_net VSS
set init_lef_file ../lib/lef/all.lef
set init_verilog ../syn/outputs/spi_netlist.v
set init_mmmc_file Default.view
set init_pwr_net VDD
init_design
~
~
~

"innovus.cmd1" 27L, 1204C

위 코드는 지금까지 Setup 설정을 한 것을 명령어로 변환하여 저장된 파일입니다.
 
그렇다면 위 명령어를 저장하여 따로 파일을 만들면, 할 때마다 Setup을 하지않고 하나의 file을 불러오면 됩니다.
 
아니면 그냥 위 파일 내 명령어들을 복사하여 작성해도 Setup 설정과 똑같이 나옵니다.

Setup 설정 완료된 Innovus 화면