IPC vs Ocean script

S

Sam

Guest
Hi all,

I'm currently implementing an IPC handler dealing with Ocean netlist generation.
I'm facing this issue: If two netlisting requests arrived on the IPC chanel,
the first netlisting request begins, then the second request starts too as the
previous one is not terminated; the result is that the execution of first Ocean
script stops after "simulator()" command, as the latest Ocean script is
succesfully executed.
It seems that dfII is leaving my procedure after simulator() command, as soon as
a event arrived on IPC channel.

Is there a way to start new requests after execution of previous one when using
IPC protocol? Or which method should I use to manage simultaneous events?

Example of procedure to be executed :
-------------------------------------
procedure( DoOceanNetlist( simulatorName lib cell view )
simulator( simulatorName )
design(lib cell view)
createNetlist()
)


IPC request 1:
--------------
DoOceanNetlist( 'spectre "lib1" "cell1" "view1" )

IPC request 2:
--------------
DoOceanNetlist( 'spectre "lib2" "cell2" "view2" )


Thanks in advance,

Sam.
 
Sam wrote:
Hi all,

I'm currently implementing an IPC handler dealing with Ocean netlist
generation.
I'm facing this issue: If two netlisting requests arrived on the IPC
chanel,
the first netlisting request begins, then the second request starts too
as the
previous one is not terminated; the result is that the execution of
first Ocean
script stops after "simulator()" command, as the latest Ocean script is
succesfully executed.
It seems that dfII is leaving my procedure after simulator() command, as
soon as
a event arrived on IPC channel.

Is there a way to start new requests after execution of previous one
when using
IPC protocol? Or which method should I use to manage simultaneous events?

Example of procedure to be executed :
-------------------------------------
procedure( DoOceanNetlist( simulatorName lib cell view )
simulator( simulatorName )
design(lib cell view)
createNetlist()
)


IPC request 1:
--------------
DoOceanNetlist( 'spectre "lib1" "cell1" "view1" )

IPC request 2:
--------------
DoOceanNetlist( 'spectre "lib2" "cell2" "view2" )

It is not too clear to me. If the child is ocean it will fail on the design
call. You should interpret this with an icfb -nograph. But then again, why would
you do that instead of executing in the current session ?
 
It is not too clear to me. If the child is ocean it will fail on the
design call. You should interpret this with an icfb -nograph. But then
again, why would you do that instead of executing in the current session ?
Well, I wrote an external tool, which is connected to dfII via IPC chanel.
This tool is able to ask Cadence to generate netlists. Those netlists are
generated into dfII using ocean commands. The problem is, when my external tool
sends several netlisting requests via CDS ipc chanel, CDS don't wait for the
previous job to be finished, before starting a new one. The result is that I
only get netlist corresponding to lastest request. The previous ones are never done.
My question:
Is it possible to tell CDS ipc to execute a job only after completion of the
previous one? Or which method should I use to manage simultaneous events on IPC
chanel?

Thanks,

Sam.
 
Sam wrote:
It is not too clear to me. If the child is ocean it will fail on the
design call. You should interpret this with an icfb -nograph. But then
again, why would you do that instead of executing in the current
session ?


Well, I wrote an external tool, which is connected to dfII via IPC chanel.
This tool is able to ask Cadence to generate netlists. Those netlists are
generated into dfII using ocean commands. The problem is, when my
external tool
sends several netlisting requests via CDS ipc chanel, CDS don't wait for
the previous job to be finished, before starting a new one. The result
is that I only get netlist corresponding to lastest request. The
previous ones are never done.
My question:
Is it possible to tell CDS ipc to execute a job only after completion of
the previous one? Or which method should I use to manage simultaneous
events on IPC chanel?
I don t think icfb can handle things in parallel just like that. I would not
even know how to do stg like that. Short of starting multiple icfb processes.

Your external tool should just wait for dfII. For instance dfII prints a line
procedure( DoOceanNetlist( simulatorName lib cell view )
printf("ocean netlisting %L %L %L for %L simulation..." lib cell view
simulatorName )
simulator( simulatorName )
design(lib cell view)
createNetlist()
printf("done\n")
)

and your external does a gets() before it asks for another.

But it would really be clearer if you posted your code !
 
Sam:
cid=ipcBeginProcess(your process)
ipcWait(cid)

Note that you can create netlists from ADE with:
asiCreateNetlist(asiGetCurrentSession() "nil")
---
Erik


Sam <agnes.sam@NoSpamfree.fr> wrote in message news:<clsvpk$cjj$1@newshost.mot.com>...
It is not too clear to me. If the child is ocean it will fail on the
design call. You should interpret this with an icfb -nograph. But then
again, why would you do that instead of executing in the current session ?


Well, I wrote an external tool, which is connected to dfII via IPC chanel.
This tool is able to ask Cadence to generate netlists. Those netlists are
generated into dfII using ocean commands. The problem is, when my external tool
sends several netlisting requests via CDS ipc chanel, CDS don't wait for the
previous job to be finished, before starting a new one. The result is that I
only get netlist corresponding to lastest request. The previous ones are never done.
My question:
Is it possible to tell CDS ipc to execute a job only after completion of the
previous one? Or which method should I use to manage simultaneous events on IPC
chanel?

Thanks,

Sam.
 

Welcome to EDABoard.com

Sponsor

Back
Top