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")
}

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

2014年10月9日木曜日

Keysight U2723Aの出力コネクタの型番

Keysight U2723Aの出力コネクタを紛失した(これだから男子は!!!!)。マニュアルに記載されていなかったので問い合わせたところ、型番はU2722-80002というらしい。



緑のコネクタと保護キャップの3セットらしい。

なお、型番の問い合わせは以下のリンクから可能。
Find-A-Part: Part Identification Assistance