Design Compiler User Guide Chapter 6을 제가 읽으면서 정리한 내용입니다.

 

 

Design Compiler User Guide_Version F-2011.09-SP2, December 2011.

 

 

 

Defining the Operating Conditions

Defining Wire Load Models

Modeling the System Interface

Setting Logic Constraints on Ports

Specifying Power Intent

Support for Multicorner-Multimode Designs

 

 

 

Defining the Operating Conditions

 

Operating Conditions에는 다음 3가지가 있다.

1. 온도 변화

2. 공급 전압 변화

3. 공정 변화

 

대부분의 techonology library에는 미리 정의된 operating condition이 있다.

report_lib 명령어로  technology library operating condition을 볼 수 있다.

 

dc_shell> read_file my_lib.db

dc_shell> report_lib my_lib

 

 

 

 

 

Specifying Operating Conditions

 

set_operating_conditions 명령어를 이용하면 operating conditions을 명시할 수 있다.

다음은 현재 디자인을 worst-case commercial로 하라는 뜻이다.

 

dc_shell> set_operating_conditions WCCOM -lib my_lib

 

report_design으로 현재 operating condition을 볼 수 있다.

 

Defining Wire Load Models

 

Wire load modeling wire의 길이, fanout 저항, 캐패시터, net area의 영향을 결정한다.

 

wire load modeling을 설정하는 순서는 다음과 같다.

 

1. user가 명시

2. design area에 기초한 automatic selection

3. technology library default specification

위의 항목에 없다면 wire load model을 적용하지 않아서 전파 delay값이 좋게 나온다.

 

hierarchical designs에는 hierarchical boundary끼리의 wire model을 또한 설정해줘야 한다.

그 설정 순서는 다음과 같다.

 

1. user가 명시

2. technology library default specification

3. default mode in design compiler

 

 

Hierarchical Wire Load Model

 

hierarchical boundary간의 wire load model을 결정하는데 3가지 mode가 있다.

 

1.  Top

 

Design Compiler는 모든 net wire load model 단 하나의 wire load model로 설정한다. set_wire_load_model 명령어를 사용한다.

 

모든 top이므로 top에 있는 wire load model을 사용한다. 50*50 wire의 크기 이다.

 

 

 

2. Enclosed

 

완전히 net을 감싸고 있는 가장 작은 wire load model을 사용한다.

만약 subdesign wire load model이 없다면 그 다음 상위 레벨로 올라가서 wire load model이 있는지 살펴본다. 만약에 wire load model이 있다면 그것을 사용한다.

 

아래에는 net을 완전히 감싼 design 40*40이므로 이것을 사용한다.

 

 

 

3. Segmented

 

hierarchical boundary를 여러개의 segment로 나눈다음 해당 위치에 사용되는 wire load model을 사용한다.

 

net에서 20*20 위치에 있는 것은 20*20을 쓰고 40*40에 있는 것을 40*40을 쓰고 30*30에 있는 것은 30*30을 쓴다.

 

 

Determining Available Wire Load Models

다음과 같이 입력한다면

 

dc_shell> read_file my_lib.db

dc_shell> report_lib my_lib

 

1. wire loading model section

2. wire loading model mode section : 만약에 명시되지않으면 top mode 쓴다

3. wire loading model selection group section : area 기초한 자동 selection 한다.

 

으로 나눠져있다.

 

 

 

Specifying Wire Load Models and Modes

 

다음과 같이 하면 자동적인 wire load model 선택이 안된다.

dc_shell> set auto_wire_load_selection false

 

 

다음은 wire load model mode를 선택하는 방법이다.

dc_shell> set_wire_load_model "10x10"

dc_shell> set_wire_load_mode enclosed

 

report_design 또는 report_timing 명령어를 통해서 현재 디자인의 wire load model mode를 볼 수 있다.

 

remove_wire_load_model 명령어로 wire load model을 지울 수도 있다.

 

Modeling the System Interface

 

1. Defining drive characteristics for input ports

2. Defining loads on input and output ports

3. Defining fanout loads on output ports

 

Defining Drive Characteristics for Input Ports

 

Drive strength는 상호간의 input port에서의 drive resistance, capacitance loadoutput driver resistance transition time delay를 의미한다.

 

1. set_driving_cell

2. set_drive

3. set_input_transition

 

set_driving_cell  set_input_transition, set_drive 명령어는 port transition delay에 영향을 미친다.

 

set_driving_cellport drive 특성을 technology library에서 가져온다.

set_drive 또는 set_input_transition명령어는 technology library셀에 특정한 input drive capability를 적용할 수 없을 때 top-level port drive 저항을 설정한다.

 

  

다음 예제는 Drive 특성을 설정하는 예시이다.

 

 

1. I1 I2 library cell에서 나온 것이 아니므로 set_drive 명령어로 drive 저항을 정의해야한다.

 

dc_shell> current_design top_level_design

dc_shell> set_drive 1.5 {I1 I2}

 

2. 이번에는 sub_designs2의 포트의 drive capability를 바꾸기위해서 현재 디자인을 바꿔야한다.

 

dc_shell> current_design sub_design2

 

3. IV 셀이 port I3에 연결되있으므로 set_driving_cell drive 저항을 정의해야한다.

 

dc_shell> set_driving_cell -lib_cell IV {I3}

 

4. AN2셀은 port I4로 연결되있다. AN2cell의 두 개의 인풋은 다른 transition time을 가지고 있으므로 worst case로 선택을 해야한다. 만약에 B-to-Z worst case라면 다음과 같이 쓸 수 있다.

 

dc_shell> set_driving_cell -lib_cell AN2 -pin Z -from_pin B {I4}

                                                              

Defining Loads on Input and Output Ports

 

Design Compiler zero capacitive load default로 하지만 만약 set_load 명령어를 사용한다면 capacitive load를 설정 할 수 있다.

 

For example, to set a load of 30 on output pin out1, enter

dc_shell> set_load 30 {out1}

 

여기서 30의 단위는 tartget technoloy library에 정의된 단위를 사용한다.

report_lib 명령어를 사용하면 볼 수 있다.

 

ff= Femto  farad

 

fanout – 전자회로에서 한 게이트의 출력을 다른곳에서 배분하여 연결한 출력선의 수.

 

Defining Fanout Loads on Output Ports

 

capacitive load fanout에 설정시 다음과 같이 한다.

 

dc_shell> set_fanout_load 4 {out1}

 

Setting Logic Constraints on Ports

 

최적화 효율을 높이기 위해서 중복된 포트나 inverter를 제거하기위한 커맨드를 제공한다.

 

 

Defining Ports as Logically Equivalent

 

set_equal 명령어는 두개의 인풋을 논리적으로 같다고 명시를 해준다.

 

예를 들어 IN_X IN_Y가 이름만 다르고 논리적으로 같다면

 

dc_shell> set_equal IN_X IN_Y

 

처럼 해준다.

 

Defining Logically Opposite Input Ports

 

set_opposite 명령어는 두개의 인풋이 논리적으로 다르다고 명시를 해준다.

 

Allowing Assignment of Any Signal to an Input

 

set_logic_dc 명령어로 지정한다. input port don’t care 로 지정한다. 이 명령어는 오직 input만 된다. 이것의 output port unconnected를 명시하기 위해서는 set_unconnected명령어를 사용한다.

이 명령어에 의해서 지정된 port don’t care로 된다.

 

예로  2:1 mux의 인풋이 S,A,B 고 아웃풋이 Z라면

Z = S*A + ~S*B이다

 

만약 set_logic_dc {A, B}

 

를 입력하면 A B don’t care가 된다.

 

S      AB

00

01

11

10

0

X

X

X

X

1

0

0

1

1

 

위와같이 카르노맵을 그려보면

 

S=A가 됨을 알 수 있다.

 

 

Specifying Input ports Always One or Zero

 

set_logic_one 명령어와 set_logic_zero 명령어로 인풋을 항상 1이나 0으로 둘 수 있다.

 

Specifying Unconnected Output Ports

 

 

 

 

 

만약 사용을 안하는 output 포트가 있으면 최적화할때 지워버릴 수 있다.

 

set_unconnected port_list 명령어를 이용한다.

 

이 속성을 없애려면 remove_attribute 명령어를 이용하면 된다.

  

레벨 시프터

 

디지털 게이트에 있어서 논리값 레벨조정하기 위하여 사용되는 저항, 접합 다이오드나 정전압 다이오드로서 이들 저항 또는 다이오드의 전압강하로 입력 또는 출력의 전압 레벨을 조정한다. 그림의 경우 정전류원의 작용으로 출력 레벨은 입력 레벨보다 대체로 rIE1만큼 인하되어 있다.

 

 

 

Power Intent Concepts

 

power domain : 공통된 파워를 공유하는 hierachy  logic 각 요소의 모임

 

scope : hierarchy 레벨

extent : hierarchy 각 요소

 

supply net : supply voltage ground를 운반하는 전도체

supply port : 인접한 레벨의 디자인 hierarchy를 연결하는 point

isolation celll: power domain의 출력부분에 있는 output을 유지시킨다. 어떤 블록이 off가 되면 그 블록의 출력은 X이다. 만약 이 값이 스위치가 on 되서 다른 블록으로 전달되면 이것은 바라지않는 값이나 chip failure가 일어날 수 있다. 그래서 이것을 피하기 위해 스위치가 off 됬을때 예를들어 AND 게이트에서 만약 X값을 전달할때 다른 인풋값이 0이면 출력은 무조건 0으로 된다. 또한 OR게이트에서 한쪽 값이 X여도 다른 쪽이 1이면 출력은 무조건 1이 된다. 이런 식으로 인풋에 X값을 고립시키는 것이 필요한대 이런 셀을 말한다. RETAIN 0 OR 1의 출력

 

retension register : 파워가 없어져도 값을 계속 유지하는 레지스터

 

 

UPF Commands in Synopsys Tools

 

report_power_domain, report_power_switch, report_supply_net, report_supply_ports 명령어로 power와 관계된 다양한 report를 볼 수 있다.

 

 

 

 

 

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

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를 쓰면 높은 레벨의 예외를 재정의한다.

 

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

다음의 내용은 synopsis Design Compiler User guide를 번역해보았습니다..

 

 

Design Compiler User Guide_Version F-2011.09-SP2, December 2011.

 

 

Chapter 7 Defining Design Constraints

 

목차

 

Design Compiler Constraint Types

Design Rule Constraints

Optimization Constraints

Managing Constraint Priorities

Reporting Constraints

Propagating Constraints in Hierarchical Designs

 

 

Design Compiler Constraint Types

 

Design Compiler가 최적화시 2가지 타입의 constraint를 쓴다.

 

 

 

 

 

 

1. Design rule constraints

     Design rule constraints ASIC vendor에 의해서 technology library에 정의되어있다.

     DRC를 버리거나 재정의 할 수 없다.

     DRC를 더욱 제한적으로 할 수 는 있다. 이것은 optimization에 도움이 된다.

     DRC design net에 관계가 있다.

DRC는 각 library 마다 다르다.

 

2. Optimization Constraints

     Optimization Constraints는 유저에 의해서 명확히 제한을 건다.

     디자인의 목표(area, timing)을 구체적으로 기술 할 수 있다.

     이러한 것은 현실적이어야 한다.

 

 

Design Rule Constraints

 

DRC는 다음 4가지로 구성된다.

 

     Maximum transition time

     Maximum fanout

     Minimum and Maximum capacitance

     Cell degradation

 

Maximum transition time, Maximum fanout, Minimum and maximum capacitance 속성은 없앨 수 없다. 그러나 좀더 제한적으로 set을 할 수 있다.

 

Design Rule Cost Function

 

Design Compiler design rule 위반을 고치는데 도움을 준다. 만약에 여러개의 위반이 있다면 Design Compiler는 가장 우선순위가 높은 위반 부터 수정하려고 시도한다. 가능하다면 design rule 위반을 줄이기위해서 양자택일의 방법을 선택하기도 한다.

 

 

 

Maximum Transition Time

 

 

 

 

value high에서 low로 바뀔 때나 low에서 high로 바뀔 때 걸리는 시간을 말한다. 이러한 maximum transition time을 제한을 둘 수 있다. 각각의 net max_transition 값보다 작아야한다.

이러한 net에 걸리는 transition time technology library에 있는 타이밍 데이터를 이용해서 계산 된다.

 

set_max_transition 명령어를 이용해서 constraint를 줄 수 있다.

 

example) adder 3.2 max transition 설정

dc_shell> set_max_transition 3.2 [get_designs adder]

 

이때 시간단위는 report_lib 를 하면 나오는 아래를 보면 알 수 있듯이 Time Unit 1ns이다.

 

 

 

 

다음과 같이 remove_attribute 를 하면 max_transition을 없앨 수 있다.

dc_shell> remove_attribute [get_designs adder] max_transition

 

Specifying Clock-Based Maximum Trainsition

 

max_transition 값은 동작하는 셀의 최대 주파수(최대 clock 주파수)를 바꿀 수 있다.

이때 최대 주파수 설정은 create_clock 명령어를 이용한다.

 

 

Design Compiler는 다음의 max_transition 값을 결정하기 위해서 다음의 룰을 따른다.

 

     디자인이나 포트 또는 clock group max_transition 속성이 적용되면 가장 큰 제한 값이 사용된다.

     multiple clocks이 같은 path에 걸리면 가장 큰 제한 값이 사용된다.

     만약 max_transition 속성이 이미 technology library에 사용됬다면 컴파일 하는 도중에 이 max_transition 값을 맞추려고 자동적으로 최적화한다.

 

예를들어 clock 그룹인 Clk max_transition time을 제한을 두려면 다음과 같이 한다.

dc_shell> set_max_transition 5 [get_clocks Clk]

 

Maximum Fanout

 

Maximum fanout 값을 라이브러리 전체나 아니면 개개의 셀의 핀에 제한을 둘 수 있다. 물론 이때 기존에 library에 제한된 값보다 더욱 더 좁게 제한을 해야 한다.

max_fanout 속성 적용 시 각 인풋의 fanout_load를 고려를 해줘야 한다.

만약 다음과 같은 경우를 고려하면

 

 

 

fanout_load 의 총합인 X max_fanout을 넘지말아야한다.

X max_fanout값을 넘었다면 Dedsign Compiler higher-drive component를 사용한다.

 

Maximum Fanout Calculation Example

 

 

 

만약 위의 예제에서

 

dc_shell> set_max_fanout 8 [get_designs ADDER]

 

을 한다면

 

 

을 충족시키므로 max_fanout으로 설정할 수 있다.

 

max_fannout 설정 해지방법 예제.

 

dc_shell> remove_attribute [get_ports port_name] max_fanout

dc_shell> remove_attribute [get_designs design_name] max_fanout

 

Defining Expected Fanout for Output Ports

set_fanout_load 명령어로 예상되는 fannout load 값을 output port에 넣을 수 있다.

물론 total load 값이 maximum fanout load 값보다 적어야한다.

 

fanout load 속성 해지방법도 다음과 같다.

 

dc_shell> remove_attribute port_name fanout_load

 

 

Example) 만약 라이브러리셀 libA에 있는 AND2 fanout load 값을 알고 싶다면

dc_shell> get_attribute "libA/AND2/i" fanout_load

 

Example) 만약 라이브러리셀 libA에 있는 default_fanout_load값을 알고 싶다면?

dc_shell> get_attribute libA default_fanout_load

 

 

Maximum Capacitance

 

maximum capacitance pin-level 속성으로 지정해두면 그 핀은 넷에 연결할 때 전체 capacitance 값이 지정한 maximum capacitance를 넘을 수 없다.

 

max_fanout max_transition net의 제한을 간접적으로 하지만 max_capacitance는 직접적으로 제한을 한다.

 

maximum capacitance 또한 각 셀의 동작 주파수를 변경 시킬 수 있으며 Design Compiler는 이보다 작은 값을 맞추려고 component를 바꿀 수도 있다.

 

max_capacitance 값은 set_max_capacitance 명령어로 정의한다.

 

Example) adder max_capacitance 3으로 지정한다 단위는. 다음에 나와있다.

 

 

 

 

dc_shell> set_max_capacitance 3 [get_designs adder]

다음과같이 remove_attribute 명령어를 통해서 max_capacitance를 없앨 수도 있다.

 

dc_shell> remove_attribute [get_designs adder] max_capacitance

 

Specifying Frequency-Based Maximum Capacitance

 

max_capacitance 값은 각 셀의 동작 주파수를 결정한다. compile_enable_dyn_max_cap 변수를 true로 두면 각 driver pin frequency-based maximum capacitance를 결정하게 된다.

이것을 쓰기 앞서서 library multiple 주파수에 관한 내용이 포함되있어야한다. 이것은 각 driver pin에 따른 maximum capacitance 값이 lookup table이란 곳에 써져있다.

 

Design Compiler 다음의 순서로 max_capacitance를 결정한다.

     각 셀의 최대 동작 주파수를 결정한다.

     technology library lookup table에 확인해서 max_capacitance값에 충족되는지 확인한다.

     driver pin에 적절한 max_capacitance 값을 정하고 이 값을 합성에 사용한다.

 

Minimum Capacitance

 

Minimum Capacitance 또한 design rule constraint이다. 몇몇 technology library에만 정의가 되있다. 이것은 load capacitance의 최소 값인데 Design Compiler Maximum capacitance 보다 먼저 이 값을 확인하게 된다. 만약에 이 값을 충족시키지 못하면 Design Compiler driver size를 변경함으로써 값에 맞춘다.

 

set_min_capacitance 명령어로 지정을 할 수 있다.

 

Example) minimum capacitance value 12.0 unit으로 지정함 포트 이름은 high_drive

 

dc_shell> set_min_capacitance 12.0 high_drive

 

report_constraint –min_capacitance 로 현재 지정된 minimum capacitance속성를 볼 수 있다.

 

만약 속성을 지우고 싶다면

 

remove_attribute 명령어를 이용하면 된다.

 

 

 

Cell Degradation

 

Cell degradation 또한 net design rule constraints이다. 몇몇 technology library cell degradation 테이블을 포함한다. 테이블은 cell transition의 함수에서 유도된 maximum capacitance 값이 들어있다.

 

이 값 또한 max_capacitance와 비슷하지만 max_capacitance가 우선순위가 더 높다. max_capacitance가 충족됬는지보고 그 다음 cell_degradation 값 보다 높은지 또 확인하게 된다.

만약 max_capacitance가 충족되면 cell_degradation값 또한 충족하게된다.

cell_degradation은 각 넷의 최대로 drive 할 수 있는 capacitance를 말한다.

 

오직 DC Ultra license에서만 사용가능하고 문법은 다음과 같다.

set_cell_degradation cell_deg_value object_list

 

Example) cell_degradation 값은 2 unit으로 포트이름은 late_riser

dc_shell> set_cell_degradation 2.0 late_riser

 

만약 이 속성을 지우고 싶다면 remove_attribute명령어를 쓰면 된다.

 

 

Design Rule Constraints 의 우선순위

 

1. Minimum capacitance

2. Maximum transition

3. Maximum fanout

4. Maximum capacitance

5. Cell degradation

 

만약 Maximum fanout이 조건을 충족시키지 못하면 maximum transition과 충돌이 났는지 확인해본다. 그러나 Design Compiler maximum fanout 조건 위반을 충족시키기위해서 transition time을 나쁘게 만드는 일은 하지 못한다.

 

Design Compiler transition time 라이브러리를 이용해서 계산하는 방법 2가지

1) 라이브러리에 CMOS delay model으로 driving cell drive resistance net capacitive load를 이용해서 transition time을 계산한다.

 

2) 라이브러리에 nonlinear delay model으로 table lookup interpolation을 이용해서 transition time을 계산한다. 이것은 output pin에서의 capacitance input transition time의 함수 이다.

 set_driving_cell set_drive 명령어는 technology library마다 다르게 행동 할 수 있다.

 

보간(interpolation)이란 사이값을 보충한다는 의미입니다. 이미 알고 있는 값을 사용해 사이에 있는 값을 추정적으로 간단히 계산하는것입니다.

 

set_drive is used to specify the driving strength of an output for ex: set_drive 0 for clocks and reset
set_driving_cell is set on inputs to specify the input side driving cell.

 

set_drive는 어떤 특정한 object의 저항이나 drive strength를 지정한다.(구체화된 라이브러리에 없는 top design 일때 그래서 이것은 set_driving_cell만큼 정확하지는 않다)

set_driving_cell technology library셀의 driving port/pin에 지정하게 된다.

만약 0을 지정하면 가장 큰 drive strength를 사용하게 된다.

                                                                                                     

1) 라이브러리가 CMOS delay model을 사용할 때는 drive resistance가 상수이다. 그래서 set_drive set_driving_cell이 같은 결과를 만든다.

 

2) 라이브러리가 nonlinear delay model을 사용할 때는 set_driving_cell 명령어가 table에 있는 load에 따라 transition time이 바뀌게 되고 set_drive명령어는 명령어가 실행될 때 table에 있는 load를 중간 범위에 있는 값을 가져다 쓴다.

 

set_drive set_driving_cell 모두 transition delay와 연관이 있다.

 

set_load 명령어는 포트나 net load값을 준다. 이것은 technology libray에 단위와 일치해야 하며 timing optimization을 하는동안 사용된다.(maximum fanout optimization이 아니라)

 

Design Rule Scenarios

 

set_max_fanout and set_max_transition commands

set_max_fanout and set_max_capacitance commands

 

technology library 는 일반적으로 max_transition 또는 max_capacitance default값이 정의되어있다. 둘 다는 아니다. 그래서 좋은 결과를 위해서는 max_transition max_capacitance를 혼용하지말자.

 

 

 

 

 

Disabling Design Rule Fixing on Special Nets

 

set_auto_disable_drc_nets 명령어는 design rule clock, constant, 또는 scan net에 고정한다. 명령어는 현재 디자인의 모든 net  내가 specify한 옵션에 대해서 clock net, constant net, scan net에 실행이 된다. 만약 auto_disable_drc_nets 속성이 적용되있는 net이 있다면 그 net design rule disable된다.

 

default로는 clock constant net design rule fixing disable 되있다.(-default 옵션을 쓴것과 같음), scan net 은 아니다

 

만약 –all 옵션을 쓴다면 모두 disable 시킬 수 있다. –clock, -constant, -scan 옵션을 써서 각각 독립적으로 true, false 할 수 있다.

-none 옵션을 쓰면 모두 enable 할 수 있다.

 

만약 set_auto_disable_drc_nets명령어로 clock net enable 시켜도 clock net의 이상적인 timing 특성을 바꾸지 못한다. 그래서 set_propagated_clock 명령어로 이상적인 clock net timing을 바꿀 수 있다.

 

You cannot use the set_auto_disable_drc_nets to override disabled design rule fixing on ideal networks marked with ideal network attributes. This command never overrides the settings specified by the set_ideal_net or the set_ideal_network command.

 

 

Summary of Design Rule Commands and Objects

 

 

 

Optimization Constraints

 

Optimization Constraints timing area 에 관한 디자인 목표이다. 디자인의 operation에 영향을 받지 않은 제한들이다.

 

그리고 timing 제한이 area 제한보다 우선순위가 더 높다.

 

Optimization Constraints의 구성

 

Timing constraints (performance and speed)

1. Input and output delays (synchronous paths)

2. Minimum and maximum delay (asynchronous paths)

Maximum area (number of gates)

 

Optimization Cost Function

 

mapping 할 때 Design Compiler optimization cost를 줄이기 위해서 노력한다.

 

cost를 개선시키기 위해서 고려해야 할 사항은 다음과 같다.

중요도순

1. Maximum delay cost

2. Minimum delay cost

3. Maximum area cost

 

Design Compiler는 위 요소를 각각 독립적으로 평가한 뒤 한 요소의 cost를 줄이고 다른 순위가 높은 cost를 올리는 것은 하지 않는다.

더 이상 개선할 수 없을 때까지 optimize를 하게 된다.

 

Timing Constraints

 

만약 디자인이 synchronous path create_clock 명령어로 clock을 명시한 뒤 set_input_delay 명령어와 set_output_delay명령어로 input/output port timing을 명시하게 된다.

 

Asynchronous path set_max_delay set_min_delay 명령어로 핀간의 delay값을 명시하게 된다.

 

 

 

Maximum Delay

 

Design Compiler static timing analyzer timing constraint를 분석하게 된다. critical path, 모든 timing path minimum, maximum delay를 계산한다. 이때 technology library에 있는 정보에 기초해서 계산을 하게 된다.

 

Cost Calculation

Maximum delay optimization cost function에서 가장 중요한 비율을 차지하는데 그 cost 함수는 다음과 같다.

 

 

 

 

 

Maximum delay target value clock waveform, skew, library setup times, external delays, multicycle 또는 false path specifications그리고 set_max_delay명령어를 고려한 뒤 계산된다. 이외에도 load, drive, operating conditions, wire load model그리고 다른 요소까지 고려될 수 있다.

 

그리고 Maximum delay cost group_path 명령어와 create_clock 명령어에 의해서 어떻게 path가 그룹화 됬는지에 따라 달라 질 수 있다.

 

1) 만약 오직 한 group path가 존재한다면 worst violation 값이 group weight 에 곱해질 것이다.

 

2) 만약 많은 group path가 존재한다면 모든 그룹에 대한 cost design maximum delay를 결정하는데 고려될 것이다.

 

Delta = max(delta(pin1), delta(pin2), ... delta(pinN))

 

Minimum Delay

 

Minimum Delay set_min_delay 명령어로 지정된다. 그리고 항상 target delay보다는 크게 지정해야 한다. Design Compiler는 만약 set_fix_hold 명령어가 사용될 때만 minimum delay cost를 사용한다.

 

이유는 Design Compiler는 오직 design rule violations fix 할 때만 minimum delay가 사용되기 때문이다.

 

그래서 만약에 fix_hold가 어떤 clock에서 사용되지 않았으면 minimum delay는 고려하지 않는다. fix_hold min_delay가 명시되있다면 minimum delay optimization cost에 두 번째로 고려하게된다(첫번째는 maximum delay)

 

set_min_delay 명령어

    디자인의 timing path minimum delay를 정의한다.

set_fix_hold

    컴파일 동안에 Design Compiler가 레지스터의 hold time violations fix하라고 정의한다. 그래서 set_false_path 또는 set_multicycle_path 명령어를 써서 set_fix_hold에 영향을 받는 pathdefault path delay를 재정의 할 수 있다.

 

다음은 set_false_path 명령어와 set_multicycle_path 명령어의 부연 설명이다.

 

set_false_path : Specifies a false-path exception, removing (or cutting) paths from

timing analysis.

 

set_multicycle_path : Specifies a multicycle exception for a given set of paths.
 
Multicycles can be specified relative to the source clock (-start) or destination clock (-end). This is useful when the source clock and destination clock are operating at different frequencies.  For example, if the source clock is twice as fast (half period) as the destination clock, a -start multicycle of 2 is usually required.

 

Cost Calculation

 

Mininum delay cost path group에 영향을 미치지 않는다. 그래서 다음식이 나온다.

 

 

 

minimum delay cost 함수는 single pin or port multiple pin or port나 같은 delta 값을 가진다.

Delta = min_delay - minimum delay(pin or port)

 

min_delay set_min_delay

 

 

Maximum Area

 

Maximum area optimization constraints이다. Maximum area는 게이트의 수로 표현이 된다.

일반적으로 timing optimization 이 끝난 후에 area를 위한 optimization이 수행된다.

 

set_max_area명령어는 허용가능한 최대 area를 지정해준다. Design Compiler net area 또한 고려한다.

 

하지만 다음 3가지는 area로 고려하지 않는다.

 

Unknown components

Components with unknown areas

Technology-independent generic cells(이부분 이상함)

 

Cost Calculation

 

cost = max(0, current area – max_area)

 

Defining Maximum Area

 

Examples

dc_shell> set_max_area 0

 

Area unit is defined by the library supplier

라이브러리에 없으므로  벤더에 요구해야한다.

 

2-input NAND gate단위인지 transistor 단위인지 mil^2 or mm^2 or um^2 단위인지 물어봐야 함

 

만약에 set_max_area값에 맞추지 못한다면 그래도 최대한 area를 최적화한다. 그러나 compiler 시간이 늘어날 것이다.

 

 

 

 

 

Managing Constraint Priorities

 

 

 

 

 

 

 

어떤 상황에서는 delay의 우선순위를 높게해야 될 수 도 있다.

 

그래서

 

set_cost_priority [-default] [-delay] cost_list 로 우선순위를 바꿀 수 있다.

 

-default

    Design Compiler는 위에 명시된 순서대로 우선순위를 둔다.

-delay

    max_delay 우선권이 최우선으로 된다.

cost list

명시한 순서대로 된다.

max_delay, min_delay, max_transition, max_fanout, max_capacitance, cell_degradation, and max_design_rules.

 

Examples To prioritize max_delay ahead of the maximum design rule constraints, enter dc_shell> set_cost_priority -delay

 

To assign top priority to max_capacitance, max_delay, and max_fanout—in that order— enter

 

dc_shell> set_cost_priority {max_capacitance max_delay max_fanout}

 

위처럼 max_capacitance max_delay, max_fanout만 쓰면 나머지는 자동적으로 우선권이 낮아진다.

 

Reporting Constraints

 

report_constraint 명령어는 constraint 값을 report한다.

 

1) 현재 디자인이 constraint가 만족됬는지 아닌지

2) 얼마나 많이 constraint가 만족되는지 아닌지

3) The design object that is the worst violator

4) maximum delay 정보, path group별로 cost를 보여줌. 이것은 레지스터 또는 port setup time 또는 output delay violations뿐만 아니라 set_min_delay violations까지 보여준다.

5) minimum delay cost, 레지스터 또는 port hold time violationsset_min_delay 명령어의 violation까지 보여준다.

 

-verbose 옵션을 주면 더욱 세밀한 정보를 얻을 수 있고

-all_violators 옵션을 주면 모든 constraint violators를 볼 수 있다.

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

Chapter5 Working With Desings in Memory Part2

 

Chapter5는 내용이 많아서 2개로 나눴습니다.

 

 

Design Compiler User Guide_Version F-2011.09-SP2, December 2011.

 

linking designs

 

 

 

set search_path "$search_path libs cons .."

set link_library "* tcbn65lpvtwc.db"

 

linking 과정

 

1.     현재 디자인에서 무슨 라이브러리 컴포넌트를 썼는지 결정한다.

2.     link 라이브러리에서 사용된 라이브러리 컴포넌트가 있는지 찾는다,

è  첫 번째로 local_link_library 명령어를 쓴 라이브러리부터 찾는다.

è  두 번째로 ‘*’가 있으면 메모리에 이미 올려져있는 라이브러리부터 찾는다

è  마지막으로 link_library 명령어를 쓴 라이브러리에 찾는다.

3.     2번 과정에서 찾지못하면 search_path에 명시된 디렉토리에 있는 라이브러리를 찾아본다.

4.     찾았다면 references를 라이브러리에 매핑 시킨다.

 

linking 과정을 통해서 timing values and path delay, 파워 소비를 계산한다.

 

Chaging Design References

 

change_link 명령어를 사용해서 이미 link된 컴포넌트나 디자인의 매핑을 바꿀 수 있다.

바꿀때 항상 같은 포트 갯수와 같은 사이즈를 가지고있어야한다.

 

ex1)

MY_ADDER U1 U2를 다시 link를 하게 된다.

 

ex2)

이 경우는 U1셀의 링크를 lsi_10k/AN3로 바꾸는 것이다.

 

ex3)

 

 

이경우는 inv1인스턴스를 사용하는 곳이 bot1 bot2인 경우인데 이때는 –all_instance를 위와같이 써주면 bot2에 있는 inv1도 바뀐다.

 

 

 

 

Specifying Design object

 

 

set_dont_touch : dont_touch design이나 cell에 붙는 attribute로서 일단 set되고 나면 더 이상 re-optimzed되지 않습니다.

즉 단 한번만 컴파일이되고 그다음부터는 절대로 건들이지 않습니다.

 

db파일로 save하더라도 이 속성은 살아있습니다. cell set_dont_touch하면 해당 design cell이 변하지 않는 것이고 design set_dont_touch하면 해당 referece는 어디에 instatiated되건 수정되지 않습니다. 아래와 같이 사용됩니다.


dc_shell> current_design = TOP
dc_shell> set_dont_touch u1
또는 set_dont_touch find(cell, u1)
또는

dc_shell> current_design = BlockB
dc_shell> set_dont_touch find(design,BlockA)
report_referece report_cell 명령으로 attribute를 확인할 수 있고 remove_attribute로 속성을 삭제할 수 있습니다.

 

 

위에서 U3 U4 dont_touch속성을 했기때문에 첫번째 compile에서는 수행하지만 두번째 compile에서는 U3 U4를 컴파일하지 않습니다.

 

 

 

상대주소 지정법

 

 

current_design은 현재의 디자인(즉 모듈)을 지정하고 그 다음 U1/U15를 통해서 인스턴스를 지정해준다.

 

아니면 아래처럼 current_instance U1처럼 인스턴스를 지정해주고 set_dont_touch U15로 지정해주는 방법도 있다.

 

위처럼 current_instance로 지정하게되면 top module이 현재 경로가 된다.

절대주소 지정법

 

형식은

 

[file:]design/object 이며

 

file은 실제 파일명을 써준다. 이유는 다른 파일에 같은 object가 있는 경우가 있을 수도 있기 때문이다.

 

design dc_shell상의 design 이름을 써준다.

 

object는 실제 인스턴스 이름을 써준다.

 

 

 

Creating Designs

 

새로운 design을 만드는 방법

 

 

create_design을 하면 design object(port, wire, instance )이 아무것도 없다.

create_clock, create_cell, create_port등으로 design object를 추가해줘야한다.

 

 

 

Copying Designs

 

copy_design 명령어를 사용한다.

 

 

Renaming Designs

 

rename_design 명령어를 사용한다.

 

 

 

rename_design 옵션들

 

 

example) –prefix 사용방법

 

dc_shell> get_cells -hier -filter "ref_name == D" //D로 시작하는 인스턴스를 검색

{b_in_a/c_in_b/d1_in_c b_in_a/c_in_b/d2_in_c}//다음이 검색됨

 

dc_shell> rename_design D -prefix NEW_ -update_links//D NEW_로 바꿈

Information: Renaming design /test_dir/D.ddc:D to /test_dir/D.ddc:NEW_D. (UIMG-45) //바뀐것을 확인

 

dc_shell> get_cells -h -filter "ref_name == D"//D로 시작하는것을 찾아보니까 없음

# no such cells!

 

dc_shell> get_cells -h -filter "ref_name == NEW_D" //NEW_D로 검색이 됨.

{b_in_a/c_in_b/d1_in_c b_in_a/c_in_b/d2_in_c}

 

 

Changing the Design Hierarchy

 

Hierarchy를 볼 수 있는 방법은 report_hierarchy라는 명령어를 쓰면된다.

Design Hierarchy를 바꾸는 방법은 다음과 같다.

 

1.     Adding levels of hierarchy

2.     Removing levels of hierarchy

3.     Merging cells from different subdesigns

 

 

1.    Adding levels of hierarchy

그룹화를 통해서 hierarchy 레벨을 만들 수 있다.

group 명령어를 통해서  몇개의 셀을 새로운 subdesign으로 그룹화를 할 수 있다.

 

 

 

example1)

u1 u2를 그룹화 시켜서 디자인이름을 SAMPLE 셀이름을 U로 함

 

dc_shell > group {u1 u2} –design_name SAMPLE –cell_name U

 

example2)

alu로 시작하는 모든셀을 그룹화함. 디자인 이름은 uP 셀이름은 UCELL로함

 

dc_shell > group “alu*” –design_name uP –cell_name UCELL

 

example 3)

mid1의 아래에 bot1, foo1, j 를 그룹화함

 

dc_shell > group {mid1/bot1 mid1/foo1 mid1/j} –cell_name U1 –design_name SAMPLE

 

로 하거나

 

dc_shell > current_design mid

dc_shell > group {bot1 foo1 j} –cell_name U1 –design_name SAMPLE

 

 

 

 

bussed gate의 의미는 게이트가 멀티비트 signal로 연결됬을 때를 말한다.

VHDL block 예제

 

 

 

Example 1 To group all cells in the HDL function bar in the process ftj into design new_block, enter

 

dc_shell> group -hdl_block ftj/bar -design_name new_block

 

Example 2 To group all bused gates beneath process ftj into separate levels of hierarchy, enter

 

 dc_shell> group -hdl_block ftj -hdl_bussed

 

 

 

 

 

 

Removing Levels of Hierarchy

 

Design Compiler hierarchical 경계를 넘어서 최적화 하지는 않는다. 만약에 이러한 hierarchy를 없애면 타이밍 결과에 있어서 좀더 장점이 있을 것이다.

 

그래서 ungrouping이라는 방법으로 hierarchy를 없앨 수 있다. ungrouping은 최적화전이나 최적화하는 동안에 끝난다. ungrouping을 하면 해당 셀이 부모셀로 들어가게 된다.

 

유의할 점

만약에 design, subdesigns, 그리고 셀이 dont_touch 속성을 가지고 있다면 ungroup을 할 수 없다.

 

 

 

 

 

간단히 말해서

 

-flatten은 그룹을 한 개로 만들고

-start_level number 는 층이 number층이 될때까지 만들고

-prefix prefix_name ungroup된 것에 앞에 이름을 붙이고

-small number leaf cell의 갯수가 최소 number가 될 때까지 수행함.

 

 

Example 1 To ungroup a list of cells, enter

dc_shell> ungroup {high_decoder_cell low_decoder_cell}

 

 

Example 2 To ungroup the cell U1 and specify the prefix to use when creating new cells, enter

dc_shell> ungroup U1 -prefix "U1:

 

 

Example 3 To completely collapse the hierarchy of the current design, enter

dc_shell> ungroup -all flatten

 

 

Example 4 To recursively ungroup cells belonging to CELL_X, which is three hierarchical levels below the current design, enter

dc_shell> ungroup -start_level 3 CELL_X

 

 

Example 5 To recursively ungroup cells that are three hierarchical levels below the current

 

design and belong to cells U1 and U2 (U1 and U2 are child cells of the current design), enter

dc_shell> ungroup -start_level 2 {U1 U2}

 

 

Example 6 To recursively ungroup all cells that are three hierarchical levels below the current design, enter

dc_shell> ungroup -start_level 3 -all

 

 

Example 7 This example illustrates how the ungroup command can accept instance objects (cells at a lower level of hierarchy) when the parent design is unique.

 

 In the example, MID1/BOT1 is a unique instantiation of design BOT.

 

The command ungroups the cells MID1/BOT1/FOO1 and MID1/BOT1/FOO2.

dc_shell> ungroup {MID1/BOT1/FOO1 MID1/BOT1/FOO2}

 

 

The preceding command is equivalent to issuing the following two commands:

dc_shell> current_instance MID1/BOT1

dc_shell> ungroup {FOO1 FOO2}

 

 

Ungrouping Hierarchies Explicitly During Optimization

 

최적화하는 동안 ungrouping을 하려면 set_ungroup 명령어를 사용한다.

다음은 사용 방법이다.

 

For example, to ungroup cell U1 during optimization, enter the following commands:

dc_shell> set_ungroup U1

dc_shell> compile

 

만약에 ungroup 속성을 확인하고 싶으면

dc_shell > get_attribute object ungroup

 

ungroup 속성을 제거 하려면

dc_shell > set_ungroup object false

 

모든 lower level hierachy 를 제거 하려면

dc_shell > compile –ungroup_all

 

Ungrouping Hierarchies Automatically During Optimization

 

최적화하는 동안 자동적으로 ungrouping하려면 compile_ultra compile –auto_ungroup 을 쓴다

 

compile_ultra는 타이밍 최적화에 중점을 둔 ungrouping이고

 

compile –auto_ungroup area

compile –auto_ungroup delay

로 타이밍이나 area측면으로 ungrouping을 할 수 있다.

 

 

 

 

 

Preserving Hierarchical Pin Timing Constraints

 

Compile flow

Effect on hierarchical pin timing constraints

Ungrouping a hierarchy before optimization by using ungroup

timing constraint가 보존된다.

ungroup_preserve_constraints 변수를 false로 두면 보존되지않는다.

Ungrouping a hierarchy during optimization by using compile –ungroup_all or set_ungroup follwed by compile

timing constraint가 보존되지 않는다.

auto_ungroup_preserve_constraints 변수를 true로 두면 보존된다.

Automatically ungrouping a hierachy during optimizationm that is, by using the compile_ultra or compile –auto_ungroup area|delay command

timing constraint가 보존되지 않는다.

auto_ungroup_preserve_constraints 변수를 true로 두면 보존된다.

 

만약에  timing constraints를 보존하게 된다면 이 constraint는 인접한 핀으로 재할당하게 되는데 이때 인접한 핀이 leaf cell이면 size_only라는 속성을 할당하게 된다. size_only셀이 증가하면 최적화할 때 제한이 많아지게 된다.(이유는 더이상 쪼개질수 없는 leaf cell에 많은 contraint가 걸리게되므로)

 

set_false_path

set_multicycle_path

set_min_delay

set_max_delay

set_input_delay

set_output_delay

set_disable_timing

set_case_analysis

create_clock

create_generated_clock

set_propagated_clock

set_clock_latency

 

Note: The set_rtl_load constraint is not preserved. Also, only the timing constraints of the current design are preserved. Timing constraints in other designs might be lost as a result of ungrouping hierarchy in the current design.

 

 

 

Merging Cells From Differnt Subdesigns

 

다른 subdesign에서 하나의 셀로 합치는 법

 

dc_shell> group {u_add u_mult} -design alu

dc_shell> current_design alu

dc_shell> ungroup -all

dc_shell> current_design top_design

위와같은 순서로 하면 u_add u_mult alu라는 디자인으로 만들어지고 ungroup을 통해서 완전히 하나의 셀로 된다. (u_add u_mult가 각각 트리로 이루어져있으면 ungroup을 해야 하나의 완전한 셀로 된다.)

 

Editing Designs

 

다음 명령어로 메모리안에 있는 디자인을 에디트할 수 있다. 이 명령어로 외부 포맷 대신에 dc_shell로 디자인 수정을 할 수 있다.

 

 

 

example)

dc_shell> create_cell mid1/foo my_lib/AND2

 

mid1 design foo라는 셀을 추가시킴 이때 셀은 my_lib/AND2를 가져옴.

 

dc_shell> get_pins U8/*

{"U8/A", "U8/Z"}

dc_shell> all_connected U8/A

{"n66"}

dc_shell> all_connected U8/Z

{"OUTBUS[10]"}

dc_shell> remove_cell U8

Removing cell ’U8’ in design ’top’. 1

dc_shell> create_cell U8 IVP

Creating cell ’U8’ in design ’top’. 1

dc_shell> connect_net n66 [get_pins U8/A]

Connecting net ’n66’ to pin ’U8/A’. 1

dc_shell> connect_net OUTBUS[10] [get_pins U8/Z]

Connecting net ’OUTBUS[10]’ to pin ’U8/Z’.

 

위처럼 하면 all_connected 명령어를 통해서 어느 넷이나 포트 핀에 연결되있는지 확인하고 그다음 remove_cell로 셀을 삭제한다.

create_cell IVP(인버터 파워가 큰)타입으로 U8을 만들고 connect_net으로 넷을 연결 시켜주면된다..

 

위 과정을 다음 한줄로 요약할 수 있다.

 

dc_shell > change_link U8 IVP

 

 

Resize a cell

 

get_alternative_cell 명령어로 다른 라이브러리 셀을 가져온다.

그리고 size_cell 명령어로 leaf cell drive strength를 바꿀 수 있다.

 

Inserting buffers or inverter pairs

 

insert_buffer 명령어로 핀이나 포트에 버퍼를 추가 할 수 있다.

-inverter_pair 옵션을 주면 single non-inverting 라이브러리 셀 대신에 inverting library의 쌍을 삽입한다.

 

 

 

 

 

single input non inverting buffer

 

Removing buffers

 

remove_buffer 커맨드를 사용한다.

 

Translating Designs From One Technolygy to Another

 

한 디자인을 현재 라이브러리에서 다른 라이브러리로 바꿀때 translate 명령어를 사용한다.

 

Translating Designs in Design Compiler

 

1. Read in your mapped design.

dc_shell > read_file design.ddc

 

2. 타겟 라이브러리 설정

dc_shell > set target_library target_lib.db

 

3. translate 실행

dc_shell  > translate

 

Translating Designs in Design Compiler Topographical Mode – 생략

 

Restrictions on Translating Between Technologies

 

bus = driver = buffer

 

다른 Technology translating 할 때 유의해야 할 점

1. translate 는 기능적으로는 변환하지만 drive strength는 변할 수 있다. 항상 라이브러리에서 가장 작은 drive strength를 쓰기 때문이다.

2. CMOS 3-state components FPGA translate할 때 기능적으로 같은 technology에는 존재하지 않을 수도 있다.

3. Buses driven CMOS 3-state components는 반드시 모두 디코드 해야한다. 이 경우에는 Bus drivers 가 컨트롤 로직으로 translate 된다.

이렇게 하기 위해서는 translating 전에 compile_assume_fully_decoded_three_state_buses 변수를 true로 해야한다.

4. 3-state 버스가 한 디자인 안에 하나 또는 많은 수의 아웃풋 포트와 연결되었다면 버스를 translating을 할 때 포트의 기능적인 변화가 일어난다 그래서 에러가 날 것이다.

 

Removing Designs From Memory

 

dc_shell메모리에서 디자인을 지우고 싶다면 remove_design 커맨드를 쓰면된다.

-all 옵션은 모든 디자인과 라이브러리를 메모리에서 지운다.

 

dc_shell> set PORTS [all_inputs]

 {"A0", "A1", "A2", "A3"}

dc_shell> query_objects $PORTS

PORTS = {"A0", "A1", "A2", "A3"}

dc_shell> remove_design

Removing design ‘top’ 1

dc_shell> query_objects $PORTS

Error: No such collection ‘_sel2’ (SEL-001)

 

 

 

 

 

 

 

Saving Design format.

다음은 Design Compiler가 제공가는 save 포맷이다.

 

 

 

 

Commands to Save Design Files

 

저장하는 명령어는 write write_milkyway가 있다.

 

write의 사용

 

 

 

 

 

 

Example 1 The following command writes out all designs in the hierarchy of the specified design:

 

다음과같이 hierarchy 옵션을 주면 subdesign까지 모두 저장된다.

dc_shell> write -hierarchy -format ddc top

Writing ddc file top.ddc

Writing ddc file A.ddc

Writing ddc file B.ddc

 

 

Example 2 The following command writes out multiple designs to a single file:

 

다음과같이 output 파일명을 적어주면 그 파일명으로 저장된다.

dc_shell> write -format ddc -output test.ddc {ADDER MULT16}

Writing ddc file test.ddc

 

set_attribute 명령어 사용

 

dc_shell > set_attribute lsi_10K/FJK3 dont_touch true

이렇게 하면 lsi_10K dont_touch 속성이 된다.

 

dc_shell > report_attribute –obj_type object

이렇게 하면 objectattribute를 모두 볼 수 있다.

 

dc_shell> get_attribute OUT7 max_fanout

Performing get_attribute on port ’OUT7’.

{3.000000}

위처럼하면 max_fanout에 관한 속성만 볼 수 있다.

 

 

attribute 값을 저장하려면

 

dc_shell > write_script > attr.scr

 

이런식으로 write_script 연산자를 쓴다.

 

dc_shell > remove_attribute OUT7 max_fanout

 

remove_attribute 명령어를 통해서 OUT7 max_fanout 속성을 지울수 있다.

 

dc_shell> reset_design

Resetting current design ’EXAMPLE’.

1

 

reset_design을 하면 모든 클럭이나 인풋 아웃풋 딜레이, 작동조건, 타이밍 조건 등의 모든 정보들이 없어진다.

 

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

5. Working With designs in memory

 

Design Compiler chapter 5를 요약한 내용입니다.

 

Design Compiler User Guide_Version F-2011.09-SP2, December 2011.

 

Design Terminology

 

1. Flat Design

 

contain no subdesigns and have only one structural level.

 

2. hierarchical designs

 

contains one or more designs as subdesigns.

 

 

hierarchical design 예제

 

Design Objects의 종류

 

 

 

 

design

디자인은 인스턴스, , 포트 핀으로 구성되있는 것을 말한다.

 

REFERENCE

디자인의 라이브러리 컴포넌트이다. 단순한 로직 게이트부터 RAM 이나 CPU같은 복잡한 로직도 포함한다.

 

Instance or Cell

레퍼런스의 회로들을 메모리 상에 로딩된 것들이다.

각 인스턴스는 유일한 이름을 가지고있다.

 

Ports

디자인의 input, output

 

pins

셀의 input output

 

nets

 

port to pin이나 pin to each other가 연결된 wire이다.

 

Relationship Between Designs, Instances, and references

 

 

 

U1, U2, U3 는 인스턴스

 

NAND2 MULTIPLIER Reference

 

EXREF는 디자인

 

Reporting References

 

command report_reference -hierarchy

 

현재 디자인에 사용된 모든 reference report한다.

-hierachy옵션 적용시 hierarchy형태로 출력한다.

 

만약 get_references reference_name을 입력하면 reference에 대한 정보를 볼 수 있다.

 

 

 

 

 

 

 

Reading Designs

 

다음은 Design Compiler가 읽을 수 있는 포맷이다.

 

 

 

 

Using the analyze and elaborate Commands

 

using the analyze command

 

1.     Reads an HDL source file.

2.     Checks it for errors(without building generic logic for the design)

3.     Creates HDL library objects in an HDL-independent intermediate format.

4.     Stores the intermediate files in a location you define

 

 

To do this

Use this

Store design elements in a library other than the work library. For override

-library

By default, the analyze command stores all output in the work library.

Specify the format of the files to be analyzed.

-vhdl or –verilog

Specify a list of files to be analyzed.

file_list

 

using the elaborate command

 

1.     Translates the design into a technology-independent design (GTECH) from the intermediate files produced during analysis.

2.     Allows changing of parameter values defined in the source code

3.     Allows VHDL architecture selection

4.     Replaces the HDL arithmetic operators in the code with DesignWare components

5.     Automatically executes the link command, which resolves design references

 

 

 

 

VHDL Entity로 설계의 인아웃을 정의하고 실제 내용은 architecture의 부분에 기술한다.

한 개의 Entity에 여러개의 architecture가 있을 수도 있지만 1:1로 대응시키는 것이 일반적이다.

 

To do this

Use this

Specify the name of the design to be built(the design can be a Verilog module, a VHDL entity, or a VHDL configuration).

-design_name

Find the design in a library other than the work library(the default).

-library

Specify the name of the architecture.

-architecture

Automatically reanalyze out-of-date intermediate files if the source can be found.

-update

Specify a list of design parameters.

-parameters

 

 

 

 

 

 

 

 

using the read_file command

 

1.     Reads several different formats

2.     Performs the same operations as the analyze and elaborate commands in a single step.

3.     Creates .mr and .st intermediate files for VHDL

4.     Does not execute the link command automatically.

5.     Does not create any intermediate files for Verilog

 

 

위처럼 link 명령어를 써줘야한다.

 

Design Compiler path_name/design.ddc파일을 만드는데 만약에 읽었던 파일을 또 한번 더 읽으면 이 ddc파일을 overwrite한다. 이게 싫다면 –sigle_file option을 주면된다.

 

만약에 압축된 파일일 경우 확장자가 .gz면 사용이 가능하다.

 

다음은 사용할 수 있는 format 리스트이다.

 

1.     ddc. format : Uses the .ddc extention.

2.     db format : Uses the .db, .sldb, .sdb, .db.gz, .sldb.gz, and .sdb.gz extensions

3.     Verilog format : Uses the .v, .verilog, .v.gz, and .verilog.gz extentions

4.     System Verilog : Uses the.sv, .sverilog, .sv.gz, and .sverilog.gz extentions

5.     VHDL : Uses the .vhd, .vhdl, vhd.gz, and .vhdl.gz extensions

 

 

 

To do this

Use this

Specify a list of files to be read.

file_list

Specify the format in which a design is read.

-format

Store design elements in a library other than the work library(the default) when reading VHDL design descriptions.

-library

Read a Milkyway ILM view.

(Milkyway Synopsys database)

-ilm

Specify that the design being read is a structural or gate-level design when reading Verilog or VHDL designs.

-netlist –format\verilog|vhdl

Specify that the design being read is an RTL design when reading Verilog or VHDL designs.

-rtl –format\verilog|vhdl

 

 

milkyway 부연 설명

 

Synopsys 사의 Tool을 이용하여 IC Design을 하다보면, 가장 자주 만나는 것이 바로 Milkyway Database. Milkyway 라는 이름의 Tool이 따로 존재하고 있어서 처음에는 이 Tool을 사용하는 데이터만을 일컫는 줄 알았으나, Synopsys사의 Tool 전반에 걸쳐 사용되는 Database라고 생각하면 된다. Design Compiler, IC Compiler, Astro 등의 모든 툴에서 이러한 Milkyway Database 포맷을 사용하고 있다.

The Milkyway database is the unifying design storage format for the Synopsys Galaxy Design Platform.



IC
Design할 때 사용되는 정보로는, Power, Ground, Clock, Signal에 대한 Routing information Cell dimension, border, pin location, mask layer 등과 함께 Wire tracks, antenna, electromigration 등의 technology 정보들이 있는데 이러한 모든 physical library information을 저장하는 일종의 저장 형식.


이러한 정보들을 Cell 단위로 저장하게 되는데, Milkyway 에서는 각 Cell의 정보를 몇 가지의 다른 representation으로 나타내고 있다
.

  • CEL view: via, standard cell, macro, whole chip, netlist에 대한 정보를 모두 포함하고 있는 Full physical structure layout view. 모든 Milkyway library cell은 반드시 이 CEL view를 가지고 있다.
  • FRAM view: abstract representation. P&R(Placement and routing)할 때 사용되는 view. 따라서 외부에서 바라보는 정보만 가지고 있으면 되는데, metal blockage, allowed via area, pin에 대한 정보를 가지고 있다.
  • ILM view: Interface logic model에 대한 정보
  • FILL view: Metal fill에 대한 정보. P&R 마지막 과정에서 Metal Density Constraint를 맞추기위해 넣어지는 Metal fill layer (당연히 Logical function이 없다.)
  • ERR view: Design Rule violation에 대한 정보를 담고 있는 Layer view

 

출처 TechMemosla의 블로그 http://thinkpiece.tistory.com

 

read_file analyze elaborate 명령어의 차이점.

 

 

 

 

read_ddc

 

dc_shell > read_ddc design_file.ddc

 

이전버젼의 소프트웨어 ddc파일은 읽는게 가능하나 이후버젼의 소프트웨어 ddc파일은 읽는게 불가능하다.

 

dc_shell > read_db design_file.db

 

db파일 또한 마찬가지이다.

 

 

 

 

메모리상에 올라온 design listing.

 

list_designs 명령어와 –show_file 옵션을 주면된다.

 

-show_file은 파일까지 표시한다. 이때 *는 현재 디자인을 의미한다.

 

 

 

 

 

현재 디자인 세팅

 

read_file로 파일 읽어오기

 

 

 

current_design 명령어로 탑모듈 설정

 

 

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

Technology Libraries

 

Technology libraries contain information about the characteristics and functions of each cell provided in a semiconductor vendor’s library.

 

Implementing the design function

 

Technology libraries는 최적화할때 target libraries로 매핑을 한다.

target libraries는 넷리스트나 design 동작 조건 같은 cell을 포함한다.

 

 

 

 

Resolving cell references

synthesis 과정 중 linking 할 때 reference link libraries에 연결한다.

Calculationg timing values and path delays

link libraies는 타이밍 값과 path 딜레이를 계산한다.

Calculating power consumed

 

 

Symbol Libraries

Symbol libraries 라이브러리 셀을 나타내기위한 그래픽 심볼을 포함한다.

design schematic Design Vision으로 볼 수 있다.

 

DesignWare library는 재사용 가능한 circuit-design building blocks들이다.

 

Specifying Libraries

 

Library type

variable

default

file extention

Target library

target_library

{“yout_library.db”}

.db

Link library

link_library

{“*”, “your_library.db}

.db

Symbol library

symbol_library

{“your_library.sdb”}

.sdb

DesignWare library

synthetic_library

{}

.sldb

 

 

Specifying Technology Libraries

 

Target Library

Design Compiler target library를 회로를 만들때 사용한다. 매핑할때 DC는 기능적으로 정확한 GATE target library에서 선택한다. 이것으로 타이밍 딜레이 등을 계산한다.

 

use the target_library 변수로 target library를 구체화한다.

 

Link library

linking the design 과정에서 Link library를 쓴다.

 

link_library 변수

이것은 라이브러리 리스트를 명시하고 dc는 이 라이브러리를 linking 과정에서 사용하게 된다.

처음에 라이브러리를 모두 메모리에 올린다.

*의 의미는 dc는 레퍼런스를 메모리에서 찾으라는 뜻이다.

 

local_link_library 특성

 

local_link_library 속성을 쓴 디자인 파일이나 라이브러리를 link_library 맨앞에 붙인다.

 

link_library를 한 곳에서 동작 조건, wire load selection group, wire load mode, net delay calculation을 계산한다.

 

동시에 minimum and maximum timing analysis

 

set link_library “*, maxlib.db” //최대 타이밍 분석 라이브러리

set_min_library maxlib.db –min_version minlib.db//최소 타이밍 분석 라이브러리

 

 

라이브러리 loading

dc_shell > read_file my_lib.db

dc_shell > read_file my_lib.sdb

 

 

Listing Libraries

 

list_libs를 쓰면 현재 사용하고 있는 라이브러리를 볼 수 있다.

 

 

 

 

Reporting Library Contents

 

report_lib로 라이브러리 내용을 리포트 할 수 있다.

1. library units

2. operating conditions

3. wire load models

4. cells(including cell exclusions, preferences, and other attributes)

 

specifying library objects

[file:] library/cell[/pin]

 

file : technology file name, 여러개 라이브러리 쓰면 반드시 써줘야됨

 

library

 

라이브러리 이름

 

cell

라이브버리 셀 이름

 

Example 1)

dc_shell> set_dont_use my_lib/AND4

 

my_lib에서 AND4셀을 쓰지 말라는 뜻

 

Example 2)

dc_shell> set_disable_timing [get_pins my_lib/AND4/Z]

 

my_lib library안에 AND4 Z핀을 사용하지 말라는 뜻

 

 

Excluding Cells From the Target Library

 

Example 1)

dc_shell> set_dont_use MY_LIB/INV_HD

다음 명령어는 MY_LIB라이브러리에 INV_HD를 쓰지 말라는 뜻

 

Example 2)

dc_shell> remove_attribute MY_LIB/INV_HD dont_use

위에 썼던 dont_use 속성을 다시 사용하라는 뜻.

 

 

 

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

Organizing the Design Data.

 

  • Establishing and adhering to a method of organizing data are more important than the method you choose.

 

 

 

Partitioning for Design Reuse

 

  • Design reuse decreases time to market by reducing the design, integration and testing effort.
  1. Thoroughly define and document the design interface.
  2. Standardize interfaces whenever possible.
  3. Parameterize the HDL code.

 

 

Keeping Related Combinational Logic Together

 

  • Dividing related combinational logic into separate blocks introduces artificial barriers that restrict logic optimization.
  1. Group related combinational logic and its destination register together.

-> DC has the flexibility to merge logic, resulting in a smaller, faster design.

조합회로와 레지스터를 묶으라는 뜻입니다.

 

2. Eliminate glue logic.

 

glue 로직이란 복잡한 조합회로가 서로 연결되있는 것을 말합니다.

 

 

 

 

 

Registering Block Outputs

 

  • This method enables you to constrain each block easily because
  •  The drive strength on the inputs to an individual block always equals the drive strength of the average input drive.
  •  The input delays from the previous block always equal the path delay through the flip-flop.

 

 

 

 

Partitioning by Design Goal

 

When certain parts of a design are more area and timing critial than other parts.

  •  Isolate the Two type.

           1. Noncritical speed constraint logic

           2. Critical speed constraint logic

 

 

 

 

Partitioning by Compile Technique

 

When the design contains highly structured logic along with random logic.

  •  Isolate the Two type.

           1. Highly structured logic. ex) error detection circuitry

           → Use the Structuring Technique.

           Result : Reduced design area.

           2. Random logic.

           → Use the Flattening Technique.

           Result : Reduced speed optimization.

          

 

 

  1. Structuring Technique

           Adds intermediate variables and thus logic structure.

 

 

  1. Flattening Technique

           Goal is to create a 2 level S.O.P.

           Two edged sword:

                     Remove bad structure.

                     Remove good structure as well.

          

 

오른쪽을 왼쪽처럼 바꾸는 것입니다.

 

 

 

 

 

Keeping Sharable Resources Together

 

Design Compiler can share large resources such as adder or multiplier.

  •   Caution !  Only if the resources belong to same Always block.

 

 

 

 

 

Keeping User-Defined Resources With the Logic They Drive

 

Design Compiler cannot automatically share or create multiple instances of user-defined resources.

Inserting multiple instiations of User-Defined Resources by manually.

 

 

 

Writing technology-independent HDL

 

  1. Inferring Multiplexers

           HDL Compiler can infer a generic multiplexer cell(MUX_OP) from case statements in your HDL code.

 

 

 

2.   Inferring Registers & Mixing Register Types

           HDL Compiler infers a D flip-flop whenever the sensitivity list of a Verilog always block.

           If the target library have not a D-latch, DC synthesizes the combinational logic.

 

 

 

 

 

 

3.        Inferring Three-State Drivers

           Assign the high-impedance value to the output pin to have DC infer three-state gates.

           HDL Compiler는 조건문에서 high-impedance 값을 항상 false로 한다.

 

 

 

 

 

 

 

 

 

 

4.        Inferring Multibit Components

           Multibit inference allows you to map registers, mux and three-state cells to regularly structured logic or multibit library cells.

 

 

 

 

 

 

5. Designing State Machines

     1) State minimization can be performed.

     2) Tradeoffs between different encoding styles can be made.(ex Gray encoding)

     3) Don’t care conditions can be used without flattening the design.

     4) Don’t care state codes are automatically derived.

 

 

Using HDL Constructs

 

  1. Sensitivity Lists

           You should completely specify the sensitivity list for each always block.

 

 

 

 

  1. Value Assignments

           Use nonblocking assignments(<=) within sequential Verilog always block.

           Use blocking assignments(=) within combinational Verilog always block.

 

3.        if Statements

           if만 쓰고 else 항목을 쓰지 않으면 latch가 생긴다.

 

 

4.        case Statements

           case 문에는 반드시 default를 써서 latch의 발생을 예방하자.

 

 

 

 

5.        Constant Definitions

           Use the Verilog `define statement.

 

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그

 다음은 SoC 합성 툴인 Synopsys의 Design Compiler User 가이드의 요약입니다.

 

 

Design Compiler User Guide_Version F-2011.09-SP2, December 2011.

 

 

Basic High-Level Design Flow

 

 

Design exploration :  구체적인 디자인 목표를 위해 실제 implement Default option으로  합성 시작

Functional simulation : 원하는 기능을 수행하는지 확인

Design implementation : 실제 option을 적용시켜서 합성 시작 결과는 gate level netlist

Physical design : semeconductor vendor에서 실제 칩 디자인

 

 

DC Setup Files

 

  • Setup filesDC가 실행될 때 자동적으로  읽는 파일

       .synopsys_dc.setup

  • Possible locations(read in this order)

           1. Root setup:

           $SYNOPSYS/admin/setup/.synopsys_dc.setup

           2. Home setup:

           $HOME/.synopsys_dc.setup (optional)

           3. Local setup:

           ./.synopsys_dc.setup (optional)

  • Use to customize the work environment

 

 

.synopsys_dc.setup example

 

set search_path "$search_path libs cons .."
set target_library tcbn65lpvtwc.db

set synthetic_library “standard.sldb dw_foundation.sldb”
set link_library "* tcbn65lpvtwc.db"
set symbol_library tcbn65lplvt.sdb


define_design_lib MY_WORK –path ./WORK

#example : removing high drive inverter

set_dont_use lsi_10k/IVP

 

 

3. set search_path "$search_path libs cons .."

 

  • 구체적인 디렉토리 path를 안 쓰고 파일을  읽음.
  •  DesignCompiler  library/design .db파일을 찾을 때의 디렉토리

 

4. set target_library tcbn65lpvtwc.db

  • Target library를 설정
  •  Synthesis 과정 중 Compile시 여기서 설정한 Standard cell를 사용하여  합성

 

5. set synthetic_library standard.sldb dw_foundation.sldb

  • Library of DesignWare components
  •  dw_foundation.sldb

1) Wide variety moderate/high performance arithmetic architectures

2) FIFOs, stacks, counters, digital PLL, arbiters, priority encoders...

3) Macrocells : 8051 microcontroller, 16550 UART ....

 

 

6. set link_library tcbn65lpvtwc.db

 

 

 

 

  • Synthesis 과정 단계 중 linking 할 때 referenceLink Libraries에 연결

 

7. set symbol_library tcbn65lpvtwc.sdb

  • Symbol library design-vision에서 각각의 gate에 대한 symbol을 표기하기 위한 library
  •  보통은 foundary에서 제공하고 schematic view에서 gate module을 그릴 때 사용

 

8. define_design_lib MY_WORK path ./WORK

  • CompileIntermediate Design files의 디렉토리 경로 설정
  •  Default   DesignCompiler가 동작하는 디렉토리

 

9. set_dont_use lsi_10k/IVP(lib or cell name)

  • 사용하지 않을 target librarysynthetic library를 설정

  example)

  •  If your technology library has many drive strengths for each cell function,

  consider using set_dont_use for the highest drive strength of each cell function.

 

 

               

Basic Synthesis Flow 설명

 

 

 

 

  1. Specify librariey
  • Design Compiler가 사용 할 library를 지정
  • target library, link library, symbol library를 선언

2.   Read design

  •  User synthesis design(.v file)을 읽는 과정
  •  Design Compiler RTL, gate-level netlist 등으로 읽기 가능.

        3.   Define design environment

  • Operating condition(Process, 전압, 온도) wire load model, system interface 등을 지정

    4.   Select compile strategy

  •      top-down 방식, bottom-up 방식 또는 customized 방식 지정

 

 

5. Set design constraints


Design synthesis에 필요한 constraints를 설정

 

Constraints?


1) design rule constraints
transition time, fanout load, capacitance와 같이 chip의 원할한 동작을 위해 foundary에서 제공하는 minimum requirement라고 생각하면 된다.


2) optimization constraints는 timing, area와 같이 user optimized chip을 만들기위해 지정해야하는 constraints이다.

 

 clock의 정보, port timing, combinational path, maximum area 등을 여기에서 지정해준다.

 

6. synthesize and Optimize the design


Compile command를 사용하여 Design Compiler libraryconstaints를 기반으로 synthesis를 수행하는 단계이다
.

7. Analyze and debug the design


Synthesis가 끝나면 report를 보고 timing이나 area violators를 확인하고 debugging하는 단계이다
.

8. Save the design database


Synthesis
가 끝난 design write 명령어를 사용하여 저장한다.

 

 

Design Compiler 실행방법

  1. dc_shell 을 친다음 필요한 모든 라인을 친다.
  2. script  파일(.tcl)을 만들고 source run.tcl 을 친다.
  3. UNIX(혹은 리눅스)에서 $dc_shell –f run.tcl을 친다.

 

 

블로그 이미지

가카리

소프트웨어와 하드웨어 프로그래밍, 취업 및 직장생활 전문 블로그