<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Use Cadence ITK Together with OpenAccess API</title>
	<atom:link href="http://www.voom.net/cadence-itk-together-with-openaccess/feed" rel="self" type="application/rss+xml" />
	<link>http://www.voom.net/cadence-itk-together-with-openaccess</link>
	<description>Custom Software Development</description>
	<lastBuildDate>Fri, 09 Dec 2011 00:47:37 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: fogh</title>
		<link>http://www.voom.net/cadence-itk-together-with-openaccess/comment-page-1#comment-24494</link>
		<dc:creator>fogh</dc:creator>
		<pubDate>Mon, 16 Aug 2010 12:26:08 +0000</pubDate>
		<guid isPermaLink="false">http://www.voom.net/?p=742#comment-24494</guid>
		<description>Emmanuel,
- there is an example C++ Pcell in the OpenAccess tutorial package, at ./labs/pccpp
- there is an example of Pcell registration in the plugin mechanism at ./labs/pcplugin

- -
John,
 using the same version as VXL may give &quot;surprises&quot;. For instance the latest 6.1.4 will ignore the &quot;lib.defs&quot; files, as it reads a &quot;cds.lib&quot; by default.

 regarding the pros&amp;cons of OA/ITK. For Pcells, it is possible with OA to get the PCells that have been cached using both CDNS or CNI formats, even if actual evaluation is not possible.

k.r.
--</description>
		<content:encoded><![CDATA[<p>Emmanuel,<br />
- there is an example C++ Pcell in the OpenAccess tutorial package, at ./labs/pccpp<br />
- there is an example of Pcell registration in the plugin mechanism at ./labs/pcplugin</p>
<p>- -<br />
John,<br />
 using the same version as VXL may give &#8220;surprises&#8221;. For instance the latest 6.1.4 will ignore the &#8220;lib.defs&#8221; files, as it reads a &#8220;cds.lib&#8221; by default.</p>
<p> regarding the pros&amp;cons of OA/ITK. For Pcells, it is possible with OA to get the PCells that have been cached using both CDNS or CNI formats, even if actual evaluation is not possible.</p>
<p>k.r.<br />
&#8211;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John McGehee</title>
		<link>http://www.voom.net/cadence-itk-together-with-openaccess/comment-page-1#comment-19873</link>
		<dc:creator>John McGehee</dc:creator>
		<pubDate>Sun, 20 Sep 2009 21:57:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.voom.net/?p=742#comment-19873</guid>
		<description>Thank you for your interest.

I have no experience with C++ PCells.  C++ PCells are not at all popular.  In fact, you are the first person I have heard of who has tried them.

I have two suggestions for you.  Get the Ciranova PyCells, and write your PCells in Python.  You could also try Tcl PCells.  Synopsys Custom Designer is using them.

If you still want to use C++ PCells, have a look at the CiraNova PyCell documentation.  You can download it for free.  It might give you a clue that will help you get your C++ PCells running.

Keep me posted.  I am interested to hear what happens.</description>
		<content:encoded><![CDATA[<p>Thank you for your interest.</p>
<p>I have no experience with C++ PCells.  C++ PCells are not at all popular.  In fact, you are the first person I have heard of who has tried them.</p>
<p>I have two suggestions for you.  Get the Ciranova PyCells, and write your PCells in Python.  You could also try Tcl PCells.  Synopsys Custom Designer is using them.</p>
<p>If you still want to use C++ PCells, have a look at the CiraNova PyCell documentation.  You can download it for free.  It might give you a clue that will help you get your C++ PCells running.</p>
<p>Keep me posted.  I am interested to hear what happens.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Emmanuel Lambert</title>
		<link>http://www.voom.net/cadence-itk-together-with-openaccess/comment-page-1#comment-19819</link>
		<dc:creator>Emmanuel Lambert</dc:creator>
		<pubDate>Thu, 17 Sep 2009 14:23:34 +0000</pubDate>
		<guid isPermaLink="false">http://www.voom.net/?p=742#comment-19819</guid>
		<description>Dear M. McGehee,

Currently, I am a severely stuck with a practical issue trying to get an OpenAccess plugin working from Cadence Virtuoso. 
From the point of view of OpenAccess, everything is very well documented and clear. However, it is not from the point of Cadence. It is also not clear if we maybe need the Cadence Integrator&#039;s Toolkit (ITK), or not.

-We have an Openaccess plugin file (.plg extension, see opnPCell.plg herunder) which was placed in the path /Cadence/IC6.1/oa_v22.04.028/data/plugins/ 

-We have the C++ code &quot;opnPcell.cpp&quot; (see below) which was compiled into a shared library &quot;libopnPcell.so&quot; and placed in the path /Cadence/IC6.1/oa_v22.04.028/lib/linux_rhel30_gcc411_32/opt

These come from the standard OpenAccess 2.2 release.

Now my question is : how do I tell Cadence Virtuoso (6.1.3) to &quot;start up&quot; the
plugin when instantiating a PCell, i.e. to call the getClassObject method of &quot;libopnPcell.so&quot; and instantiate an object of class &quot;opnPcell&quot; ? 
Do we need the Cadence ITK ?

I cannot find any documentation about this on Sourcelink or newsgroups.
Could you give us a hint on how to proceed?

Best regards.

-------------------------- file opnPCell.plg --------------



---------------------------file opnPcell.cpp ----------------
#include &quot;opnPcell.h&quot;

Factory   opnPcell::factory(&quot;opnPcell&quot;);

const oaString      opnPcellMsgs[] = {
    &quot;Invalid value for the &#039;%s&#039; parameter supplied.&quot;
};

long
getClassObject(const char   *classID,
               const Guid   &amp;interfaceID,
               void         **ptr)
{
    return FactoryBase::getClassObject(classID, interfaceID, ptr);
}


oaPcellDef *
opnPcell::getPcellDef()
{
    return new opnPcellDef(this);
}

void
opnPcell::onUnbind(oaDesign     *design,
                   oaPcellDef   *pcellDef)
{
    delete pcellDef;
}



void
opnPcell::onEval(oaDesign   *design,
                 oaPcellDef *pcellDef)
{
    oaParam         param;
    oaParamArray    params;

    design-&gt;getParams(params);

    oaUInt4         dbu = 1000;
    oaInt4          w;
    oaInt4          l;

    if (params.find(&quot;width&quot;, param)) {
        if (param.getType() == oacDoubleParamType) {
            w = oaInt4(param.getDoubleVal() * dbu);
        }
    }

    if (w &lt; 1) {
        throw opnError(opnParamInvalid, (const char *) &quot;width&quot;);
    };

    if (params.find(&quot;length&quot;, param)) {
        if (param.getType() == oacDoubleParamType) {
            l = oaInt4(param.getDoubleVal() * dbu);
        }
    }

    if (l getTopBlock();

    if (!bk) {
        bk = oaBlock::create(design);
    }

    oaRect          *box1 = oaRect::create(bk, 2, 1, oaBox(-l, -w, l, w));

    // Double w,l and swap
    w *= 2;
    l *= 2;
    oaRect          *box2 = oaRect::create(bk, 3, 1, oaBox(-w, -l, w, l));
}



oaUInt4
opnPcell::calcDiskSize(oaPcellDef *pcellDef) const
{
    return 0;
}



opnPcellDef::opnPcellDef(IPcell *pcell)
: oaPcellDef(pcell)
{
    data = &quot;MyopnPcellData&quot;;
}



inline
opnException::opnException(oaUInt4 msgIdIn)
: oaException(msgIdIn)
{
}



const oaString &amp;
opnException::getFormatString() const
{
    return opnPcellMsgs[msgId];
}



opnError::opnError(oaUInt4 msgIdIn,
                   ...)
: opnException(msgIdIn)
{
    va_list args;

    va_start(args, msgIdIn);
    format(args);
    va_end(args);
}</description>
		<content:encoded><![CDATA[<p>Dear M. McGehee,</p>
<p>Currently, I am a severely stuck with a practical issue trying to get an OpenAccess plugin working from Cadence Virtuoso.<br />
From the point of view of OpenAccess, everything is very well documented and clear. However, it is not from the point of Cadence. It is also not clear if we maybe need the Cadence Integrator&#8217;s Toolkit (ITK), or not.</p>
<p>-We have an Openaccess plugin file (.plg extension, see opnPCell.plg herunder) which was placed in the path /Cadence/IC6.1/oa_v22.04.028/data/plugins/ </p>
<p>-We have the C++ code &#8220;opnPcell.cpp&#8221; (see below) which was compiled into a shared library &#8220;libopnPcell.so&#8221; and placed in the path /Cadence/IC6.1/oa_v22.04.028/lib/linux_rhel30_gcc411_32/opt</p>
<p>These come from the standard OpenAccess 2.2 release.</p>
<p>Now my question is : how do I tell Cadence Virtuoso (6.1.3) to &#8220;start up&#8221; the<br />
plugin when instantiating a PCell, i.e. to call the getClassObject method of &#8220;libopnPcell.so&#8221; and instantiate an object of class &#8220;opnPcell&#8221; ?<br />
Do we need the Cadence ITK ?</p>
<p>I cannot find any documentation about this on Sourcelink or newsgroups.<br />
Could you give us a hint on how to proceed?</p>
<p>Best regards.</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; file opnPCell.plg &#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;file opnPcell.cpp &#8212;&#8212;&#8212;&#8212;&#8212;-<br />
#include &#8220;opnPcell.h&#8221;</p>
<p>Factory   opnPcell::factory(&#8220;opnPcell&#8221;);</p>
<p>const oaString      opnPcellMsgs[] = {<br />
    &#8220;Invalid value for the &#8216;%s&#8217; parameter supplied.&#8221;<br />
};</p>
<p>long<br />
getClassObject(const char   *classID,<br />
               const Guid   &amp;interfaceID,<br />
               void         **ptr)<br />
{<br />
    return FactoryBase::getClassObject(classID, interfaceID, ptr);<br />
}</p>
<p>oaPcellDef *<br />
opnPcell::getPcellDef()<br />
{<br />
    return new opnPcellDef(this);<br />
}</p>
<p>void<br />
opnPcell::onUnbind(oaDesign     *design,<br />
                   oaPcellDef   *pcellDef)<br />
{<br />
    delete pcellDef;<br />
}</p>
<p>void<br />
opnPcell::onEval(oaDesign   *design,<br />
                 oaPcellDef *pcellDef)<br />
{<br />
    oaParam         param;<br />
    oaParamArray    params;</p>
<p>    design-&gt;getParams(params);</p>
<p>    oaUInt4         dbu = 1000;<br />
    oaInt4          w;<br />
    oaInt4          l;</p>
<p>    if (params.find(&#8220;width&#8221;, param)) {<br />
        if (param.getType() == oacDoubleParamType) {<br />
            w = oaInt4(param.getDoubleVal() * dbu);<br />
        }<br />
    }</p>
<p>    if (w &lt; 1) {<br />
        throw opnError(opnParamInvalid, (const char *) &quot;width&quot;);<br />
    };</p>
<p>    if (params.find(&quot;length&quot;, param)) {<br />
        if (param.getType() == oacDoubleParamType) {<br />
            l = oaInt4(param.getDoubleVal() * dbu);<br />
        }<br />
    }</p>
<p>    if (l getTopBlock();</p>
<p>    if (!bk) {<br />
        bk = oaBlock::create(design);<br />
    }</p>
<p>    oaRect          *box1 = oaRect::create(bk, 2, 1, oaBox(-l, -w, l, w));</p>
<p>    // Double w,l and swap<br />
    w *= 2;<br />
    l *= 2;<br />
    oaRect          *box2 = oaRect::create(bk, 3, 1, oaBox(-w, -l, w, l));<br />
}</p>
<p>oaUInt4<br />
opnPcell::calcDiskSize(oaPcellDef *pcellDef) const<br />
{<br />
    return 0;<br />
}</p>
<p>opnPcellDef::opnPcellDef(IPcell *pcell)<br />
: oaPcellDef(pcell)<br />
{<br />
    data = &#8220;MyopnPcellData&#8221;;<br />
}</p>
<p>inline<br />
opnException::opnException(oaUInt4 msgIdIn)<br />
: oaException(msgIdIn)<br />
{<br />
}</p>
<p>const oaString &amp;<br />
opnException::getFormatString() const<br />
{<br />
    return opnPcellMsgs[msgId];<br />
}</p>
<p>opnError::opnError(oaUInt4 msgIdIn,<br />
                   &#8230;)<br />
: opnException(msgIdIn)<br />
{<br />
    va_list args;</p>
<p>    va_start(args, msgIdIn);<br />
    format(args);<br />
    va_end(args);<br />
}</p>
]]></content:encoded>
	</item>
</channel>
</rss>

