Subject: ibis 2.0 BNF

From: *** Steffen Rochel *** <[email-masked]>
Date: Tue, 23 Aug 94 21:58:04 +0200

----------
X-Sun-Data-Type: text
X-Sun-Data-Description: text
X-Sun-Data-Name: text
X-Sun-Content-Lines: 8

Hi Bob,
based on your work I improved the BNF for IBIS v2.0. I included
also the BNF for the package model.
 I hope, that I covered most of the intentions from the spec, but I think
some clearifications are necessary. 

Steffen Rochel
Anacad EES
----------
X-Sun-Data-Type: default
X-Sun-Data-Description: default
X-Sun-Data-Name: ibis2_0.bnf
X-Sun-Content-Lines: 333

// Remarks
// comments starts with "//"
// keyword are enclosed by '...'
// a set is specified by { }, options are enclosed by [ ... ]
// "|" defines an alternative

ibisfile ::= ibisfileheader sections '[' 'end' ']'

packagefile ::= packagefileheader packagedefinitionsections '[' 'end' ']'

ibisfileheader ::= ibisversion ibisfilename fileversion fileheaderitems

packagefileheader ::= ibisversion packagefilename fileversion fileheaderitems

fileheaderitems ::= [ commentchar ] [ date ] [ source ] [ notes ] [ disclaimer ]
		    [ copyright ]

ibisversion ::= '[' 'ibis ver' ']' string

commentchar ::= '[' 'comment char' ']' commentstring

commentstring ::= comment_character '_char'

comment_character ::= <|> | <?> | <"> | <:> | <;> | <\<>| <\>>| <,> |
		      <{> | <}> | <\'>| <\\>| <(> | <)> | <*> | <&> |
		      <!> | <@> | <#> | <$> | <%> | <^> | <~> | <\`>

ibisfilename ::= '[' 'file name' ']' ibisfilenamestring

ibisfilenamestring ::= string8 '.ibs'

packagefilename ::= '[' 'file name' ']' packagefilenamestring

packagefilenamestring ::= string8 '.pkg'

fileversion ::= '[' 'file rev' ']' string

date ::= '[' 'date' ']' string40                             

source ::= '[' 'source' ']' string40                        

notes ::= '[' 'notes' ']' string40                         

disclaimer ::= '[' 'disclaimer' ']'  string40

copyright ::= '[' 'copyright' ']' string40

sections ::= componentdefinitionsection [ modeldefinitionsections ]
	     [ packagedefinitionsection ]

modeldefinitionsections ::= { modeldefinitionsection }

packagedefinitionsections ::= { packagedefinitionsection }

componentdefinitionsection ::= component manufacturer package pin [ package_model ] 
				[ pin_mapping ] [ diff_pin ]

component ::= '[' 'component' ']' string40

manufacturer ::= '[' 'manufacturer' ']' string40

package ::= '[' 'package' ']' package_rlc

package_rlc ::=  'r_pkg' typ_min_max 
		 'l_pkg' typ_min_max 
		 'c_pkg' typ_min_max

typ_min_max ::= real real_na real_na

real_na ::=  real | 'na' 

real_na9 ::= real9 | 'na'

 //pin_with_package_info
pin ::=   pin_wpi	
	| pin_data

pin_wpi ::= pin_header 'r_pin' 'l_pin' 'c_pin' pin_entry_set_wpi

pin_data ::= pin_header pin_entry_set

pin_header ::= '[' 'pin' ']' 'signal_name' 'model_name' 

pin_entry_set_wpi ::= pin_entry_wpi { pin_entry_wpi }

pin_entry_set ::= pin_entry { pin_entry }

pin_entry_wpi ::= pin_entry real_na9 real_na9 real_na9

pin_entry ::= pin_identifier signal_identifier [ model_identifier ]

pin_identifier ::= string5

signal_identifier ::= string20

model_identifier ::= string20 | 'power' | 'gnd' | 'nc'

package_model ::= '[' 'package model' ']' string40

pin_mapping ::= '[' 'pin mapping' ']' 'pulldown_ref' 'pullup_ref' 'gnd_clamp_ref' 
		'power_clamp_ref'
		pin_mapping_data_set

pin_mapping_data_set ::= pin_mapping_data { pin_mapping_data }

pin_mapping_data ::= string5 string15 string15 [ string15 string15 ]

diff_pin ::=   diff_pin_wr
	     | diff_pin_data

diff_pin_wr ::= diff_pin_header delay_range_name diff_pin_value_set_wr

diff_pin_data ::= diff_pin_header diff_pin_value_set

diff_pin_header ::= '[' 'diff_pin' ']' 'inv_pin' 'vdiff' 'tdelay_typ' 

delay_range_name ::= 'tdelay_min' 'tdelay_max'

diff_pin_value_set ::= diff_pin_values { diff_pin_values }

diff_pin_value_set_wr ::= diff_pin_values_wr { diff_pin_values_wr }

diff_pin_values_wr ::= diff_pin_values real_na9 real_na9

diff_pin_values ::= string5 string5 real9 real_na9

modeldefinitionsection ::= '[' 'model' ']' model_name model 

model_name ::= string20

model ::= model_of_type_one | model_of_type_two | model_of_type_terminator

model_of_type_one ::= modeltype_one modelentry_one

model_of_type_two ::= modeltype_two modelentry_two

model_of_type_terminator ::= modeltype_terminator modelentry_terminator

modeltype_one ::= 'model_type' modeltype_one_identifier

modeltype_one_identifier ::= 'input' | 'i/o' | 'i/o_open_drain' 
			| 'i/o_open_sink' | 'i/o_open_source' 
			| 'input_ecl' | 'i/o_ecl'

modeltype_two ::= 'model_type' modeltype_two_identifier

modeltype_two_identifier ::= '3-state' | 'open_sink' | 'open_drain'
			| 'open_source' | 'output' |  'output_ecl' 

modeltype_terminator ::= 'model_type' 'terminator'

modelentry_one ::= c_comp vinl vinh modelentry

modelentry_two ::= c_comp modelentry

modelentry_terminator ::= c_comp modelentry

modelentry ::=  [ polarity ] [ enable ] [ vmeas ] [ cref ] [ rref ] [ vref ]
		[ temperature_range ] [ model_range ] [ pulldown ] [ pullup ]
		[ gndclamp ] [ powerclamp ] [ rpower ] [ rgnd ] [ ramp  ] 
		[ rac ] [ cac ] [ waveformtable ]

model_range ::= voltage_range | model_refs |
		voltage_range model_refs

model_refs ::= [ pullup_reference ] [ pulldown_reference ] [ gnd_clamp_reference ]
	       [ power_clamp_reference ]

c_comp ::= 'c_comp' typ_min_max

polarity ::= 'polarity' [ 'non-inverting' | 'inverting' ]

enable ::= 'enable'  [ 'active-high' | 'active-low' ]

vinl ::= 'vinl' '=' voltage_spec

vinh ::= 'vinh' '=' voltage_spec

vmeas ::= 'vmeas' '=' voltage_spec

cref ::= 'cref' '=' capacitance_spec

rref ::= 'rref' '=' resistance_spec

vref ::= 'vref' '=' voltage_spec

voltage_spec ::= real

capacitance_spec ::= real

resistance_spec ::= real 

temperature_range ::= '[' 'temperature range' ']' typ_min_max

voltage_range ::= '[' 'voltage range' ']' typ_min_max

pullup_reference ::= '[' 'pullup reference' ']' typ_min_max

pulldown_reference ::= '[' 'pulldown reference' ']' typ_min_max

power_clamp_reference ::= '[' 'power clamp reference' ']' typ_min_max

gnd_clamp_reference ::= '[' 'gnd clamp reference' ']' typ_min_max

pulldown ::= '[' 'pulldown' ']' videfinitions

pullup ::= '[' 'pullup' ']' videfinitions

gndclamp ::= '[' 'gnd_clamp' ']' videfinitions

powerclamp ::= '[' 'power_clamp' ']' videfinitions

rpower ::= '[' 'rpower' ']' typ_min_max

rgnd ::= '[' 'rgnd' ']' typ_min_max

videfinitions ::= videfinition { videfinition }

videfinition ::=  real typ_min_max 

ramp ::= '[' 'ramp' ']' { dvdtr | dvdtf } [ r_load ]

dvdtr ::= 'dv/dt_r' typ_min_max_rate

dvdtf ::= 'dv/dt_r' typ_min_max_rate

r_load ::= 'r_load' '=' real 

typ_min_max_rate ::= rate [ rate | 'na' ] [ rate | 'na' ]

rac ::= '[' 'rac' ']' typ_min_max

cac ::= '[' 'cac' ']' typ_min_max

waveformtable ::= { waveform_data }

waveform_data ::= '[' 'rising waveform' | 'falling waveform' ']' 
		  waveform_header waveform_table

waveform_header ::= r_fixture v_fixture [ c_fixture ] [ l_fixture ] [ r_dut ] 
		[ l_dut ] [ c_dut ]

r_fixture ::= 'r_fixture' '=' real

v_fixture ::= 'v_fixture' '=' real

c_fixture ::= 'c_fixture' '=' real

l_fixture ::= 'l_fixture' '=' real

r_dut ::= 'r_dut' '=' real

l_dut ::= 'l_dut' '=' real

c_dut ::= 'c_dut' '=' real

waveform_table ::= { waveform_point }

waveform_point ::= time_point typ_min_max

time_point ::= real

rate ::= real '/' real

packagedefinitionsection ::= definepackage package_header package_description 
			     endpackage

definepackage ::= '[' 'define package model' ']' string40

package_header ::= manufacturer oem description pin_number pin_names 

oem ::= '[' 'oem' ']' string40

description ::= '[' 'description' ']' string60

pin_number ::= '[' 'number of pins' ']' pos_integer

pin_names ::= pin_name { pin_name }

pin_name ::= string5

package_description ::= '[' 'model data' ']' model_body '[' 'end model data' ']'

model_body ::= inductance_matrix capacitance_matrix [ resistance_matrix ]

inductance_matrix ::= '[' 'indcuctance matrix' ']' matrix

capacitance_matrix ::= '[' 'capacitance matrix' ']' matrix

resistance_matrix ::= '[' 'resistance matrix' ']' matrix

matrix ::= full_matrix | banded_matrix | sparse_matrix

full_matrix ::= 'full matrix' matrix_line { matrix_line }

banded_matrix ::= 'banded matrix' bandwith matrix_line { matrix_line }

sparse_matrix ::= 'sparse matrix' matrix_line { matrix_line }

bandwith ::= '[' 'bandwith' ']' pos_integer

matrix_line ::= '[' 'row' ']' real { real }

endpackage ::= '[' 'end package model' ']'

real ::= <real_number> [ unit ]

real9 ::= <real_with_max_9_characters>

unit ::=  <p> | <n> | <u> | <m> | <k> | <M> | <G> { char }

string5 ::= <character_string_with_max_5_characters>

string8 ::= <character_string_with_max_8_characters>

string15 ::= <character_string_with_max_15_characters>

string20 ::= <character_string_with_max_20_characters>

string40 ::= <character_string_with_max_40_characters>

string60 ::= <character_string_with_max_60_characters>

string  ::= <unlimited_character_string>

char ::= <valid_character>

pos_integer ::= <positiv_decimal_integer>