Hi Bob,
thanks for checking and correcting the BNF. As far I know, there
exists no standard for the BNF, I used a format which understandable
by one of our internal tools. Using this, I detected a small mistake,
pin_mapping_data_set_wr wasused instead of pin_mapping_value_set_wr.
Also I think, some iterations are necessary until we will have a final
BNF and further work is necessary for the solution of the case sensitivity.
Unfortunatly, I'm not able to meet you in Frankfurt at September the 29th,
but I hope I can attend on some meetings in the future.
Regards
Steffen Rochel
Anacad EES
//(1) For certain groups of keywords, the order of occurance is not fixed.
//I did not make any changes or notes where I detected such situations.
//However, I did provide the sub-parameter ordering combinations for the sub-
//parameters r_pin, l_pin, and c_pin since this is the only exception to a fixed
//keyword-line sub-parameter ordering.
//(2) At this time the sub-parameters are case sensitive. I did not attempt
//to make changes in this area. This could be a IBIS issue to relax Version
//2.1 over Version 1.1. Reserved words 'power', 'gnd', 'na', 'nc' are not
//case sensitive. Units, e.g, 'm' are case sensitive. So some portions of
//the BNF may have to be changed for clarity. Without any case sensitivity
//restrictions, the BNF here will except IBIS_CHK compliant syntax along with
//non-compliant case change variations. Other than units and file name
//conventions, no portion of IBIS really needs the case restriction.
//(3) The 80 character line length limit is assumed using strings of limited
//length and reals. However, a sequence of reals may extend over several lines
//in the "full_matrix" package model. Stings of unlimited length may extend to
//subsequent lines, and their termination is demarked by any subsequent keyword.
//*** Changes in "keywords ... and added next line:
// Remarks
// comments starts with "//"
// keywords are enclosed by '[' '...' ']'. An underbar "_" may be substituted
// for any internal single space and a single space may be substituted for
// an internal underbar. No space may exist between the '[' or ']' and
// the internal keyword.
// defined characters and verbatium strings 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'
//*** Some comment characters used "\" so I changed the list and
//*** put the permitted characters in ASCII order within ' '.
comment_character ::= '!' | '"' | '#' | '$' | '%' | '&' | ''' | '(' |
')' | '*' | ',' | ':' | ';' | '<' | '>' | '?' |
'@' | '\' | '^' | '`' | '{' | '|' | '}' | '~'
ibisfilename ::= '[' 'file name' ']' ibisfilenamestring
ibisfilenamestring ::= string8 '.ibs'
packagefilename ::= '[' 'file name' ']' packagefilenamestring
packagefilenamestring ::= string8 '.pkg'
fileversion ::= '[' 'file rev' ']' string
date ::= '[' 'date' ']' string40
//*** The following four keywords do not have a string length limitation.
//*** Even copyright can extend to several lines.
source ::= '[' 'source' ']' string
notes ::= '[' 'notes' ']' string
disclaimer ::= '[' 'disclaimer' ']' string
copyright ::= '[' 'copyright' ']' string
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'
//*** This was unclear, so I made a change here
//pin_with_package_info
pin ::= pin_wpi
| pin_data
//*** Sub-parameter order choices added
pin_wpi ::= pin_header rlc_pin_heading pin_entry_set_wpi
rlc_pin_heading ::= 'r_pin' 'l_pin' 'c_pin' |
'r_pin' 'c_pin' 'l_pin' |
'l_pin' 'c_pin' 'r_pin' |
'l_pin' 'r_pin' 'c_pin' |
'c_pin' 'r_pin' 'l_pin' |
'c_pin' 'l_pin' 'r_pin'
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 }
//*** Even with package information heading, the last 3 columns are
//*** optional for any line. Thus the "[" and "]".
pin_entry_wpi ::= pin_entry [ real_na9 real_na9 real_na9 ]
//*** model_identifier is required, so I removed the "[" and "]"
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
//*** Last two subparameters are optional and pin_mapping follows similar
//*** syntax to diff_pin. This whole section has been modified.
pin_mapping ::= pin_mapping_wr
| pin_mapping_data
pin_mapping_wr ::= pin_mapping_header clamp_ref_name pin_mapping_value_set_wr
pin_mapping_data ::= pin_mapping_header pin_mapping_value_set
pin_mapping_header ::= '[' 'pin mapping' ']' 'pulldown_ref' 'pullup_ref'
clamp_ref_name ::= 'gnd_clamp_ref' 'power_clamp_ref'
pin_mapping_value_set ::= pin_mapping_values { pin_mapping_values }
pin_mapping_value_set_wr ::= pin_mapping_values_wr { pin_mapping_values_wr }
pin_mapping_values_wr ::= string5 string15 string15 [ string15 string15 ]
pin_mapping_values ::= string5 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 }
//*** Last two entries can be optional
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_refs and voltage_range requirement clarification below:
model_range ::= voltage_range |
all_model_refs |
voltage_range model_refs
all_model_refs ::= pullup_reference pulldown_reference gnd_clamp_reference
power_clamp_reference
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
//*** Both dvdtr and dvdtf are required
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
//*** Insert "number_pins" and "pin_numbers" definition corrected"
package_header ::= manufacturer oem description number_pins pin_numbers pin_names
oem ::= '[' 'oem' ']' string40
description ::= '[' 'description' ']' string60
//*** Correction here and define "pin_numbers"
number_pins ::= '[' 'number of pins' ']' pos_integer
pin_numbers ::= '[' 'pin numbers' ']' pin_names
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 ::= '[' 'inductance 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 }
//*** Refinded matrix_line definitions for banded and sparce matricies and
//*** broke out "row". Corrected bandwidth spelling.
banded_matrix ::= 'banded matrix' bandwidth banded_matrix_line
{ banded_matrix_line }
sparse_matrix ::= 'sparse matrix' sparce_matrix_line
{ sparce_matrix_line }
bandwidth ::= '[' 'bandwidth' ']' pos_integer
matrix_line ::= row real { real }
banded_matrix_line ::= row real
sparce_matrix_line ::= row string5 real { string5 real }
row ::= '[' 'row' ']' string5
endpackage ::= '[' 'end package model' ']'
//*** Made explicit that characters can follow real, certain FIRST characters are
//*** Units
real ::= <real_number> [ anychar { anychar } ]
real9 ::= <real_with_max_9_characters>
//*** Put in extended unit definition using ' '
anychar ::= unit | char
unit ::= 'f' | 'p' | 'n' | 'u' | 'm' | 'k' | 'M' | 'G' | 'T'
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 ::= <positive_decimal_integer>
Received on Fri Sep 9 02:55:08 1994
This archive was generated by hypermail 2.1.8 : Fri Jun 03 2011 - 09:52:28 PDT