[ibis-macro] Re: About the Typos BIRD comments from Fangyi

  • From: "Muranyi, Arpad" <Arpad_Muranyi@xxxxxxxxxx>
  • To: <msteinb@xxxxxxxxxx>, <ibis-macro@xxxxxxxxxxxxx>
  • Date: Tue, 7 Dec 2010 11:54:00 -0800

Mike,

 

For your curiosity, my problem was Walter's statement:

"The AMI_Init function usually will allocate memory that contains things
like tap settings and impulse response, and makes them available to the
AMI_GetWave function.  This has always been the methodology for Init
passing information to GetWave, and calls to GetWave passing information
to future calls to AMI GetWave."

which did not mention AMI_memory_handle, and as such

could imply that the Init function can allocate memory

for information exchange between itself and GetWave

without letting anyone know about it.  Of course this

is not prohibited in the spec so at this point there is

nothing that could prevent it from happening.

 

Arpad

=======================================================

 

From: ibis-macro-bounce@xxxxxxxxxxxxx
[mailto:ibis-macro-bounce@xxxxxxxxxxxxx] On Behalf Of Mike Steinberger
Sent: Tuesday, December 07, 2010 1:36 PM
To: ibis-macro@xxxxxxxxxxxxx
Subject: [ibis-macro] Re: About the Typos BIRD comments from Fangyi

 

Arpad-

It does appear that I misunderstood you.

All of us model developers absolutely depend on using AMI_memory_handle,
as described in IBIS 5.0, and as used as a publicly visible argument to
the model functions. That's what we need and that's all that we need.

I am left wondering what point you were trying to make.

Mike S.

On 12/07/2010 01:19 PM, Muranyi, Arpad wrote: 

Mike,

 

I think you misunderstood what I meant to say.

 

I was referring to Init allocating some memory that is

seen by GetWave, but not accessible through the arguments.

AMI_memory_handle DOES provide access, and if Init passes

stuff to GetWave using that handle, I think I can live with

that.

 

Arpad

============================================================

 

From: ibis-macro-bounce@xxxxxxxxxxxxx
[mailto:ibis-macro-bounce@xxxxxxxxxxxxx] On Behalf Of Mike Steinberger
Sent: Tuesday, December 07, 2010 12:33 PM
To: ibis-macro@xxxxxxxxxxxxx
Subject: [ibis-macro] Re: About the Typos BIRD comments from Fangyi

 

Arpad-

I couldn't disagree with you more. Right now we have a spec that works,
and you want to turn it into a spec that doesn't work.

AMI_memory_handle gives model developers exactly the flexibility they
need to get their job done, and you want to take that flexibility away.
In point of fact, model developers need a mechanism that you call "under
the table" in order to produce working models without divulging
proprietary design details. A lot of the information that's passed from
AMI_Init() to AMI_GetWave() is truly proprietary and should stay that
way. Now you want to at the very least constrain the form that
proprietary information can take.

What problem are you trying to solve? How would constraining the use of
AMI_memory_handle help you solve that problem?

Mike S.

On 12/07/2010 12:17 PM, Muranyi, Arpad wrote: 

This was one of my earliest complaints about AMI too, that Init

can have hidden conversations with GetWave under the table (sorry,

I meant in memory).  I think these functions should exchange all

information through their interface (i.e. arguments).  Mike's

suggestions of using AMI_memory_handle might be acceptable, but

I would strongly suggest that its use for this purpose should be

spelled out in the spec.

 

Arpad

===================================================================

 

From: Walter Katz [mailto:wkatz@xxxxxxxxxx] 
Sent: Tuesday, December 07, 2010 11:23 AM
To: Muranyi, Arpad; ibis-macro@xxxxxxxxxxxxx
Subject: RE: [ibis-macro] Re: About the Typos BIRD comments from Fangyi

 

Arpad,

 

The AMI_Init and AMI_GetWave functions are entries in a C routine. The
AMI_Init function usually will allocate memory that contains things like
tap settings and impulse response, and makes them available to the
AMI_GetWave function.  This has always been the methodology for Init
passing information to GetWave, and calles to GetWave passing
information to future calls to AMI GetWave.

 

Walter 

 

From: ibis-macro-bounce@xxxxxxxxxxxxx
[mailto:ibis-macro-bounce@xxxxxxxxxxxxx] On Behalf Of Muranyi, Arpad
Sent: Tuesday, December 07, 2010 11:56 AM
To: ibis-macro@xxxxxxxxxxxxx
Subject: [ibis-macro] Re: About the Typos BIRD comments from Fangyi

 

With regards to the "obvious" on how the parameter types

In, Out, and InOut are passed in and out of the DLL, I

need to restate a question I asked once before:

 

If we establish the rule that In and InOut is passed into

the DLL through the AMI_parameters_in argument, and Out

and InOut are returned by the DLL through the AMI_parameters_out

argument, how are we going to deal with the situation when the

Init function contains an optimizer and returns the optimized

parameters (tap coefficients, for example) though the

AMI_parameters_out argument?  Remember, the GetWave function

does NOT have an AMI_parameters_in argument.  How is the

Init function going to pass the optimized parameters to

GetWave?

 

Initially I thought that the AMI_parameters_in argument is

visible to GetWave also, and it could see the optimized

parameters in that argument.  But this discussions seems to

indicate that the Init function is not returning the optimized

parameters in the AMI_parameters_in argument, on in the

AMI_parameters_out argument which is not visible to GetWave,

as far as I can tell...  Am I missing something "obvious"?

 

Any suggestions?

 

Thanks,

 

Arpad

================================================================

 

 

 

 

From: ibis-macro-bounce@xxxxxxxxxxxxx
[mailto:ibis-macro-bounce@xxxxxxxxxxxxx] On Behalf Of Muranyi, Arpad
Sent: Monday, December 06, 2010 2:10 PM
To: ibis-macro@xxxxxxxxxxxxx
Subject: [ibis-macro] Re: About the Typos BIRD comments from Fangyi

 

Walter, Mike,

 

This is a classic example for why we have so much trouble

understanding the specification.

 

The paragraph you quoted below contains the following

answers ONLY:

 

who allocates memory for AMI_parameters_in

who allocates memory for AMI_parameters_out

these arguments are pointers to a string

the string is formatted as a parameter tree

the input from the .ami file is passed to the

model using a string

 

Note that the above list does NOT state the following:

 

through which string (argument) are the parameters

of type In go into the model

through which string (argument) do the parameters

of type Out come out from the model

through which string (argument) do the parameters

of type InOut go into the model

through which string (argument) do the parameters

of type InOut come out from the model

 

Whether these answers are obvious or not, I think a well

written specification does have to state them.   Following

the analogy of an I/O buffer in hardware, I can very easily

imagine that our InOut parameter may be modified "in place"

the same way as we process the impulse_matrix.  This thinking

is just as "obvious" and logical as the thinking that an

InOut is passed to the AMI model in the AMI_parameters_in

string, and the model passes a modified COPY of it back in

the AMI_parameters_out string.  No one can tell (let it be

model maker or EDA vendor) what to do based on the way the

spec is worded.  What if the model maker does it one way

and the EDA vendor the other way?

 

Specs (and law documents) usually state every single thing,

even those that are obvious, otherwise it can't be used as

a spec or law.  Let me give you an every-day illustration:

 

Is it obvious that you have to stop at a stop sign?  Most 

obviously yes!  Yet I would bet that there is no traffic text

book that doesn't include at least one sentence about the stop

sign to explain that you must bring your vehicle to a complete

halt when you get there.  Some might even give you a little more

detail on where exactly you have to stop.  You don't stop when

you first see the sign.  If there is a line then you need to

stop at the line.  But in case you can't see the entire

intersection from that location, you must move forward (after

you stopped at the lie), and stop again at the position from

where you can see the intersection well enough.  In addition

to these details they may explain what the 3-way and 4-way

extension signs mean, etc...

 

Interesting.  So much detail about such an obvious traffic sign!

And guess what, all this is written down in the traffic law books

also, so when you get a ticket they can give you exact references

on which section(s) of the law you violated.

 

As opposed to this, think about what goes into the User's Manual

of your car.  They may say that you need to step on the second

pedal (counting right to left) if you want to slow your car down

or bring it to a halt, but they will most likely not explain any

of the rules about the stop sign.

 

This is how I see our specification too.  The rules have to be

spelled out in the specification.  How you generate the data or

how you write your AMI models or EDA software which obey those

rules may go into the HOWTO document.  According to this,

spelling out how the content of the .ami file is split into

the In, Out and InOut strings, and how the model and EDA tool

is expected to read and write them belongs to the specification,

as far as I can tell.  Whether you type the .ami file with one

finger or generate it automatically with software could be part

of a HOWTO document...

 

On the other hand, I don't think any of us would be interested

in reading the specification in a BNF form...

 

Arpad

===================================================================

 

From: Walter Katz [mailto:wkatz@xxxxxxxxxx] 
Sent: Monday, December 06, 2010 10:36 AM
To: Muranyi, Arpad; ibis-macro@xxxxxxxxxxxxx
Subject: RE: [ibis-macro] Re: About the Typos BIRD comments from Fangyi

 

Arpad,

 

The following describes both the content of AMI_parameters_in and
AMI_parameters_out. I think it was always obvious that In and InOut went
into AMI_parameters_in and InOut and Out went into AMI_parameters_out. 

 

| 3.1.2.6 AMI_parameters (_in and _out) 

| 

| Memory for AMI_parameters_in is allocated and de-allocated by the EDA 

| platform. The memory pointed to by AMI_parameters_out is allocated and


| de-allocated by the model. This is a pointer to a string. All the
input 

| from the IBIS AMI parameter file are passed using a string that been 

| formatted as a parameter tree. 

| 

| Examples of the tree parameter passing is: ...

 

Walter

 

 

 

 

 

 

From: ibis-macro-bounce@xxxxxxxxxxxxx
[mailto:ibis-macro-bounce@xxxxxxxxxxxxx] On Behalf Of Mike Steinberger
Sent: Monday, December 06, 2010 11:09 AM
To: ibis-macro@xxxxxxxxxxxxx
Subject: [ibis-macro] Re: About the Typos BIRD comments from Fangyi

 

Mike-

I'm going to take this opportunity to remind us all why we have a BNF
syntax description in the first place. Back when we were preparing BIRD
104, I needed to provide this explanation at one point, so perhaps now
is as good a time as any for a refresher.

Obviously BNF is a software technology thing. It describes a syntax in a
way which is completely rigorous and precise. It leaves no room for
misinterpretation. For example, the developer of the latest version of
IBISCHECK knew exactly what we meant, didn't have to ask any questions
about the syntax itself, and produced a completely correct parser. From
what I could see of other aspects of their work, this person is a
thorough professional, so the fact that they got it right came as no
surprise to me.

As is so often the case, a rigorous and precise statement doesn't
exactly make great reading. For example, I don't suppose there are many
people who read mathematicians' proofs for the fun of it.

At the time, Ambrish requested a "plain English" version of the
specification, and I provided it. Note, however, that "plain English" is
an oxymoron, and that as carefully as I tried to write that description,
there's still room for misinterpretation.

I still claim that we're mixing "specification" with "tutorial" in an
undisciplined way that will produce a document which does neither job
well. If we really want "plain English" text that introduces the
specification in a way that's easy to read and learn from, I think
that's a fine idea; however, that material should go into a separate
tutorial document.

My 2c.
Mike Steinberger

 

 

Other related posts: