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