Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

How to identify driver and loads of a net from SPEF file

Status
Not open for further replies.

ttxs

Junior Member level 1
Joined
Jun 26, 2013
Messages
16
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Activity points
249
I need to identify driver and loads of a particular net. But I have some trouble understanding the syntax of SPEF file.
The following is an example with 2 nets:
*CONN
*P *1803 O
*I *4393:Y O *L 0.0000 *D TGAMUX2XC

*CAP
1 *3608:2 0.000184248
2 *3608:3 0.0002920536
3 *3608:4 0.0002920536
4 *3608:8 0.000184248

*RES
1 *3608:1 *3608:7 6.4000
2 *3608:2 *3608:8 12.9279
3 *3608:3 *3608:2 6.4000
4 *3608:4 *3608:3 23.2703
5 *3608:5 *3608:4 6.4000
6 *1803 *3608:9 6.4000
7 *3608:7 *4393:Y 6.4000
8 *3608:8 *3608:1 6.4000
9 *3608:9 *3608:5 6.4000
*END

*D_NET *3609 0.227900

*CONN
*P *1804 O
*I *4394:YB O *L 0.0000 *D TGAINVXP

*CAP
1 *3609:2 0.00946297728
2 *3609:3 0.0274368132
3 *3609:4 0.02818641744
4 *3609:5 0.00074960424
5 *3609:6 0.01940868432
6 *3609:8 0.01940868432
7 *3609:12 0.00946297728
8 *3609:15 0.0274368132
9 *3609:17 0.0274368132
10 *3609:18 0.0274368132
11 *3609:20 0.0274368132

*RES
1 *3609:1 *3609:11 6.4000
2 *3609:2 *3609:12 663.9791
3 *3609:3 *3609:2 6.4000
4 *3609:4 *3609:20 2186.1150
5 *3609:5 *3609:4 59.7271
6 *3609:6 *3609:4 6.4000
7 *3609:7 *3609:5 6.4000
8 *3609:8 *3609:6 1361.8294
9 *3609:p_ou_783:9 *3609:13 6.4000
10 *3609:p_ou_783:10 *3609:14 6.4000
11 *3609:11 *4394:YB 6.4000
12 *3609:12 *3609:1 6.4000
13 *3609:13 *3609:7 6.4000
14 *3609:14 *3609:8 6.4000
15 *3609:15 *3609:3 2186.1150
16 *3609:16 *3609:15 6.4000
17 *3609:17 *3609:16 6.4000
18 *3609:18 *3609:17 2186.1150
19 *3609:19 *3609:18 6.4000
20 *3609:20 *3609:19 6.4000
*END

How can I tell which node is driver of a net, and which nodes are the loads?
Thanks.
 

https://en.wikipedia.org/wiki/Standard_Parasitic_Exchange_Format


The *CONN section lists the pins connected to the net. A connection to a cell instance starts with a *I. A connection to a top level port starts with a *P.

The syntax of the *CONN entries is:

*I <pin name> <direction> *C <xy coordinate> <loading or driving information>

Where:

The pin name is the name of the pin.
The direction will be I, O, or B, corresponding to input, output, or bidirectional signals, respectively.
The xy coordinate will be the location of the pin in the layout.
For an input, the loading information will be *L and the pin's capacitance.
For an output, the driving information will be *D and the driving cell's type.
Coordinates for *P port entries may not be accurate because some extraction tools look for the physical location of the logical port (which does not exist) rather than the location of the corresponding pin.
 

Thank you for your response. I read the wiki page, but still wondering how to apply the synatx to my examples.
That the first net as example:
*CONN
*P *1803 O
*I *4393:Y O *L 0.0000 *D TGAMUX2XC
#### I guess node *1803 is a port output.
#### I guess node *4393 is a pin (to a cell instance) named "Y" and direction is output.
#### I guess *L 0.0000 means the load cap of this net is 0.0000.
#### But I still don't know which node is "Drive", and how many "fanout (number of loads)" are there on this net.
#### Which node is a "load"?

*CAP
1 *3608:2 0.000184248
2 *3608:3 0.0002920536
3 *3608:4 0.0002920536
4 *3608:8 0.000184248

*RES
1 *3608:1 *3608:7 6.4000
2 *3608:2 *3608:8 12.9279
3 *3608:3 *3608:2 6.4000
4 *3608:4 *3608:3 23.2703
5 *3608:5 *3608:4 6.4000
6 *1803 *3608:9 6.4000
7 *3608:7 *4393:Y 6.4000 #### I noticed *4393 node which is named Y, because it is defined in CONN section, but I don't know how to utilize this information.
8 *3608:8 *3608:1 6.4000
9 *3608:9 *3608:5 6.4000
*END

Could anybody give me some guidance on that?


https://en.wikipedia.org/wiki/Standard_Parasitic_Exchange_Format


The *CONN section lists the pins connected to the net. A connection to a cell instance starts with a *I. A connection to a top level port starts with a *P.

The syntax of the *CONN entries is:

*I <pin name> <direction> *C <xy coordinate> <loading or driving information>

Where:

The pin name is the name of the pin.
The direction will be I, O, or B, corresponding to input, output, or bidirectional signals, respectively.
The xy coordinate will be the location of the pin in the layout.
For an input, the loading information will be *L and the pin's capacitance.
For an output, the driving information will be *D and the driving cell's type.
Coordinates for *P port entries may not be accurate because some extraction tools look for the physical location of the logical port (which does not exist) rather than the location of the corresponding pin.
 

For the net *3609: the output pin *4394:YB is a driver and output port *1804 is a load.
 

Thank you so much for your instruction.
I am not very familiar with concepts like ports and internal pins, but a driver can usually have one drive and one or more loads, right?

In order to tell which node is drive and which are loads, were you looking at the CONN section only?
Here is another more complex net: Do you think it is a multi-fanout net? I see there are multiple *I's and one *P, but direction is "I" for all of them.

*D_NET *1918 0.073400

*CONN
*I *3791:D0 I *L 0.0013 *D TH2MUX2XC
*I *3784:D0 I *L 0.0013 *D TH2MUX2XC
*I *3740:D0 I *L 0.0013 *D TH2MUX2XC
*I *3727:D0 I *L 0.0013 *D TH2MUX2XC
*I *3705:D0 I *L 0.0013 *D TH2MUX2XC
*I *3698:D0 I *L 0.0013 *D TH2MUX2XC
*I *3684:D0 I *L 0.0013 *D TH2MUX2XC
*I *3661:D0 I *L 0.0013 *D TH2MUX2XC
*I *3657:D0 I *L 0.0013 *D TH2MUX2XC
*I *3649:D0 I *L 0.0013 *D TH2MUX2XC
*P *75 I

*CAP
1 *1918:2 0.0247997808
2 *1918:3 0.0011682144
3 *1918:4 0.0011682144
4 *1918:5 0.000736992
5 *1918:6 0.0014371344
6 *1918:8 0.0007001424
7 *1918:10 0.0002920536
8 *1918:11 0.0002920536
9 *1918:12 0.0004053456
10 *1918:13 0.0009580896
11 *1918:15 0.0008475408
12 *1918:17 0.0002947968
13 *1918:19 0.0005841072
14 *1918:20 0.0002920536
15 *1918:21 0.0008761608
16 *1918:22 0.0002920536
17 *1918:23 0.0002920536
18 *1918:26 0.0003316464
19 *1918:29 0.000184248
20 *1918:30 0.0001473984
21 *1918:32 0.0002920536
22 *1918:33 0.0002920536
23 *1918:34 7.36992e-05
24 *1918:35 7.36992e-05
25 *1918:37 0.0002920536
26 *1918:38 0.0002920536
27 *1918:42 0.0247997808

*RES
1 *1918:1 *1918:41 6.4000
2 *1918:2 *1918:42 1740.1010
3 *1918:3 *1918:2 6.4000
4 *1918:4 *1918:3 93.0812
5 *1918:5 *1918:4 6.4000
6 *1918:6 *1918:5 51.7118
7 *3698:D0 *1918:52 6.4000
8 *1918:8 *1918:6 49.1262
9 *3657:D0 *1918:51 6.4000
10 *1918:10 *1918:8 6.4000
11 *1918:11 *1918:10 23.2703
12 *1918:12 *1918:11 6.4000
13 *1918:13 *1918:12 28.4415
14 *3705:D0 *1918:50 6.4000
15 *1918:15 *1918:13 38.7838
16 *3740:D0 *1918:49 6.4000
17 *1918:17 *1918:15 20.6847
18 *3784:D0 *1918:48 6.4000
19 *1918:19 *1918:15 6.4000
20 *1918:20 *1918:17 6.4000
21 *1918:21 *1918:19 46.5406
22 *1918:22 *1918:20 23.2703
23 *1918:23 *1918:21 23.2703
24 *1918:24 *1918:21 6.4000
25 *1918:25 *1918:22 6.4000
26 *1918:26 *1918:23 6.4000
27 *3649:D0 *1918:47 6.4000
28 *3791:D0 *1918:43 6.4000
29 *1918:29 *1918:26 12.9279
30 *1918:30 *1918:26 10.3424
31 *3727:D0 *1918:44 6.4000
32 *1918:32 *1918:30 6.4000
33 *1918:33 *1918:32 23.2703
34 *1918:34 *1918:33 6.4000
35 *1918:35 *1918:34 5.1712
36 *3661:D0 *1918:46 6.4000
37 *1918:37 *1918:35 6.4000
38 *1918:38 *1918:37 23.2703
39 *1918:39 *1918:38 6.4000
40 *3684:D0 *1918:45 6.4000
41 *1918:41 *75 6.4000
42 *1918:42 *1918:1 6.4000
43 *1918:43 *1918:25 6.4000
44 *1918:44 *1918:29 6.4000
45 *1918:45 *1918:39 6.4000
46 *1918:46 *1918:34 6.4000
47 *1918:47 *1918:24 6.4000
48 *1918:48 *1918:15 6.4000
49 *1918:49 *1918:13 6.4000
50 *1918:50 *1918:12 6.4000
51 *1918:51 *1918:6 6.4000
52 *1918:52 *1918:5 6.4000
*END



For the net *3609: the output pin *4394:YB is a driver and output port *1804 is a load.
 

There is an input ports for your design. And there are input pins of cells inside your design. Signal comes through input port into design and goes to input pins of cells. So, this wire connect input port with several input pins - yes, it is multi-fanout signal.
 
  • Like
Reactions: ttxs

    ttxs

    Points: 2
    Helpful Answer Positive Rating
I think there is some bad terminology in SPEF file format.
The type "input" (I) for the instance pin (*I) means "input" for the cell that connects to that pin, but means "output" for the net that connects to that pin - i.e. it is output for the signal propagated alogn the net.
I.e. "input" pin is a load for the signal propagation.
To the contrary, for the ports, "input" port (I in *P) means signal is entering the net at that point.
"Output" port is ext point for the signal, propagating along the net.

There are several online resources explaining SPEF file format, for example:

1. http://en.wikipedia.org/wiki/Standard_Parasitic_Exchange_Format

2. http://vlsi.pro/reading-spef-files/

3. http://www.vlsi-expert.com/2010/08/how-to-read-spef.html


The formal specification of SPEF file format is given in IEEE Standard 1481-2009, but it's not free, you should buy it or should have an access (through your organization) to IEEExplore online database:

http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5430852
 
  • Like
Reactions: ttxs

    ttxs

    Points: 2
    Helpful Answer Positive Rating
There is an input ports for your design. And there are input pins of cells inside your design. Signal comes through input port into design and goes to input pins of cells. So, this wire connect input port with several input pins - yes, it is multi-fanout signal.


Thank you for the instruction.

- - - Updated - - -

I think there is some bad terminology in SPEF file format.
The type "input" (I) for the instance pin (*I) means "input" for the cell that connects to that pin, but means "output" for the net that connects to that pin - i.e. it is output for the signal propagated alogn the net.
I.e. "input" pin is a load for the signal propagation.
To the contrary, for the ports, "input" port (I in *P) means signal is entering the net at that point.
"Output" port is ext point for the signal, propagating along the net.

There are several online resources explaining SPEF file format, for example:

1. http://en.wikipedia.org/wiki/Standard_Parasitic_Exchange_Format

2. http://vlsi.pro/reading-spef-files/

3. http://www.vlsi-expert.com/2010/08/how-to-read-spef.html


The formal specification of SPEF file format is given in IEEE Standard 1481-2009, but it's not free, you should buy it or should have an access (through your organization) to IEEExplore online database:

http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5430852

Thank you so much for the clarification. Yes, the direction definition in SPEF confused me a lot.
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top