Design Compiler User guide 챕터 7 두번째 파트 입니다.
분량이 많아서 포스트 2개로 나눴습니다.
Propagating Constraints in Hierarchical Designs
hierarchical designs은 subdesigns을 가지고 있는데 이 경우에 constraint를 up 또는 down으로 전달할 수 있다.
1) Characterizing
특정한 셀 인스턴스의 contraints를 캡쳐하고 디자인에 셀이 연결된 정보를 할당한다.
2) Modeling
chararterized된 디자인을 library cell로 만든다.
3) Propagating constraints up the hierarchy
clocks, timing exceptions, 그리고 disabled timing arcs를 낮은(높은) 레벨의 subdesign에 전달한다.
Characterizing Subdesigns
만약 subdesign을 각각 컴파일 한다면 boundary 조건들, 예를들어 input drive strength, input signal delays(arrival times), 그리고 output loads는 부모 design으로 유도되서 subdesign에 set된다. 이것을 다음과 같은 방법으로 할 수 있다.
Manually
set_drive, set_driving_cell, set_input_delay, set_output_delay, set_load 명령어를 쓴다.
Automatically
characterize 명령어를 쓰거나 design budgeting tool을 쓴다.
Using the characterize Command
RTL 코드를 bottom up 방식으로 합성할 때 characterize가 필요하다.
1) lower module을 주어진 constraint를 사용해서 합성한다.
2) lower module의 netlist를 읽어서 constraint를 top module에 적용시키고 저장한다.
3) 다시 재합성하는대 이때 lower module의 넷리스트와 constraint가 적용된 top module을 합성한다.
-no_timing 옵션을 주지 않는다면 characterize 명령어는 다음의 명령어들에 의해서 timing characteristic을 주게 된다.
characterize 명령어는 주요 목적은 subdesign의 timing 정보를 캡쳐하는 것이다.
아니면 subdesign이 parent의 정보로 유도해서 쓰는 것도 있다.(이 경우 parent가 이미 constraint가 정의되어 있어야하며 이것으로부터 subdesign에 constraint를 유도하는 것이다.)
-constraint 옵션을 주게 되면 characterize명령어는 area, power connection class, design rule constraint에 관한 것을 주게 된다.
-connection 옵션을 주면 connection 속성을 주게된다.
-power 옵션을 주면 subdesigns의 switching activity information, toggle rates, static probability 를 주게된다.
Removing Previous Annotations
대부분의 경우에 design을 characterizing을 하는 것은 이전의 characterzation 한 것과 연관된 정보들을 제거하게 된다. 그러나 back-annotation(set_load, set_resistance,read_timing, set_annotated_delay, set_annotated_check)는 characterize 스탭은 annotation은 제거하지만 기존의 back-annotation을 overwrite 할 수는 없다. 이 경우 다시 characterize 명령어를 쓰기 전에 subdesign의 annotation을 지우겠다고 명시를 해줘야한다.(using reset_design)
Optimizing Bottom Up Versus Optimizing Top Down
최적화 할 때 너는 characterize 명령어를 hierarchy를 maintain하기 위해 set_dont_touch명령어와 함께 쓸 수 있다.
bottom-up 최적화때는 maually하게는 uniquify명령어로 자동적으로는 compile 명령어로 characterize를 하지만 top-down때는 자동적으로 characterization이 수행된다.
Deriving the Boundary Conditions
characterize 명령어는 자동적으로 boundary 조건을 부모 design의 내용을 기초로해서 subdesign의 조건을 유도한다.
다음은 boundary조건을 유도하는 방법이다.
Timing conditions
input port의 예상되는 signal delay로 계산
Constraints
부모 design으로부터 maximum delay 값 등을 유도함..
Connection relations
포트와 포트 사이의 논리적 관계나 포트와 power또는 ground 사이의 관계, 예를 들어 항상 logic 0, 논리적으로 다른 포트와 반대 값, 또는 unconnected
characterize 명령어는 한 subdesign의 인스턴스를 위해 boundary 조건을 요약한다. 결과는 reference에 적용된다.
Limitations of the characterize Command
characterize 명령어를 쓸 때 다음의 제한사항을 고려해야한다.
1) subdesign 이 parent design에서 timing budgets은 유도하지 않는다.
timing budgets이란 칩레벨이건 보드레벨이건 동기적으로 정상 작동하기위해 voltage level의 얼마나 많은 차이까지 커버 할 수 있는지에 관한 것.(how much margin)
2) hierarchical boundary에 clock_skew와 max_time_borrow속성은 무시한다.
옵션이 없으면 characterize 명령어는 subdesign의 포트 signal 정보(clocks, port drive, input and output delays, maximum and minimum path delays, port load) 를 부모 design에서 유도된 값으로 바꾼다.
Saving Attributes and Constraints
characterize 명령어는 subdesign의 timing environment 캡쳐한다. write_script명령어를 쓰면 현재디자인의 속성과 constraints를 저장할 수 있다. 그래서 > 연산자로 파일에 저장을 할 수 있다.
characterize Command Calculations
이번 섹션은 characterize 명령어가 포트에 구체적으로 어떻게 load와 timing value를 유도하는지 설명한다.
Load Calculations
1) hierarchical block B의 pin P의 outside load 계산법은
block A의 input에서 보면
driving net의 load 핀이 없으므로 그냥 TOP wire load 만 고려 그래서
0 + 1 * 5 = 5
block A의 output에서 바라볼 경우.
load pin on the net + load of segment c + load of segment d
= 1 (for load pin P) + 1 * 5 + + 1 * 2 = 8
block B의 output 경우
load pins on net + load of segment e
= 0 + 1 * 5 = 5
block B의 input pin X의 경우(Segment d)
load pins on net + load of segment b + load of segment c
= 0 + 1 * 2 + 1 * 5 = 7
block B의 input pin Y의 경우
pin loads on driving net + load of segment f
= 0 + 1 * 5 = 5
Input Delay Calculations
characterizing은 아웃풋 load의 정확한 정보를 제공하기 때문에 인풋 신호의 딜레이는 오직 이전단계의 gate driving 포트의 instrinsic delay만 고려한다. 즉 gate’s load delay나 connect delay는 고려하지않는다
input pin X에서의 딜레이는
drive strength at IN1 * (wire load + pin load) + intrinsic delay of A’s cell
= 3 * (5 + 2 + 1) + 1 = 25
윗그림에는 안나왔지만 전 그림으로 가보면 Load values on all input pins = 1 unit load로 되있음
Characterizing Subdesign Port Signal Interfaces
characterize 명령어를 쓸 때 옵션이 없으면 subdesign의 포트 signal 정보들(clocks, port drive, input and output delays, maximum and minimum path delays, and port load)을 부모 design에서 유도된 정보로 바꿀 수 있다.
또한 subdesign은 operating conditions나 timing ranges를 부모 design으로부터 물려받는다.
다음의 포트 signal 정보를 명령어를 사용해서 임의로 넣을 수 있다.
create_clock
set_clock_latency
set_clock_uncertainty
set_drive
set_driving_cell
set_input_delay
set_load
set_max_delay
set_min_delay
set_output_delay
set_propagated_clock
characterize 명령어를 사용할 때 다음은 wire loading model을 선택하는 방법이다.
1) top-level mode가 top이면 subdesign은 top-level wire loading model을 쓴다.
2) top-level mode가 enclosed 거나 segmented면 wire loading model은 다음에 기초하여 결정된다
만약 wire loading model이 없고 wire load가 area의해서 결정되지 않으면 top-level design의 모델로 사용된다.
만약 wire loading model이 없는데 wire laod가 area의해서 결정되면 컴파일 시간에 cell area에 의해서 다시 결정된다.
Combinational Design Example
script1 은 속성을 자동적으로 세팅한다.
script2 는 속성을 임의로 세팅한다.
current_design top
set_input_delay 0 A
set_max_delay 10 -to B
Script 1
current_design top
characterize U2
Script 2
current_design block1
set_driving_cell -lib_cell INV {C} //드라이빙 셀 정보
set_input_delay 3.3 C //n2 넷의 딜레이
set_load 1.3 D //load 값
set_max_delay 9.2 -to D //최대 딜레이 값
current_design top
Sequential Design Example
다음 그림은 sequential design의 top 안에 subdesign이 있는 경우이다.
• Script 1 sets the information manually.
• The input delay (from ff1/CP to u5/in1) is 1.8
• The output delay (through u4 plus the setup time of ff2) is 1.2
• The outside load on the out1 net is 0.85
• Script 2 uses the characterize command to set the information automatically.
Script 1
current_design
top create_clock -period 10 -waveform {0 5} clock
current_design block
create_clock -name clock -period 10 -waveform {0 5} clock1
create_clock -name clock_bar -period 10 \ -waveform {5 10} clock2
set_input_delay -clock clock 1.8 in1
set_output_delay -clock clock 1.2 out1
set_driving_cell -lib_cell INV -input_transition_rise 1 in1
set_driving_cell -lib_cell CKINV clock1
set_driving_cell -lib_cell CKBUF clock2
set_load 0.85 out1
current_design top
Script 2
current_design top
create_clock -period 10 -waveform {0 5} clock
characterize u5
Characterizing Subdesign Constraints
characterize –constraints 명령어는 부모 design으로부터 값을 유도한다.
그래서 max_area, max_fanout, fanout_load, max_capacitance, max_transition 을 subdesign에 적용시킨다.
Characterizing Subdesign Logical Port Connections
characterize –connections 명령어는 connection 속성을 부모 design으로 부터 유도해서 subdesign에 적용한다.
set_equal, set_oppsite, set_logic_one, set_logic_zero, set_unconnected 속성.
Example
Script 1은 속성을 manually하게 지정하는 것
Script 2는 characterize –no_timing –conntections로 지정하는것. –no_timing timing 속성은 characterize 하지 않음.
Script 1
current_design block
set_opposite { E F }
set_logic_zero { G }
set_unconnected { J }
Script 2
current_design top
characterize U2 -no_timing -connections
Characterizing Multiple Instances
만약에 한 subdesign 인스턴스가 여러개 있다면 각각 차별적으로 characterize를 할 경우가 있다.
이때는 uniquify 명령어를 쓰면된다. 이 명령어를 쓰면 subdesign을 복사한다음에 각각 이름을 바꿔주게 된다. 그런다음 characterize를 하면 각각 따로 characterzie를 할 수 있다.
Characterizing Designs With Timing Exceptions
만약에 path가 design hierarachy를 가로질러서 가면서 다른 타이밍 예외를 가진다면, characterize 명령어는 timing constraints 가상의 clock가 함께 이러한 정보를 캡쳐한다.
timing 예외는 set_multicycle_path, set_false_path, set_max_delay 그리고 set_min_delay이다. 가상 clock 스키마는 또한 다중 clock으로 다뤄진다.
-verbose옵션은 subdesign이 characterize할때 관련된 명령어를 다 보여줌
위를 보면 ALARM이 인풋으로 들어가서 U3에는 2개의 cycle path가 있다.
이런 경우 characterize U0 –verbose 한 결과이다.
-이 부분 잘 모르겠음.
Methodology for Propagating Constraints Upward
propagate_constraints 명령어를 쓰면 낮은 레벨의 디자인에서 현재 디자인으로 constraints를 전달 할 수 있다. 만약 명령어를 안 쓰면 높은 레벨에서 current_instance로 constraints를 전달 할 수 있다. 그러나 낮은 레벨에서 높은 레벨로 전달할 수 없다.
만약 A가 높은 레벨이고 B가 낮은 레벨이면 B의 constraints를 A로 전달할때
만약 모든 전달된 constraints를 파일로 리포트를 하고싶다면 –verbose –dont_apply 옵션을 준다.
dc_shell> propagate_constraints -design name \ -verbose -dont_apply -output report.cons
Handling of Conflicts Between Designs
만약 다음과 낮은 레벨 디자인과 높은 레벨 디자인이 다음과 같은 충돌이 날 수도 있다.
Clock name confilct
낮은 레벨 clock이 다른 블럭이나 current design의 clcok과 이름이 같으면 clock은 전달되지 않는다. 경고가 발생한다.
Clock source conflict
낮은 레벨 블럭의 clock 소스가 이미 높은 레벨 블럭과 동일할 때 낮은 레벨 clock은 전달되지 않은다. 경고가 발생한다.
Exceptions from or to an unpropagated clock
virtual clock 또는 clock이 충돌 때문에 전달되지 않을 때 발생 한다.
Exceptions
낮은 레벨 예외가 만약 높은 레벨 예외와 같은 path를 쓰면 높은 레벨의 예외를 재정의한다.
'하드웨어 설계 > Design Compiler User Guide' 카테고리의 다른 글
Chapter 6 Defining the Design Environment (0) | 2012.09.02 |
---|---|
Chapter 7 Defining Design Constraints - Part 1 (0) | 2012.08.31 |
Chapter5 Working With Desings in Memory Part2 (0) | 2012.08.15 |
Chapter5 Working With Designs in Memory Part1. (0) | 2012.08.15 |
Chapter4 Working With Libraries (0) | 2012.08.09 |
Chapter3 Preparing Design Files for Synthesis. (0) | 2012.08.02 |
Chapter2. Design Compiler Basics (0) | 2012.08.02 |