To IBIS Members:
In December, 1993, Chris Reid asked if anyone had done a YACC grammar for
IBIS. Randy Harr responded in December with a grammar and also a proposal
for grouping functions to add some rigor to IBIS. I have taken Randy's
grammar and have added to it some details based on closer reading of IBIS
Version 1.1 and also based on running some tests with the Golden Parser.
Some of the versions of the grammar below have been sent out privately, and
I had planned to add a little more rigor before I posted it. When I saw
that North Carolina State University planned a yacc/lex parser for IBIS
models, I sent Steve Lipa a version for information. Perhaps the NCSU
version may evolve into an official version. Anyway, it may take longer
than I intended to finish my version, so I am posting it as is, per the
brief discussion at the last forum.
I do favor having an official BNF grammar with IBIS. In addition, I have
been trying to keep up with the BIRDS with a separate augmented grammar to help
observe that the proposed extensions are done in a manner consistent with
IBIS Version 1.1.
Some comments are in parenthesis "( )" and are mostly notes to myself
regarding some additional details which I have not formally captured.
At the end I include a section to isolate the "units" specification. One
intent is to point out the the IBIS times 1000 multiplier is a lower case
"k" which actually is correct. This is one added detail that needs to be
tracked since many products (and the DIE 0.9 Spec in which IBIS is referenced)
use upper case "K".
Bob Ross, Interconnectix, Inc.
DRAFT BNF FOR IBIS VERSION 1.1 - STILL UNDER DEVELOPMENT
Notation
--------
Terminals of the grammar are enclosed by apostrophes. They are the actual
keyword used in the IBIS file format. Keywords are not case sensitive and
are put in upper case in this definition only.
The vertical bar "|" separate alternatives. For example, A | B | C, represents
exactly one occurrence of A or B or C.
Braces "{}" indicate zero or more occurrences of the enclosed syntactic
construct. For example, { A } represents the empty sequence, as well as A ,
and A A, A A A, and so on. Braces with plus "{}+" indicate one or more
occurrences of the enclosed syntactic construct. Braces with question
mark "{}?" indicate zero or one occurrences of the enclosed syntactic
construct.
The terminals of IBIS file format are keyWord token and item token. They
are defined as entries in the semantic definition for each section.
Definition
----------
$goal ::= ibisFileFormat
ibisFileFormat ::= fileHeaderSection sections `[` `END' `]'
fileHeaderSection ::= ibisVersion fileName FileVersion { fileHeaderItems }
(ibisVersion first or after comments, others any order)
fileHeaderItems ::= commentChar | date | source | notes | disclaimer
ibisVersion ::= `[` `IBIS Ver' `]' string
commentChar ::= `[` `comment char' `]' commentString (0 to many)
commentString ::= character `_char'
fileName ::= `[` `File name' `]' fileNameString
fileNameString ::= string `.ibs'
fileVersion ::= `[` `File Rev' `]' string
date ::= `[` `date' `]' text (0 or 1)
source ::= `[` `source' `]' text (0 to many)
notes ::= `[` `notes' `]' text (0 or 1)
disclaimer ::= `[` `disclaimer' `]' (0 to many)
sections ::= section { section }
section ::= componentDefinitionSection | modelDefinitionSection
componentDefinitionSection ::= component manufacturer package pin
(last 3 any order)
component ::= `[' `component' `]'
manufacturer ::= `[` `manufacturer' `]' text
package ::= `[` `package' `]' package_RLC
package_RLC ::= `R_pkg' typ_min_max | `L_pkg' typ_min_max |
`C_pkg' typ_min_max
(one of each pair in any order)
typ_min_max ::= real real_na real_na
real_na ::= [ real | `NA' ]
pin ::= `[` `pin' `]' `signal_name' 'model_name' { `R_pin' `L_pin' `C_pin' }?
{ pin_entry }+
pin_entry ::= string string [model_identifier | `power' | `gnd' | `NC']
{ real_na real_na real_na }?
(3 or 6 columns for all entries)
(R_pin, L_pin, C_pin required if 6 columns)
modelDefinitionSection ::= `[` `model' `]' modelType modelEntry
modelEntry ::= [ polarity | enable | vinl | vinh | c_comp |
voltage_range | pulldown | pullup | gndClamp | powerClamp | ramp ]
modelType :: = `model_type' [ `Input' | `Output' | `I/O' | `3-
state' | `Open_drain' ]
polarity ::= `[` `polarity' `]' [ `non-inverting' | `inverting' ]
enable ::= `enable' [ `active-high' | `active-low' ]
vinl ::= `vinl' `=' voltage_spec
vinh ::= `vinh' `=' voltage_spec
voltage_spec ::= real [ `V' ]
c_comp ::= `c_comp' typ_min_max
voltage_range ::= `[` `voltage range' `]' typ_min_max
pulldown ::= `[` `pulldown' `]' viDefinitions
pullup ::= `[` `pullup' `]' viDefinitions
gndClamp ::= `[` `gnd_clamp' `]' viDefinitions
powerClamp ::= `[` `power_clamp' `]' viDefinitions
viDefinition ::= { real typ_min_max }
ramp ::= `[` `ramp' `]' { dvdtR | dvdtF }
dvdtR ::= `dV/dt_r' typ_min_max_rate
dvdtF ::= `dV/dt_r' typ_min_max_rate
typ_min_max_rate ::= rate [ rate | `NA' ] [ rate | `NA' ]
rate ::= real `/' real
real ::= real_number[ unit | { char } ]
unit ::= [ `p' | `n' | `u' | `m' | `k' | `M' | `G' ]{ char }
(etc. ...)
Received on Sat Feb 19 18:37:00 1994
This archive was generated by hypermail 2.1.8 : Fri Jun 03 2011 - 09:52:28 PDT