1. Innovus Import Design 과정
1. innovus 실행 후 File - import design - Verilog 에서 경로 설정하여 netlist 파일 추가
![](https://blog.kakaocdn.net/dn/QFNQB/btsHYL6K6KX/pvdz95C4sCeDglqNK1Zod0/img.png)
2. Techgnology/Physical libraries 탭에서 LEF Files 선택 후 경로 찾아 파일 추가
![](https://blog.kakaocdn.net/dn/bSLftj/btsHX5Se8cT/IBCnk9X8YzTrV1amXQgt80/img.png)
3. Power 탭의 Power nets와 Ground nets 설정
![](https://blog.kakaocdn.net/dn/b3UKxn/btsHYXy4xU2/fkJiJk3pFerHPqcdH1gJk1/img.png)
4. Analysis 탭의 Create~~눌러 실행 후 Library Sets 더블클릭 - Timing Library Fiiles의 Add 클릭 후 fast.lib 추가
- fast.lib은 타이밍이 빨라 올라가는 시간이 짧음 - 이름을 fast timing으로 설정
![](https://blog.kakaocdn.net/dn/VS41F/btsHXCiCUXv/GMNUj9VoSUyn4aPQ91qYkK/img.png)
![](https://blog.kakaocdn.net/dn/kApLS/btsHXmmLVj6/EG231fVD8XitdSXXEU6oh1/img.png)
![](https://blog.kakaocdn.net/dn/btVVgE/btsHYE7HXRM/3LRVO5kAKJmRkJ6l9QW1QK/img.png)
![](https://blog.kakaocdn.net/dn/1Q6ZG/btsHYXMBNxm/hJMg4KeF7IjwzKzZg2mCnK/img.png)
5. Library Sets 더블클릭 - Timing Library Fiiles의 Add 클릭 후 slow.lib 추가
- slow.lib은 타이밍이 느려 올라가는 시간이 길어짐 - 이름을 slow_iming으로 설정
![](https://blog.kakaocdn.net/dn/lDlmU/btsHYTp0Mjl/M1QkYtX6pNwgRvpEzjygk1/img.png)
![](https://blog.kakaocdn.net/dn/b0CGmo/btsHYMYRnbG/Ic5CpFSKKikPKDPreC2jsk/img.png)
6. Delay Corners 더블클릭하여 실행 후 min_delay 로 이름 설정
- fast timing으로 실행 시 delay가 적어지므로 fast timing 사용
![](https://blog.kakaocdn.net/dn/xsxA5/btsHW3gNsPr/I1WS3d8nfnCGVPxjoPhask/img.png)
7.Delay Corners 더블클릭하여 실행 후 max_delay 로 이름 설정
- low timing으로 실행 시 delay가 길어지므로 slow timing 사용
![](https://blog.kakaocdn.net/dn/pEEqs/btsHYKtc8VX/6Y66Lop8i5wgRWgzAxLwZk/img.png)
8. Constraint modes 더블클릭 후 파일과 이름 설정
![](https://blog.kakaocdn.net/dn/CG7p7/btsHWBE1DRt/3zkP30CpyHIr9YF4ZG7QT1/img.png)
![](https://blog.kakaocdn.net/dn/mzvXQ/btsHXtTy4Ps/MNNtNDzSVHwUxCWhHT1Gtk/img.png)
9. 좌측의 Analysis Views 더블클릭 후 설정
- min delay의 경우 동작 속도가 빨라지므로 best_case로 설정
- max delay의 경우 동작 속도가 느려지므로 worst_case로 설정
![](https://blog.kakaocdn.net/dn/bFVXep/btsHWwReVsB/cdSuW1TbbhpwJ1k19naxrk/img.png)
![](https://blog.kakaocdn.net/dn/IuEEV/btsHXjXYxpQ/v4HgkFlQgnR8z3nVSjrXUk/img.png)
10. Setup과 Hold 설정
- Hold time
- Rising Edge 후 상태를 읽어들이는 데 필요한 최소 시간
- Holdtime이 커지면 Hold Time Violation이 발생하기 쉬워짐 -> Holdtime을 줄이기 위해 BestCase로 설정해야 유리
- Setup time
- Data를 읽어들이기 위해 switching이 발생하기 전까지 필요한 최소 유지 시간(FlipFlop이 준비할 시간)
- Setuptime이 작아지면 Setup Viloation이 발생하기 쉬워짐 -> Setuptime을 늘리기 위해 WorstCase로 설정해야 유리
11. Save & Close 후 Design Import 저장
![](https://blog.kakaocdn.net/dn/bP5uyk/btsHXPWlInG/upXYuu7KBhpIfdyWKgNOtk/img.png)
12. 저장 후 OK - 창 확인
![](https://blog.kakaocdn.net/dn/HbJ3L/btsHXuZf8zN/FZl6EKERdyq6UZpeQ2kN3K/img.png)
![](https://blog.kakaocdn.net/dn/clxPJ4/btsHYaMIPbL/8SZlq0Q8sQifINhKfqQKBk/img.png)
2. Floor Plan
1. Floor Plan - Specify Floor Plan
- Cell과 Core 외에 빈 자리에 Routing을 위한 공간을 남기기 위해 Core Utilization을 0.7로 설정 -> 자동으로 값 변경됨
- Core Boundary로 사용하는 파트는 Core Margins by: 아래에서 적용
![](https://blog.kakaocdn.net/dn/d44og0/btsHX22h94W/FtYlFWcQix1Fmp1gJRhaN0/img.png)
2. 적용 후 OK
![](https://blog.kakaocdn.net/dn/dGtpJ6/btsHWyn0Cno/Ze6pHYBL2tkxGkDtKEUez0/img.png)
3. Power Planning & Power Routing
1. Connect Global nets를 실행하기 위해 Power- Connect Global Nets
![](https://blog.kakaocdn.net/dn/lrAAW/btsHXDhzbxH/mekk3fZzZke32gQnYcyDrK/img.png)
![](https://blog.kakaocdn.net/dn/SCF5W/btsHXFsT6dg/Q9NEY06Ifu55sgfEPqH4BK/img.png)
2. VDD 와 VSS을 각각 Pin Name과 To Global Net에 모두 입력 후 Add to List
![](https://blog.kakaocdn.net/dn/xXn4E/btsHYdJqvrU/vSmQJcckg6S85pFreIQje1/img.png)
3. Edit - Pin Editor
![](https://blog.kakaocdn.net/dn/Wr3Sd/btsHYIvvPd1/vKY9izYiCZ5kR9VLkN1uG0/img.png)
![](https://blog.kakaocdn.net/dn/ehIi9H/btsHX2835so/XtAFaWaW4pc5tKtGkWlxH0/img.png)
4. reg0~reg30은 spread - center에 배치
![](https://blog.kakaocdn.net/dn/b1Tvry/btsHYW72nM9/MpCEJSdXlfYVk6JE0ervEK/img.png)
![](https://blog.kakaocdn.net/dn/cvKtus/btsHYppoU6m/PGy5XSufQzV5yGybGwknX0/img.png)
5. 나머지 핀은 왼쪽에 배치
![](https://blog.kakaocdn.net/dn/lUnpq/btsHYVahCUb/vvFGzU4V6GLAy1soMQnSv0/img.png)
![](https://blog.kakaocdn.net/dn/cwTxvC/btsHXgtn769/k1K9kCtpiY0dJ8q8QK4fx1/img.png)
6. Power - Power Planning - Add Ring으로 실행 후 VDD VSS 입력, Width, Spacing, Offset 설정
- Width: VDD와 VSS의 선폭
- Spacing: VDD와 VSS의 간격
- Offset: Core로부터의 거리
7. Add Ring 설정 후 OK
8. Route - Special Route: 각 Cell에 Power Line을 라우팅하기 위한 작업
![](https://blog.kakaocdn.net/dn/qmrPc/btsHYvJQIb2/p1osuRwIC7aU1jlkXblKyK/img.png)
4. Placement
1. Place - Place Standard Cell
![](https://blog.kakaocdn.net/dn/cyckvt/btsHW6q5Ubp/5Dn1O4KCkXbzbGJGjFRT8K/img.png)
2. OK 클릭
![](https://blog.kakaocdn.net/dn/vfp8b/btsHWT6vPa3/YxyIogtUn4MDlP2DBbLOak/img.png)
3. 결과 확인
![](https://blog.kakaocdn.net/dn/oO1rv/btsHW6kiPcK/SXlJ2AOvQoxngsgyQUzsH1/img.png)
![](https://blog.kakaocdn.net/dn/cRIiZv/btsHYNjauWN/Jy3sWJkHOjLa39kxxL7MK1/img.png)
![](https://blog.kakaocdn.net/dn/bu6PzZ/btsHYIhXVm5/nXy3g4XQ15kTNAffOOgLPK/img.png)
4. Place-Check Placement로 리포트 생성
![](https://blog.kakaocdn.net/dn/brDTGW/btsHW7Dq4PE/zc5E3aKQDN254oyr9uixF0/img.png)
![](https://blog.kakaocdn.net/dn/UwjKG/btsHW9BfqZg/2PjEBokFXWXsvQh7kBqhjk/img.png)
5. CTS(Clock Tree Synthesis) & Route
- CTS: 모든 회로 노드에서 클럭 신호를 동일한 시간에 받을 수 있도록 하여 회로의 안정성과 성능를 보장하는 과정
- 진행 순서
- 클럭 노드 선정: 클럭 신호의 발생 지점과 도달 지점 선택
- 클럭 경로 생성: 클럭 노드 사이에 경로를 생성
- 클럭 노드 배치: 경로에 따라 클럭 노드를 배치
- 클럭 트리 라우팅: 클럭 노드 사이에 라우팅을 수행
1. ECO - Optimize Design
![](https://blog.kakaocdn.net/dn/bQxfnK/btsHXgtpR6I/tbAes1zfKY0vIlpoPdlK50/img.png)
- Pre-CTS: Routing 이전에 임의로 계산하여 CTS작업 수행
- Post-CTS: Pre-CTS 후 Routing 이후에 진행하는 CTS 작업
- Post-Route: CTS 이후 최적화 작업
2. Pre-CTS 수행 후
![](https://blog.kakaocdn.net/dn/IqyCM/btsHW65yjhy/MqVCkiuJnooYY1F6vhEjbk/img.png)
![](https://blog.kakaocdn.net/dn/bpeN25/btsHYZRcvv3/QMhkUpotWi24x0IAEme9Wk/img.png)
3. Route - NanoRoute - Route - OK
![](https://blog.kakaocdn.net/dn/ngoWg/btsHWTMg8n0/hbE6fShAugkUgEAI9HWlok/img.png)
4. NanoRoute 종료 후 레이아웃
![](https://blog.kakaocdn.net/dn/Jf568/btsHXPovh9G/2CkdCqKZHiX7Uxzaw2NKzk/img.png)
5. Post CTS 진행
![](https://blog.kakaocdn.net/dn/1uaC1/btsHYdCHqQP/D2jMgRMKCGi5V3KKkkJw71/img.png)
6. Post CTS 진행 후 결과
![](https://blog.kakaocdn.net/dn/cM2U5E/btsHXwpdt7U/W5Mh5IE2W7ht7lbhpQFl5K/img.png)
![](https://blog.kakaocdn.net/dn/bRXBt2/btsHYvQDhea/DYrGhnWklN2rgRvCdEkqm0/img.png)
7. Post-Route 이전에 Route 생성을 다시 하기 위해 Route-NanoRoute-Route
8. Post-Route 이전에 세팅값 변경을 위해 Set Mode-Specify Analysis Mode를 On-Chip Variation으로 변경
On-Chip Variation: Chip에서 Violation이 있는 지 확인하기 위한 세팅
![](https://blog.kakaocdn.net/dn/8KLAx/btsHYcDMDpn/jkmclu6dobSL4M62QsupK0/img.png)
9. 위 세팅 변경 후 Post-Route 진행
![](https://blog.kakaocdn.net/dn/bFqwJm/btsHYoKNzSd/cVYBR7KYeXVnCvnbQbf4C1/img.png)
10. 실행 결과
![](https://blog.kakaocdn.net/dn/bL45Bk/btsHYWNIfNX/vduAIQJvdk91khGerQ9y7K/img.png)
Timing Check
1. Timing - Report Timing에서 Pre-CTS, Post-CTS, Post-Route 단계를 진행하며 각각 타이밍 확인 필요
![](https://blog.kakaocdn.net/dn/dpkvV5/btsHW9gXa4s/XbjWDvgIs32mjDonMKpxNK/img.png)
2. mobaxterm화면에서 timingReports 디렉토리 내의
gzip -d simple_spi_preCTS_all.tarpt.gz
gzip -d simple_spi_postCTS_all.tarpt.gz
gzip -d simple_spi_postRoute_all.tarpt.gz
을 입력하여 각각의 압축파일을 해제
3. mobaxterm 화면에서
vi -d simple_spi_preCTS_all.tarpt.gz
vi -d simple_spi_postCTS_all.tarpt.gz
vi -d simple_spi_postRoute_all.tarpt.gz
를 입력하여 각 파일을 열고 각 단계에서의 Stack Time 확인
4. Slack Time이 양수가 나와야 정상
5.잘못된 부분이 있다면 해당 net을 확인한 뒤 Layout 탭 옆의 + 버튼을 눌러 Design Browser 열기
![](https://blog.kakaocdn.net/dn/bnFAOZ/btsHXOJVPMI/CL3YoZhmzTRyNASfHzcxC0/img.png)
6. 잘못된 Net 번호를 확인 후 Net으로 변경해 n_번호(n은 net을 의미)입력 후 우클릭 - Highlight로 색상 변경하면 해당 net 확인 가능
![](https://blog.kakaocdn.net/dn/btAmL7/btsHXhy3WJp/4OBjhpdfGoqwCKlFC58QJ0/img.png)
![](https://blog.kakaocdn.net/dn/d0rwh1/btsHWwcFWcf/vwuKxX0B8iUjdokIkNi1Z0/img.png)
![](https://blog.kakaocdn.net/dn/RB2l8/btsHXnF1ivM/0eHzputmCHXZhaDt0ZIyfk/img.png)
![](https://blog.kakaocdn.net/dn/uqc6L/btsHYFrZO0l/KF68rZEqWmlyrK5KNTeTok/img.png)
7. Layout 탭으로 돌아와서 F12 버튼 입력 시 아래 사진과 같이 표시 모드 전환
![](https://blog.kakaocdn.net/dn/E1m4e/btsHXCbRW2A/VoSfIidMFKxJi5OmNMfoF1/img.png)
6. Filler Insert
- 빈 자리를 채우거나 없애는 과정 필요
1. Place - Physical Cell - Add Filler
![](https://blog.kakaocdn.net/dn/be2Axp/btsHWvrhxFR/Iexr78dLC4pNirnxBtQCh1/img.png)
2. 필러 배치 순서는 큰 필러 -> 작은 필러 순으로 배치 권장
![](https://blog.kakaocdn.net/dn/dj9jQY/btsHYvJQ1s6/wS8g8OW7ow0Hobb0RvzTo1/img.png)
3. select를 눌러 필러 추가
![](https://blog.kakaocdn.net/dn/bgXUNB/btsHW5saG1t/hnJKkM8KAo7ZsEFWYMju2K/img.png)
![](https://blog.kakaocdn.net/dn/Kj12C/btsHX31eidZ/4KI9LVMEKYj9xj8ONylMKk/img.png)
4. close 후 ok클릭하여 필러 배치 확인
![](https://blog.kakaocdn.net/dn/bpm4GD/btsHXlOWCfF/rBftKDnqaoAnEN4ADxkze1/img.png)
최종 단계: Verify DRC
1. Verify - Verify DRC
![](https://blog.kakaocdn.net/dn/cKcPds/btsHXatmEG8/1KVEuLPKkjaJuwErQVB4ik/img.png)
2. mobaxterm 창에서 0 Violations 확인
![](https://blog.kakaocdn.net/dn/lNxQk/btsHW5FHdp0/iDeU8OHoIsnS42HydmxzOk/img.png)
3. Violation이 발생했다면 Violation Browser 탭을 열어 확인 가능
![](https://blog.kakaocdn.net/dn/bfvMJ6/btsHXatmHAu/iK9Bze1vlA1EBcrB0ggqfk/img.png)
![](https://blog.kakaocdn.net/dn/HXJVr/btsHX5Sgbrb/5FgskNovq5VnycDVdq5pb0/img.png)
- 우측 상단의 3D 보기를 통해 내부 회로의 Short 여부 등 확인 가능
SDF, Netlist, GDSII 파일 저장
- SDF 파일과 Netlist 파일: 설계자에게 Post-Layout Simulation을 진행하기 위해 보내지는 파일
- GDSII파일: 시뮬레이션, Time Vilation / DRC 에 문제가 없으면 최종으로 설계자에게 보내지는 파일
- P&R 전후의 파일 차이
- Netlist 파일
- P&R 전: CTS 고려 X
- P&R 후: CTS 진행 후의 Netlist - SDF 파일
- P&R 전: 셀에 대한 Delay만 존재
- P&R 후: Placement&Routing의 진행으로 인해 Net Delay 정보도 포함
- Netlist 파일
1. timing - Write SDF
![](https://blog.kakaocdn.net/dn/8kd4L/btsHXj4Lu1t/udYEKjSIuBnxx80s6b6kT1/img.png)
2. File - Save - Netlist
![](https://blog.kakaocdn.net/dn/3I5xW/btsHWwp9PoV/YTlqjRK3zgPtX2xGDaeNG1/img.png)
![](https://blog.kakaocdn.net/dn/dGWIlj/btsHXa1bUXb/ZVlrXImYePK1UWYSU6yjMk/img.png)
3. ls로 simple_spi.v 와 simple_spi.sdf 파일 저장 확인
![](https://blog.kakaocdn.net/dn/bZ14DB/btsHXukF4s2/mkeQBW0AquHGECRp4HnKC0/img.png)
![](https://blog.kakaocdn.net/dn/bixbDR/btsHWWoCc09/n5OJyTxOaAVwknpKKoAL1k/img.png)
4. 최종 레이아웃 파일 저장
![](https://blog.kakaocdn.net/dn/GGJv8/btsHXD2VjT1/n5dcI11tK3tFSAHsm29Kak/img.png)
Script파일 만들어 Design Import 진행
- 기본 생성 파일: 로그 파일, 명령 파일
- 로그 파일
- innovus.log: 기본 로그 파일
- innovus.logv: 기본 로그 파일의 상세 정보
- 명령 파일: innovus에서 수행할 작업을 지정하고 자동화하는데 사용
- innovus.cmd: 명령어를 실행하거나 스크립를 실행
1. innovus에서 innovus.cmd3파일 오픈하고 Design Import 확인 후 복사
![](https://blog.kakaocdn.net/dn/bnPIRv/btsHXaGWbLZ/DB7RqZLqnhhinMqQOekPKK/img.png)
2. innovus 폴더에 run_spi.scr 파일 생성 후 #Design Import 아래에 붙여넣기(휠클릭을 통해 붙여넣기)
![](https://blog.kakaocdn.net/dn/cfe1pZ/btsHYaFYl9R/dpYrb3ciJ1of9frr48g1jk/img.png)
3. 스크립트 파일 실행을 위해 코드 입력
![](https://blog.kakaocdn.net/dn/29KVC/btsHXFTXgXf/Ke5xUL38siLfKBY5DOmbYK/img.png)
4. GUI 창이 뜨지 않으면 win 입력하여 창 표시
![](https://blog.kakaocdn.net/dn/dkEpod/btsHXDu4NVz/Dyln8zDNFzieXRUrnDq441/img.png)
5.Import Design를 열어 설정 확인
![](https://blog.kakaocdn.net/dn/OAxT6/btsHWXA4TKW/eJjkpREHG4H9302S1NDS1k/img.png)
6. FloorPlan 진행: Floorplan-Specify Floorplan에 값 입력 후 저장
![](https://blog.kakaocdn.net/dn/Pneuz/btsHXOb7bEH/wN1HNrVR9D4JWrlpbKmyjk/img.png)
7.innovus.cmd 열어서 확인 후 복사 - run_spi.scr에 붙여넣기
![](https://blog.kakaocdn.net/dn/WLoKT/btsHYGqVATo/pk17KQbvYsDAQ7QeKDkZZ0/img.png)
![](https://blog.kakaocdn.net/dn/qGTQV/btsHYT4CIOR/d9okpRLLsznkks9Ilw4DpK/img.png)
8. Edit - Pin Editor에서 핀 설정: reg은 모두 오른쪽에, 나머지는 왼쪽에 배치
![](https://blog.kakaocdn.net/dn/QF7Vg/btsHYqPo3qa/lPnTnOTk1F7KB5c28qylV0/img.png)
9. innovus.cmd실행하여 pin 설정 script 파일에 붙여넣기
![](https://blog.kakaocdn.net/dn/cxPUvx/btsHXodTcFv/2UQqsTZf00kdr7d1JhlOZK/img.png)
![](https://blog.kakaocdn.net/dn/bJV6T5/btsHWU5sqh9/d95GznioC0YWf3KBui27hK/img.png)
10. Global Net Connect
![](https://blog.kakaocdn.net/dn/ctL8Ct/btsHXQVhs4i/6QeVcgbfd8HaiJM7Q7RxT0/img.png)
11. Script로 옮기기
![](https://blog.kakaocdn.net/dn/lzcUy/btsHYYrdDVI/NJP4di5vLrp34xk6RNDBo0/img.png)
12. 중간 점검: script로 실행해서 확인해보기 ( innovus -files run_spi.scr )
![](https://blog.kakaocdn.net/dn/bFbauH/btsHXtMOTgV/1KnU8x31aeLGzfrjhOho01/img.png)
13. AddRing 수행 후 Script 파일에 옮기기
14. Route - Special Route 설정 후 Script 파일에 옮기기
15. 스크립트 파일로 innovus 실행하고 정상 실행 확인
'하만(Harman) 세미콘 반도체 설계 과정' 카테고리의 다른 글
Auto P&R 4일차 - 공개용 (1) | 2024.06.13 |
---|---|
Auto P&R 3일차 - 공개용 (1) | 2024.06.13 |
Auto P&R 1일차 - 공개용 (0) | 2024.06.13 |
Auto P&R 교육 6일차 (0) | 2024.06.02 |