하드웨어 설계/Design Compiler User Guide

Chapter 6 Defining the Design Environment

가카리 2012. 9. 2. 14:50
반응형

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

 

 

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

 

 

 

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를 볼 수 있다.