<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	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/"
	>

<channel>
	<title>Circuit Design</title>
	<atom:link href="https://www.circuitdesign.info/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.circuitdesign.info/blog</link>
	<description>Tutorials and Insights in Electronics and Circuit Design</description>
	<lastBuildDate>Wed, 15 Jan 2025 00:13:19 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">5868458</site>	<item>
		<title>Generating Corners for ADE-XL with Python</title>
		<link>https://www.circuitdesign.info/blog/2014/12/generating-corners-for-ade-xl-with-python/</link>
					<comments>https://www.circuitdesign.info/blog/2014/12/generating-corners-for-ade-xl-with-python/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Thu, 11 Dec 2014 20:38:12 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[ADE-XL]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[cadence]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[regression]]></category>
		<category><![CDATA[scripting]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=999</guid>

					<description><![CDATA[I&#8217;ve been using ADE-XL to run corner simulations lately. I like that it lets me set up a specification for simulations (AKA a scoreboard) and then runs through different corners. And it supports distributed or parallel computing. But getting things like corner definitions in there is difficult. You&#8217;d have to hand-enter them. Luckily, Cadence allows [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>I&#8217;ve been using ADE-XL to run corner simulations lately. I like that it lets me set up a specification for simulations (AKA a scoreboard) and then runs through different corners. And it supports distributed or parallel computing.</p>



<p>But getting things like corner definitions in there is difficult. You&#8217;d have to hand-enter them. Luckily, Cadence allows you to load these definitions from a CSV file or an XML format they call SDB.</p>



<p>The CSV file is pretty useless. The reason is that each corner entry is another <em>column</em> in the file, not another row. This is the transpose of the way everyone else does CSV files—where a row is another record, and the columns are the fields in that record.</p>



<p>But, with some use of Python&#8217;s etree XML capabilities, you can get the SDB file to work pretty easily.</p>



<span id="more-999"></span>



<p>Here&#8217;s a sample script that takes a sample SDB file (which you can export from ADE-XL) and then adds multiple corners.</p>



<pre class="wp-block-code"><code>import xml.etree.ElementTree as ET
import itertools
import os.path

tree = ET.parse('adexl-sample-corners.sdb')
root = tree.getroot()
corners = root.find('active').find('corners')

vdds = &#91;3.0, 3.3, 3.5]
temps = &#91;-40, 25, 85]

model_comb = itertools.product(&#91;'slowNMOS', 'fastNMOS'], &#91;'slowPMOS', 'fastPMOS'], &#91;'lowResistor', 'highResistor'])

model_corners = &#91;''.join(k) for k in model_comb]
all_combs_keys = &#91;'modelsection:/path/to/modelfile.scs', 'var:VDD', 'var:temperature']
all_combs = itertools.product(model_corners, vdds, temps)
corner_list = &#91; dict( (all_combs_keys&#91;i], v) for i,v in enumerate(c) ) for c in all_combs ]

for i,corner in enumerate(corner_list):
  if 'corner name' in corner:
    c_name = c&#91;'corner name']
  else:
    c_name = 'C{0}'.format(i)
  c = ET.SubElement(corners, 'corner', enabled="1")
  c.text = c_name
  print(c.text)

for k,v in corner.iteritems():
  if k.startswith('modelsection'):
    modelfile = k.split(':')&#91;1]
    models = c.find('models')
  if not models:
    models = ET.SubElement(c, 'models')
    mm = ET.SubElement(models, 'model', enabled="1")
    mm.text = os.path.split(modelfile)&#91;-1]
    mt = ET.SubElement(mm, 'modeltest')
    mt.text = 'All'
  mb = ET.SubElement(mm, 'modelblock')
  mb.text = 'Global'
  mf = ET.SubElement(mm, 'modelfile')
  mf.text = modelfile
  ms = ET.SubElement(mm, 'modelsection')
  ms.text = v
  if k.startswith('var'):
    var_name = k.split(':')&#91;1]
    vars = c.find('vars')
    if not vars:
      vars = ET.SubElement(c, 'vars')
      var = ET.SubElement(vars, 'var')
      var.text = var_name
    val = ET.SubElement(var, 'value')
  val.text = str(v)

tree.write('generated.sdb')</code></pre>



<p>The first section makes all the different corner combinations of process, voltage and temperature. As a small tangent, I also constructed all the process corners themselves (slow/fast NMOS, slow/fast PMOS, etc).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2014/12/generating-corners-for-ade-xl-with-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">999</post-id>	</item>
		<item>
		<title>Read CSV files as a Matlab struct array</title>
		<link>https://www.circuitdesign.info/blog/2013/06/read-csv-files-as-a-matlab-struct-array/</link>
					<comments>https://www.circuitdesign.info/blog/2013/06/read-csv-files-as-a-matlab-struct-array/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Tue, 25 Jun 2013 04:18:11 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[matlab]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=973</guid>

					<description><![CDATA[I like CSV files for their portability (Python, Excel), ease of debug, and lightweight nature (no SQL databases etc). However, one key aspect of CSV files is that they are column-oriented–that is, you have to keep track of which data is in which column.In python, csv.DictReader and csv.DictWriter do this for you–you don’t have to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>I like CSV files for their portability (Python, Excel), ease of debug, and lightweight nature (no SQL databases etc). However, one key aspect of CSV files is that they are column-oriented–that is, you have to keep track of which data is in which column.<br />In python, <a title="csv.DictReader class" href="http://docs.python.org/2/library/csv.html#csv.DictReader" target="_blank" rel="noopener"><code>csv.DictReader</code></a> and <a title="csv.DictWriter class" href="http://docs.python.org/2/library/csv.html#csv.DictWriter" target="_blank" rel="noopener"><code>csv.DictWriter</code></a> do this for you–you don’t have to keep track of which data is in which column; the reader/writer does this for you.<br />I was looking for something similar in Matlab, so that I can read CSV files. In Matlab, the <a title="Matlab struct" href="http://www.mathworks.com/help/matlab/ref/struct.html" target="_blank" rel="noopener">structure array</a> is ideal for this, as it lets you create an array (one record per row) with structured data (one field per column).<br />The following file is something I wrote to read in CSV data. It returns a structure array, where the field names are given by a header line in the CSV file. It supports both numeric and string data in the CSV fields, with one caveat: all text-valued fields must occur contiguously and be the first columns in the file.</p>



<pre class="wp-block-code"><code>function &#91; S ] = csv_struct_read( file_name )
  %csv_strct_read: S = csv_struct_read( file_name )
  % Read CSV file, with headers, as a struct array
  % Header fields are struct fields. Dimension of
  % struct array is NR x 1 where NR is number of
  % non-header lines (rows) in CSV.
  A = importdata(file_name, ',', 1);
  if size(A.textdata, 1) > 1
    D = A.textdata(2:end, :);
    D(strcmp(D, '')) = num2cell(A.data);
    S = cell2struct(D, A.textdata(1,:), 2);
  else
    S = cell2struct(num2cell(A.data), A.colheaders, 2);
  end
end</code></pre>



<p><a style="font-size: 1px;" title="Also you can download Movie The Transporter Refueled (2015)" href="http://boxoffice76.com/movie/573067/the-transporter-refueled-2015.html" rel="dofollow">Watch movie online The Transporter Refueled (2015)</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2013/06/read-csv-files-as-a-matlab-struct-array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">973</post-id>	</item>
		<item>
		<title>More updates to the CDSVN scripts</title>
		<link>https://www.circuitdesign.info/blog/2013/02/more-updates-to-the-cdsvn-scripts/</link>
					<comments>https://www.circuitdesign.info/blog/2013/02/more-updates-to-the-cdsvn-scripts/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Fri, 22 Feb 2013 18:04:44 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[cadence]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[version control]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=956</guid>

					<description><![CDATA[Our friend from Brazil (Nilton Jr) sent us the attached update last year: CDSVN. I&#8217;m just getting around to posting them now. I haven&#8217;t tried them out, but they are &#8220;customizations [they] made to [their] environment&#8221;. Also, we got another contribution from Iou Bingyong: svnMenu.il. He says: I&#8217;m in China and I have tried your [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Our friend from Brazil (Nilton Jr) sent us the attached update last year: <a href="https://www.circuitdesign.info/blog/wp-content/uploads/2013/02/CDSVN.tar">CDSVN</a>. I&#8217;m just getting around to posting them now. I haven&#8217;t tried them out, but they are &#8220;customizations [they] made to [their] environment&#8221;.</p>



<p>Also, we got another contribution from Iou Bingyong: <a href="https://www.circuitdesign.info/blog/wp-content/uploads/2013/02/svnMenu.il_.gz">svnMenu.il</a>. He says:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>I&#8217;m in China and I have tried your script today . It works fine in IC615, great works!<br />I wrote a skill script to add the &#8220;Subversion&#8221; menu in schematic/layout editor. In this way the &#8220;menus&#8221; sub-directory is not needed and I think this should be a little easier to setup.</p>
</blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2013/02/more-updates-to-the-cdsvn-scripts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">956</post-id>	</item>
		<item>
		<title>Shortcut to plot relative to reference signal</title>
		<link>https://www.circuitdesign.info/blog/2012/06/shortcut-to-plot-relative-to-reference-signal/</link>
					<comments>https://www.circuitdesign.info/blog/2012/06/shortcut-to-plot-relative-to-reference-signal/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Fri, 15 Jun 2012 15:39:22 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[bounce]]></category>
		<category><![CDATA[ground]]></category>
		<category><![CDATA[Ocean]]></category>
		<category><![CDATA[plot]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[Skill]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=926</guid>

					<description><![CDATA[Ocean/skill script follows. Select a net. Press ctrl-g. Now that net is your &#8220;reference&#8221;. Select a different net (or the same net if you are fond of trivial signals). Press ctrl-r that second net is plotted relative to the reference. This is useful for debugging multiple supply domains, supply/ground bounce, and differential circuits.]]></description>
										<content:encoded><![CDATA[
<p>Ocean/skill script follows. Select a net. Press ctrl-g. Now that net is your &#8220;reference&#8221;. Select a different net (or the same net if you are fond of trivial signals). Press ctrl-r that second net is plotted relative to the reference.</p>



<p>This is useful for debugging multiple supply domains, supply/ground bounce, and differential circuits.</p>



<pre class="wp-block-code"><code>procedure( relVT(netname)
  VT(netname) - VTGND
)

procedure( selVT()
  wid=hiGetCurrentWindow()
  path = geGetAdjustedPath(wid strcat(geGetInstHier(wid) "/" car(geGetSelSet())~&amp;gt;net~&amp;gt;name))
  relVT(path)
)

procedure( setGnd()
  wid=hiGetCurrentWindow()
  path = geGetAdjustedPath(wid strcat(geGetInstHier(wid) "/" car(geGetSelSet())~&amp;gt;net~&amp;gt;name))
  VTGND = VT(path)
)

procedure( plotSelVT()
  let( ((sVT selVT()))
    plot(sVT)
  )
)

hiSetBindKey("Schematics" "CtrlR" "plotSelVT()")
hiSetBindKey("Schematics" "CtrlG" "setGnd()")</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2012/06/shortcut-to-plot-relative-to-reference-signal/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">926</post-id>	</item>
		<item>
		<title>Cadence (awd) Waveform Colors</title>
		<link>https://www.circuitdesign.info/blog/2012/04/cadence-awd-waveform-colors/</link>
					<comments>https://www.circuitdesign.info/blog/2012/04/cadence-awd-waveform-colors/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Mon, 16 Apr 2012 22:00:07 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[analog waveform]]></category>
		<category><![CDATA[awd]]></category>
		<category><![CDATA[cadence]]></category>
		<category><![CDATA[colors]]></category>
		<category><![CDATA[powerpoint]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=912</guid>

					<description><![CDATA[Hex &#38; RGB values: FF00000; (255,0,0) 01CC66; (1,204,102) FFBFF2; (255,191,242) FF8000; (255,128,0)]]></description>
										<content:encoded><![CDATA[<p>Hex &amp; RGB values:<br />
<span style="color: #ff0000;background-color: #000000">FF00000; (255,0,0) </span><br />
<span style="color: #01cc66;background-color: #000000">01CC66; (1,204,102) </span><br />
<span style="color: #ffbff2;background-color: #000000">FFBFF2; (255,191,242) </span><br />
<span style="color: #ff8000;background-color: #000000">FF8000; (255,128,0) </span></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2012/04/cadence-awd-waveform-colors/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">912</post-id>	</item>
		<item>
		<title>Creating a Nyquist plot with Cadence</title>
		<link>https://www.circuitdesign.info/blog/2012/02/creating-a-nyquist-plot-with-cadence/</link>
					<comments>https://www.circuitdesign.info/blog/2012/02/creating-a-nyquist-plot-with-cadence/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Sun, 19 Feb 2012 15:59:09 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[cadence]]></category>
		<category><![CDATA[Nyquist]]></category>
		<category><![CDATA[Skill]]></category>
		<category><![CDATA[stability]]></category>
		<category><![CDATA[stb]]></category>
		<category><![CDATA[sweep]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=895</guid>

					<description><![CDATA[Cadence has a stability analysis that returns loop gain (return ratio). Typically, this is done using a log sweep of frequency. The reason is that doing a uniform linear sweep results in too large frequency steps for low frequencies and/or too large of a step for higher frequencies. Unfortunately, when you do a logarithmic sweep, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Cadence has a stability analysis that returns loop gain (return ratio). Typically, this is done using a log sweep of frequency. The reason is that doing a uniform linear sweep results in too large frequency steps for low frequencies and/or too large of a step for higher frequencies.</p>
<p>Unfortunately, when you do a logarithmic sweep, you can&#8217;t cover from negative to positive frequencies&#8211;which is what you want when you generate a Nyquist plot. With the code below, you can reflect the positive frequencies onto negative to get the full Nyquist plot:</p>
<p><code><br />
; load &#8220;~/cadence/skill/abConcatWaveforms.il&#8221;<br />
lg = -getData(&#8220;loopGain&#8221; ?result &#8220;stb&#8221;)<br />
; abConcatWaveforms externally defined<br />
lg2 = abConcatWaveforms(flip(conjugate(lg)) lg)<br />
w = newWindow()<br />
ocnYvsYplot(?wavex real(lg2) ?wavey imag(lg2))<br />
stb_x = xmin(abs(lg2-complex(-1.0,0.0))**2)<br />
stb_margin = value(lg2, stb_x)<br />
addTitle(sprintf(nil &#8220;stb_margin = %f dB&#8221; -dB20(stb_margin)))<br />
xLimit( list(-1.6 0.2) )<br />
yLimit( list(-0.5 0.5) )<br />
</code></p>
<p>You&#8217;ll need <a title="comp.cad.cadence post by Andre Beckett" href="http://groups.google.com/group/comp.cad.cadence/msg/d3f7db2d9b6fe793" target="_blank">Andrew Beckett&#8217;s abConcatWaveforms function</a> defined and loaded.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2012/02/creating-a-nyquist-plot-with-cadence/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">895</post-id>	</item>
		<item>
		<title>For loops in Cadence</title>
		<link>https://www.circuitdesign.info/blog/2012/01/for-loops-in-cadence/</link>
					<comments>https://www.circuitdesign.info/blog/2012/01/for-loops-in-cadence/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Tue, 10 Jan 2012 11:10:10 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[cadence]]></category>
		<category><![CDATA[for loop]]></category>
		<category><![CDATA[Skill]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=887</guid>

					<description><![CDATA[If one is doing an analysis over a range of variables, one should use the paramAnalysis ocean function. That said, I&#8217;m constantly having to look up how to do a for loop in Skill. So, I&#8217;m placing a couple examples where I know I can get to them. Incrementing index: Run through a list:]]></description>
										<content:encoded><![CDATA[<p>If one is doing an analysis over a range of variables, one should use the paramAnalysis ocean function. That said, I&#8217;m constantly having to look up how to do a for loop in Skill. So, I&#8217;m placing a couple examples where I know I can get to them.</p>
<p><span id="more-887"></span></p>
<p>Incrementing index:<br />
<code><br />
for(i 1 10<br />
  print(i)<br />
)<br />
</code></p>
<p>Run through a list:<br />
<code><br />
myThings = list(1 2 3 4 &#8220;a&#8221; &#8220;B&#8221; &#8220;c&#8221;)<br />
foreach(t myThings<br />
  print(t)<br />
)<br />
</code></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2012/01/for-loops-in-cadence/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">887</post-id>	</item>
		<item>
		<title>Skill File I/O</title>
		<link>https://www.circuitdesign.info/blog/2011/12/skill-file-io/</link>
					<comments>https://www.circuitdesign.info/blog/2011/12/skill-file-io/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Tue, 27 Dec 2011 18:35:28 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[I/O]]></category>
		<category><![CDATA[Skill]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=888</guid>

					<description><![CDATA[I keep having to look up file I/O using Cadence's SKILL language, so I'm putting it here for easy reference]]></description>
										<content:encoded><![CDATA[<p>I keep having to look this up, so I&#8217;m going to put it here for easy reference:</p>
<h3>Open a File</h3>
<p><code><br />
h = outfile("new_file.txt", "w")<br />
h = infile("existing_file.txt")<br />
h = outfile("partial_file.txt", "a")<br />
</code><br />
Opens new file for writing, existing file for reading, and partial file for appending, respectively.</p>
<h3>Write to a file</h3>
<p><code><br />
write("Hello World!\n", h)<br />
fprintf(h, "gm = %f", OP("/M23" "gm"))<br />
print(OP("/M23" "gm"), h)<br />
pprint(OP("/M23" "gm"), h)<br />
</code></p>
<p>Write &#8220;Hello World!&#8221; to a file (newlines are explicit); construct formatted string and write to file; print using native format to a file; pretty-print (useful for nested lists etc) to a file. File handle is h.</p>
<h3>Read from a file</h3>
<p><code><br />
str = lineread(h)<br />
</code>
</p>
<p>Reads a single line as a string</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2011/12/skill-file-io/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">888</post-id>	</item>
		<item>
		<title>Updates to Cadence/Subversion (CDSVN) scripts</title>
		<link>https://www.circuitdesign.info/blog/2010/07/updates-to-cadencesubversion-cdsvn-scripts/</link>
					<comments>https://www.circuitdesign.info/blog/2010/07/updates-to-cadencesubversion-cdsvn-scripts/#comments</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Mon, 26 Jul 2010 04:09:41 +0000</pubDate>
				<category><![CDATA[Analog Professional]]></category>
		<category><![CDATA[cadence]]></category>
		<category><![CDATA[CDS]]></category>
		<category><![CDATA[revision control]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/2010/07/updates-to-cadencesubversion-cdsvn-scripts/</guid>

					<description><![CDATA[Our Brazilian Friends PCS and NGJr have offered the following changes to the CDSVN package: Into the file &#8220;cdsLibMgr.lib&#8221; was created the menu item &#8220;SVN Unlock Cell&#8221; Into the file &#8220;svnLockCell.il&#8221; were created the procedures &#8220;svnUnlockCell&#8221; and &#8220;svnUnlockCellFormCB&#8221; Inside the procedures &#8220;svnUnlockCellFormCB&#8221; and &#8220;svnUnlockCVFormCB&#8221; were made the following changes: where you have: if( !(rexMatchp(&#8220;.*.svn$&#8221;, file~&#62;readPath) [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Our Brazilian Friends PCS and NGJr have offered the following changes to the CDSVN package:</p>
<blockquote>
<ul>
<li>Into the file &#8220;cdsLibMgr.lib&#8221; was created the menu item &#8220;SVN Unlock Cell&#8221;</li>
<li>Into the file &#8220;svnLockCell.il&#8221; were created the procedures &#8220;svnUnlockCell&#8221; and &#8220;svnUnlockCellFormCB&#8221;</li>
<li>Inside the procedures &#8220;svnUnlockCellFormCB&#8221; and &#8220;svnUnlockCVFormCB&#8221; were made the following changes:</li>
</ul>
<ul>
<li>where you have: if( !(rexMatchp(&#8220;.*.svn$&#8221;, file~&gt;readPath) || rexMatchp(&#8220;.*%&#8221;, file~&gt;readPath))</li>
<li>was changed to: if( !(rexMatchp(&#8220;.*.svn$&#8221;, file~&gt;readPath) || rexMatchp(&#8221; &#8220;, file~&gt;readPath))</li>
</ul>
<p>Behaviors observed:</p>
<ul>
<li>We don´t want the files *.cd% under version control, but if for some reason they are under version control that exist the possibility to lock them or unlock them.</li>
<li>Copying a &#8220;cell&#8221; or a &#8220;view&#8221; by &#8220;Library Manager&#8221; doesn´t copy files *.cd% which is not a problem because we don´t want these files under version control.</li>
<li>The command &#8220;[user@host CDSVN]$ svn lock *&#8221; or &#8220;[user@host CDSVN/bin]$ lock directory/&#8221; locks the files *.cd%, however, the &#8220;CDSVN Unlock Cell&#8221; or &#8220;CDSVN Unlock View&#8221; does not unlock.</li>
<li>The &#8220;CDSVN Lock Cell&#8221; or &#8220;CDSVN Lock View&#8221; does not unlock the files *.cd%, however, the commands &#8220;[user@host CDSVN]$ svn unlock *&#8221; or &#8220;[user@host CDSVN/bin]$ unlock directory/&#8221; are able to unlock.</li>
<li>Copying by the command &#8220;[user@host CDSVN]$ svn copy&#8221; copies the files *.cd% only if they are already under version control. The same behavior occurs for &#8220;CDSVN Copy Cell&#8221; or &#8220;CDSVN Copy View&#8221;. This is not a problem.</li>
<li>The command &#8220;[user@host CDSVN]$ svn add&#8221;, &#8220;CDSVN Add Cell&#8221; or &#8220;CDSVN Add View&#8221; does not add files *.cd% even because this type of file is in the list of ignored files as showed below:</li>
</ul>
<p>[user@host /home/user/.subversion] vi config<br />
global-ignores = *.cd% *.cd- *.cdslck *.Cat% *.abstract.status *.abstract.messages *.inca* *inca* .cdsvmod expand.cfg% transcript_ms</p>
<p>[user@host CDSVN/]vi cadence_ignores.txt<br />
*.cd%<br />
*.cd-<br />
*.cdslck<br />
*.Cat%<br />
*.abstract.status<br />
*.abstract.messages<br />
*.inca*<br />
*inca*<br />
&#8230;.cdsvmod<br />
expand.cfg%<br />
transcript_ms</p></blockquote>
<p>Their updated files are attached. Special thanks to PCS for coordinating this. Remember, the CDSVN scripts are licensed under GPL.</p>
<p><a href="https://www.circuitdesign.info/blog/wp-content/uploads/2010/07/cdsLibMgr.il_.txt">cdsLibMgr.il</a><br />
<a href="https://www.circuitdesign.info/blog/wp-content/uploads/2010/07/svnLockCell.il_.txt">svnLockCell.il</a><br />
<a href="../wp-content/uploads/2010/07/cdsLibMgr.il_.txt">cdsLibMgr.il</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2010/07/updates-to-cadencesubversion-cdsvn-scripts/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">873</post-id>	</item>
		<item>
		<title>My other blogs &#038; plans for the future</title>
		<link>https://www.circuitdesign.info/blog/2010/03/my-other-blogs-plans-for-the-future/</link>
					<comments>https://www.circuitdesign.info/blog/2010/03/my-other-blogs-plans-for-the-future/#respond</comments>
		
		<dc:creator><![CDATA[Poojan Wagh]]></dc:creator>
		<pubDate>Tue, 09 Mar 2010 03:35:32 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[housekeeping]]></category>
		<category><![CDATA[plans]]></category>
		<guid isPermaLink="false">https://www.circuitdesign.info/blog/?p=843</guid>

					<description><![CDATA[It used to be that I&#8217;d post just about anything here. However, after a few months of posting circuit design articles, I developed a consistent readership and decided that most of you aren&#8217;t interested in my daily life and/or the tech hobbies that I might be up to. As a result, I separated my personally-centered [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>It used to be that I&#8217;d post just about anything here. However, after a few months of posting circuit design articles, I developed a consistent readership and decided that most of you aren&#8217;t interested in my daily life and/or the tech hobbies that I might be up to. As a result, I separated my personally-centered blogs from this blog.<br />
I just wanted to quickly mention that if anyone is interested, I have two other blogs:<br />
<a href="http://poojanblog.com/blog">Personal Blog</a><br />
<a href="http://tech.poojanblog.com/blog">Tech (software/computer) Blog</a></p>
<p>Also, you&#8217;ll notice that Google Ads are prominently displayed on this blog. I wanted to recoup the hosting costs of running this blog. Unfortunately, that didn&#8217;t end up being as profitable as I thought. So, as soon as I hit $100 of ad revenue (which is the minimum to cash out of my Google AdSense account), I&#8217;ll remove the ads.</p>
<p>Unless I change my mind. Which is unlikely.</p>
<p>Also, I might try out some more social features on the web site. If I get the time. Which is also unlikely.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.circuitdesign.info/blog/2010/03/my-other-blogs-plans-for-the-future/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">843</post-id>	</item>
	</channel>
</rss>
