High-level Synthesis Flow
- Load design & technolgy data (current stage)
- create .tcl or set_app_var & search_path
set_app_var target_library libs/20nm_wc.db
set_app_var link_library "* $target_library"
read_verilog my_design.v
- load gtech, link_library
- read RTL, translate into unmapped ddc
- load design in DC memory
- Set one of the designs in memory to the current design
link
- Apply timing constraints
- (create my_desing.con)
source my_design.con
check_timing
/ report_constraints
- Synthesize the design
- Analyze results
- Write out design
write_file -f v -output my_desing.v
write_file -f ddc -output my_desing.ddc
1장에서 design을 load하는 방법과 technolgy data에 대해 알아보려 한다.
Loading Logical Library & a Flat Design
-
read_verilog rtl/MY_DESIGN.v
- Load gtech_libary & link_library
- Read RTL files & translate into unmapped ddc
- Load design in DC memory
- Set one of the designs in memory to the current design
-
source cons/MY_DESIGN.con
: Compile 이전에 constraint를 적용
-
check_timing
: Constraint를 적용한 이후 타이밍 체크 (??)☎☎☎☎☎☎☎☎☎☎
-
report_constraints -all_violators
: 타이밍이 위반된 모든 경로를 출력
-
compile_ultra
: dc_shell -topo의 합성 명령어
- Error : Could not read the following target libraries : 'your_libary.db'
: target_library가 없는 위치에서 compile했기에 뜨는 에러
-
About .tcl
- target_libary
: 현재 디자인에서 사용할 technology library를 target library라 함
: 컴파일 과정에서 target_libary를 기반으로 mapping을 통하여, 기술-특화된 게이트 수준 넷리스트를 생성하는데 사용됨
: 이는 공정회사에서 제공해주는 파일임
printvar target_library
: 현재 적용된 타겟 라이브러리를 출력해서 알려줌
set_app_var target_libary libs/20nm_wc.db
: 타겟 라이브러리 설정
- link_libary
: technoloy library를 모아둔 라이브러리를 link_library라 함
: netlist or RTL에서 인스턴스화된 reference를 찾는데 사용 for mapping
- 먼저 DC memory에서 my_design.v에 해당하는 모듈을 찾음
→ 하지만, 이는 사용자 정의 모듈이므로 메모리에 없음
- 다음으로 link_library에 나열된 여러 tech_library에서 my_design.v 모듈에 필요한 셀을 찾음
→ 즉, 먼저 내부 DC 메모리에서 해당 모듈를 찾고, 찾지 못하면 link_library에 나열된 여러 tech_library에서 모듈에 필요한 셀을 찾음
- 설계 과정 with link_library
- Load netlist or RTL
- Parsing design
- Referencing link_library for mapping
- DC 메모리
- Tech_library in link_library
- Mapping technology_library
- Logic optimization for performance, power, area, ...
- Write out design data (ex : netlist, GDSll, ...)
- reference
: any gate, block or sub-design that is instantiated
printvar link_library
: 현재 적용된 링크 라이브러리를 출력해서 알려줌
set_app_var link_libary "* $target_library"
: 링크 라이브러리 설정
: " * "은 DC memory에 있는 designs을 나타냄
link
- search_path
- ㅇㄹ
set_app_var search_path "$search_path rtl unmapped mapped libs cons"
: 링크 라이브러리 설정
: " * "은 DC memory에 있는 designs을 나타냄
-
write_file
write_file -f verilog -output mapped/MY_DESIGN.v
: mapping된 verilog 형식으로 netlist를 저장
: 이는 오직 target_library의 cell로 mapping한 verilog 코드임
write_file -f ddc -output mapped/MY_DESING.ddc
: ddc 형식으로 netlist를 저장
: 이는 gate-level netlist + constraints + SCAN-DEF 정보를 모두 포함하고 있음
-
다른 설계자로부터 netlist를 받았을 때
-
ETC
- Libary file
- .db
: 사람이 읽을 수 없는 2진 코드
- .lib
: 사람이 읽을 수 있는 코드 (lib = liberty)
- About Cell
- cell (OR2_4x)
-OR2 : 입력이 2개
-4x : Driving strength가 4
Loading Hierarchical Designs
Loading Physical Data
ETC