<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" 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 Software and Services</description>
	<lastBuildDate>Mon, 15 Mar 2010 06:15:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/voom" /><feedburner:info uri="voom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Japanese Input Method on Fedora 12</title>
		<link>http://feedproxy.google.com/~r/voom/~3/LdipmvRKaJc/japanese-input-method-on-fedora-12</link>
		<comments>http://www.voom.net/japanese-input-method-on-fedora-12#comments</comments>
		<pubDate>Sat, 13 Mar 2010 07:15:04 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[Japan]]></category>
		<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Chinese]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Japanese]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=1125</guid>
		<description><![CDATA[How to install and set up input methods for Japanese and other East Asian Languages on your English Fedora 12 Linux installation.  Also, tips on setting the locale variables and gwaei, a Japanese-English dictionary for Gnome.]]></description>
			<content:encoded><![CDATA[<p></p><p>This article describes how to set up Japanese text input with Fedora 12.  I&#8217;ve used Japanese text input since RHEL 3, and now multilingual text input even easier.  An earlier, similar article describes <a href="http://www.voom.net/japanese-input-method-on-fedora-11">Japanese text input on Fedora 11</a>.<br />
<span id="more-1125"></span></p>
<p>Japanese test <em>display</em> works by default.  The new fonts in Fedora 12 are beautiful.  If a Japanese language web site does not display properly in Firefox, try adjusting the encoding with <em>View &gt; Character Encoding &gt; </em><em>Japanese(EUC-JP)</em><em></em> or <em>View &gt; Character Encoding &gt; More Encodings &gt; East Asian &gt; Japanese (Shift-JIS) </em>.</p>
<p>For information on how to install Japanese language input on other Linux distributions and other Fedora versions, see Scott Robbins&#8217; authoritative guide, <a href="http://home.roadrunner.com/~computertaijutsu/jpninpt.html" target="_blank">Inputting Japanese text in Linux and some BSDs</a>.  I have invited Scott to add this text to his guide when he gets the chance.</p>
<h2>Installing the Input Method</h2>
<p>Start by installing Japanese input method packages:</p>
<blockquote><p><code>yum install scim-lang-japanese</code></p></blockquote>
<p>Then, set up your preferences with <em>System &gt; Preferences &gt; Input Method</em>.  This will bring up the <em>IM Chooser</em> dialog:</p>
<ul>
<li> <img class="size-full wp-image-1130 alignright" title="ibuspreferences" src="http://www.voom.net/wp-content/uploads/2010/03/ibuspreferences.png" alt="iBus Preferences form" width="260" height="314" /> Select <em>Use IBus</em></li>
<li> Click on <em>Input Method Preferences</em>, and choose the <em>Input Method</em> tab.  From the <em>Select an input method</em> list, choose <em>Japanese &gt; Anthy</em>, and click <em>Add</em>.</li>
<li>Similarly choose and <em>Add</em> the other languages you want to input.  I added <em>Chinese-Pinyin</em>, and it works great.</li>
<li>Use the <em>Up</em> and <em>Down</em> buttons to arrange the order in which the languages appear when you hit the <em>Alt+Shift_L</em> hot key.  You will want to place the language you use most at the top of the list.</li>
<li>If you are the first user on the machine to enable IBus,
<ul>
<li>Save your unsaved work in other applications and select <em>Log Out</em></li>
<li>Log in again</li>
</ul>
</li>
<li>If another user has previously enabled IBus on this machine, you will not need to log out.  Just select <em>Close</em>.</li>
</ul>
<p>Now give it a try:</p>
<ul>
<li>Put your cursor in a text entry window that handles international input.  A text entry field on a web page or an OpenOffice document can do this.</li>
<li>Hit <em>Ctrl+Space</em> to switch from English to the first input method (Japanese in my case).  A small window will appear in the lower right corner of your display.  You use this to control the input method.</li>
<li>Type something in Japanese</li>
<li>If you added another input method, hit the <em>Alt+Shift_L</em> hot key. Now you can type in the second language (<em>Chinese-Pinyin</em> for me).</li>
<li>Return to English input with <em>Ctrl+Space</em></li>
</ul>
<p>At last I can directly express in Chinese how <em>good</em> IBus is, 非常好, instead of entering how much I <em>like</em> it in Japanese, 非常に好きです, and then editing it into Chinese.</p>
<h2>Changing Your User Language</h2>
<p>If you really want to go native, add the following to the <code>.bash_profile</code> file in your home directory:</p>
<blockquote><p><code>export LANG=ja_JP.UTF-8   # Read the warning below first<br />
</code></p></blockquote>
<p>Log out and log in again, and everything is in Japanese.</p>
<p><strong>Don&#8217;t try this at home unless you can actually read Japanese.</strong> In particular, you will be asked if you want to change your file names to Japanese.  Give the wrong answer, and your <code>Desktop/</code> directory will be renamed <code>デスクトップ/</code>.   Are you already staring at the dialog that is threatening to do this?  Select <em>古い名前のままにする(K)</em> to keep your current file names.</p>
<h2>Changing the Locale</h2>
<p>The locale is a big subject, but the most useful setting I have found is the <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap07.html" target="_blank"><code>LC_CTYPE</code> environment variable</a>, because it changes the formatting of dates and currency values in <a href="http://www.openoffice.org" target="_blank">OpenOffice</a>.  This may be useful if you live in Japan, but prefer to use Linux in English.  In the <code>.bash_profile</code> file in your home directory, add the following :</p>
<blockquote><p><code>export LC_CTYPE=ja_JP.UTF-8</code></p></blockquote>
<p>Log out and log in again, and  everything is in English, assuming <code>LANG</code> is no longer set to <code>ja_JP.UTF-8</code>.  Open a spreadsheet with <em>Applications &gt; Office &gt; OpenOffice.org Calc</em>.   Choose <em>Format &gt; Cells</em>, choose the <em>Numbers</em> tab, and you can see that the <em>Language</em> has changed to <em>Japanese</em>, and the choices for date and currency formats are those customary in Japan.</p>
<h2>gwaei Japanese-English Dictionary</h2>
<p>Now that you can type both Japanese and English, you will want a dictionary.  The <a href="http://gwaei.sourceforge.net/" target="_blank">gwaei Japanese-English dictionary for Linux</a> works great with Fedora 12.</p>
<p>Note that the gwaei i386 RPM will not work with x86_64 Fedora 12.  If you installed the x86_64 version of Fedora 12, just compile gwaei as explained in the installation instructions.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/LdipmvRKaJc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/japanese-input-method-on-fedora-12/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.voom.net/japanese-input-method-on-fedora-12</feedburner:origLink></item>
		<item>
		<title>Cadence Encounter Foundation Flow Review</title>
		<link>http://feedproxy.google.com/~r/voom/~3/RNjohlAorYM/cadence-encounter-foundation-flow-review</link>
		<comments>http://www.voom.net/cadence-encounter-foundation-flow-review#comments</comments>
		<pubDate>Sat, 06 Feb 2010 00:08:11 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[Chip Design]]></category>
		<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[Cadence]]></category>
		<category><![CDATA[GNU Make]]></category>
		<category><![CDATA[IC Design Flow]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=1048</guid>
		<description><![CDATA[John McGehee reviews the Cadence Encounter Foundation Flow, gives usage tips, and recommends some enhancements to make it work even better.]]></description>
			<content:encoded><![CDATA[<p></p><p><em>This post also appears as a <a href="http://www.cadence.com/Community/blogs/di/archive/2010/02/22/user-review-of-the-encounter-foundation-flow.aspx" target="_blank">guest blog on Cadence&#8217;s Digital Implementation Community</a>.</em></p>
<p>In an earlier series of posts, I described <a href="http://www.voom.net/tag/ic-design-flow">techniques that will make your chip design flow easy to use</a>.  I subsequently had the pleasure of using a flow that employed most of my favorite techniques—the <a href="http://www.cadence.com/Community/blogs/di/archive/2009/01/29/demo-and-interview-the-encounter-foundation-flow.aspx" target="_blank">Cadence Encounter Foundation Flow</a> version 8.1. <span id="more-1048"></span></p>
<p>The focus of this flow is to get you up and running immediately.  Plug in your libraries, netlist, timing constraints, do some floorplanning, create a clock tree specification file, type <tt>make</tt>, and something comes out the other end.  Not a usable chip of course, but <em>something</em>, so you can see what&#8217;s next. A flow is executable documentation, and this is your <em>Quick Start Guide.</em></p>
<p>The Encounter Foundation Flow does not try to be everything to everybody, but rather the portion of the design flow that is common to everybody.  It can be difficult to decide how far to go with such a flow, but Cadence engineers Rob Lipsey and Glenn Gullikson knew where to stop.  I found the Encounter Foundation Flow to be a good balance between completeness, extensibility, and usability.  It contains no confusing, useless features like GUIs, wrappers, and &#8220;under the covers&#8221; sleight of hand.  The best ASIC designers I know use flows architected like this one.</p>
<p>An additional advantage of any standard flow is that it gets all users to operate the tools in the same way. With versatile tools like place and route, there are many ways to accomplish the same thing.  Yet such tools are a minefield of bugs and quirks.  When every user chooses a different approach, something bad always happens.  A standard flow defines a single safe path for users.  It frees the tool developers from having to support a needless variety of ways to accomplish one task.</p>
<h2>The <tt>make/</tt> Semaphore File Directory</h2>
<p>Physical designers who are accustomed to using <a href="http://www.gnu.org/software/make/" target="_blank">GNU Make</a> will be at home with the Encounter Foundation Flow.  The one thing that you need to be aware of is the location of the <a href="http://www.voom.net/controlling-your-ic-design-flow#example_makefile_for_ic_design">target semaphore files</a> in the <tt>make/</tt> directory.  This is specified in the Makefile with the <tt>VPATH</tt> variable.</p>
<p>While a separate  directory for semaphore files initially seems like a good idea, putting them in the <tt>make/</tt> directory causes subtle problems.  You can eliminate this <tt>make/</tt> directory by changing,</p>
<blockquote>
<pre>VPATH=./make</pre>
</blockquote>
<p>in the Makefile to:</p>
<blockquote>
<pre>VPATH=.</pre>
</blockquote>
<p>If you prefer to keep the <tt>make/</tt> semaphore file directory, be careful of the following points:</p>
<ul>
<li>With the Encounter Foundation Flow, you <a href="http://www.voom.net/controlling-your-ic-design-flow#update_the_results_of_a_step">reset the design flow</a> so that the <tt>init</tt> target is the most up to date using,
<pre>touch make/init</pre>
<p>but if you forget the directory name and mistakenly type,</p>
<pre>touch init     # wrong</pre>
<p>the flow forever thinks that only the <tt>init</tt> target is up to date; every time you run, the flow starts over.  I burned up a lot of CPU time until I discovered that the culprit was the <tt>./init</tt> file hiding in my working directory.</li>
<li>Similarly, do not forget the directory name when you <a href="http://www.voom.net/controlling-your-ic-design-flow#make_t">use the <tt>make -t</tt> option to update the design flow</a>:<br />
<blockquote>
<pre>make -t make/place</pre>
</blockquote>
<p>This can be difficult to remember after becoming accustomed to typing <tt>make place</tt>.</li>
</ul>
<h2>Suggestions for Improvement</h2>
<p>I found several things in Encounter Foundation Flow 8.1<span id="anormal_12">.RTM</span> that I think Cadence should consider improving.  As noted below, many are in fact already fixed in later versions of the flow.</p>
<ul>
<li>The Makefile <tt>clean</tt> target deletes the <a href="http://subversion.apache.org" target="_blank">Subversion version control</a> directory <tt>.svn</tt>:<br />
<blockquote>
<pre>clean: rm -rf .??*   # ...</pre>
</blockquote>
<p>Wildcards in the <tt>clean</tt> target can easily make a mess. This is fixed in the version 8.1.USR2 <tt>cleanup</tt> target.</li>
<li>The Makefile does not make use of the <tt>.PHONY</tt> target.  This is especially useful for the administrative targets like <tt>clean</tt> and <tt>all</tt>:<br />
<blockquote>
<pre>.PHONY: all clean # ...</pre>
</blockquote>
</li>
<li>The Encounter Foundation Flow puts reports in its own <tt>RPT/</tt> directory rather than the tool default.  For example, I would prefer that Encounter timing reports go in the Encounter default, <tt>timingReports/</tt>.</li>
<li> Lower case is easier to type, so I would prefer lower case names for the <tt>LOG/</tt>, <tt>RPT/</tt>, and <tt>DBS/</tt> directories.  Users can customize these paths using the <tt>vars(log_dir)</tt>, <tt>vars(rpt_dir)</tt> and <tt>vars(dbs_dir)</tt> variables in the <tt>setup.tcl</tt> file.</li>
<li>In file <tt>SCRIPTS/FLOW/run_route.tcl</tt>, line 68, the variable <tt>setFillerMode</tt> is missing for the non-power domain case, but this is fixed in version 8.1.USR2.</li>
</ul>
<h2>Future Direction</h2>
<p>In addition to the fixes mentioned above, Rob and Glenn are still enhancing the flow.</p>
<p>Currently the flow executes Tcl scripts that contain <code>proc</code>s and variables.  In a future version, the flow can first generate linear scripts with all variable values evaluated and all <code>proc</code>s expanded into Encounter commands.  Then it executes these scripts with Encounter.</p>
<p>In my flows I avoid generating scripts, because it allows the configuration variables and the scripts to become desynchronized.  But Glenn and Rob had some good arguments for doing it this way:</p>
<ul>
<li>The script stands alone as a record of exactly which commands were executed.  To reproduce the step, you (or your AE) need only the starting database and one script file, not the entire flow.</li>
<li>The flow can be easily tested by merely comparing the scripts against golden scripts, without running Encounter.  Testability is a key feature of every software project.</li>
</ul>
<p>To solve the synchronization problem, I encouraged Rob and Glenn to generate each script within the Make target, immediately before it is used.  I&#8217;m interested to see how this works out.  Make sure to send them your feedback, too.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/RNjohlAorYM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/cadence-encounter-foundation-flow-review/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.voom.net/cadence-encounter-foundation-flow-review</feedburner:origLink></item>
		<item>
		<title>How I Got to Japan</title>
		<link>http://feedproxy.google.com/~r/voom/~3/nI64oE3Mgbc/how-i-got-to-japan</link>
		<comments>http://www.voom.net/how-i-got-to-japan#comments</comments>
		<pubDate>Sat, 14 Nov 2009 18:51:54 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[Japan]]></category>
		<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[Intel]]></category>
		<category><![CDATA[Japanese]]></category>
		<category><![CDATA[UCSB]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=976</guid>
		<description><![CDATA[The American Electronics Association Japan Research Fellowship was the opportunity of a lifetime to realize my goal of living in Japan and using Japanese in my work as an engineer.]]></description>
			<content:encoded><![CDATA[<p></p><p><em>This post is also <a href="http://www.edn.com/blog/920000692/post/130050813.html" target="_blank">published as a guest blog</a> on <a href="http://www.greenfolder.com" target="_blank">Paul McLellan</a>&#8217;s excellent blog,  <a href="http://www.edn.com/blog/920000692.html" target="_blank">EDA Grafitti</a>.</em></p>
<hr />The PA system at work announced that I had a call.  It was from Dr. Steven Butner, my graduate advisor at <a href="http://engineering.ucsb.edu">UC Santa Barbara</a>.  He was very excited.  &#8220;John, I just got some information about this program that was just made for you.&#8221;  He explained that the <a href="http://www.aeanet.org" target="_blank">American Electronics Association</a> was sending electrical engineering and computer science graduate students to an intensive Japanese language course, and then on to work as an engineer in Japan. The goal of the program was to balance the exchange of engineering students between Japan and the US.</p>
<p><span id="more-976"></span></p>
<p>I was in my third year of Japanese classes.   I dreamed of applying the language at work in Japan, but I had no way to actually make this happen.  The American Electronics Association Japan Research Fellowship was the opportunity of a lifetime to realize my goal. I applied, and was accepted. Had the program never found me, my dream would have just quietly faded away.</p>
<p>The fellowship was a full ride: airfare, room and board, tuition at Cornell, and a job as a chip designer at Intel Japan. All of this was a tremendous gift for which I am eternally grateful. Only the power of a major industry association could make something like this happen.</p>
<p>I too was going to pay. This episode of my life was like a card game in which I held a great hand, but nonetheless discarded graduate school, my girlfriend, job, friends and Santa Barbara, retaining only my electronic engineering card. Then I was dealt new cards I could not even recognize. How would I assemble them into a winning hand?</p>
<p>The program started with the <a href="http://lrc.cornell.edu/falcon" target="_blank">Cornell University FALCON Japanese language summer session</a>.  This was superb. I was very serious and studied hard. When I started, I had an understanding of Japanese grammar, writing and vocabulary, but I could not really hold a conversation.  Just nine weeks later, I could carry on <em>relationships</em> with people entirely in Japanese.  I have never learned so much so quickly.</p>
<p>I vividly remember seeing Japan for the first time from the air. All this preparation, and I had never even been there. I hired a taxi and chatted with the driver in Japanese along the way to my destination.  Using a new language in country for the first time is the most exhilarating of experiences.</p>
<p>I arrived in Tsukuba, where a tiny apartment awaited me. It had a murphy bed, a basic kitchen, a bathroom and a television, which was to be my language teacher and only friend for quite a while. Still, my private apartment was a palace compared to the barracks provided to the other AEA Japan Research Fellowship participants.  Intel even gave me a new Toyota Corona to drive.</p>
<p>My job at Intel Japan was verification and circuit simulation for the <a href="http://en.wikipedia.org/wiki/Intel_8253" target="_blank">8253 counter/timer</a> portion of a microprocessor.  As you might expect, many signals described a count.  Engineers and programmers usually abbreviate this common word as &#8220;cnt&#8221;, but the Japanese designer chose to delete only the &#8220;o&#8221; in &#8220;count&#8221;.  It made for the most profane RTL and netlist I have ever seen.</p>
<p>Intel Japan is based in <a href="http://books.google.com/books?id=GTvD8zpCcGEC&amp;lpg=PP1&amp;pg=PA111#v=onepage&amp;q=&amp;f=false">Tsukuba, a &#8220;Silicon Valley&#8221; created artificially by the government</a>.  These are the same people who brought you Narita Airport, located an hour away from the city it serves.  Tsukuba is in Ibaragi-ken, which is famous for backwardness. The nearest train station was 30 minutes away by car.  In Japan, a city without a train station is nowhere.  I hated living there, and <a href="http://www.alientimes.org/Main/AlienatedByThePlanningOfScienceCity" target="_blank">so did many others</a>.  All the foreigners at Intel Japan were plotting their escape to Tokyo. Some Tsukuba residents escaped in a more tragic way.  The suicide rate was so high that Tsukuba had its own trademark method of suicide&#8211;<em>Tsukuba diving</em>, throwing oneself off Tsukuba Tower.</p>
<p>Instead, I threw myself into improving my language skills, the goal for which I had sacrificed so much.  This meant using exclusively Japanese. It also meant extreme isolation, as I was not a particularly engaging conversationalist. Still, I was good enough to carry out my duties at Intel in Japanese, speaking English only to my boss (a wise compromise).  In an EE Times interview I declared, &#8220;I&#8217;m known as hardcore about not speaking English in the office.  I am definitely looking at getting very good at Japanese.&#8221;  Ah, such youthful bravado.  Hardcore indeed.</p>
<p>My colleagues at Intel were more sophisticated than the locals, and they were kind to me.  In the winter, we went skiing almost every weekend. I made some good friends at Intel Japan. After about six months, the loneliness and culture shock started to subside.</p>
<p>Originally my internship was six months, but I was just starting to get the hang of things, so I extended to one year. Intel Japan was good to me, but they only had engineering work in Tsukuba.  As the end of my year came to a close, I conducted a job search, and landed a position in Tokyo. After a few years, I returned to finish graduate school at UCSB, then set out for Japan again.  The AEA Japan Research Fellowship had succeeded in its goal of turning me into an engineer who could navigate Japan.</p>
<hr /><em>Did you participate in the AEA Japan Research Fellowship?  Join the <a href="http://www.linkedin.com/groups?home=&amp;gid=2632704" target="_blank">AEA Japan Research Fellowship group on LinkedIn</a>.</em></p>
<img src="http://feeds.feedburner.com/~r/voom/~4/nI64oE3Mgbc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/how-i-got-to-japan/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.voom.net/how-i-got-to-japan</feedburner:origLink></item>
		<item>
		<title>Release Stuck FLEXnet Licenses</title>
		<link>http://feedproxy.google.com/~r/voom/~3/81Td-cS-3Qg/release-stuck-flexnet-licenses</link>
		<comments>http://www.voom.net/release-stuck-flexnet-licenses#comments</comments>
		<pubDate>Mon, 05 Oct 2009 04:44:11 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[Chip Design]]></category>
		<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[FLEXnet]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=952</guid>
		<description><![CDATA[How to use the lmremove command to release FLEXnet (FLEXlm) licenses when your application forgets to free them.]]></description>
			<content:encoded><![CDATA[<p></p><p>Software applications are supposed to release <a href="http://www.acresso.com" target="_blank">Acresso</a> FLEXnet (formerly Macrovision FLEXlm) licenses when they exit.  On rare occasion they forget.</p>
<p>The simplest solution is to stop and restart the <code>lmgrd</code> server (<code>lmreread</code> is insufficient).  If you cannot do this, use the <code>lmremove</code> command to release licenses so you can use them again.<span id="more-952"></span></p>
<p>For example, Cadence SoC Encounter on Linux once failed to release its license.  The next time I tried to start it, I got the message,</p>
<blockquote><p><code>&gt; velocity</code><br />
Checking out Encounter license &#8230;<br />
License checkout failed: ERROR (LMF-02018): License call failed for feature NanoRoute_Ultra, version 8.100 and quantity 1. The license server search path is defined as 5280@poser. The FLEXnet error message is as follows,<br />
FLEXnet ERROR(-18, 0, 0): License server system does not support this feature.</p></blockquote>
<p>This was particularly vexing because we did not even have a NanoRoute_Ultra license.  Yet earlier, SoC Encounter had been working fine without it.</p>
<p>To release the stuck license, find the license you want to release:</p>
<blockquote><p><code>&gt; lmstat -A</code></p>
<p>License server status: 5280@poser<br />
License file(s) on poser: /usr/local/flexlm/licenses/license.cadence:<br />
&#8230;<br />
Users of Encounter_Digital_Impl_Sys_XL:  (Total of 1 license issued;  Total of 1 license in use)</p>
<p>&#8220;Encounter_Digital_Impl_Sys_XL&#8221; v8.1, vendor: cdslmd<br />
floating license</p>
<p>john poser.voom.net poser.voom.net:1.0 (v8.100) (poser/5280 574), start Sun 10/04 20:24<br />
&#8230;</p></blockquote>
<p>So, it turns out that the Encounter_Digital_Impl_Sys_XL feature is the problem, not NanoRoute_Ultra.  Go figure.</p>
<p>Release this license using the information provided by the <code>lmstat</code> command (the following is a single command):</p>
<blockquote><p><code>&gt; lmremove -c /usr/local/flexlm/licenses/license.cadence<code> Encounter_Digital_Impl_Sys_XL john poser.voom.net poser.voom.net:1.0</code></code></p></blockquote>
<p>The <em>FLEXnet End User Licensing Guide</em> is very useful.  Strangely, the Acresso web site is the only place you <em>cannot</em> get this manual.  So just <a rel="nofollow" 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>
<img src="http://feeds.feedburner.com/~r/voom/~4/81Td-cS-3Qg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/release-stuck-flexnet-licenses/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.voom.net/release-stuck-flexnet-licenses</feedburner:origLink></item>
		<item>
		<title>Rearing Bilingual Children</title>
		<link>http://feedproxy.google.com/~r/voom/~3/xrJeSbDYJx0/rearing-bilingual-children</link>
		<comments>http://www.voom.net/rearing-bilingual-children#comments</comments>
		<pubDate>Mon, 21 Sep 2009 06:38:32 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[Japan]]></category>
		<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[Japanese]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=925</guid>
		<description><![CDATA[We reared a Japanese/English bilingual daughter in the United States. To help you formulate a plan for your own family, this post describes the strategy we used.]]></description>
			<content:encoded><![CDATA[<p></p><p>If you speak a foreign language, you would naturally like your children to learn it, too.  However, look around you, and you will find that only a few children actually become fluent in their parents&#8217; language, and fewer still can read or write it.</p>
<p>We reared a Japanese/English bilingual daughter in the United States.   To help you formulate a plan for your own family, I will describe the strategy we used.</p>
<p><span id="more-925"></span>Generally, language proficiency depends on the language environment,</p>
<ol>
<li>At home</li>
<li>At school</li>
<li>In the surrounding social environment</li>
</ol>
<p>If your child is not exposed to a language in at least two of these environments, it is unlikely that the language will stick.</p>
<h2>Our Situation</h2>
<p>Early on, my wife and I decided that our children would speak Japanese. Since the two of us already spoke to each other in Japanese, all we had to do was include the rest of the family, and our child could learn Japanese for free.  Not quite.  As every parent who has attempted this knows, getting your child to learn your language is not free.  A sustained, time-consuming effort is required.</p>
<p>We seemed to have succeeded. Our 14 year old daughter speaks both Japanese and English without an accent. She translates <em>manga</em> for her friends at school and on the internet. She just finished reading the Japanese translation of <em>Harry Potter and the Chamber of Secrets</em>. At last she is in flight, applying Japanese for her own purposes and building new skills according to her own priorities.</p>
<h2>Insert Your Language Here</h2>
<p>Our experience was with Japanese, one of the most complex languages in the world.  The written language is fiendishly difficult.  Mastering Japanese requires a level of dedication and sacrifice that may not be required with other languages.  We Japanese speakers relish our maniacal intensity and stoic suffering.</p>
<p>Still, I believe that most of what we did applies to any foreign language. For the sake of convenience I use &#8220;Japanese&#8221; and &#8220;Japan&#8221; in the following text, merely because it is awkward to repeatedly write &#8220;your language&#8221; and &#8220;the region where your language is spoken&#8221;. Please just replace &#8220;Japanese&#8221; and &#8220;Japan&#8221; with the name of your language and region.</p>
<h2>Set a Clear and Worthwhile Goal</h2>
<p>You are embarking on a project, and every project needs a clear, measurable goal. Based on my own experience, I propose a goal like this: <strong>the child should be able to apply the language for his own purposes, thereby enabling him to build new skills on his own.</strong> This is in fact the goal of all education.</p>
<p>In order to be motivated, all participants must see the goal as worthwhile.  This is especially true of your child, who holds veto power over the project. <strong>You must sell the language to your child.</strong> &#8220;You will learn 3000 Chinese characters&#8221; will not motivate your young child.  Going fishing on Uncle&#8217;s boat and understanding a favorite TV show will get much more attention.  Many of the recommendations that follow are in fact oriented toward convincing your child to embrace Japanese as an obvious and integral part of his life.</p>
<h2>The Most Important Factor</h2>
<p>The entire family must be dedicated to helping the child learn.  The parents must put forth a strong effort.  You and your child will have to sacrifice other valuable experiences for the sake of language study, but that&#8217;s the way it goes.  Tradeoffs are a part of life.</p>
<p>My original casual attitude, &#8220;Hey, it&#8217;s free so why not teach the kids Japanese?&#8221; was entirely optimistic.  In reality, the fact that we parents spoke Japanese provided the foundation for success, <em>but only if we resolved to make the effort</em>.</p>
<h2>The Preschool Years</h2>
<p>The years from birth to kindergarten are very important for language learning.  Further, your child&#8217;s schedule is  simple, so you have the flexibility to provide experiences that would not fit into a busy student&#8217;s life.</p>
<ul>
<li>Even before the child is born, you and your spouse should carry on your relationship entirely in Japanese.  Unfortunately this means that if both parents do not speak fluent Japanese, success is much less likely.</li>
<li>Speak Japanese to your baby from birth.  One day old is too late.  Not for the baby, but for you. You must establish an unbroken pattern of speaking only Japanese to your child.</li>
<li>Take your child to Japan annually <em>to visit family</em>.  Cousins are instant friends, grandparents are delightful, and the key to all this fun is the Japanese language.  During the preschool years, you are not restricted by a school schedule so you can go when the weather is good and the airfare is cheap.</li>
<li>In many languages it is common to drop, say, the subject of a sentence.  Avoid abbreviations and speak in full sentences.</li>
<li>Show your child Japanese videos.  Even television commercials are instructive. This will expose your child to a variety of speakers with different accents, plus it gives your child something in common with children in Japan.</li>
<li>Join a play group where the children speak Japanese.  When our daughter was young, Japanese mothers and their young children met at a park every day.  This was fabulous for everyone.</li>
<li>Get dual citizenship for your child.  I have known several people who do not have the privilege of living where they feel most comfortable because their parents did not bother to just file some forms.  Don&#8217;t do this to your kid.</li>
</ul>
<h2>The School Years</h2>
<p>Once school starts, your son or daughter will have other things to learn.  Having conversed mostly in Japanese, your child&#8217;s English may not be very good.    Our daughter attended an English as a Second Language (ESL) class, and she had an accent in English until about fifth grade.</p>
<p>It will be difficult for you to watch your U.S.born child struggle with English if you are self-conscious about your own English.  Do not worry. Remember how I thought that learning Japanese would be free for my child?  I got it backwards&#8211;the English is free.  In an English speaking country, <em>nothing can stop your child from speaking English like a native. </em> The danger is that he will lose his Japanese. You maintain your focus on Japanese.</p>
<ul>
<li>To the extent that school schedule and your child&#8217;s changing tastes allow, continue the preschool activities listed above</li>
<li>Be prepared to sacrifice other activities for language study.  For example, Japanese study plus team sports can easily be too much.</li>
<li>Even on brief trips to Japan, Japanese citizens who live in a foreign country are allowed to attend public school (体験入学).  This is a wonderful opportunity to make Japanese friends and learn bad words. Many other countries have similar programs.</li>
<li>Stay calm</li>
<li>School officials may suggest that you speak English at home. Don&#8217;t do it.  Teaching English is their job.  Your job is to teach Japanese.</li>
<li>Your child should study some Japanese, even just a little, every day</li>
<li>Send your child to language school.  Be ready for the financial burden.  Language school is more important if you want your child to read and write Chinese or Japanese. Learning kanji (漢字) is a huge burden that not every child can bear.  You may have to back off on this goal.</li>
<li>Feel free to discuss English homework in English</li>
</ul>
<h2>Your Child Responds in English</h2>
<p>Often the parent-child conversation style devolves into the parent speaking Japanese, and the child responding in English.  A couple years of this, and the child merely understands Japanese, but cannot speak it.  From what I have seen, it is almost impossible to recover from this situation.</p>
<p>Both my wife and I resolved that this would never be permitted, but to our surprise, it never happened.  Since it never happened, I can only guess what we did to avoid it:</p>
<ul>
<li><em>Never</em> accept English sentences in a Japanese conversation.  Like anything else in childrearing, consistency is paramount.  You get only one chance to refuse: the first time.  Exceptions are quotes from English speakers or texts, and the occasional English word.</li>
<li>The trips to Japan linked Japanese language to pleasant experiences, and exposed our child to a place where Japanese is a natural and obvious part of everyone&#8217;s life</li>
<li>Our daughter is an only child, so we parents control the language spoken at home</li>
<li>Or it might be something else listed above</li>
</ul>
<h2>Conclusion</h2>
<p>Like anything worthwhile, rearing a bilingual child is not easy, nor is it cheap.  Success is not assured.   Still, if you have the desire to try, by all means do.  The worst you can do is give your child a head start on learning your  language.  Go for it!</p>
<p><em>This post is dedicated to my wife Miki and daughter Julie, who actually did all the work.</em></p>
<img src="http://feeds.feedburner.com/~r/voom/~4/xrJeSbDYJx0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/rearing-bilingual-children/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.voom.net/rearing-bilingual-children</feedburner:origLink></item>
		<item>
		<title>Control Your IC Design Flow</title>
		<link>http://feedproxy.google.com/~r/voom/~3/3uldBydG4DE/controlling-your-ic-design-flow</link>
		<comments>http://www.voom.net/controlling-your-ic-design-flow#comments</comments>
		<pubDate>Sat, 08 Aug 2009 23:00:34 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[Chip Design]]></category>
		<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[GNU Make]]></category>
		<category><![CDATA[IC Design Flow]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=580</guid>
		<description><![CDATA[This is one of a series of articles on simple, specific techniques that will make your chip design flow easy to use. In this installment, I will explain how to control your chip design flow, and rules to keep it organized.]]></description>
			<content:encoded><![CDATA[<p></p><p>Chip design is an iterative process. The design flow is run repeatedly as it extended and refined into a program that can automatically build the chip.  Your flow needs software to make sure that only the necessary steps are executed, in the correct order, on the correct data.  Different hierarchical blocks must be constructed similarly yet differently.</p>
<p>This is one of a series of articles on simple, specific techniques that will make your chip design flow easy to use.  In this installment, I will explain how to control your chip design flow, and rules to keep it organized.<span id="more-580"></span> Other articles include,</p>
<ul>
<li><a href="http://www.voom.net/ic-design-flow-science">Apply the Scientific Method to IC Design Flow</a></li>
<li><a href="../ic-design-flow-error-messages">Write Effective Error Messages</a></li>
<li><a href="../ic-design-flow-log-file">Properly Name Log Files for EDA Tools</a></li>
<li><a href="../design-flow-file-naming">Give Files in Your IC Design Flow Useful Names</a></li>
</ul>
<h2>The Power of Names</h2>
<p>First, I want to tell you the most effective way to make your flow easy to use and understand: <strong>whenever you name something, choose a consistent, informative name</strong>. How can something this simple be so important?  Look at the value proposition:</p>
<ul>
<li>The name will often be the only documentation</li>
<li>At the very outset, you need to choose a huge number of names. A naming convention will make this easier.</li>
<li>Names are hard to change.  Once chosen, you&#8217;re usually stuck with them.</li>
<li>Good names cost almost nothing.  Just pay attention.</li>
</ul>
<p>File names and step names are closely related, and are <a href="http://www.voom.net/design-flow-file-naming#Choose_a_Step_Name_and_Use_It_for_Everything">explained in another article</a>.</p>
<p><a name="variable_names"></a>Good variable names for your design flow are the same as good variable names in ordinary software.  This means that there is a wealth of information about <a href="http://www.google.com/search?q=variable+naming+conventions" target="_blank">variable naming conventions</a> on the Internet and in programming books.  I like <a href="http://www.cc2e.com/page.aspx?hid=147" target="_blank">Code Complete, Chapter 11, The Power of Variable Names</a> for its straightforward suggestions.  And for how it agrees with me.</p>
<p>I have one additional variable naming convention unique to IC design flow: use names that are legal Verilog identifiers.  For variable names, the rules are not at all restrictive:</p>
<ul>
<li>Use only letters, numbers, and _</li>
<li>The first character must be a letter</li>
</ul>
<p>Yet Verilog is the most restrictive name space in chip design.  Except for reserved words (like <code>foreach</code> in TCL), a legal Verilog identifier can be used as a variable name in every computer language and file format.</p>
<p>Your design flow will run a wide variety of tools.  Use exactly the same variable name everywhere.  Resist the temptation to change names to respect the naming convention of a particular tool.  For example, I once used <code>designName</code> for the name of the top design in TCL scripts, and <code>DESIGN_NAME</code> in Makefiles.  This was extremely inconvenient until I changed to <code>designName</code> everywhere, in violation of the usual Makefile custom of using capitals and underscores for variable names.</p>
<h2>Flow Steps</h2>
<p>You might be tempted to create giant scripts to run EDA tools from start to finish.  It is better to separate the flow into shorter steps that perform individual tasks.</p>
<ul>
<li>Each step must be reentrant.  This means that you can safely restart the flow at any step.  The most basic requirement for reentrance is that the step reads data from one database at the beginning, and saves the result in a database with a different name at the end.</li>
<li> Give each step a short, yet descriptive name.  You will type it a lot, and <a href="http://www.voom.net/design-flow-file-naming#Choose_a_Step_Name_and_Use_It_for_Everything">many file names will be based on the step name</a>.</li>
<li>Where reasonable and efficient, the inputs and outputs of a step should be in a vendor independent format like OpenAccess, LEF, DEF or Verilog.  Still, many steps are best saved as a proprietary database, particularly in place and route.  For example, a global routing database will only be read by the tool that wrote it, so go ahead and save it as an Encounter, Volcano or Milkyway database.</li>
<li>End steps at points where you have a meaningful, stable result that will allow you to make an informed decision about what to do next.  For example, produce a legal placement, create a timing report, and then end the step.</li>
<li>The more iterations required to get a step right, the shorter the step should be.  An example of this is power routing, where you  often tweak your power routing script, run, and observe the results several times before it works correctly.</li>
<li>However, starting and stopping CAD tools, reading and writing databases takes time and space.  For the sake of economy, you want fewer steps.</li>
</ul>
<p>When designing your flow steps and your flow in general, learn from others.  Refer to existing flows like the <a href="http://www.tsmc.com/english/c_services/c01_design/c0105_reference.htm" target="_blank">TSMC Reference Flow</a>, <a href="http://www.cadence.com/Community/blogs/di/archive/2009/01/29/demo-and-interview-the-encounter-foundation-flow.aspx">Cadence Encounter Foundation Flow</a>, <a href="http://www.synopsys.com/Solutions/LynxDesign/Pages/default.aspx" target="_blank">Synopsys</a> <a href="http://theasicguy.com/2009/03/16/synopsys-lynx-design-system-debuts-at-snug" target="_blank">Lynx Design System</a> or the <a href="http://www.voom.net/business/design-consulting">Voom Flow</a>.</p>
<h2>Chip Design Flow Control Architecture</h2>
<p>The following diagram shows the main components that make up an IC design flow:</p>
<p style="text-align: center;"><img class="aligncenter" title="IC Design Flow Tool Hierarchy" src="http://www.voom.net/wp-content/uploads/2009/08/flowtools.png" alt="IC Design Flow Tool Hierarchy" width="400" height="246" /></p>
<ul>
<li>The flow controller is the boss.  Based on instructions from the user, it determines,
<ul>
<li>The steps to be executed based on the state of the design and the goal requested by the user</li>
<li>Variable values.  It passes these values to the other tools and scripts.</li>
</ul>
</li>
<li> The flow controller starts the correct EDA tool, which may be anything from an awk script to a place and route tool</li>
<li> If appropriate, the flow controller specifies a script to be executed by the EDA tool</li>
<li> If you have a server farm, you will need a job scheduler to distribute the computing load among the servers</li>
<li> Larger projects use design management software to manage data versions</li>
</ul>
<p>Now let&#8217;s look at each one of these applications in the tool hierarchy.</p>
<h2>Flow Controller</h2>
<p>The flow controller manages the execution of flow steps like placement or timing analysis.  It determines,</p>
<ul>
<li>The steps that must be executed to bring the design from its current state to the state requested by the user</li>
<li>The EDA tool version to use</li>
<li>Variable values.  The flow controller passes these values to the other tools and scripts.</li>
</ul>
<p>Avoid controlling your flow with user-defined shell environment variables, such as in <tt>.bashrc</tt>.   The <a title="Drag your design environment kicking and screaming into the Drag your design environment kicking and screaming into the '90s with Modules!" href="http://modules.sourceforge.net/docs/MC2_whitney_paper.pdf" target="_blank">UNIX <tt>module</tt> utility can be used to control versions of EDA tools</a> and other executables through the environment.</p>
<p>There are several common flow controllers that vary in sophistication.  As with most things, there is a trade off between automation and the effort needed to manage the solution.  The more engineers who run the flow, the more automatic your flow controller must be.</p>
<h3>Simple Shell Script</h3>
<p>Many chip designers manually maintain a shell script that executes every step in the flow.  After a step completes successfully, the designer comments it out so that re-running the script executes only the remaining incomplete steps. For example, a script might look like this after data preparation is complete, and it is time to do placement:</p>
<blockquote>
<pre>#! /bin/sh
# Perform physical synthesis with Synopsys IC Compiler
# John McGehee, Voom, Inc. 8/1/09

export flowPath=../../flow

# icc_shell -f ${flowPath}/icc/scr/netlistIn.tcl | tee netlistIn.log
# icc_shell -f ${flowPath}/icc/scr/floorplan.tcl | tee floorplan.log
# icc_shell -f ${flowPath}/icc/scr/pgRoute.tcl | tee pgRoute.log
# icc_shell -f ${flowPath}/icc/scr/setupTiming.tcl | tee setupTiming.log
icc_shell -f ${flowPath}/icc/scr/placement.tcl | tee placement.log
icc_shell -f ${flowPath}/icc/scr/cts.tcl | tee cts.log
# and so on...</pre>
</blockquote>
<p>When it is time to re-run the entire design flow, the designer simply removes all the comments and runs the script again.</p>
<p>The shell script has the advantage of simplicity—these scripts rarely contain even a single <code>if</code> statement. However, because the state of the design is stored in the user&#8217;s head, this flow controller cannot be recommended for multiple users.</p>
<h3>GNU Make</h3>
<p>Make has been my favorite flow controller since I first applied it to a <a href="#friends">design data converter</a>.   Originally developed to help programmers compile and link programs, Make can control any process where a sequence of shell commands must be performed in an arbitrarily complex order.  <a href="http://www.gnu.org/software/make" target="_blank">GNU Make</a> is free, open software that is already installed on virtually every computer used for designing chips.</p>
<p>Make syntax is somewhat arcane, but the <a href="http://www.gnu.org/software/make/manual/make.html" target="_blank">GNU Make documentation</a> is excellent.  Most programmers (and many chip designers) are familiar with Make, so there is almost certainly someone at your company who can answer your questions. Finally, the ability to use Make is a useful, portable skill that you should have.</p>
<h4><a name="example_makefile_for_ic_design"></a>Example Makefile for IC Design</h4>
<p>Make is controlled by a Makefile that describes the relationships among files and the commands for updating each file.  When the data are source files like C++ and Verilog, you can use the actual input and output file names.  When the  data are design databases, the file names are unpredictable, so it is best to use a semaphore file instead of the actual database files.  For example, the shell script flow represented above is described in the Makefile like this:<br />
<a name="gnu_makefile_example"></a></p>
<blockquote>
<pre>ICC_SHELL=/path/to/icc_shell
GREPERR=egrep -i '(error|warning|fail)'
flowPath=../../flow

designName=blockHead
netlistFileName=../../data/netlist/$(designName).vg
sdcFileName=../../data/timing/$(designName).sdc
floorplanScript=local/floorplan.tcl
pgRouteScript=local/pgRoute.tcl

.PHONY: all tidy clean realclean

# The first target is the default.
# Therefore, streamOut will be done when you type 'make' or 'make all'.
all: streamOut

# Note how the comments are inside the target, so they will be printed
# as the flow runs.
netlistIn: $(netlistFileName)
        ####################################
        # Read the netlist
        # Input file $(netlistFileName), output cell netlistIn.CEL
        $(ICC_SHELL) -f $(flowPath)/icc/scr/netlistIn.tcl | tee netlistIn.log
        -$(GREPERR) netlistIn.log &gt; netlistIn
        touch netlistIn

floorplan: netlistIn $(floorplanScript)
        ####################################
        # Run the commands in $(floorplanScript) to floorplan the block
        # Input cell netlistIn.CEL, output cell floorplan.CEL
        $(ICC_SHELL) -f $(flowPath)/icc/scr/floorplan.tcl | tee floorplan.log
        -$(GREPERR) floorplan.log &gt; floorplan
        touch floorplan

pgRoute: floorplan $(pgRouteScript)
        ####################################
        # Run the commands in $(pgRouteScript) to route power, ground, and other special nets
        # Input cell pgRoute.CEL, output cell floorplan.CEL
        $(ICC_SHELL) -f $(flowPath)/icc/scr/pgRoute.tcl | tee pgRoute.log
        -$(GREPERR) pgRoute.log &gt; pgRoute
        touch pgRoute

setupTiming: floorplan $(sdcFileName)
        ####################################
        # Read timing constraints
        # Input cell floorplan.CEL, output cell setupTiming.CEL
        $(ICC_SHELL) -f $(flowPath)/icc/scr/setupTiming.tcl | tee setupTiming.log
        -$(GREPERR) setupTiming.log &gt; setupTiming
        touch setupTiming

placement: setupTiming
        ####################################
        # Perform automatic placement
        # Input cell setupTiming.CEL, output cell placement.CEL
        $(ICC_SHELL) -f $(flowPath)/icc/scr/placement.tcl | tee placement.log
        -$(LOGSUMMARY) placement.log placement.tim | $(MAILER) -s "$(designName) Placement Done" $(USER_EMAIL)
        -$(GREPERR) placement.log &gt; placement
        touch placement

cts: placement
        ####################################
        # Perform clock tree synthesis
        # Input cell placement.CEL, output cell cts.CEL
        $(ICC_SHELL) -f $(flowPath)/icc/scr/cts.tcl | tee cts.log
        -$(GREPERR) cts.log &gt; cts
        touch cts

# And so on, for the complete flow ending with the streamOut target
# that creates Milkyway cell $(designName).CEL, $(designName).FRAM,
# and streams out GDSII file $(designName).gds2 

# Finally, some administrative targets

tidy:
        ####################################
        # Remove annoying junk files, but never any useful files, not even *.log
        rm -f  *.log.??_??_??_?? *.cmd.??_??_??_?? *.TXT core dbSwap* vfPage* vlog*

clean: tidy
        ####################################
        # Remove all the semaphore files to reset the flow in preparation
        # to re-run.  Delete no data, so you can recover if you change
        # your mind.
        rm -f netlistIn floorplan pgRoute setupTiming placement cts # ...

realclean: clean tidy
        ####################################
        # Remove all data created by this flow
        # $(designName) is the library containing all the cells
        rm -rf $(designName)
        rm  -f *.tim *.spf *.SDF *.log *.drc *.lvs \
            *.dump.* *.prsum *.gds2 *.text *.prv \
            *.skew* *.dc *.sdf</pre>
</blockquote>
<p>With this Makefile in your working directory, you can type,</p>
<blockquote>
<pre>make floorplan</pre>
</blockquote>
<p>and Make will execute the commands within the <tt>netlistIn</tt> and <tt>floorplan</tt> targets, updating the modification date of the <tt>netlistIn</tt> and <tt>floorplan</tt> semaphore files along the way.  Then, if you give the command,</p>
<blockquote>
<pre>make placement</pre>
</blockquote>
<p>Make will see that the file <tt>floorplan</tt> exists and is newer than <tt>netlistIn</tt>, which is newer than <tt>$(netlistFileName)</tt>, so those steps are up-to-date and need not be rerun.  The <tt>pgRoute</tt>, <tt>setupTiming</tt> and <tt>placement</tt> targets will be executed and the modification time of the respective semaphore files updated.</p>
<p>Refer to the <a href="http://www.gnu.org/software/make/manual/make.html" target="_blank">GNU Make documentation</a> for a thorough explanation of Make and its theory of operation.</p>
<h4>Make Automatic Variables</h4>
<p>In the above example Makefile, you will notice that the same strings appear repeatedly.  I wrote it this way for the sake of clarity, but it is better to use automatic variables.  For example, while the commands in the <tt>placement</tt> target are running, automatic variable <code>$@</code> is set to <tt>placement</tt>, and <code>$&lt;</code> is set to <tt>setupTiming</tt>,  Therefore, this target can be rewritten,</p>
<blockquote>
<pre>placement: setupTiming
        ####################################
        # Perform automatic placement
        # Input cell $&lt;.CEL, output cell $@.CEL
        $(ICC_SHELL) -f $(flowPath)/icc/scr/$@.tcl | tee $@.log
        -$(LOGSUMMARY) $@.log $@.tim | $(MAILER) -s "$(designName) $@ Done" $(USER_EMAIL)
        -$(GREPERR) $@.log &gt; $@
        touch $@</pre>
</blockquote>
<p>Now, when you make a new target by copying an existing one, there is less to change, and therefore fewer opportunities to make a mistake.  It also enforces the <a href="http://www.voom.net/design-flow-file-naming#Choose_a_Step_Name_and_Use_It_for_Everything" target="_self">rule that the target, script, log file, output cell, output file should all share the same name</a>.</p>
<h4>Tips for Using GNU Make as an IC Design Flow Controller</h4>
<p>Finally, let me share a few GNU Make tricks that I find useful:</p>
<ul>
<li>Use <tt>touch</tt> and <tt>rm</tt> to restart the flow at an intermediate step.  Which one you use depends on your situation:
<ul>
<li>To invalidate a step, remove the target (semaphore file) for it.  For example, if you do not like your power/ground routing, fix the power routing script and then do,<br />
<blockquote>
<pre>rm pgRoute
make pgRoute</pre>
</blockquote>
<p>to rerun the <tt>pgRoute</tt> step.</li>
<li><a name="update_the_results_of_a_step"></a>If you update the results of a step, <tt>touch</tt> its target to update its modification time to the present time.  For example, suppose that you fix the placement by moving some cell instances.  Save the placement database, and declare that this result is the most up-to-date using,<br />
<blockquote>
<pre>touch placement</pre>
</blockquote>
</li>
</ul>
</li>
<li>Like many UNIX commands, Make has a <tt>-n</tt> option that prints the commands that it would do, without actually doing them. Use this to check what will happen before you commit to starting a run.</li>
<li><a name="make_t"></a>Another handy GNU Make option is <tt>-t</tt>, which updates all dependencies of the target you specify, without executing the commands within the targets.  For example, suppose you are using the Makefile shown above, and <tt>floorplan</tt> is up-to-date.  The command,<br />
<blockquote>
<pre>make -t placement</pre>
</blockquote>
<p>will update the modification time of files <tt>pgRoute</tt>, <tt>setupTiming</tt>, and <tt>placement</tt>, so that the <tt>placement</tt> target is up-to-date.  <tt>make -t</tt> can be tricky, so after you use it, check that the flow really is in the expected state using <tt>make -n</tt>.</li>
<li>Make variables are exported to the environment of the shell in which the command is run.  This means that you can define your design parameters once in the Makefile, and use these values in your scripts.  For example, <tt>netlistIn.tcl</tt> can and should get the netlist file name using the Tcl command <code>$env(netlistFileName)</code>.</li>
<li>The article <a href="http://www.ddj.com/development-tools/197003338" target="_blank">Debugging Makefiles</a> explains an advanced technique that allows you to see more clearly what will be executed and inspect the value of Makefile variables.</li>
<li>You may have noticed the <code>LOGSUMMARY</code> command in the <tt>placement</tt> target.  This is a Perl program that keeps me informed by extracting a summary of the placement result from the log file and emailing it to my mobile phone.  <a href="http://www.tuscanyda.com" target="_blank">Tuscany Design Automation</a> sells a similar application.</li>
</ul>
<h3>Other Flow Controllers</h3>
<p>If you want commercial software, check out <a href="http://www.rtda.com" target="_blank">Runtime Design Automation</a>.   Their <a href="FlowTracer flow controller" target="_blank">FlowTracer flow controller</a> allows you to easily reorder your steps to optimize your flow.  Make is less flexible in this respect because it was designed for a work flow that needs no rearrangement—programmers never want to try linking before compiling.</p>
<p>Some companies build their own proprietary flow controllers. With the solid free and commercial offerings that are available, a custom flow controller sounds like an expensive luxury to me.  People have tried to add GUIs to flows, but that does not seem worth the effort, either.</p>
<h2>Job Scheduler</h2>
<p>Workload management software is used to balance the computing workload across multiple servers. <a href="http://www.platform.com/Products/platform-lsf" target="_blank">Platform Computing LSF</a> is the industry standard.</p>
<p><a href="http://www.rtda.com" target="_blank">Runtime Design Automation</a> offesr a unique <a href="http://www.rtda.com/products" target="_blank">combination of flow controller and job scheduler</a> that helps you to get the most out of your computing hardware and software licenses.</p>
<p>If you like, start out by submitting jobs interactively, and add job scheduling software later when you have a server farm big enough to take advantage of it.  The change will cause little disruption.</p>
<h2>EDA Tool</h2>
<p>This is the software that actually processes the data to construct or verify the chip.  This may include simple scripts as well as traditional CAD tools.  It is not for me to recommend EDA tools to you, as you probably have your own ideas.</p>
<p>It is the responsibility of the flow controller to launch the correct version of the tool.   The <a title="Drag your design environment kicking and screaming into the Drag your design environment kicking and screaming into the '90s with Modules!" href="http://modules.sourceforge.net/docs/MC2_whitney_paper.pdf" target="_blank">UNIX <tt>module</tt> utility can help control versions of EDA tools</a> and other executables.</p>
<h2>Tool Scripts</h2>
<p>Many EDA tools are controlled using a Tcl or Python language script.  Specify the script on the command line when you launch the tool, as shown in the <a href="#gnu_makefile_example">Flow Controller examples</a>.</p>
<p>The tool hierarchy is getting pretty deep here: the user starts the flow controller, which launches the EDA tool, which executes the tool script.  That&#8217;s enough.  Adding more will only confuse the user.  For example, <strong>do not do this</strong>:</p>
<ul>
<li>In the flow controller, execute a Perl program</li>
<li>The Perl program creates an input file and launches an EDA tool</li>
</ul>
<p>This is much easier to understand:</p>
<ul>
<li>In the flow controller, execute a Perl program to create an input file</li>
<li>In the flow controller, launch the EDA tool</li>
</ul>
<p>Similarly, avoid calling sub-scripts within scripts. Get the same effect without nesting scripts by performing initialization in the startup file.  Organize your base routines into reusable packages or modules.</p>
<p>Any software works best when you use it in the plainest, most ordinary way.  Whenever possible, do things the tool&#8217;s way rather than your way. User manuals tell you about individual commands, but proven flows  like the <a href="http://www.tsmc.com/english/c_services/c01_design/c0105_reference.htm" target="_blank">TSMC Reference Flow</a>, <a href="http://www.cadence.com/Community/blogs/di/archive/2009/01/29/demo-and-interview-the-encounter-foundation-flow.aspx">Cadence Encounter Foundation Flow</a>, <a href="http://www.synopsys.com/Solutions/LynxDesign/Pages/default.aspx" target="_blank">Synopsys</a> <a href="http://theasicguy.com/2009/03/16/synopsys-lynx-design-system-debuts-at-snug" target="_blank">Lynx Design System</a> or the <a href="http://www.voom.net/business/design-consulting">Voom Flow</a> provide the most accurate documentation on how to assemble a working design system.</p>
<p>Perform operations related to a tool in that tool&#8217;s native scripting language, on the tool&#8217;s native database.  Most scripting interfaces give you excellent access to the EDA tool database (beware of tools that do not).  Use this powerful feature to,</p>
<ul>
<li>Shorten your script because the EDA tool will help you.  If you want to move a cell, do it and then run placement legalization.  This sure beats munging DEF with a Perl program.</li>
<li>Increase your immunity to changes in new EDA tool versions.  Database access APIs are remarkably stable.</li>
</ul>
<p>However, <strong>do not write extensive software that depends on a proprietary format, database or language</strong>.  This ties your software to a specific tool or vendor that may become unavailable or unreliable. <a href="http://www.voom.net/business/openaccess-software">Develop sophisticated CAD applications</a> on the <a href="http://www.si2.org/?page=621">OpenAccess design database</a> or public formats like <a href="http://www.si2.org/openeda.si2.org/help/group_ld.php?group=6" target="_blank">LEF, DEF,</a> or <a href="http://www.verilog.org" target="_blank">Verilog</a> so your application will work with any tool.</p>
<p>Keep your scripts and configuration files in a <a href="http://subversion.org" target="_blank">source code version control system like Subversion</a> or <a href="http://www.nongnu.org/cvs" target="_blank">CVS</a>.  You may find it advantageous to use the same design management system for scripts as well as data.</p>
<h2>Acknowledgements</h2>
<p>Thanks to David Chinnery, author of <a href="http://amzn.com/0387257632" target="_blank">Closing the Power Gap between ASIC &amp; Custom: Tools and Techniques for Low Power Design</a> and <a href="http://amzn.com/1402071132" target="_blank">Closing the Gap Between ASIC &amp; Custom: Tools and Techniques for High-Performance ASIC Design</a> for reviewing this manuscript and offering invaluable suggestions.</p>
<p><a name="friends">*</a> 日立FBSLやHUSLデータ変換 プログラムでした。その当時に日立武蔵工場で一緒に立ち上げた方々、なつかしいですね。是非連絡下さい！(search terms fishing for friends from that project)</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/3uldBydG4DE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/controlling-your-ic-design-flow/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.voom.net/controlling-your-ic-design-flow</feedburner:origLink></item>
		<item>
		<title>Japanese Input Method on Fedora 11 (Leonidas)</title>
		<link>http://feedproxy.google.com/~r/voom/~3/bKXkFeH5K-M/japanese-input-method-on-fedora-11</link>
		<comments>http://www.voom.net/japanese-input-method-on-fedora-11#comments</comments>
		<pubDate>Mon, 15 Jun 2009 01:03:04 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[Japan]]></category>
		<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Chinese]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Japanese]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=750</guid>
		<description><![CDATA[How to install and set up input methods for Japanese and other East Asian Languages on your English Fedora 11 Linux installation.  Also, tips on setting the locale variables and gwaei, a Japanese-English dictionary for Gnome.]]></description>
			<content:encoded><![CDATA[<p></p><p>I&#8217;ve used Japanese text input since RHEL 3, and Fedora 11 makes multilingual text input even easier.  This article describes how to set up Japanese text input with the latest Fedora.<br />
<span id="more-750"></span></p>
<p>Japanese test <em>display</em> works by default.  The new fonts in Fedora 11 are beautiful.  If a Japanese language web site does not display properly in Firefox, try adjusting the encoding with <em>View &gt; Character Encoding &gt; Japanese(Shift_JIS)</em> or <em>View &gt; Character Encoding &gt; Japanese(EUC-JP)</em>.</p>
<p>For information on how to install Japanese language input on other Linux distributions and other Fedora versions, see Scott Robbins&#8217; authoritative guide, <a href="http://home.roadrunner.com/~computertaijutsu/jpninpt.html" target="_blank">Inputting Japanese text in Linux and some BSDs</a>.  I have invited Scott to add this text to his guide when he gets the chance.</p>
<h2>Installing the Input Method</h2>
<p>Start by installing Japanese input method packages:</p>
<blockquote><p><code>yum install scim-lang-japanese</code></p></blockquote>
<p>Then, set up your preferences with <em>System &gt; Preferences &gt; Input Method</em>.  This will bring up the <em>IM Chooser</em> dialog.  You can use either the IBus or SCIM input methods:</p>
<ul>
<li>If you <em>Use IBus</em>, click on <em>Input Method Preferences</em>, and choose the <em>Input Methods</em> tab.  From the <em>Select an input method</em> list, choose <em>Japanese</em>, and any other languages you want to input.  Use the <em>Up</em> and <em>Down</em> buttons to arrange the order in which they appear when you hit the <em>Alt+Shift_L</em> hot key.   I also added <em>Chinese-Pinyin</em>, and it works great.  At last I can directly express in Chinese how <em>good</em> IBus is, 非常好, instead of entering how much I <em>like</em> it in Japanese, 非常に好きです, and then editing it into Chinese.</li>
<li>If you <em>Use SCIM</em>, The <em>Input Method Preferences</em> are already set up for Japanese</li>
</ul>
<p>You may need to log out and log in to see the changes.  Now, whenever you hit <em>Ctrl+Space</em>, a small window will appear in the lower right corner of your display.  Type something in Japanese.  Hit <em>Ctrl+Space</em> once more, and you are typing in English again.</p>
<h2>Changing Your User Language</h2>
<p>If you really want to go native, add the following to the <code>.bash_profile</code> file in your home directory:</p>
<blockquote><p><code>export LANG=ja_JP.UTF-8</code></p></blockquote>
<p>Log out and log in again, and everything is in Japanese.</p>
<p><strong>Don&#8217;t try this at home unless you can actually read Japanese.</strong> In particular, you will be asked if you want to change your file names to Japanese.  Give the wrong answer, and your <code>Desktop/</code> directory will be renamed <code>デスクトップ/</code>.   Are you already staring at the dialog that is threatening to do this?  Select <em>古い名前のままにする(K)</em> to keep your current file names.</p>
<h2>Changing the Locale</h2>
<p>The locale is a big subject, but the most useful setting I have found is the <a href="http://www.opengroup.org/onlinepubs/000095399/basedefs/xbd_chap07.html" target="_blank"><code>LC_CTYPE</code> environment variable</a>, because it changes the formatting of dates and currency values in OpenOffice.  This may be useful if you live in Japan, but prefer to use Linux in English.  In the <code>.bash_profile</code> file in your home directory, add the following :</p>
<blockquote><p><code>export LC_CTYPE=ja_JP.UTF-8</code></p></blockquote>
<p>Log out and log in again, and  everything is in English, assuming <code>LANG</code> is no longer set to <code>ja_JP.UTF-8</code>.  Open a spreadsheet with <em>Applications &gt; Office &gt; OpenOffice.org Calc</em>.   Choose <em>Format &gt; Cells</em>, choose the <em>Numbers</em> tab, and you can see that the <em>Language</em> has changed to <em>Japanese</em>, and the choices for date and currency formats are those customary in Japan.</p>
<h2>gwaei Japanese-English Dictionary</h2>
<p>Now that you can type both Japanese and English, you will want a dictionary.  The <a href="http://gwaei.sourceforge.net/" target="_blank">gwaei Japanese-English dictionary for Linux</a> works great with Fedora 11.</p>
<p>Note that the gwaei i386 RPM will not work with x86_64 Fedora 11.  If you installed the x86_64 version of Fedora 11, just compile gwaei as explained in the installation instructions.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/bKXkFeH5K-M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/japanese-input-method-on-fedora-11/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.voom.net/japanese-input-method-on-fedora-11</feedburner:origLink></item>
		<item>
		<title>Cadence ITK Together with OpenAccess API</title>
		<link>http://feedproxy.google.com/~r/voom/~3/hcWrb7sq0FU/cadence-itk-together-with-openaccess</link>
		<comments>http://www.voom.net/cadence-itk-together-with-openaccess#comments</comments>
		<pubDate>Wed, 10 Jun 2009 05:46:35 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Cadence]]></category>
		<category><![CDATA[ITK]]></category>
		<category><![CDATA[OpenAccess]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=742</guid>
		<description><![CDATA[Cadence ITK and OpenAccess should be compatible, but maybe not.  It turns out that they work fine together.]]></description>
			<content:encoded><![CDATA[<p></p><p>The Cadence ITK C API and the OpenAccess C++ API can be used simultaneously in the same program.</p>
<p>Cadence ITK (Integrator&#8217;s Tool Kit) enables C programs to directly manipulate the database for Virtuoso IC layout software.   ITK is a decades old product that originally supported the CDB (CDBA) database.  Like the rest of Virtuoso, ITK now supports OpenAccess.  This allows your legacy ITK programs to work with both CDB and OpenAccess design databases.  If you need it, that&#8217;s an awesome (yet fading) advantage.<br />
<span id="more-742"></span></p>
<p>For new code, you will want to use the more modern OpenAccess C++ API.  Therefore you may find that you need to link both APIs into the same program.  This works great if you obey a few simple rules:</p>
<ol>
<li>Use the same OpenAccess version that ITK uses</li>
<li>Initialize ITK with <code>dbInit()</code> first, and initialize OpenAccess with <code>oaDesignInit()</code> second</li>
<li>ITK functions get library access automatically as needed, while OpenAccess clients are expected to explicitly get library read or write access using <code>oaLib::getAccess()</code>. If you fail to get proper access, OpenAccess throws an exception.</li>
<li>ITK handles names in the CDBA namespace.  Therefore, use the <code>oaCdbaNS</code> namespace in the OpenAccess API when passing name strings to or from ITK.</li>
</ol>
<p>I did not try casting between OpenAccess pointers and ITK database IDs.  If you succeed at this, let me know how it goes.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/hcWrb7sq0FU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/cadence-itk-together-with-openaccess/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.voom.net/cadence-itk-together-with-openaccess</feedburner:origLink></item>
		<item>
		<title>Give Files in Your IC Design Flow Useful Names</title>
		<link>http://feedproxy.google.com/~r/voom/~3/Sk2YUPEGnac/design-flow-file-naming</link>
		<comments>http://www.voom.net/design-flow-file-naming#comments</comments>
		<pubDate>Tue, 26 May 2009 04:30:49 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[Chip Design]]></category>
		<category><![CDATA[John McGehee's Blog]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=713</guid>
		<description><![CDATA[This is one of a series of articles on simple, specific techniques that will make your chip design flow easy to use. In this installment, I will explain how to give helpful names to files and directories.]]></description>
			<content:encoded><![CDATA[<p></p><p>When a user wants chip design data, a script or a log file,how do they find it?  They use file and directory names.  As an IC design flow architect, proper file naming is the most important thing you can do to guide your users to the files they need.  By just looking at the path and name of any file, a user should be able to determine:</p>
<ul>
<li>Design name</li>
<li>File format</li>
<li>Step that created it, and therefore the tool that created it</li>
<li>operating conditions if pertinent</li>
</ul>
<p>This is one of a series of articles on simple, specific techniques that will make your chip design flow easy to use. In this installment, I will explain how to give helpful names to files and directories.<span id="more-713"></span> Other articles include,</p>
<ul>
<li><a href="http://www.voom.net/ic-design-flow-science">Apply the Scientific Method to IC Design Flow</a></li>
<li><a href="../ic-design-flow-error-messages">Write Effective Error Messages</a></li>
<li><a href="../ic-design-flow-log-file">Properly Name Log Files for EDA Tools</a></li>
<li><a href="../controlling-your-ic-design-flow">Control Your IC Design Flow</a><a href="../controlling-your-ic-design-flow"><br />
</a></li>
</ul>
<h2><a name="Choose_a_Step_Name_and_Use_It_for_Everything"></a>Choose a Step Name and Use It for Everything</h2>
<p>Choose a descriptive name for every step of your flow.  Users will type this name a lot, so keep it short, use lower case letters, and maybe one capital letter.  Generally a step name will be a verb.  Use this name for everything related to the step:</p>
<ul>
<li>Script</li>
<li>Log file</li>
<li>Output database and reports</li>
<li>Makefile target</li>
<li>Variable names</li>
<li>Name used in project management software, such as <a href="http://www.bugzilla.org">Bugzilla</a></li>
</ul>
<p>When the step name alone is insufficient, append more information, for example, <code>placeMin.rpt</code>, <code>placeTyp.rpt</code>, <code>placeMax.rpt</code>.  This way, all files related to step <code>place</code> appear together when listed alphabetically.</p>
<p>See also the related topic of <a href="http://www.voom.net/controlling-your-ic-design-flow#variable_names">chip design flow variable naming conventions</a>.</p>
<h2>One Design Per Directory</h2>
<p>Many flow designers start out thinking that it might be useful to allow multiple physical hierarchical designs to share a working directory.  It is not useful, so each design in the physical hierarchy should have its own directory.</p>
<p>There is no need to organize the working directories into a hierarchy of directories that match the chip hierarchy. Put the working directories wherever they make sense in your work flow.</p>
<p>Since there is only one design, use the design name for the:</p>
<ul>
<li>Design directory name</li>
<li>Database library name</li>
<li>Output files containing the completed design:
<ul>
<li>Design name in the database.  Use the most ordinary view name.  For example, the completed layout for design <code>blockHead</code> should be saved to OpenAccess as <code>blockHead/blockHead/layout</code>, or in Milkyway as <code>blockHead.CEL</code>.in library <code>blockHead</code>.</li>
<li>GDSII file, like <code>blockHead.gds</code></li>
<li>Text format files, like <code>blockHead.v</code>, <code>blockHead.def</code>, and <code>blockHead.lef</code></li>
</ul>
</li>
</ul>
<p>Otherwise, use the design name sparingly. The design directory is named after the design, so every file path already contains the design name.</p>
<h2>A Working Directory for Each Tool</h2>
<p>Within the directory for a design, create a directory for each EDA tool used.  When using a tool, <code>cd</code> to its directory and then start the tool.  While running the  tool, do not change the working directory.</p>
<p>I have seen flows organized with the tool directory above and the design directory within (<code>toolName/designName</code>).  It&#8217;s possible, but it does not work as crisply as <code>designName/toolName</code>.</p>
<h2>Use Relative Paths, Avoid Symbolic Links</h2>
<p>Relative paths allow your run directory to be moved or copied freely.  Relative paths are shorter, and therefore easy to read.</p>
<p>Absolute path names do have their place. It is reasonable to use a fully qualified path to things that are separate from the current design:</p>
<ul>
<li>Libraries, technology files, and other input data</li>
<li>Software applications and the design flow</li>
</ul>
<p>Even so, it may be best to avoid directly specifying the path to these things, and take a more sophisticated approach to managing your design environment, such as <a href="http://modules.sourceforge.net/docs/MC2_whitney_paper.pdf" target="_blank">using the <code>modules</code> package</a>.</p>
<p>Do not use symbolic links as a part of your flow.  Symbolic links are a sneaky way to make files appear to be somewhere they are not.  In a design flow, you want straightforward, not sneaky.  Use a variable instead of a symbolic link.</p>
<h2>Use Names Compatible with Verilog</h2>
<p>You will use design names as file and directory names, and vice versa.  The most restrictive name space used in IC design is Verilog, so obey Verilog naming rules when choosing directory names and file base names.  It&#8217;s simple:</p>
<ul>
<li>Use only alphanumeric characters and _</li>
<li>The first character must be a letter</li>
</ul>
<p>This way, file names can match the names of design objects without complicated escape sequences.  These rules apply to the base name (as in <code>baseName.ext</code>), not the file extension name.</p>
<h2>Name for Alphabetization</h2>
<p>Users will list the files with <code>ls</code> countless times.  Help them see the relationships between the files by naming them so that related files appear together when listed in alphabetical order.  Begin the file name with the most important word (like <code>setup</code> or <code>hold</code>), followed by the next important (like operating conditions) and so on.</p>
<p>Use leading zeros for numerical values so that alphabetical order is also numerical order, like the temperature values in,</p>
<blockquote><p><code>setup.typ_1p2_<strong>000</strong>.rpt<br />
setup.typ_1p2_<strong>025</strong>.rpt<br />
setup.typ_1p2_<strong>100</strong>.rpt</code></p></blockquote>
<h2>Use Standard File Extension Names</h2>
<p>Always use the standard file extension names for,</p>
<ul>
<li>Source code files, so that your text editor can do proper syntax highlighting.  For example, <code>.cpp</code>, <code>.py</code>, <code>.tcl</code>, <code>.v</code>.</li>
<li>Industry standard formats: <code>.def</code>, <code>.lef</code>, <code>.lib</code>, <code>.sdc</code>, <code>.spef</code> and so on</li>
<li>Graphics files, so that they are correctly displayed: <code>.jpg</code>, <code>.png</code>, <code>.gif</code>.</li>
<li>Files that you expect Microsoft Windows to recognize: <code>.txt</code>, <code>.csv</code>.  Don&#8217;t forget to do <code>unix2dos</code> before trying to read Linux files with Windows.</li>
</ul>
<p>Many files have no official file extension.  Still, your flow will be much easier to understand if you use the most recognizable one:</p>
<ul>
<li>Log files use <code>.log</code></li>
<li>Report files use <code>.rpt</code> (although I do see a lot of Synopsys PrimeTime reports with <code>.pt</code>)</li>
<li>For binary data with no other customary name, use something like <code>.dat</code>.  Reserve <code>.db</code> for Synopsys database files.</li>
<li>GDSII stream files use <code>.gds</code> (best), <code>.gdsii</code> or <code>.gds2</code></li>
<li>It is common to use a variety of file extensions for Verilog such as <code>.v</code> for RTL, and <code>.vg</code> for gate level,  At least start with <code>.v</code>.</li>
</ul>
<p>Whatever file extensions you choose, be consistent and use the same ones throughout your flow.</p>
<h2>Use Directories Sparingly</h2>
<p>You already have a tool working directory within a design directory.  There is not much to be gained by partitioning your files into even more sub-directories. It often only serves to hide files and increase the amount of typing required.  Certainly there is no need for any more than one level of sub-directory below the tool working directory.</p>
<p>Instead of distinguishing a file using a directory, consider simply lengthening the file name.  For example, use <code>setup.typ_1p2_100.rpt</code> instead of <code>setup/typ_1p2_100.rpt</code>.</p>
<p>When you create a sub-directory within the tool working directory, use a short name. Reuse the same name wherever possible.</p>
<p>Still, some kinds of sub-directories make sense:</p>
<ul>
<li>A physical verification tool working directory is a special case.  It generally contains separate working directories for LVS and DRC.  For example, Mentor Calibre LVS is generally run in working directory <code>designName/calibre/lvs</code>, and DRC is run in <code>designName/calibre/drc</code>.</li>
<li>A directory that contains input data, or data that retained for use in subsequent iterations of the design flow.  Pin placement files and floorplan files are examples of this.  Keeping input files in a separate directory sets them apart and protects them from accidental deletion.</li>
<li>Many flow designers like to add  directories like <code>log/</code> and <code>rpt/</code>. Myself, I get along fine without either one.  Directories like these are a matter of taste.</li>
</ul>
<p>I have seen a few kinds of sub-directories that should be avoided:</p>
<ul>
<li>A sub-directory for databases that are organized as libraries, like Milkyway, CDB and OpenAccess.  Such a sub-directory usually ends up containing just a single library, so it is completely redundant.  Put libraries in the working directory.</li>
<li>Sub-directories that attempt to artificially partition the design process for a tool into phases like <code>design/</code> and <code>analysis/</code>.  As your flow evolves, the boundary between the phases will drift, and you will end up storing almost everything in, say, <code>design/</code>, with a just a few orphan files left in <code>analysis/</code>.</li>
</ul>
<h2>Avoid Hidden Files</h2>
<p>Hidden files (UNIX files that start with &#8220;.&#8221;) are a mean trick.  Avoid them.  Still, the initialization file for some design tools is a hidden file, like <code>.cdsinit</code>, <code>.avantrc</code> or <code>.synopsys_pt.setup</code>.  Changing the initialization file name is an even meaner trick, so use the standard initialization file name regardless of whether it is hidden.</p>
<h2>Name the Library Path the Same as the Library Name</h2>
<p>OpenAccess and Cadence Virtuoso CDB allow you to specify a library path that is unrelated to the library name.  For example, you might use the <code>lib.defs</code> or <code>cds.lib</code> file to specify that the library named <code>blockHead</code> is in  directory <code>/path/to/BH2.7</code>.   Without the <code>lib.defs</code> or <code>cds.lib</code> file, there is no way to know the name of the library in <code>/path/to/BH2.7</code>.  This path should be rearranged so that it ends with the library name, for example <code>/path/to/2.7/blockhead</code>.</p>
<p>With Synopsys Milkyway, this is not an issue.  The directory in which the library is stored is always the same as the library name.  This is the right way to do it.</p>
<h2>File Completion in Two Characters</h2>
<p>Chris verBerg has a fun rule.  He tries to name source files such that the first two characters are unique, so he need only type two characters, and file name completion will finish the name.  Full file name completion might be too much to ask for design data files, but it is an excellent goal for sections of file names.  For example, you could quickly find <code>setup.typ_1p2_100.rpt</code><br />
by typing &#8220;<code>se</code>&#8221; &lt;Tab&gt; &#8220;<code>ty</code>&#8221; &lt;Tab&gt;, and so on.</p>
<p>In particular, do not use names with similar prefixes, like <code>place.log</code> and <code>placement.rpt</code>.  Choose either &#8220;place&#8221; or &#8220;placement&#8221;.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/Sk2YUPEGnac" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/design-flow-file-naming/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.voom.net/design-flow-file-naming</feedburner:origLink></item>
		<item>
		<title>Rare EDA Swag Unearthed</title>
		<link>http://feedproxy.google.com/~r/voom/~3/kc0KP5uV1tM/rare-eda-swag-unearthed</link>
		<comments>http://www.voom.net/rare-eda-swag-unearthed#comments</comments>
		<pubDate>Sun, 05 Apr 2009 06:00:37 +0000</pubDate>
		<dc:creator>John McGehee</dc:creator>
				<category><![CDATA[John McGehee's Blog]]></category>
		<category><![CDATA[Valid Logic]]></category>

		<guid isPermaLink="false">http://www.voom.net/?p=688</guid>
		<description><![CDATA[Look what streamed in.]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://www.voom.net/wp-content/uploads/2009/04/valid-logic-golf-ball.jpg"><img class="alignright size-medium wp-image-693" style="margin-left: 10px;" title="valid-logic-golf-ball2" src="http://www.voom.net/wp-content/uploads/2009/04/valid-logic-golf-ball.jpg" alt="Valid Logic Golf Ball" width="269" height="235" /></a>I constantly find old junk buried  in my yard.  Steel beer cans that were opened with a church key.  A fifth of Jack Daniels. Two full sheets of corrugated aluminum roofing.  Golf balls continuously stream in.</p>
<p>Look what I found today.  Just two more to complete my DMV golf ball collection.</p>
<img src="http://feeds.feedburner.com/~r/voom/~4/kc0KP5uV1tM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.voom.net/rare-eda-swag-unearthed/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.voom.net/rare-eda-swag-unearthed</feedburner:origLink></item>
	</channel>
</rss>
