2015年6月23日火曜日

AnalogArtist(Virtuoso)のCellViewをSKILLコマンドに変換する(dbWriteSkill)

AnalogArtistで作成したCellView(Layout ViewやSchematic)をSKILLコマンドの変換するには,dbWriteSkillコマンドを使う.

dbWriteSkill(cellViewId filename mode release)

たとえばLIBライブラリのInverterのレイアウトをSKILLコマンドに変換するには,以下の様に実行すればよい.

cellViewID = dbOpenCellViewByType("LIB" "INV_X1" "layout")
dbWriteSkill(cellViewID "INV_X1.il" "w" "4.4")

復元するには,出力したSKILLコマンドをCIWで読めばよい.

load "./INV_X1.il"

ひな形レイアウトをVirtuoso Layout Editingで作成し,SKILLを使ってテキスト形式でダンプ,パラメータをちょこちょこ変えたレイアウトをスクリプトで作って再度ロードするという用途に使える.また,LayoutやSchematicだけでなく,PCellも出力できるようだ.
# ただし,レイヤーがLayerNameではなくてLayer#なので可読性がちょっと低いのが悲しい

なお,出力するSKILLファイルにライブラリ名を入れたくない場合はdbWriteSkillWithLibを使うらしいが,今一使い方がよくわからない.

2015年5月28日木曜日

AnalogArtist(Virtuoso)でコマンドラインからCDL outする.

AnalogArtistのcdsもしくはOAからコマンドラインでCDLを出力させるためには,付属のsiを使う(Simulation Interfaceのことか?).
まず,si.envファイルを以下の様に作成する.このファイルは,GUIでCDL outを行った場合に
自動生成されるそうなので,一回GUIで実行すれば後は使い回す事が出来る.

simLibName = "LIBNAME"
simCellName = "CELLNAME"
simViewName = "schematic"
simSimulator = "auCdl"
simNotIncremental = 't
simReNetlistAll = nil
simViewList = '("auCdl" "auSchematic" "schematic" )
simStopList = '("auCdl")
hnlNetlistFileName = "CDLFILE.cdl"
resistorModel = ""
shortRES = 2000.0
preserveRES = 'nil
checkRESVAL = 'nil
checkRESSIZE = 'nil
preserveCAP = 'nil
checkCAPVAL = 'nil
checkCAPAREA = 'nil
preserveDIO = 'nil
checkDIOAREA = 'nil
checkDIOPERI = 'nil
checkCAPPERI = 'nil
simPrintInhConnAttributes = 'nil
checkScale = "nil"
checkLDD = 'nil
pinMAP = 'nil
shrinkFACTOR = 0.0
globalPowerSig = ""
globalGndSig = ""
displayPININFO = 't
preserveALL = 't
setEQUIV = ""
incFILE = ""
auCdlDefNetlistProc = "ansCdlSubcktCall"


次にsiを以下のコマンドをTerminalに打ち込む事で起動する.

% si -batch -command netlist

siがVirtuoso Framework Licenseを取得し,データベースからCDLを抽出し記載したファイルに書き出す.

なおうちの環境では
*Error* eval: undefined function - _oiSetMasterFieldsEnabled
とエラーが出るが,意図したファイルが出力されている様だ.

2015年5月25日月曜日

TgifからInkscapeに乗り換えるためのメモ

これまで論文の図はTgifを使って描いていたが,出力品質が悪く,特に領域を模様で埋めたりすると変なモアレができる.

そのためInkscape(0.47)に乗り換えたのだが,InkscapeはInkscapeで使いにくいので試行錯誤した結果をメモ.

○ オブジェクトを拡大/縮小すると線幅が変わるのを止める
Inkscapeの設定(Shift-Ctrl-P)の[変形]→[ストローク幅を拡大縮小する]のチェックを外す.

○ 矢印の色を線の色と合わせる
[エクステンション]→[パスの変形]→[マーカーの色をストロークに合わせる]を選択すればよいらしい
# しかし,私の環境ではlibxml2がうまく入らないのでうまく有効化できない…

○ 描画領域の大きいEPSが正確に出力されず切れる
エクスポート領域を描画全体に変えても,キャンパスサイズをA0に変えても切れる.
→EPSではなくPDFにする.PDFをLatexに埋め込むために,extractbbを使って描画領域を取得し,includegraphicsに入力する(本当は.xbbができれば自動取得されるはずなのだが).

以下,Latexに入れるための工夫

(Tgif時代からだが)Latexのfigure環境をはき出すスクリプトを以下の様に作成

use Getopt::Long qw(:config posix_default no_ignore_case gnu_compat);
my $FILE="NULL";
my $SCALE="1";
my $LOC="h";
my $BBFILE="NULL";

GetOptions(
        "file=s"  => \$FILE,
        "scale=i" => \$SCALE,
        "loc=s"   => \$LOC,
        "bbfile=s"  => \$BBFILE
);

open(BBIN, "$BBFILE") || die "cannot open xbb file: $BBFILE, die";
$BBINA =  ;
chomp($BBINA);

$TITLE = $FILE;
$TITLE =~ s/.pdf//g;
$CAPTION = $TITLE;
$CAPTION =~ s/\_/\\\_/g;

print <<EOF;
\\begin{figure}[$LOC]
  \\begin{center}
   \\includegraphics[bb=${BBINA}, scale=${SCALE}]{$FILE}
   \\caption{$CAPTION}
   \\label{fig:$TITLE}
  \\end{center}
\\end{figure}
EOF

本スクリプトを動かすためのMakefile
%.pdf: %.svg
   inkscape $*.svg --export-pdf=$*.pdf --export-area-drawing

%.pdf.figtex: %.pdf
        extractbb -O $*.pdf | grep "HiRes" | cut -d ':' -f 2 > tmp.xbb
        perl ~/programs/figure_template_pdf.pl \
        --file=$*.pdf --scale=1 --loc=h --bbfile=tmp.xbb >> main.tex 
        rm tmp.xbb

2015年3月5日木曜日

とある博士学生の助教公募戦線記録

これまでに出した公募の結果が一段落したのでまとめてみる.

スペック
・大手私立大卒→国立大大学院
・男
・集積回路系.自称CAD屋
・応募時の業績:論文誌2本,国際会議7本,その他
・学振はとれず
・特に大学にこだわりはなく,J-RECINで自分に合いそうな大学を探して応募した.


2013/10 私立大学(母校だった)
・任期付き助教(5年,再任無し)
・研究分野の指定無し
・応募後,6週間ほどでお祈りメール
・同時期に,研究分野を特に指定する公募(任期5年)と,特任助教の公募(任期1年/5年まで延長)もしていた.

2013/10 国立大
・任期付き助教(5年,再任あり)
・研究室の指定あり
・研究内容は自分の研究テーマとマッチせず
・応募後,6週間ほどでお祈りメール

このあたりで焦りだし,積極的に応募するように.

2014/1 私立大
・指導教員からのツテで話が来た
・任期付き助教(5年,再任無し)
・研究分野の指定あり
・研究内容は自分の研究テーマとは少し異なるが,拡張は可能と判断
・受け入れ先とはある程度順調に話は進んでいたが,卒業が無理と判断,辞退した

2014/4 国立大
・任期付き助教(5年,再任あり)
・研究室の指定あり.受け入れ先と相談した結果,自分の研究テーマを拡張すれば良いと判断
・受け入れ先研究室の情報が不十分で,モチベーションが上がらず結局応募せず.

2014/5 国立大
・任期付き助教(5年,再任あり)
・研究分野の指定あり.受け入れ先と相談した結果,すりあわせればokと判断し応募
・応募後,半年(!)かかってようやくお祈りメール

2014/5 国立大
・任期付き助教(5年,再任あり)
・研究分野の指定なし.受け入れ先にもあらかじめ連絡.
・応募後,2週間ほどで面接.
・面接後2週間ほどで内定通知
・同時期に,研究分野指定の任期付き助教の公募もしていた.

もう一つ指導教員のツテで話が来た公募もあったが,こちらは時期があまりにも先だったのでお断りしてしまった.


感想
・任期付き(5年)が多い.私立大は再任不可も多い.文科省がテニュアトラック制度を推進している事と,後者は正規雇用をいやがるためか.指導教員は驚いていたが,任期付きというのは時代の流れだろう.

・研究テーマを指定された場合において,意外と自分の研究テーマ(集積回路)と合う公募は見つけられなかった.多かれ少なかれ研究内容の軌道修正をしないと受け入れ先の希望に添わない.
# 一方で本年度は集積回路系の助教公募が多い気がする…

・私はラボの博士学生としては平均より下だと思っているが,そのためか助教の公募はだいぶ苦戦した.学振DC1/2取れるくらいでないと苦しいだろう.

・私の場合,いわゆる「教授のツテ」というのはそこまで多くはなかったと思う.

・応募時にあらかじめ先方に連絡した方が良いと思った.多くの方に親切にしていただいた(助教だからかも).

・女性だと有利にすると明言する公募は結構ある.女性しか採用しない物もある.

2019/4/6 追記:助教→助教の公募戦線に参戦しました.
とある助教の助教公募戦線記録

2015年2月25日水曜日

gnuplotでパースできない行を飛ばす

CADやプログラムの出力結果をgnuplotでプロットする事はよくある.gnuplotはデータ部がcsvやタブ区切り,空白区切りであればパースできるが,出力結果にCADのバージョンやIndexなどがgnuplotのコメント形式と異なる形式で出力されるとgnuplotはファイルの読み込みをやめてしまう.
たとえばHSPICEであれば,ファイル先頭にHSPICEのバージョンやタイトル,Measureの名前が書かれているのでそのままではgnuplotでは読み込めない.

これを回避するために,パースできない行を見つけたときに読み込みを停止するのではなく,処理を続行させるように変更してみる.

src/plot2d.cを開き,get_data関数内のswitch(j)文中のcase 0を探す.
(4.6.0 patch 0だと669行目)

case 0: /* not blank line, but df_readline couldn't parse it */
{
df_close();
int_error(current_plot->token,
"Bad data on line %d", df_line_number);
}
break;

以下の様にコメントアウトする.


case 0: /* not blank line, but df_readline couldn't parse it */
{
//df_close();
//int_error(current_plot->token,
//"Bad data on line %d", df_line_number);
}
break;



あとは./configure,make,make installすればよい.モチベーションはkamae君と同じ.彼の方が正攻法だと思うが,こちらはgunplotに違反する構文がある行が不明でも対応できる.

IEEEtran.bstで著者名が線になるのを防ぐ


IEEEtran.bstにおいて参考文献リストにおいて同じ著者が連続すると,著者名が"------"と表示されてしまう.不可解な仕様だ.
調べると,著者名が連続する場合にダッシュにしない方法があるらしい.

(1) 論文データベース(.bib)にIEEEtran.bstの制御情報(IEEEtranBSTCTRL)を加える.
連続する著者をダッシュにしないのであれば,CTLdash_repeated_namesをnoにすればよい.

@IEEEtranBSTCTL{IEEEexample:BSTcontrol,
CTLdash_repeated_names = "no"
}

(2) 定義した制御情報を有効にする
定義した制御情報を有効にするコマンドをTEXファイルの本文に追加する(\begin{document}の直後がいいらしい).

\bstctlcite{IEEEexample:BSTcontrol}

(3) bstctlcite コマンドを定義する.
IEEEのクラスファイル(IEEEtrantools.styパッケージなど)を使っていれば必要ない.
その他のクラスファイルを使っている場合,bstctlciteコマンドを定義する.プリアンプル(\begin{document}の前)に書けばよい.
bstctlciteコマンドのソースコードはIEEEtran.bstの冒頭にコメントとして書かれている.

\makeatletter
\def\bstctlcite{\@ifnextchar[{\@bstctlcite}{\@bstctlcite[@auxout]}}
\def\@bstctlcite[#1]#2{\@bsphack
\@for\@citeb:=#2\do{%
\edef\@citeb{\expandafter\@firstofone\@citeb}%
\if@filesw\immediate\write\csname #1\endcsname{\string\citation{\@citeb}}\fi}%
\@esphack}
\makeatother

定義後,コンパイルすると連続する著者もちゃんと表記されるようになった.



参考:
Is it normal for BibTeX to replace similar author names with “------”?
How to Use the IEEEtran BIBTEX Style: IEEEtran.bstのマニュアル(PDF).丁寧に説明されています.

2014年12月15日月曜日

IC CompilerでLeakage Power Aware Filler Insertionを行う

某会議で,Fillerの消費エネルギーが大きいと問題になっている.IC CompilerでFillerを自動で挿入する際に,指定した消費エネルギーの範囲内でFillerの種類を選択させる事が可能である.

insert_stdcell_filler -leakage_power value

valueはFillが消費するリーク電力で,単位はmWである.

2014年12月13日土曜日

difference between HSpiceD, HSpiceS, Spectre, SpectreS?

Analog Design Environment(ADE)を利用している際に,
シミュレータの選択肢が複数あるが,これらの違いがわからないので調べた.

まず,Spiceの種類として大きくCadenceのSpecterとSynopsysのHspiceの2種類がある.
そして,HspiceDとHspiceS(Hspice DirectとHspice Socket),SpecterとSpecterS(Specter DirectとSpecter Socket)が存在する.

過去の経緯として,これらのシミュレータは柔軟に変数化可能な構文をサポートしていなかったため,ADEとシミュレータの間にcdsSpiceというマクロ言語をサポートするツールを挟むことで,ADEでの柔軟なシミュレーションを可能にした.一方でcdsSpiceを挟んでしまうため,ユーザーはシミュレータのサポートするすべての構文を利用できない欠点があった.

その後,各シミュレータが実行可能なネットリストを出力するダイレクトモードをADEはサポートし,その結果より効率よいシミュレーションが可能になったそうだ.



内容は,英語の文献を要約しただけである.
Cadence Technology Forums: difference between HSpice,HSpiceS,Spectre,SpectreS?

2014年11月20日木曜日

HSPICEの乱数生成器を指定する(.option randgen)

HSPICEで乱数を生成する場合において,乱数生成器を指定する事ができる.

.option randgen=value

valueはそれぞれ

0: デフォルト. マニュアルには"traditional random generator"を使うとある.これが何なのかは調べてもわからなかったが,古典的擬似乱数生成法のどれかだろうか.
1: キャリー付き乗算(Multiply-with-Carry)を使う.
moa: 1と同じ

より品質の良い乱数が必要であれば,randgen=1を指定すると良いだろう.

広く商用で利用され,それなりに高精度な解析に使われるのでてっきりメルセンヌツイスタでも使っているのかと思っていた.がっかり.

2014年11月7日金曜日

Rの標準出力への出力をファイルに出力する

最近Rを使っているが,出力の仕方がよくわからない.
あるWikiにはteeを使ってログを書き出すよう指定しているので,面倒なのでファイル名を指定してログファイルを書くようfunctionを書いた.

function R-log () {
        local R_log_name
        if [ $# -eq 0 ]
        then
                R_log_name="R.log"
        else
                R_log_name=$1
        fi
        R | tee $R_log_name
}

shell> R-log "file"

で,Rの出力をteeを使って"file"に書き出す.引数を指定しなければ"R.log"に出力する.


Rは終了時にログを取るか聞いてくるが,この機能もいらない.
そこで問答無用で終了させる関数をブログを参考にして.Rprofileに書き込んだ.
R を終了させる最短コードがおもしろい

Q <- 1="" b="">
class(Q) <- b="" quit="">
print.quit <- b="" function="" x="">
    q("no")
}

これでだいぶ便利になった.
# 調べたらもっとスマートな方法がきちんと用意されている気もする...