******************************************************************************
********************* IBIS GOLDEN PARSER BUG REPORT FORM *********************
******************************************************************************
INSTRUCTIONS
To report a bug in the IBIS golden parser. Please fill out the top part
of the following form and send the complete form to ibisbug@eda.org.
A list of reported bugs will be maintained on eda.org.
******************************************************************************
PARSER VERSION NUMBER: IBISCHK6 V6.1.0
PLATFORM (SPARC, HP700, PC, etc.): PC
OS AND VERSION: Linux 2.6.32504.30.3.el6.x86_64
REPORTED BY: Mike LaBonte, Signal Integrity Software
DATE: November 27, 2015
DESCRIPTION OF BUG:
IBISCHK6 issues an error E3721 where the sum of offdiagonal package
capacitance matrix values exceed the ondiagonal value in magnitude,
but many package models fail this test due to numerical precision issues
in model generation. For example, in the row values for pin AT02 below
the sum of offdiagonal values is 2.8706518e12, the magnitude of which
exceeds the ondiagonal value 2.87065e12:
AT02 2.87065e12
A28 2.69835e12
AT05 8.22378e14
AN06 9.00640e14
This happens because the e14 values extend the offdiagonal sum two digits
beyond the e12 ondiagonal value. In fixed notation the values look like
this:
+0.000000000000287065
0.000000000000269835
0.00000000000000822378
0.00000000000000900640
Without the "78" and "40" digits of the last two values this would pass the
diagonal dominance test.
IBISCHK 6.1.0 gives the E3721 error for a good number of existing package models
because fixed precision exponential values are commonly used to generate the
files. Some models fail the check by larger margins that can not be explained
by numerical precision.
Using the bug168.pkg testcase below ibischk6 version 6.1.0 issues an error:
IBISCHK6 V6.1.0
Checking bug168.pkg for IBIS 4.2 Compatibility...
E3721  Package X1: The Capacitance Matrix has diagonal element 2.87e12 at
row AT02 whose magnitude is less than the sum of off diagonal elements
Errors : 1
File Failed
Simulators will not have a problem with these models, so IBISCHK6 should
issue an ERROR only for cases where the offdiagonal sum exceeds the
ondiagonal value by some tolerance. Testing reveals that a tolerance
of 10 parts per million of the ondiagonal value works well, i.e.,
multiplying the ondiagonal value by 1.00001 before testing.
The additional bug168a.pkg testcase demonstrates that a zero diagonal
entry would be a pathological case, since a tolerance based on that
would be zero. It may not be necessary to provide special handling for
that case.

Additionally it would be best to increase the number of significant digits
used for reporting values in the E3721 error message to at least 6 digits,
so that messages will not report values that appear to be identical.

The suggested resolution to minimize numerical issues for [Capacitance
Matrix] testing is to multiply the diagonal value by 1.0001 before
testing. (This number is still subject to experimentation.) An Error
message E3721 would still be issued if the offdiagonal summations
exceed the multiplied diagonal value. The 1.0001 value can be stored
as a named constant incase we need to change the value later.

The same numerical resolution issues exist for [Inductance Matrix] and
[Resistance Matrix], where the test is just for diagonal dominance when
compared to each offdiagonal element. Because we are doing direct
element comparisons, we may not need to multiply the diagonal value
by a constant. While there may be issues with the validity of this test,
the proposed resolution is to make failue a Warning message instead of
an Error message for [Inductance Matrix] and [Resistance Matrix] testing.

INSERT IBIS FILE DEMONSTRATING THE BUG:
==== bug168.pkg ====
************************************************************************

[IBIS ver] 4.2
[File name] bug168.pkg
[File Rev] 1

[Define Package Model] BUG168
[Manufacturer] N/A
[OEM] N/A
[Description] Testcase for BUG168

[Number Of Pins] 4

[Pin Numbers]
AT02
A28
AT05
AN06

[Model Data]

[Inductance Matrix] Sparse_matrix
[Row] AT02
AT02 6.62790e09
A28 1.02290e12
AT05 4.83340e10
AN06 4.17230e10
[Row] A28
A28 2.13820e12
AT05 1.06760e12
AN06 1.05450e12
[Row] AT05
AT05 7.08050e09
[Row] AN06
AN06 5.78310e09

[Capacitance Matrix] Sparse_matrix
[Row] AT02
AT02 2.87065e12
A28 2.69835e12
AT05 8.22378e14
AN06 9.00640e14
[Row] A28
A28 3.81082e09
AT05 2.45649e12
AN06 1.75517e12
[Row] AT05
AT05 2.69019e12
[Row] AN06
AN06 3.13424e12

[End Model Data]
[End Package Model]

[End]
==== bug168a.pkg ====
[IBIS Ver] 6.1
[File Name] bug168a.pkg
[File Rev] 0
[Date] 0

 THIS TEST CASE IS STILL UNDER DEVELOPEMENt

[Package Model] bug168

[Define Package Model] bug168
[Manufacturer] somebody
[OEM] somebody
[Description] for testing only
[Number Of Pins] 3

[Pin Numbers]
1
2
3

[Model Data]

[Inductance Matrix] Full_matrix
[Row] 1
6E0 6E011 6E011
[Row] 2
6E011 6E011
[Row] 3
6E011

[Capacitance Matrix] Full_matrix

[Row] 1

1.0000E9 1E9 1E24  Set sum tolerance diag*1e6 or 1E18
[Row] 2
1E9 1E24
[Row] 3
0.0  Set the minimum Sum to 1E18

[End Model Data]
[End Package Model]
[End]
******************************************************************************
******************** BELOW FOR ADMINISTRATION AND TRACKING *******************
******************************************************************************
BUG NUMBER: 168
SEVERITY: [FATAL, SEVERE, MODERATE, ANNOYING, ENHANCEMENT] SEVERE
PRIORITY: [HIGH, MEDIUM, LOW] HIGH
STATUS: [OPEN, CLOSED, WILL NOT FIX, NOT A BUG] CLOSED
FIXED VERSION: 6.1.1
FIXED DATE: January 8, 2016
NOTES ON BUG FIX:
Classified at the IBIS Teleconference Meeting on December 18, 2015
To be fixed in the next release of ibischk6.
The proposed (revised) resoluton is documented above where a 100 ppm value
is chosen rather than 10 ppm.
******************************************************************************
******************************************************************************