You are on page 1of 16

How to read a

Synopsys Liberty
File

-Richa Gupta

Agenda
Liberty File Structure
 Deriving the Functional Information
 Deriving the Timing Information
 Deriving the Power Information


Liberty file structure




Structural Info
Each cells connectivity to
the outside world including
cell bus pin description

Functional info
Describe logical functional
of every output pin

Timing Info
Parameters for pin-to-pin
timing relationship and
delay calculation for each
cell

Environmental info
Describes manufacturing
process, operating
temperature, supply
voltage

Information that can be


extracted







Number of cells in the design


Number, Name, direction, constraints on pins for
each cell
Functionality of the cells
Timing arcs associated with any pin
Operating condition on which the timing/power
values are calculated
Units of the different values
Time, voltage, current, resistance, cap, leakage power




Delay and Slew Attributes


Wire load and derating factors not discussed . Only
NLDM is discussed

Deriving Functionality


Combinational Functionality of an
output/inout pin
function : "Boolean expression" ;
three_state : "Boolean expression" ;
x_function : "Boolean expression" ;

Sequential cell functionality


Ff/latch or statetable format

Pin Attributes

















library (lib_name) {
...
}
cell (cell_name) {
...
bus (bus_name) {
... bus group description ...
}
bundle (bundle_name) {
... bundle group description ...
}
pin ( name | name_list ) {
... pin group description ... capacitance :
valuefloat ;
}
}

Multiple comma separated


pin names.
Bus vector is defined as a
pin in the form of range.
Pin(A[0:3]) or bus (A)
Pins inside a bus can be
defined
Direction, transition,
capacitance

Defining IO Delay


Pin() attributes
To define the condition that causes the pin to go
to high-impedence : Three_state

Timing() group Attributes


To identify timing arc startpoint :
Related_(bus)_pin(s)
To define logical effect of input pin on output pin
: Timing_sense
To define an arc as combinational or sequential :
Timing_type


To define a transition delay:


Rise_transition/Fall_transition
To define cell delay : Cell_rise/Cell_fall retaining
rise/fall

Deriving Propagation
delay



Simple delay paths


Edge Sensitive
Path
State dependant
paths(conditional)

Deriving Tri-State delay


























timing () {
cell() {

timing_sense : negative_unate;
pin(A) {..}

timing_type : three_state_disable;
pin(En) {.}

related_pin : "En";
pin(Y) {

cell_rise(d_5x1) { values( " ... " );
direction : output;

rise_transition(d_5x1) { values( " ... " );}
function : "A'";

cell_fall(d_5x1) { values( " ... " );}
three_state : "En'";

fall_transition(d_5x1) { values( " ... " );} } } }
timing () {
timing_sense : negative_unate;
related_pin : "A";

If a 1 on the control pin of a causes a Z value
cell_rise(lu5x5) { values( " ... " );}
on the output pin, then:
rise_transition(lu5x5) { values( " ... " );}

timing_sense is positive_unate for the
cell_fall(lu5x5) { values( " ... " );}
three_state_disable timing type and
fall_transition(lu5x5) { values( " ... " );} }
negative_unate for the
three_state_enable timing type.
timing() {
timing_sense : positive_unate;

If a 0 on the control pin causes a Z value on the
output pin, then:
timing_type : three_state_enable;

timing_sense is negative_unate for
related_pin : "En";
cell_rise(delay_5x5) { values( " ... " );}  the three_state_disable timing type and
rise_transition(delay_5x5) { values( " ..." );}positive_unate for the three_state_enable
timing type.
cell_fall(delay_5x5) { values( " ... " );}
fall_transition(delay_5x5) { values( " ... " );} }

Defining Timing checks




Timing() group Attribute, to define an arc as


combinational or sequential : Timing_type:
Setup/Hold
Recovary/Removal
Pulse width/period

Deriving Setup Time






Simple arcs
Edge Sensitive arcs
State dependant
arcs(conditional)

Power


Leakage power of the cell


cell_leakage_power : valuefloat ;
or

leakage_power ( ) {
when : "Boolean expression";
value: float;
}

Dynamic power, pin level attribute

Internal_power(){
Related_pin :
When :
Fall_power(){}
Rise_power(){}

Reading a memory














cell () {
memory() {
type : ram/rom;
address_width : 10;
word_width : 8;
column_address : "0:4 5";
row_address : "6:9";
}
Bus(){
memory_write() {
address : ram_addr;
Clocked_on : WR;
}









bus(data_out){
memory_read() {
address : ram_addr;
}
pin (WR) {
}
}

Reference Wave Forms

Reference Wave Forms

Reference Wave Forms

You might also like