article thumbnail image
Published 2024. 9. 23. 21:16

시뮬레이션

./synth <target>            //target 합성 수행
./dc_open <target>          //합성 결과 불러오기

 

기존에 다른 design 열린 상태에서 read_ddc 금지

새로운 design을 열려면 종료 후 dc_open으로 새로 열기.

 

Verilog code

./tcl/dc.tcl

./tcl/dc.tcl에서 top Design 지정

top Design을 Encoder_top으로 수정하면 DFF가 포함된 회로로 변경

 

 

아래 코드들은 /rtl 에서 정의되고있음.

//voter
`ifdef __<target1>__
	<target1> u_voter(difference,toggle);
`elsif __<target2>__
	<target2> u_voter(difference,toggle);
.
.
.

DBI의 전체적인 구조들이 Encoder_top()으로 작성되어있다.

voter들을 수정할때 `elsif 에 target을 추가해서 적을 것.

여기서 정의되는 보터들은 같은 /rtl 위치에 아래와 같이 작성되어있다.

`ifndef __<target>__

`define __<target__

.

.

`endif

구조로 되어있고 게이트를 작성할때 2-input gate는 AND2, 3-input gate는 AND3 ..으로 작성.

합성할때 자동적으로 합성되는것을 방지!

 

Constraint

./tcl/dc.tcl에서는 ./con/timing_constraint.tcl 과 ./con/physical_constraint.tcl , (파일이 있는경우) ./con/<target>.tcl 에서만 constraint를 읽는다.

./tcl/dc.tcl

rtl 합성에 필요한 Verilog 파일들 선택
inSequential 1 : sequential constraint 적용.
0 : combinational constraint 적용
clock_delay 1 :  clock delay 추가
timing_constraint
io_delay 1 : input/output delay 추가
timing_constraint
ideal_rst 1: reset port delay 제거
area_margin 0 : cell 들을 최대한 촘촘하게 배치

 

Optimization 옵션

enfore_buf 1 : 여러 단자에 연결된 노드에 buffer 강제
restrict_lib 1 : 지정한 cell 사용 금지
keep_hierarchy 1 : xorArray와 voter의 경계 유지
optimize_voter 1 : optimize!!
0 : gate module들 최적화 금지
gate_module 1 : ./rtl/gate.v에 정의된 gate module들의 이름 기술.

set_dont_use

특정 cell로 합성 못하게 restrict_lib에에 logic gate들 추가함.

optimize_voter = 0  >> gate 최적화 금지!!

set_dont_touch가 true이면 gtech cell이 생김. GETCH cell은 프로세스에 포함된 셀이 아니다.

HDL Code -> GTECH -> Real Cell

Elaboration Verilog HDL로 기술된 component이 GETCH라는 virtual library로 변환.
Mapping 합성과정에 의해 mapping수행. 이때 gtech cell들이 real library cell들로 mapping됨.
Optimization mapping 후 constraint를 맞추기 위해 Mapping된 cell들을 다른 cell들로 교체하거나 통합/ 분리 등을 하는 작업

 

dont_touch 때문에 un_mapp된 셀들이 생길 수도 있다.

 

 

 

**유의사항

  1. dc_chell -t보다 ./synth, ./dc_optn등 csh파일로 dc 실행 권장
  2. 합성 후 ./syn/target/target.log 확인 필수
  3. Latency 계산할 때 io_delay이 켜져있으면 input external delay, output external delay를 빼야함.

 

**voter 추가

  1. Encoder.v 수정 _ voter 추가
  2. /rtl에 voter 추가

 

복사했습니다!