[ibis-macro] IBIS-AMI Working Draft of AMI Quick Reference

  • From: Bob Ross <bob@xxxxxxxxxxxxx>
  • To: ibis-macro@xxxxxxxxxxxxx
  • Date: Tue, 23 Feb 2010 00:37:57 -0800

All:

I am trying to fully understand the AMI file syntax and its
constraints from just a parser developer perpective.

After attempting a spread sheet, and then a formal syntax
approach, I opted for a psuedo formal definition in a
quick reference style format to show all of the allowable
choices.  I did not add some special cases and exceptions since
my top priority is to understand just the basic rules.

The first cut is a blend of the existing V5.0 syntax and the
proposed syntax with some changes to assist graceful migration
of the Reserved_parameters.  I have included parameters that
might be dropped and some others that were originally proposed
but withdrawn in the new BIRD just to keep them visible.

A few technical questions and concerns will arise from this,
and there are probably several mistakes.

The Model_specific portion still needs more development since
the (tree) structure might support a very general hierarchical
structure.

So I expect to revise this file as we decide and clarify
what we want.

Bob
--
Bob Ross
Teraspeed Consulting Group LLC     Teraspeed Labs
121 North River Drive              13610 SW Harness Lane
Narragansett, RI 02882             Beaverton, OR 97008
401-284-1827                       503-430-1065
http://www.teraspeed.com           503-246-8048 Direct
bob@xxxxxxxxxxxxx

Teraspeed is a registered service mark of Teraspeed Consulting Group LLC

Reference flow
--------------

                (Usage {In | InOut})
        EDA   ---------------------->  DLL or other Executable File
       Tool   <----------------------
         ^       (Usage {Out | InOut})
         |
         |
         |  (Usage {Info | In | Out |InOut})
         |
        AMI File


      EDA Tool
        Interface for user control
        Redirect commands internally
        Reformat into tree string for DLL
          Apply more rigorous typing per standard (C? style
            format rules)
        Process Info commands

BNF-like abbreviated syntax for AMI file:
----------------------------------------

AMI Syntax

Notation

   |    - exclusive OR
   [ ]  - required grouping - perhaps with internal choice
   { }? - optional
   { }+ - one or more
   { }* - zero or more
   < >  - actual value entry
   ::=  - definition
 
   ||   - Comment for this file



AMI_file ::=
(file_name        || First Entry, does not have to be same as actual file_name
((Description}*   || Can be in any location)
(parameter_syntax)
)

parameter_syntax ::= Reserved_parameters {Model_specific_parameters}*}

Reserved_parameters
-------------------

reserved_parameter_name:
  Init_Returns_Impulse |      || Required
  GetWave_Exists |            || Required
  Use_Init_Output |

  Init_Returns_Filter |       || New
  
  Max_Init_Aggressors |
  Ignore_Bits | 
  Tx_Jitter |                 || suggested removal
  Tx_DCD |
  Rx_Receiver_Sensitivity |   
  Rx_Clock_PDF |              || suggested removal

  Tx_Dj |                     || suggested addition
  Rx_Dj |                     || suggested addition
  Rx_Clock_Recovery_Mean  |   || suggested addition??
  Rx_Clock_recovery_Rj        || suggested addition??

----
 
  Syntax enumeration:
     (reserved_par_name 
       (Usage [In | Out | InOut | Info])
       (Type [Float | Integer | UI | Boolean | String])
       (<format_values>)
       {(Default <value>)}?
       {(Description "<string>")}?
     )

     (default_description_option::= {(Default <value>)}?
                                    {(Description "<string>")}?
                     || either or both Default and Description are optional

-----

     (Init_Returns_Impulse                            || Required
       (Usage Info)
       (Type Boolean)
       [(Value [True | False]) | (Default <value>)]   || either Value or 
Default?
       {(Description "<string>")}?
     )
     
     (GetWave_Exists                                  || Required
       (Usage Info)
       (Type Boolean)
       [(Value [True | False]) | (Default <value>)]   || either Value or 
Default?
       {(Description "<string>")}?
     )

          || Illegal: Init_Returns_Impulse and GetWave_exists BOTH False

     (Use_Init_Output
       (Usage Info)
       (Type Boolean)
       [(Value [True | False]) | (Default <value>)]   || either Value or 
Default?
       {(Description "<string>")}?
     )

     (Init_Returns_Filter                             || New
       (Usage Info)
       (Type Integer)
       (Value <value>
       {default_description_option)
     )

     (Max_Init_Aggressors
       (Usage Info)
       (Type Integer)
       (Value <value>
       {default_description_option)
     )

     (Ignore_Bits
       (Usage [Info | Out])
       (Type [Integer | Float])                        || should be Integer 
only???
       [(Value [True | False]) | (Default <value>)]   || either Value or 
Default?
       {(Description "<string>")}?
     )

     (Tx_Jitter                                       || Remove ???
       (Usage Info | Out)
       (Type [Float | UI])
       ([Gaussian | Dual-Dirac | DjRj | Table])
       {default_description_option)
     )

     (Tx_DCD
       (Usage Info | Out | In)                       || In was added
       (Type Integer)
       ([Value | Range | Corner | Table])
       {default_description_option)
     )

     (Tx_Receiver_Sensitivity
       (Usage Info | Out)
       (Type Integer)
       ([Value | Range | Corner])
       {default_description_option)

     (Rx_Clock_PDF                                    || Remove ???
       (Usage Info | Out)
       (Type [Float | UI])
       ([Gaussian | Dual-Dirac | DjRj | Table])
       {default_description_option)
     )

     (AMI_Returns_Init
       (Usage Info)
       (Type Boolean)
       {default_description_option)
     )

     (Rx_Clock_Recovery_Mean                         || suggested addition??
       (Usage Info | Out)
       (Type Integer)
       ([Value | Range | Corner])
       {default_description_option)
     )

     (Rx_Clock_recovery_Rj                           || suggested addition??
       (Usage Info | Out)
       (Type Integer)
       ([Value | Range | Corner])
       {default_description_option)
     )

-----------------------------------------

Model_specific_parameters
-------------------------

 standard_parameter_syntax:

  (parameter_name (usage) (non_tap_type) {(default)} {(description)} 
(format_choice))

 tap_parameter_syntax

  (tap_param_name {(<tap_number> (usage) (Type Tap) {(default)} {(description)}
                 (tap_format_choice))}+)

         
  usage ::=         Usage [In | Out | InOut | Info]                        

  non_tap_type ::=  Type [Float | UI | Integer | String | Boolean]

  tap_number ::=    unique positive, negative integer or 0   

  format_choice ::= Value <value> |
                    Range <typ> <min> <max> | 
                    List <val1> <val2> ... <valN> | 
                    List (Labels <label1> <label2> ... <labelN>)
                         <val1> <val2> ... <valN>
                    Corner <typ> <slow> <fast> |
                    Increment <typ> <min> <max> <delta> |
                    Steps <typ> <min> <max> <number_steps> |

            || NOT SUPPORTED   ??      
                    Table {(Labels {<label_text>}+)}+ {({<value>}+)}+ | 
                    Gaussian <mean> <sigma> |
                    Dual-Dirac <mean> <mean> <sigma> |
                    DjRj <minDj> <maxDj> <sigma> |

                    Scale <value>
                    Limit <value>



                    Array ??  ||  Syntax Fixed ????
                              ||  (Array (Usage Info)(Type Boolean) (Value True)
                              ||      {(default)} {(description)} 
(format_choice))

                    Label ??  ||  Rules for Range, List, Corner ONLY ???
                    
                
  tap_format_choice ::= Value <value> |
                    Range <typ> <min> <max> |
                    List <val1> <val2> ... <valN> | 
                    List (Labels <label1> <label2> ... <labelN>)
                         <val1> <val2> ... <valN>
                    Corner <typ> <slow> <fast> |
                    Increment <typ> <min> <max> <delta> |
                    Steps <typ> <min> <max> <number_steps> |

--------------

Rules for V5.0 compatibility

   Null ::= omitted_parameter  || Read but ignored and not stored or used.

   Format ::= Null
   Reserved_parameters ::= NULL
   Model_specific ::= Null

   Table                 || Not supported and declared illegal in a future
                         || parser because of an impossible syntax and no
                         || known adoption

   5 (now 6?) reserved parameters: Default required, Value illegal in 5.0.
   The 5.1 resolution should make either Default or Value legal.

Other related posts: