******************************************************************************
********************* 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 info@ibis.org.

A list of reported bugs is maintained at http://ibis.org/bugs/ibischk/ .

******************************************************************************

PARSER VERSION NUMBER: 7.0.2

PLATFORM (SPARC, HP700, PC, etc.): ALL

OS AND VERSION: ALL

REPORTED BY: Mike LaBonte, SiSoft (MathWorks); Randy Wolff, Micron Technology;
Bob Ross, Teraspeed Labs, Lance Wang, Zuken USA

DATE: November 25, 2020

DESCRIPTION OF BUG:
This is an enhancement request to have ibischk perform checking
of IBIS-ISS files against references to them in IBIS and IMS files,
limited to subcircuit definitions and calls.

A full set of requirements and tests will be in a parser development contract.
The project should cover the following enhancements (** relate to multi-lingual
checks):

FLAGS:
 - No new command line flags are needed since the checks are initiated
   for IBIS-ISS syntax in .ibs or .ims (with -IMS flags) files.

REFERENCES FROM .ibs FILES:
 - Multi-lingual references using [External Model], [External Circuit],
   and [Circuit Call] with Language IBIS-ISS **
 - References from [Interconnect Model]s scoped by [Interconnect Model Set]

REFERENCES FROM .ims FILES:
 - References from [Interconnect Model]s scoped by [Interconnect Model Set]

NAME AND NUMBER OF TERMINALS:
 - Locate the files matching referenced file names (already partially checked) 
 - Locate IBIS-ISS .SUBCKT definitions matching referenced subcircuit names
 - Check that the number of .SUBCKT terminals match those called from the
   .ibs and .ims files
 - IBIS-ISS "ground" terminals (0, GND, !GND, GROUND, and GND!) are prohibited
   as terminals on the .SUBCKT line in .iss files

IBIS VERSION NUMBERS ([IBIS Ver]:
 - Multilingual checks in .ibs files apply for [IBIS Ver] 6.0 or higher
   when Language IBIS-ISS was added **
 - Interconnect Model checks in .ibs and .ims apply for [IBIS Ver] 7.0 or
   higher

PARAMETER PASSING INTO IBIS-ISS Files:
 - All parameters passed into IBIS-ISS are defined on the .SUBCKT line
 - Name Matching: Follow multilingual syntax to match "Parameters" names with
   those in IBIS-ISS and those from either [External Model],
   [External Circuit], and [Circuit Call] **
     Parameters in [Circuit Call] are checked with the IBIS-ISS file referenced 
     in [External Circuit] **
     This check may be redundant, but it is permitted to define some or all
     Parameters only in [Circuit Call] **
 - For Interconnect Models, parameter names and values are listed in the Param
   statement
 - Numerical Type Matching:
     With no value assignment in IBIS, there is no type check **
     If a numerical value is assigned, check that IBIS numerical Parameters
       types (with or without scaling factors in IBIS Section 3.2) correspond
       to IBIS-ISS .SUBCKT definition numerical parameters
       (Note, IBIS-ISS scaling factors include those in IBIS, but are case
       insensitive,
       Several more IBIS-ISS numerical scaling factors exist including
       MEG, X, MIL and A.
       Both E and D are variations of exponent multipliers in IBIS-ISS.
       The numerical values passed do not need to be checked.
     IBIS-ISS parameters defined by equations are numerical (e.g., a='b+c'
       where b and c can be numerical parameters in IBIS.)
     Parameters defined in IBIS-AMI files do not support the IBIS scaling
       factors **
 - String Type Matching:
     String Parameters types shall be string parameter types in .SUBCKT lines
     and shall be of the form string_name=str('string_value'). Spaces can exist
     in 'string_value'.  As in IBIS, quoted string parameters are case-sensitive.
 - Issue Warnings for Parameters NOT on the .SUBCKT line
     Either the parameter is not used or it appears as an internal definition
     lines as given by .PARAM or .PARA statements inside a .SUBCKT/.END

IBIS-ISS COVERAGE:
 - Line Continuations:
   -- The character "+" in the first non-blank column
   -- After the last "\\" sequence
 - Comment characters:
   -- Ignore content after a leading "*" character or after the "$" character
 - Ignore .INCLUDE or any substring that starts with .INC within a
   .SUBCKT/.ENDS block since only the .SUBCKT line is checked

MEMORY AND DATA STRUCTURES:
 - There is no requirement to make memory structures publicly available
   for source code purchasers
 - Optionally, all .SUBCKT line information could be saved for efficient
   checking if the same .SUBCKT is called in several places in .ibs or .ims

PLAN FOR FUTURE ENHANCEMENTS
 - If not implemented with a new Version that include the following BIRDs:
 - BIRD200 - under [C Comp Model] with File_ISS to IBIS-ISS links
 - BIRD202.x
   -- Under .emd file and [EMD Sets] scoping [EMD Model]s
   -- Under .ems file and [EMD Sets] scoping [EMD Model]s

DEVELOPMENT CONTRACT SPECIFICATION
 - A development specification will contain full details and possible
   corrections and more examples
 - The quote can break out the multi-lingual portion in case we want to stage
   the release with ** items later
 - Some items above such as .iss file locations are already checked in
   ibischk7 Version 7.02.

-------

INSERT IBIS FILE DEMONSTRATING THE BUG:

The following snippet is copied from page 317 of the IBIS Version 7.0 document. This
is an example of one complete testcase, but many other test cases need to be developed.

INSERT IBIS FILE DEMONSTRATING THE BUG:

The following example shows some of the required features above including
- Aligning IBIS Terminals
- Assigning IBIS Parameters
- Parsing the .SUBCKT line split over several lines
- Identifying parameters embedded within an equation on the .SUBCKT line

------------------------------------------------
IMS EXAMPLE WITH PARAM DEFINITIONS in bug214.ims
------------------------------------------------

[IBIS Ver]  7.0
[File Name] bug214.ims
[File Rev]  1.0
[Date]      November 25, 2020
|
[Interconnect Model Set]     BUG214
[Interconnect Model]         BUG214_FULL
|
| Param   name  format   value
Param     a     Value    1m
Param     b     Value    2m
Param     d     Value    "bug214.s2p"
|
File_IBIS-ISS         bug214.iss            BUG214_PULL_TYP
Number_of_terminals = 11
1  Pin_I/O      pin_name      A1   |   DQ1         DQ
2  Pin_I/O      pin_name      A2   |   DQ2         DQ
3  Pin_I/O      pin_name      A3   |   DQ3         DQ
4  Pin_I/O      pin_name      D1   |   DQS+        DQS
5  Pin_I/O      pin_name      D2   |   DQS-        DQS
6  Buffer_I/O   pin_name      A1   |   DQ1         DQ
7  Buffer_I/O   pin_name      A2   |   DQ2         DQ
8  Buffer_I/O   pin_name      A3   |   DQ3         DQ
9  Buffer_I/O   pin_name      D1   |   DQS+        DQS
10 Buffer_I/O   pin_name      D2   |   DQS-        DQS
11 Pin_Rail     signal_name   VSS  |   VSS         GND
[End Interconnect Model]
[End Interconnect Model Set]
[End]

-------------------------------------------------------
IBIS-ISS FILE bug214.iss
WITH COMMENT CHARACTERS, LINE CONTINUATIONS, PARAMETERS
-------------------------------------------------------

*****************************************************
* SUBCKT Comments, Line continuations, and Parameters
*****************************************************

.SUBCKT BUG214_FULL_TYP
+ 1 2 3 4 5 \\     
  6 7 8 9 10 ref   $ Line Continuations   
+ c = 'a+b'   $ Line Continuation, Parameter Passing
+ tsfile=str(d)    $ String Parameter for bug214.s2p
*
R16   1  6  R=a
R27   2  7  R=b
R38   3  8  R=c
R49   4  9  R='2*c'
*
S5_10 5  10 ref MNAME = Smodel_name

.MODEL Smodel_name S N=2 TSTONEFILE = str(tsfile)

.ENDS

******************************************************
* Touchstone 2 bug214.s2p File referenced in .ims file
******************************************************

!2-port network, S-parameter
!Default MA format, GHz frequencies, 50 ohm reference, S-parameters
[Version] 2.0
#
[Number of Ports] 2
[Two-Port Data Order] 21_12
[Number of Frequencies] 1
[Network Data]
0.0   0.0 0.0 1.0 0.0 1.0 0.0 0.0 0.0 
[End]

******************************************************************************
******************** BELOW FOR ADMINISTRATION AND TRACKING *******************
******************************************************************************

BUG NUMBER:  214

SEVERITY: [FATAL, SEVERE, MODERATE, ANNOYING, ENHANCEMENT]  ENHANCEMENT

PRIORITY: [HIGH, MEDIUM, LOW]                               MEDIUM

STATUS: [OPEN, CLOSED, WILL NOT FIX, NOT A BUG]             CLOSED

FIXED VERSION: 7.1.0

FIXED DATE:    December 18, 2021

NOTES ON BUG FIX:
Introduced at IBIS Open Forum on December 4, 2020

Classified at the IBIS Open Forum meeting on January 8, 2021.  To be fixed
in some future release since a potential security fix (per a possible BUG
report) may be done ahead of this enhancement.  Also, the BUG214 enhancement
may be done with an ibishck7 V7.1.0 release or may be done separately later
based on cost and scheduling considerations.

December 18, 2021 - Some corrections to the test cases were made.

******************************************************************************
******************************************************************************