<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Voom, Inc.</title>
	
	<link>http://www.voom.net</link>
	<description>IC Physical Design</description>
	<pubDate>Thu, 20 Nov 2008 07:42:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/voom" type="application/rss+xml" /><item>
		<title>Upgrading to OpenAccess DM4</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/455145268/upgrading-to-openaccess-dm4</link>
		<comments>http://www.voom.net/upgrading-to-openaccess-dm4#comments</comments>
		<pubDate>Sun, 16 Nov 2008 18:46:27 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[OpenAccess]]></category>

		<category><![CDATA[Add new tag]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=354</guid>
		<description><![CDATA[The time has come to upgrade your OpenAccess based application to Data Model 4 (DM4). The upgrade from DM3 is smooth enough--you just need to keep your eye on a few things.]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s time to upgrade your OpenAccess application to Data Model 4 (DM4).  The upgrade from DM3 is smooth enough&#8211;you just need to keep your eye on a few things.</p>
<h3><span id="more-354"></span></h3>
<p>Whenever you upgrade to a new OpenAccess version, always read the release notes in <a href="https://www.si2.org/cgi-bin/openeda.si2.org/download?group_id=5&amp;file_id=1167&amp;filename=AAA_OA22.04.028_Whats_New.zip" target="_blank">What&#8217;s New</a>.</p>
<h3>Use the Same Version as Cadence Virtuoso</h3>
<p>When I want to know which version of OpenAccess to use, I look to Cadence Virtuoso. Virtuoso 6.1.3 is on DM4, so I am too.  OpenAccess 22.04_p028 is a good DM4 version.</p>
<h3>DM3 OpenAccess Databases Saved as DM4</h3>
<p>When you open a design that was saved using DM3, OpenAccess DM4 translates it to DM4.  If you save it, it will be saved as DM4, and OpenAccess DM3 will no longer be able to read it. Skip the save, and your persistent database on disk remains DM3.</p>
<p>OpenAccess DM4 also reads DM3 tech objects, but as always, the tech object is not saved when you save a design.   You must save it directly in order for the upgraded DM4 version to appear on disk.</p>
<p><tt>oacDataModelRevNumber</tt> tells you the data model of the OpenAccess version you are using.</p>
<h3>More oaAssert Assertions</h3>
<p>The number of assertions doubled from OpenAccess 2.2.5 to 2.2.6, and doubled again from 2.2.6 to DM4 22.04_p028. More assertions is a great thing, but it means that the run time behavior of OpenAccess debug libraries and optimized libraries continues to diverge.  Just keep this in mind.</p>
<p>When an oaAssert fires, it throws an exception of type <tt>oacInternalError</tt>.  For example,</p>
<pre>Internal OpenAccess Error: Expression [netHashMap.get(netTbl[i]) == i] returned
false in file oaGlobalMem.cpp at line 463</pre>
<p>If you get an assertion failure from OpenAccess debug code, try running the optimized code to see what happens with assertions elided.  If you find an inappropriate assertion, make sure to <a href="https://www.si2.org/openeda.si2.org/tracker/?atid=101&amp;group_id=5&amp;func=browse" target="_blank">report it</a>.</p>
<h3>Don&#8217;t Dial D for Debug</h3>
<p>Up until DM4, the OpenAccess shared libraries compiled for debug had a <tt>D</tt> appended to their file name.  For example, the optimized shared library file name was named something like <tt>liboaBase.so</tt>, and the debug library was named <tt>liboaBase<strong>D</strong>.so</tt>.</p>
<p>The <tt>D</tt> has mercifully been dropped in DM4 so that the shared library file names for optimized and debug libraries are the same&#8211;the path name alone determines the type of library.  To continue the above example, in DM4 the optimized and debug oaBase shared library files are both named <tt>liboaBase.so</tt>.</p>
<p>The DM4 release contains symbolic links for backward compatability of shared library files.  For example, in <tt>lib/linux_rhel30_gcc411_64/dbg/</tt>, <tt>liboaDMTurboD.so</tt> is a link to <tt>liboaDMTurbo.so</tt>.   However, there is no link <tt>liboaUtilD.a</tt>.  Further, the DM4 plug-in interface only loads the non-<tt>D</tt> library. If you link your application so it can load only the <tt>D</tt> libraries, it will not be able to load any plug-ins. You won&#8217;t get anywhere without a DM plug-in.  You may never see these problems, but the easiest way to avoid trouble is to simply do it the new way: <strong>stop appending a <tt>D</tt> to the shared library file name when linking to DM4.</strong></p>
<img src="http://feeds.feedburner.com/~r/voom/~4/455145268" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/upgrading-to-openaccess-dm4/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/upgrading-to-openaccess-dm4</feedburner:origLink></item>
		<item>
		<title>Eclipse IDE with OpenAccess</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/441848347/eclipse-ide-with-openaccess</link>
		<comments>http://www.voom.net/eclipse-ide-with-openaccess#comments</comments>
		<pubDate>Tue, 04 Nov 2008 03:00:57 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[OpenAccess]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=336</guid>
		<description><![CDATA[Here's how to get started using Eclipse as an integrated development environment (IDE) for OpenAccess-based applications. Multi-platform Eclipse supports the all same platforms as OpenAccess and it's free software.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.eclipse.org" target="_blank">Eclipse</a> works great for me as an C++ integrated development environment (IDE) for <a href="http://www.si2.org/?page=621" target="_blank">OpenAccess</a>-based applications.  It supports all the same platforms as OpenAccess, and it&#8217;s free software.</p>
<p>Here&#8217;s how to get started.  Your comments and corrections are always appreciated.<span id="more-336"></span></p>
<h3>Create an Eclipse Workspace</h3>
<ul>
<li><a href="http://www.eclipse.org/downloads" target="_blank">Download</a> and install <em>Eclipse IDE for C/C++ Developers</em>.  Eclipse is included with most Linux distributions, but an update to the latest version is worthwhile.  Only <a href="http://www.eclipse.org/projects/project_summary.php?projectid=tools.cdt">C/C++ Development Tooling (CDT)</a> version 4.0 and above are professional quality.</li>
<li>Choose a workspace directory that will contain OpenAccess and related applications, for example, <tt>/home/jm/src</tt>.  You probably already have such a directory&#8211;just use it as is.</li>
<li>Start Eclipse.  In Gnome, it can be executed by selecting <em>Applications &gt; Programming &gt; Eclipse</em> from the menu.</li>
<li>Specify your workspace path, like <tt>/home/jm/src</tt></li>
<li>The Eclipse Resource screen will appear.  Select <em>Workbench - Go to the workbench</em>.  The Eclipse workbench appears.  This is where you will be spending most of your time in Eclipse.</li>
</ul>
<h3><a name="createOaProject"></a>Create a Project for OpenAccess</h3>
<p>If you want to use Eclipse to edit and recompile OpenAccess, you must download OpenAccess to a location within your Eclipse workspace.  For this, use the following procedure.</p>
<p>OpenAccess comes with precompiled libraries that work fine.  If you do not need to recompile OpenAccess yourself, you can put OpenAccess in a location outside your workspace, and <a href="#oaLinkedFolder" target="_self">add OpenAccess as a linked folder</a>.</p>
<h4>Set Up the Project</h4>
<ul>
<li>Download OpenAccess to a suitable location within your workspace, such as <tt>/home/jm/src/oa/22.04p028</tt></li>
<li> Create a new project for OpenAccess.  Right click in the <em>Project Explorer</em> window.  In the context menu, select <em>New &gt; C++ Project</em>.  Alternatively, select the menu command <em>File &gt; New &gt; C++ Project</em>.
<ul>
<li> Specify a project name, such as <tt>OA</tt></li>
<li> Uncheck <em>Use default location</em>, and specify the <em>Location</em> of the <tt>oa/</tt> directory within the OpenAccess software, such as <tt>/home/jm/src/oa/22.04_p028/oa</tt></li>
<li> Since OpenAccess is already complete with all source and build files, select <em>Executable &gt; Empty Project</em> so that Eclipse will not add any files.  The other <em>Project types</em> choices are more useful when you start a new project.</li>
<li> Click <em>Next</em> to advance to the <em>Select Configurations</em>.  Two configurations, <em>Debug</em> and <em>Release</em> are available by default.</li>
<li>Click <em>Finish</em> to dismiss the <em>Select Configurations</em> dialog.  If the dialog refuses to close, make sure the <em>Location</em> you specified is a full path to a location within the workspace.</li>
</ul>
</li>
<li> A dialog will ask, <em>This kind of project is associated with the C/C++ perspective.  Do you want to open this perspective now?</em> A perspective is an arrangement of windows within the Eclipse workbench.  Click <em>Yes</em>, and the C/C++ perspective appears.  This perspective is suitable for writing code.  Later, you will encounter the Debug perspective that displays different windows suitable for debugging.</li>
<li> Project OA now appears in the the <em>Project Explorer</em> window.  Expand folders by single clicking, and open files by double clicking.</li>
</ul>
<h4>Set Up Building</h4>
<ul>
<li>Create an <tt>oa_install</tt> target for the <em>Debug</em> configuration
<ul>
<li>Right click on the <em>OA</em> project in the <em>Project Explorer</em> folder.  Set the active configuration to <em>Debug</em> using <em>Build Configurations &gt; Set Active &gt; Debug</em>.</li>
<li>Right click on the OA project in the <em>Project Explorer</em> folder.  Select <em>Make targets &gt; Create</em> in the context menu.  The <em>Create a new Make target</em> dialog appears.
<ul>
<li>Specify <tt>oa_install</tt> for both <em>Target Name</em> and <em>Make Target</em></li>
<li>Specify <tt>make OPTMODE=dbg</tt> for <em>Build command</em></li>
<li>Click <em>Create</em></li>
</ul>
</li>
</ul>
</li>
<li>Create an <tt>oa_install</tt> target for the <em>Release</em> configuration
<ul>
<li>Right click on the <em>OA</em> project.  Set the active configuration using <em>Build Configurations &gt; Set Active &gt; </em><em>Release.</em></li>
<li>Right click on the OA project.  Select <em>Make targets &gt; Create</em> in the context menu.  The <em>Create a new Make target</em> dialog appears.
<ul>
<li>Specify <tt>oa_install</tt> for both <em>Target Name</em> and <em>Make Target</em></li>
<li>Specify <tt>make OPTMODE=opt</tt> for <em>Build command</em></li>
<li>Click <em>Create</em></li>
</ul>
</li>
</ul>
</li>
<li>To build OpenAccess for a configuration,
<ul>
<li>Right click on the <em>OA</em> project.  Set the active configuration using the <em>Build Configurations &gt; Set Active</em> command.<em><br />
</em></li>
<li>Right click on the OA project.  Select <em>Make targets &gt; Build</em></li>
<li>In the dialog, select <tt>oa_install</tt></li>
<li>Click <em>Build</em> to recompile OpenAccess</li>
</ul>
</li>
</ul>
<h3>Create a Project for Each of Your Applications</h3>
<p>The next step is to add a project for each of your own applications. You do it in much the same way as described above.</p>
<h4>Set Up the Project</h4>
<ul>
<li>If your application already exists, check out the source hierarchy to a suitable location within your workspace, such as <tt>/home/jm/src/mower/oa2mw</tt></li>
<li>Right click in the <em>Project Explorer</em> window.  In the context menu, select <em>New &gt; C++ Project</em> to create a new project for your application.  Alternatively, select the menu command <em>File &gt; New &gt; C++ Project</em>.
<ul>
<li> Specify a project name, such as <tt>oa2mw</tt></li>
<li>The default project location is the directory with the same name as the project, immediately under the workspace directory.  If this is not the case, uncheck <em>Use default location</em>, and specify the path within the workbench, such as <tt>/home/jm/src/mower/oa2mw</tt>.</li>
<li>Select from the <em>Project Types</em>:
<ul>
<li>If your application already has source and build files, select <em>Executable &gt; Empty Project</em> so that Eclipse will not add any files</li>
<li>If you are starting a new application, choose the type of <em>Project types</em> that matches your style</li>
</ul>
</li>
<li>Advance to <em>Select Configurations</em> by clicking <em>Next</em>.  Two configurations, <em>Debug</em> and <em>Release</em> are available by default.  They should be sufficient for now.  You can easily add more later.</li>
<li>If you will be using your own Makefile, rahter than the Eclipse internal builder,
<ul>
<li>Click <em>Advanced settings</em>.  Select <em>C/C++ Build</em>.
<ul>
<li>Select <em>Configuration</em> Debug
<ul>
<li>Uncheck <em>Use default build command</em></li>
<li>Specify the appropriate command to build your application for debug, such as <tt>make OPTMODE=dbg</tt></li>
<li>If the default <em>Build directory</em> is incorrect, uncheck <em>Generate Makefiles automatically</em></li>
<li>In <em>Build directory</em>, specify the working directory in which your Makefile should be run, for example, <tt>${workspace_loc:/mower/way/Debug}</tt></li>
<li>Click <em>Apply</em></li>
</ul>
</li>
</ul>
<ul>
<li>Select configuration <em>Release</em>
<ul>
<li>For most applications, the default <em>Build command</em> (<tt>make</tt>) is in fact the correct release build command.  If not, uncheck <em>Use default build command</em>, and specify the command to build your application optimized, such as <tt>make OPTMODE=opt</tt>.</li>
<li>If the default <em>Build directory</em> is incorrect, uncheck <em>Generate Makefiles automatically</em></li>
<li>In <em>Build directory</em>, specify the working directory in which your Makefile should be run, for example, <tt>${workspace_loc:/mower/way/Release}</tt></li>
<li>Click <em>Apply</em></li>
</ul>
</li>
</ul>
<ul>
<li>Click <em>OK</em></li>
</ul>
</li>
</ul>
</li>
<li>Click <em>Finish</em> to create the project.  If the <em>Select Configurations</em> dialog refuses to close, make sure the <em>Location</em> you specified is a full path to an existing location within the workspace.</li>
</ul>
</li>
<li> A dialog may ask, <em>This kind of project is associated with the C/C++ perspective.  Do you want to open this perspective now?</em> A perspective is an arrangement of windows within the Eclipse workbench.  Click <em>Yes</em>, and the C/C++ perspective appears. This perspective is suitable for writing code. Later, you will encounter the Debug perspective that displays different windows suitable for debugging.</li>
<li> Your project now appears in the the <em>Project Explorer</em> window.  Expand folders by single clicking, and open files by double clicking.</li>
</ul>
<h4>Set Up Building</h4>
<p>Here I assume that you will be using your own Makefile, not the Eclipse internal builder.</p>
<ul>
<li>Establish the relationship between your application and OpenAccess:
<ul>
<li>If you <a href="#oaLinkedFolder" target="_self">created a project for OpenAccess</a>, Right click on your project in the <em>Project Explorer</em> folder. Select <em>Properties</em>.  In the <em>Project References</em> section of the <em>Properties</em> dialog, check <em>OA</em> and any other projects on which this project depends.</li>
<li>If OpenAccess is not a project within your Eclipse workspace, follow the instructions to <a href="#oaLinkedFolder" target="_self">create a linked folder</a> within your application&#8217;s project.</li>
</ul>
</li>
<li>To build OpenAccess for the currently active configuration, use the <em>Project &gt; Build Project</em> command</li>
</ul>
<h3><a name="oaLinkedFolder"></a>Add OpenAccess to Your Application Project as a Linked Folder</h3>
<p>If you want to put OpenAccess in a location outside your workspace and merely refer to it, add OpenAccess to your application project as a linked folder using the following procedure. This works best for larger installations where client applications require access to the same stable OpenAccess release.</p>
<p>However, you will not be able to edit and recompile OpenAccess.  If you want to do this, <a href="#createOaProject" target="_self">add OpenAccess as a distinct Eclipse project</a>.</p>
<ul>
<li>In the Project Explorer, right click to select the project to which you want to add OpenAccess</li>
<li>In the context menu, select <em>New &gt; Folder</em>.  Alternatively, select the menu command <em>File &gt; New &gt; Folder</em>.  The <em>New Folder</em> dialog appears.</li>
<li>Specify a folder name, like <em>OA</em></li>
<li> Click the <em>Advanced</em> button.  The dialog expands to show more options.</li>
<li>Click <em>Link to folder in the file system</em></li>
<li>Specify the path to the <tt>oa/</tt> directory within the OpenAccess software, such as <tt>/usr/local/eda/oa/22.04_p028/oa</tt></li>
<li>Click <em>Finish</em></li>
</ul>
<img src="http://feeds.feedburner.com/~r/voom/~4/441848347" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/eclipse-ide-with-openaccess/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/eclipse-ide-with-openaccess</feedburner:origLink></item>
		<item>
		<title>My Favorite LinkedIn Hack</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/415444693/my-favorite-linkedin-hack</link>
		<comments>http://www.voom.net/my-favorite-linkedin-hack#comments</comments>
		<pubDate>Thu, 09 Oct 2008 04:52:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=331</guid>
		<description><![CDATA[I used to maintain an Outlook database of my industry contacts, but it got out of control.  Sound familiar?  Join LinkedIn.  It&#8217;s the industry contact database that maintains itself.
Ready for the hack? There are probably former employers you do not want in your LinkedIn profile.  Yet you want to connect with [...]]]></description>
			<content:encoded><![CDATA[<p>I used to maintain an Outlook database of my industry contacts, but it got out of control.  Sound familiar?  Join <a href="http://www.linkedin.com" target="_blank">LinkedIn</a>.  It&#8217;s the industry contact database that maintains itself.</p>
<p>Ready for the hack?<span id="more-331"></span> There are probably former employers you do not want in your LinkedIn profile.  Yet you want to connect with the people who work(ed) there.  Just momentarily add the company to your profile, search for your friends and invite them to connect.  Then delete the company from your profile before anyone sees it.</p>
<p>Abusing this hack will probably get you kicked off LinkedIn, as it should.  So only invite people who would welcome an invitation from you.</p>
<p>Still, leave as many companies as possible in your profile, so your former colleagues can find <em>you</em> in the future.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/415444693" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/my-favorite-linkedin-hack/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/my-favorite-linkedin-hack</feedburner:origLink></item>
		<item>
		<title>API vs. File Exchange</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/406969390/api-vs-file-exchange</link>
		<comments>http://www.voom.net/api-vs-file-exchange#comments</comments>
		<pubDate>Tue, 05 Jun 2007 00:00:15 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[EDA]]></category>

		<category><![CDATA[Milkyway]]></category>

		<category><![CDATA[OpenAccess]]></category>

		<guid isPermaLink="false">http://www.voom.net/blog/?p=250</guid>
		<description><![CDATA[Should you stick with file exchange for physical design data, or upgrade to direct API access?  File exchange is not the easy answer it appears to be.]]></description>
			<content:encoded><![CDATA[<p>As the EDA industry has matured, multivendor interoperability has steadily improved.  In the 1980&#8217;s, if you had design data in a Daisy Logician, there was practically no way to extract it.  Then, with the rise of standard file formats such as EDIF and the currently popular quartet of LEF, DEF, Verilog and GDSII, multivendor interoperability became possible, albeit painful.  In the late 1990&#8217;s, <a href="http://www.synopsys.com/" target="_blank">Avanti&#8217;s</a> <a href="http://www.synopsys.com/products/milkyway/milkyway.html" target="_blank">Milkyway</a> and <a href="http://www.magma-da.com/" target="_blank">Magma&#8217;s</a> <a href="http://www.magma-da.com/blastfusion.html" target="_blank">Volcano</a> databases provided excellent interoperability across tools, but the interoperability was limited to the respective company&#8217;s product line.</p>
<p>Procedural access to other EDA companies&#8217; design databases was out of the question.  As Avanti CEO Gerry Hsu once declared, &#8220;We let nobody suck our blood.  We suck other people&#8217;s blood, but nobody sucks <em>our</em> blood!&#8221;  Gerry considered interoperability between his tools to be the lifeblood of Avanti, a competitive advantage that was to be jealously guarded.           While other CEOs were less graphic that Gerry, all EDA vendors who had any blood to suck shared his attitude.  Meanwhile, EDA users got by using text files for multivendor interoperability.</p>
<p>Finally, powerful EDA customers like <a href="http://www.agere.com/" target="_blank"> Agere</a>, <a href="http://www.hp.com/" target="_blank">Hewlett-Packard</a>, <a href="http://www.ibm.com/chips/asics/methodology" target="_blank">IBM</a>, <a href="http://www.intel.com/" target="_blank">Intel</a>, <a href="http://www.lsil.com/" target="_blank"> LSI Logic</a>, <a href="http://www.freescale.com/" target="_blank">Freescale</a> and <a href="http://www.st.com/" target="_blank">STMicroelectronics</a> got fed up with the          limitations of text file data exchange and <a href="http://www.eetimes.com/news/design/showArticle.jhtml?articleID=17407389" target="_blank">demanded procedural access to a common database</a>.  While the intervening machinations are beyond  the scope of this paper, the result is that everyone now has C/C++  procedural access to both <a href="http://www.cadence.com/" target="_blank">Cadence</a>/<a href="http://www.si2.org/" target="_blank">Si2</a> <a href="http://www.si2.org/?page=69" target="_blank">OpenAccess</a> and <a href="http://www.synopsys.com/" target="_blank">Synopsys</a> <a href="http://www.synopsys.com/products/milkyway/milkyway.html" target="_blank">Milkyway</a>.</p>
<h3>API or File Exchange?</h3>
<p>The question is now whether you as an EDA tool developer should take advantage of the Milkyway and OpenAccess APIs, or stick with the classic <a href="http://openeda.si2.org/projects/lefdef" target="_blank">LEF, DEF</a>, Verilog and GDSII.</p>
<p><span id="more-250"></span>File exchange is appealing because it seems so easy:</p>
<ul>
<li> Virtually every other tool reads and writes the popular text file formats</li>
<li> Readers and writers with APIs are available</li>
<li> They are familiar to most everyone</li>
<li> They are human readable (except GDSII)</li>
<li> They can be edited manually or with Perl, sed or awk (except GDSII)</li>
</ul>
<p>Unfortunately, time consuming problems lurk beneath the apparent simplicity of file exchange:</p>
<ul>
<li> File writers know nothing about where their data will go; file readers know nothing about the data source</li>
<li>LEF and DEF are flat formats. The user must specify each individual design to transfer.</li>
<li>Tools read and write their own incompatible dialect of the text file format</li>
<li>Each file format represents only a single view of the design, so multiple files are required</li>
<li>Multiple files presents the opportunity for file skew, where all files are not from exactly the same version of the design</li>
<li>Each file format has its own unique semantics, which are yet again different from the semantics of the databases on either side of the file transfer</li>
<li>More often than not, you must edit the files to fix some problem.  The required edit is often particular to the tool version used and the individual design.</li>
</ul>
<p>Therefore, &#8220;our tool simply reads and writes LEF and DEF&#8221; becomes much          more involved in actual practice.  Your AE and customer must:</p>
<ol>
<li>Start with a perfectly good, cohesive design database</li>
<li>Tear it apart into giant files with incompatible semantics</li>
<li>Edit the files to correct problems</li>
<li>Add a custom configuration file containing additional missing data that is missing in the standard file formats</li>
<li>Read all the data in all the files, using command line options determined through extensive experimentation</li>
<li>Reassemble the data</li>
<li>Troubleshoot the inconsistencies:
<ul>
<li>Between writers and readers</li>
<li>Between files exchanged (including the evil file skew)</li>
</ul>
</li>
</ol>
<p>The trouble can be reduced by spending the time to build a solid flow and supplying it to your AEs and customers.  A Makefile-driven flow is especially effective in reducing the risk of file skew.</p>
<p>If you are doing an evaluation, many weeks will pass as you repeatedly pester your prospect with requests for the right data.  The sales opportunity may pass before your tool ever sees complete, consistent input data.  When you present your results, your sales prospect faces another ordeal reading your data back into their design environment.  By the time they finish, your results may not look so exciting.</p>
<h3>Control in File Exchange Flows</h3>
<p>The worst problem with file exchange is all the nasty things that happen to the design data before your tool even sees it, and what happens after your tool writes it.  For example, consider how little control you have over the DEF input flow:</p>
<p><span> </span></p>
<p style="text-align: center;"><img class="aligncenter" style="border: 0pt none;" title="File exchange suffers from limited control" src="http://www.voom.net/wp-content/uploads/2007/06/file_exch_no_control.gif" border="0" alt="File exchange suffers from limited control" /></p>
<p>Someone else (often your competitor) controls the foreign database, file format, and the translation between them.  The best they can do is blindly write the file, not knowing what you expect.  It is very difficult for them to test their results.  By the time you get the file, the data you need may be missing, erroneously translated, or even obfuscated.</p>
<p>You are in the same situation when it is you writing the file.  Even with the best of intentions, it is difficult  to know how the data you write will be interpreted.</p>
<p>Further, the interface problems will be different for each design style, each tool and each version of tool with which you exchange files.  This is responsible for the profusion of confusing command options on all file readers and writers.</p>
<p>Next, let&#8217;s have a look at specific examples of file exchange interfaces for which there is no satisfactory solution, only an unstable workaround.</p>
<h4>Case 1: Milkyway to OpenAccess via LEF and DEF</h4>
<p>While Milkyway LEF Out does an fine job of creating LEF <tt>MACRO</tt>s (cell masters),</p>
<ul>
<li> The LEF TECHNOLOGY section must be created either manually, or with a custom program</li>
<li> The boundary of rectilinear macro blocks is converted to a rectangle</li>
</ul>
<p>Milkyway 2004.06 has a much-improved DEF writer, <tt>write_def</tt>.  Even so,</p>
<ul>
<li> <tt>def2oa</tt> cannot read the blockages output by <tt>write_def</tt></li>
<li> Identical cell instances appear multiple times</li>
<li> Double cut vias and notch/gap geometries appear in the DEF SPECIALNETS section</li>
</ul>
<p>If you are using an earlier version of Milkyway DEF Out, the problems are almost intolerable:</p>
<ul>
<li><span>The TAPER statement is incorrect</span></li>
<li><span>DEFAULT vias are used in NONDEFAULT routes</span></li>
<li><span>Vias are not properly rotated</span></li>
</ul>
<p>These problems necessitate changes to the tech file, which causes delays because the library group must approve them.  Worse, before writing DEF, all blocks must be re-routed with Astro using the new tech file.  This kind of nonsense is often fatal to a benchmark or tool evaluation.</p>
<h4>Case 2: OpenAccess to Milkyway via DEF</h4>
<p>After successfully transferring the data to OpenAccess from Milkyway, you will see more problems on the way back to Milkyway:</p>
<ul>
<li> Inconsistent handling of bus delimiters will cause the Astro router to re-route parts of the design</li>
<li> The above problem changes subtly depending on whether the bus in the original Verilog netlist was bit-blasted</li>
</ul>
<p>This file transfer requires a custom Perl script for each DEF, because some busses may be bit-blasted and others may not.  Any netlist changes may require a modification to the Perl script.</p>
<h4>Case 3: LEF and DEF from Milkyway back into Milkyway</h4>
<p>This should be a very straightforward flow.  Not so.</p>
<ul>
<li>Since many individual files are involved, merely assembling a complete, synchronized set of LEF and DEF files is quite difficult.</li>
<li>Only the most basic technology rules are translated from the LEF TECHNOLOGY section.  Hopefully you have the original Astro tech file.</li>
<li> Milkyway <tt>read_lef</tt> and <tt>read_def</tt> each output a Scheme side file that define and assign variable route rules.  If your net names look like regular expressions (like <tt>bus[3]</tt>), the rule may be assigned to the wrong net, or to no net at all.  Regardless, you must  manually edit the file.</li>
<li><tt>read_def</tt> creates multiple ports on nets, which is illegal in Milkyway.  Mower&#8217;s detailed diagnostics caught this error.</li>
</ul>
<p>The above case studies cannot describe the full extent of the file exchange problems that anyone might encounter.  Maintaining the translators and flow is a nightmare because the problems never end, changing from tool to tool, version to version, and design to design.</p>
<h3>The API Flow</h3>
<p>I have had as much success as anybody building and running multivendor design flows using file exchange.  Still, their robustness and utility pales in comparison to the interfaces that can be built using a C/C++ API to databases like Milkyway and OpenAccess.</p>
<p>The API flow has several key advantages:</p>
<ul>
<li>Control over the entire translation</li>
<li>Stability across tools, versions and design styles</li>
<li>No translation to or from file format semantics</li>
<li>Fast, in-memory data transfer</li>
<li>Access to the entire hierarchy of a single cohesive database with all views</li>
<li>Bidirectional data exchange, and even sharing the same design in memory</li>
</ul>
<p>The API interface extends <em>inside</em> both databases in a multivendor flow, giving you extraordinary control:</p>
<p style="text-align: center;"><img class="aligncenter" style="border: 0pt none;" title="API gives superior control and visibility" src="http://www.voom.net/wp-content/uploads/2007/06/file_exch_api_control.gif" border="0" alt="API gives superior control and visibility" /></p>
<p>Because the interface has access to the entire hierarchy of the input  <em>and</em> output designs, the interface can automatically decide what to do, and translate with minimal user guidance.  For example, when asked to translate a cell from Milkyway to OpenAccess, <a href="business/mower">Voom Mower™</a> checks to make sure that OpenAccess contains all necessary child cells, and recursively translates the missing cells from Milkyway.  In contrast, DEF interfaces depend on the user to specify which hierarchical cells to output.</p>
<p>Without the intermediate file format, only one translation, directly from database to database is required.  Development is easier, because binary databases are similar to each other, but quite different from text files.  Further, since all your design data is unlikely to fit in a single text file format, this single API interface replaces not just two file translators,  but four, six, or even eight translators, each invoked on multiple files.  It is then up to your support staff to help the users figure out how to          correctly apply all these translators.</p>
<p>The data stored in design databases is remarkably accurate and stable across versions.  This is enforced by the fact that inside the database, the tools all must eat their own cooking&#8211;even leftovers from last night&#8217;s version.  The API gives your tool a seat at the same table with Astro and Virtuoso.</p>
<h3>Conclusion</h3>
<p>Design data interchange using text files is simple enough in theory, but in actual practice text files provide an unstable and incomplete interface. With text file exchange, if some tool forgets to write the data you need, they don&#8217;t care.  That&#8217;s <em>your</em> problem.</p>
<p>For a reasonable up-front investment, your tool can have a robust, easily maintained, easy-to-use link to Milkyway or OpenAccess through a published API.</p>
<h3>Get Voom</h3>
<p>If your tools are based on OpenAccess, eliminate sales objections, save development time and instantly make your tools a part of the Synopsys Galaxy Design Platform.  Get <a href="business/mower">Mower</a>, the industry&#8217;s only bidirectional Milkyway-to-OpenAccess translator.</p>
<p>If you use your own proprietary design database, we will apply our unique combination of <a href="business/milkyway-software">Milkyway</a> and <a href="business/openaccess-software">OpenAccess</a> application programming,         <a href="business/design-consulting">tapeout</a> and multi-vendor flow expertise to quickly make your software a natural, integrated extension of Synopsys and OpenAccess physical design flows.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/406969390" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/api-vs-file-exchange/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/api-vs-file-exchange</feedburner:origLink></item>
		<item>
		<title>Using Acresso FLEXnet with DHCP on Laptop Computers</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/406969391/flexnet-with-dhcp</link>
		<comments>http://www.voom.net/flexnet-with-dhcp#comments</comments>
		<pubDate>Mon, 23 Apr 2007 00:00:27 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[EDA]]></category>

		<guid isPermaLink="false">http://www.voom.net/blog/?p=231</guid>
		<description><![CDATA[Do you have trouble getting your FLEXnet license manager to work reliably on your laptop? Here's the solution!]]></description>
			<content:encoded><![CDATA[<p>For mobile applications such as software demonstrations, a single laptop or notebook computer is used as both the FLEXnet license server and client.   However, laptops and notebooks usually employ the DHCP protocol, in which the IP address is always changing.   This causes the FLEXnet license check out to fail, and the licensed software will not run.</p>
<p>Here I present a system configuration that allows FLEXnet to work with DHCP connected to different networks, or connected to no network at all.   This configuration is tested on Red Hat Enterprise Linux 3.0 and 5.0.</p>
<h3><span id="more-231"></span>DHCP Protocol</h3>
<p>The <a href="http://www.dhcp.org/">Dynamic Host Configuration Protocol</a> (DHCP) is an Internet protocol for automating the network configuration of computers.  The DHCP server automatically assign IP addresses, the subnet mask and default router, and provides other configuration information such as the addresses for printer, time and news servers.  A computer using DHCP can easily connect to any  network that has a DHCP server.  It is therefore very popular on laptop computers.</p>
<h3>Acresso FLEXnet (formerly Macrovision FLEXlm)</h3>
<p>The <a href="http://www.acresso.com">Acresso</a> FLEXnet license manager is a popular license manager that supports floating licenses.  Using TCP/IP, client machines access a license server to check out and check in licenses to run software.  This works well when the license server has a static IP address.</p>
<p>The <em>FLEXnet End User Licensing Guide</em> is very useful.  For some reason, the Acresso web site is the only place you <em>cannot</em> get this manual.  So just <a href="http://www.google.com/search?q=FLEXnet+End+User+Licensing+Guide" target="_blank">search the Internet for &#8220;FLEXnet End User Licensing Guide&#8221;</a>, and take your pick.</p>
<h3>What Goes Wrong with FLEXnet and DHCP</h3>
<p>Laptop computers usually employ the DHCP protocol, in which the IP address is always changing.  When the laptop is not connected to a network, it will often have no IP address at all.   This makes FLEXnet unable to find the vendor daemon on the network  via TCP/IP, even though it is actually running right there on the same machine.</p>
<p>The purpose of the <tt>localhost</tt> loopback in <tt>/etc/hosts</tt> is to enable the machine to talk to itself over the network, no matter what the network configuration.  This seems like the perfect solution, but merely specifying <tt>localhost</tt> (or 127.0.0.1) in the  FLEXnet license file does not work.</p>
<blockquote><p><tt>SERVER <strong>localhost</strong> 000205AB3F60 17000   # Incomplete solution</tt></p></blockquote>
<p>The FLEXnet license manager daemon, <tt>lmgrd</tt>, at some point still tries to use the <em>real host name</em>.   When the real name is looked up in <tt>/etc/hosts</tt> and DNS, it will most likely be missing or have an IP address different from the IP address assigned by DHCP, so the vendor daemon cannot be found, and license check out will fail.</p>
<h3>The Solution</h3>
<p>The solution is to add the machine&#8217;s real name to <tt>/etc/hosts</tt> as an <em>additional</em> loopback.</p>
<p>For example, suppose that a laptop using DHCP is named <tt>goon</tt>.   It has its own floating license, and is therefore the license server.  In the <tt>/etc/hosts</tt> file, define a loopback for the name <tt>goon</tt>:</p>
<blockquote><p><tt>127.0.0.1        localhost   loghost  # Always present<br />
<strong>127.0.0.1       goon        goon.voom.net</strong> # Added for FLEXnet<br />
#<br />
# Do not forget to <strong>remove any existing entry</strong> for goon!<br />
### 192.168.1.4 goon goon.voom.net<br />
#<br />
# Continue with any other host entries&#8230;</tt></p></blockquote>
<p>The FLEXnet license file should contain the real host name, as usual:</p>
<blockquote><p><tt>SERVER <strong>goon</strong> 000205AB3F60 27000</tt></p></blockquote>
<p>Now, no matter what DHCP does, the IP address of the FLEXnet license server is  127.0.0.1.</p>
<p>With DHCP, you may never have to change your network configuration, even when  your laptop is not connected to any network. If you do need to change  configurations, the Red Hat Linux Network Configuration tool (<em>System Settings &gt; Network</em> or  <tt>system-config-network</tt>) can help you.  This tool saves each network configuration in a &#8220;profile&#8221;.  When you switch profiles, it restores the previously-saved network configuration, including the <tt>/etc/hosts</tt> file.</p>
<p>FLEXnet uses the MAC address of your first network device (usually Ethernet  interface <span style="font-family: Courier New;">eth0</span>) to identify the server hardware.  This network interface must be  active when the FLEXnet license daemon <tt>lmgrd</tt> starts.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/406969391" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/flexnet-with-dhcp/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/flexnet-with-dhcp</feedburner:origLink></item>
		<item>
		<title>Milkyway and OpenAccess Feature Comparison</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/406969392/milkyway-openaccess-feature-comparison</link>
		<comments>http://www.voom.net/milkyway-openaccess-feature-comparison#comments</comments>
		<pubDate>Wed, 21 Jun 2006 00:00:06 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[Milkyway]]></category>

		<category><![CDATA[OpenAccess]]></category>

		<guid isPermaLink="false">http://www.voom.net/blog/?p=195</guid>
		<description><![CDATA[Comparison of the data interchange and data translation capabilities of the Milkyway and OpenAccess EDA databases]]></description>
			<content:encoded><![CDATA[<p>This spreadsheet compares the data interchange and data translation capabilities of the Milkyway and OpenAccess EDA databases.  I update it from time to time.</p>
<div id="attachment_79" class="wp-caption aligncenter" style="width: 55px"><a href="http://www.voom.net/wp-content/uploads/2006/06/MWOACoverage.pdf" target="_blank"><img class="size-full wp-image-79" title="Download PDF Format" src="http://www.voom.net/images/pdf.png" alt="Download PDF" width="45" height="45" /></a><p class="wp-caption-text">Download PDF</p></div>
<p>This is based on <em>Milkyway and OpenAccess Design Data Interface Scope: What Can You Access?</em>, presented on June 20, 2006 at the <a href="http://www.synopsys.com/news/events/devforums/2006/may/presentation.html">17th Synopsys EDA Interoperability Developers&#8217; Forum</a>.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/406969392" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/milkyway-openaccess-feature-comparison/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/milkyway-openaccess-feature-comparison</feedburner:origLink></item>
		<item>
		<title>Milkyway and OpenAccess User Update</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/406969393/milkyway-and-openaccess-feature-comparison</link>
		<comments>http://www.voom.net/milkyway-and-openaccess-feature-comparison#comments</comments>
		<pubDate>Thu, 10 Nov 2005 00:00:52 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[Milkyway]]></category>

		<category><![CDATA[OpenAccess]]></category>

		<guid isPermaLink="false">http://www.voom.net/blog/?p=189</guid>
		<description><![CDATA[The benefits, features, and pitfalls of the  Milkyway and OpenAccess APIs]]></description>
			<content:encoded><![CDATA[<p>This presentation discusses the benefits, features, and pitfalls of the <a href="http://www.synopsys.com/partners/mapin/mapin_program.html" target="_blank"> Milkyway</a> and <a href="http://www.si2.org/?page=69" target="_blank">OpenAccess</a> APIs.  It was presented on November 9, 2005 at the <a href="http://www.synopsys.com/news/events/devforums/2005/nov/presentation.html"> 16th Synopsys EDA Interoperability Developers&#8217; Forum</a>.</p>
<div id="attachment_79" class="wp-caption aligncenter" style="width: 55px"><a href="http://www.voom.net/wp-content/uploads/2005/11/snpsIDF2005voomMWOAUpdate.pdf" target="_blank"><img class="size-full wp-image-79" title="Download PDF Format" src="http://www.voom.net/images/pdf.png" alt="Download PDF" width="45" height="45" /></a><p class="wp-caption-text">Download PDF</p></div>
<img src="http://feeds.feedburner.com/~r/voom/~4/406969393" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/milkyway-and-openaccess-feature-comparison/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/milkyway-and-openaccess-feature-comparison</feedburner:origLink></item>
		<item>
		<title>Interoperability Between Milkyway and OpenAccess with Voom Mower</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/406969394/interoperability-between-milkyway-and-openaccess-with-voom-mower</link>
		<comments>http://www.voom.net/interoperability-between-milkyway-and-openaccess-with-voom-mower#comments</comments>
		<pubDate>Fri, 08 Apr 2005 00:00:09 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[Milkyway]]></category>

		<category><![CDATA[OpenAccess]]></category>

		<category><![CDATA[Voom, Inc.]]></category>

		<guid isPermaLink="false">http://www.voom.net/blog/?p=108</guid>
		<description><![CDATA[Features and benefits of the Voom Mower Milkyway-to-OpenAccess translator]]></description>
			<content:encoded><![CDATA[<p>This presentation introduces the Voom <a href="http://www.voom.net/business/mower" target="_self">Mower</a> Milkyway-to-OpenAccess translator.  It was given on April 7, 2005 at the <a href="http://www.synopsys.com/news/events/devforums/2005/apr/presentation.html">15th Synopsys EDA Interoperability                                        Developers&#8217; Forum</a>.</p>
<div id="attachment_79" class="wp-caption aligncenter" style="width: 55px"><a href="http://www.voom.net/wp-content/uploads/2005/04/snpsidf2005.pdf" target="_blank"><img class="size-full wp-image-79" title="Download PDF Format" src="http://www.voom.net/images/pdf.png" alt="Download PDF" width="45" height="45" /></a><p class="wp-caption-text">Download PDF</p></div>
<img src="http://feeds.feedburner.com/~r/voom/~4/406969394" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/interoperability-between-milkyway-and-openaccess-with-voom-mower/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/interoperability-between-milkyway-and-openaccess-with-voom-mower</feedburner:origLink></item>
		<item>
		<title>Achieving Multivendor Interoperability with the Synopsys Milkyway API</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/406969395/achieving-multivendor-interoperability-with-the-synopsys-milkyway-api</link>
		<comments>http://www.voom.net/achieving-multivendor-interoperability-with-the-synopsys-milkyway-api#comments</comments>
		<pubDate>Fri, 02 Apr 2004 00:00:23 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[Milkyway]]></category>

		<guid isPermaLink="false">http://www.voom.net/blog/?p=178</guid>
		<description><![CDATA[Voom's initial experience with the Synopsys MAP-inSM Milkyway API]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.voom.net/wp-content/uploads/2004/04/MilkywayInteroperability/VoomInteroperability.html" target="_blank">This presentation</a> summarizes Voom&#8217;s initial experience with the Synopsys <a href="http://www.synopsys.com/partners/mapin/mapin_program.html" target="_blank">MAP-in<sup>SM</sup> Milkyway API</a>.  It was presented on April 1, 2004 at the 13th Synopsys EDA Interoperability Developers&#8217; forum.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/406969395" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/achieving-multivendor-interoperability-with-the-synopsys-milkyway-api/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/achieving-multivendor-interoperability-with-the-synopsys-milkyway-api</feedburner:origLink></item>
		<item>
		<title>Creating a Single SDC File for Cadence SoC Encounter and PKS, Pre- and Post-CTS</title>
		<link>http://feeds.feedburner.com/~r/voom/~3/406969396/sdc-file-for-cadence-soc-encounter</link>
		<comments>http://www.voom.net/sdc-file-for-cadence-soc-encounter#comments</comments>
		<pubDate>Wed, 30 Jul 2003 00:00:22 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
		
		<category><![CDATA[EDA]]></category>

		<category><![CDATA[Electrical Engineering]]></category>

		<guid isPermaLink="false">http://www.voom.net/blog/?p=256</guid>
		<description><![CDATA[How to create a single SDC file that can be used both before and after clock tree synthesis (CTS), and by both Cadence PKS and SoC Encounter ]]></description>
			<content:encoded><![CDATA[<p><em> While I suspect that this post may be obsolete, over the years it has received lots of hits, so I leave it here in the hope that it is still useful.  Please add your comments.  &#8211;John</em></p>
<p>It is good design practice to use as few SDC files as possible.  This post describes a way to create a single SDC file that can be used both before and after clock tree synthesis (CTS), and by both Cadence PKS and SoC Encounter.</p>
<h3>Test Mode SDC File</h3>
<p>You will still need at least one more test mode SDC file for use when fixing test mode hold violations.  You can put the design into test mode in SoC Encounter 3.1 only with set_case_analysis contained in a separate, full SDC file.  The design can be put into test mode in PKS dynamically using the <em>set_constant_for_timing</em> command, but I have not actually tried this.</p>
<h3>Functional Mode SDC File</h3>
<p>Define the clocks as propagated.  For example,</p>
<blockquote><p><tt>set_propagated_clock {clk200 txclk rxclk}</tt></p></blockquote>
<p>Create a virtual clock for each clock that appears in set_input_delay or set_output_delay.  For example,</p>
<blockquote><p><tt>create_clock -name clk200<strong>v</strong> -period 5 -waveform {0 2.5}</tt><br />
<tt>create_clock -name txclk<strong>v</strong> -period 5 -waveform {0 2.5}</tt><br />
<tt>create_clock -name rxclk<strong>v</strong> -period 5 -waveform {0 2.5}</tt></p></blockquote>
<p>Usually, timing paths between clock domains are marked as false paths in the SDC file (if there is only one clock in your design , there will be no such false paths).  Add <tt>set_false_path,</tt></p>
<ul>
<li> From each virtual clock to each real clock</li>
<li> From each real clock to each virtual clock</li>
</ul>
<p>For example, suppose that false paths between the <em>real</em> clock domains are already defined in the SDC file as follows:</p>
<blockquote><p><tt>set_false_path  -from [get_clocks {clk200}] -to [get_clocks {txclk}]</tt><br />
<tt>set_false_path  -from [get_clocks {clk200}] -to [get_clocks {rxclk}]</tt><br />
<tt>set_false_path  -from [get_clocks {txclk}]  -to [get_clocks {tclk200}]</tt><br />
<tt>set_false_path  -from [get_clocks {rxclk}]  -to [get_clocks {tclk200}]</tt></p></blockquote>
<p>Add the corresponding false paths to and from the new virtual clocks:</p>
<blockquote><p><tt>set_false_path  -from [get_clocks {<strong>clk200v</strong>}] -to [get_clocks {txclk}]</tt><br />
<tt>set_false_path  -from [get_clocks {<strong>clk200v</strong>}] -to [get_clocks {rxclk}]</tt><br />
<tt>set_false_path  -from [get_clocks {<strong>txclkv</strong>}]  -to [get_clocks {tclk200}]</tt><br />
<tt>set_false_path  -from [get_clocks {<strong>rxclkv</strong>}]  -to [get_clocks {tclk200}]</tt></p></blockquote>
<blockquote><p><tt>set_false_path  -from [get_clocks {clk200}] -to [get_clocks {<strong>txclkv</strong>}]</tt><br />
<tt>set_false_path  -from [get_clocks {clk200}] -to [get_clocks {<strong>rxclkv</strong>}]</tt><br />
<tt>set_false_path  -from [get_clocks {txclk}]  -to [get_clocks {<strong>tclk200v</strong>}]</tt><br />
<tt>set_false_path  -from [get_clocks {rxclk}]  -to [get_clocks {<strong>tclk200v</strong>}]</tt></p></blockquote>
<p>Define network latency for the original clock and source latency for the virtual clock.  Use the same value for both.  This latency is your estimate of the clock latencies in the <em>surrounding blocks</em>, not the current block.  Even so, it is quite common to use the latency for the clock in this block as a best guess of the clock latencies in other blocks.</p>
<blockquote><p><tt>set_clock_latency         2.0 [get_clocks {clk200}]</tt><br />
<tt>set_clock_latency <strong>-source</strong> 2.0 [get_clocks {clk200<strong>v</strong>}]</tt></p></blockquote>
<p>The <tt>-network</tt> option is the default, so it it omitted.  Here, we are guessing that the surrounding blocks will eventually contain a clock tree with an insertion delay of 2.0nS.</p>
<p>Change the reference clocks for the input and outputs to the virtual clock.  For example,</p>
<blockquote><p><tt>set_input_delay  2.5 -clock [get_clocks {clk200v}] [get_ports {garbageIn}]</tt><br />
<tt>set_output_delay 2.5 -clock [get_clocks {clk200v}] [get_ports {garbageOut}]</tt></p></blockquote>
<p>This is equivalent to changing the delays to <tt>set_input_delay 4.5</tt> and <tt>set_output_delay 0.5</tt>.  It is however, much more convenient to adjust a single <tt>set_clock_latency</tt> than to add and subtract delays to all IO pins.</p>
<p>Specify cells that you do not want to be used as <em>set_dont_use</em>.</p>
<blockquote><p><tt>set_dont_use TLATNX20</tt><br />
<tt>set_dont_use TLATNXL</tt></p></blockquote>
<p>Note that this is a less restrictive list than the list used during logic synthesis.  During logic synthesis, cells like clock buffers, clock gate cells, delay cells, and scannable flip-flops are usually marked as <tt>dont_use</tt>, <em>but not here</em>.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/406969396" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/sdc-file-for-cadence-soc-encounter/feed</wfw:commentRss>
		<feedburner:origLink>http://www.voom.net/sdc-file-for-cadence-soc-encounter</feedburner:origLink></item>
	</channel>
</rss>
