2017年3月29日水曜日

IC Compilerで利用する配線層を制約する

IC Compilerにて利用する配線層を制約する手法は2つある.

(1) 特定の配線に対して利用できる配線層を指定するために set_net_routing_layer_constraint コマンドを利用する.

set_net_routing_layer_constraint {net1, net2,... } -min_routing_layer Mx -max_routing_layer My

(2) 全ての配線層に対して利用できる配線層を指定するためには
set_ignored_layer コマンドを利用できる.

set_ignored_layer -min_routing_layer Mx -max_routing_layer My

基本的には両者の動きは同じだと思われるが,うろ覚えだが,icc_vF-2011.09-SP5-1を利用しているときに set_ignored_layer ではうまく配線層の指定が聞かず,仕方なく全てのネットに対して set_net_routing_layer_constraint を利用した形跡がある(バッドノウハウ??).

set_net_routing_layer_constraint {*} -min_routing_layer Mx -max_routing_layer My

なお set_ignored_layer は,-rc_congestion_ignored_layers layer_name オプションをつける事で配線混雑度解析,RC解析において無視すべき配線層を指定する事も出来る.

set_ignored_layer -rc_congestion_ignored_layers layer_name

2017年3月24日金曜日

Traditional and Variation Block Monte Carlo

HSPICEの新しい版(前からあったと思うが少なくともL-2016.06-SP1-1)では,PDKにも依存するがモンテカルロ(Monte Carlo:MC)解析においてVariation-Block(VB)ベースのMC解析が利用できる.
伝統的なガウス関数(AGAUSS)以外にも,MC解析においてサンプリング手法等を変える事が出来る.

・乱数発生器
HSPICEの乱数発生器を以下のオプションで変えられる.なお2016.06から,デフォルトの乱数発生器が3LCからMCGに変更となった.

.option RANDGEN = [3LC|MOA|UVS|MCG|WH]

各アルゴリズムは以下の通り
3LC: 従来通りの乱数発生器
MOA: Multiply-with-carryタイプ
UVS: 64bit universal 乱数発生器
MCG: (Default) 64bit multiplicative(乗法)-乱数発生器
WH: 他のよりサイクル数の長い乱数発生器

・統計情報の出力
過去のMC解析とは異なり,VBベースのMCでは以下の情報も出力される.
- より詳細な統計情報:*.mpp0
- 各サンプルにおける独立変数の値:*.mc0
- 各ランダム変数の貢献度をSynopsys Custom Designerへ反映するための情報ファイル:*.annotate
-  従来のSRS解析のための部分的な情報:*.mpp0

・サンプリング手法の変更
サンプリング手法を以下のオプションで変更できる.

.option SAMPLING_METHOD = [SRS|LHS|Factoral|OFAT|Sobol|Niederreiter|External]

各サンプリング手法の説明は以下の通り.
SRS: (Default) これまでの伝統的な単純なランダムサンプリング
LHS: Latin Hypercube Sampling:多変数の時に効率的(.option REPLICATESと併用)
Factoral: Factoral サンプリング: 回路の応答から最良値-最悪値のレンジを計算する.多項応答曲面を作る.
OFAT: One-Factor-at-a-Timeサンプリング:低次元応答曲面が利用できるような,感度解析が使える領域でつかう.
Sobol: Sobol SamplingでLow-discrepancy sequence(LDS)の一種.
Niederreiter: LDSの一種.
External: 外部からデータセットを読み込む.

2017年1月8日日曜日

情報処理学会の正会員費を割り引く方法

情報処理学会の定める協力協定学会に入会している場合,
情報処理学会の正会員費を割り引くことができる.

IEEE会員なら10%,ACMなら20%割り引かれる.

情報処理学会の正会員費は10800円(2017年から1000円上がった)が,
IEEE会員ならば以前と同じ金額に抑えることができる.

最初の登録時は,IEEEの会員賞をスキャン/写真を撮って指定の
メールアドレスにメールを送ればよい.

https://www.ipsj.or.jp/member/kyoryoku.html

2016年10月15日土曜日

Rのパッケージインストール時にリポジトリを指定する

Cent OS 6 マシンにyumを使ってインストールした R のリポジトリが古い様で,>install.packages("package")
では本家CRANを見に行き,ダウンロードできない.
この場合は有効なリポジトリ(例えばcran.us)を指定すると良い様だ.dplyr と clust パッケージを以下のコマンドでインストールした.
> install.packages("dplyr", repos="http://cran.us.r-project.org/")
> install.packages("mclust", repos="http://cran.us.r-project.org/")

CPANから.tgzをローカルにダウンロードしてインストールすることもできるようだ(試していない).
> install.packages("/path/target.tgz", repos=NULL, type="source")

以下のサイトをそのまま実行した.
http://altons.github.io/r/2013/06/23/when-package-xyz-is-not-available-for-a-specific-version-of-r/

以下のWikiには国内のCRANミラーサイトについて色々書いてある(問題を解決してから見つけた)
http://www.okadajp.org/RWiki/?CRAN国内ミラーの使い方

2016年10月14日金曜日

HSPICE で Advanced Server/Clientモードを使う

HSPICEを利用するときにライセンスをチェックアウトする必要があるが,細かいシミュレーションを多数行う場合はチェックアウト/チェックインのオーバーヘッドが大きい.
ライセンスをチェックアウトした後,そのまま保持するためにServer/Clientモードを利用する.今回はAdvanced Server/Clientモードを利用する事でマルチスレッド動作を実現する(後述するが目論見は外れる).

Advanced Server/Clientモードを利用するに,以下の3つの手順を利用する.

(1) Serverの起動
HSPICEを実行するマシンで以下のコマンドを入力
% hspice -CC -mp -port [num]
-CCで Advanced server/clientモードが起動する(すぐにバックグラウンドに移動する).
-mpでマルチプロセッサによるシミュレーションを可能にする.
-portでportを指定する事で,複数のserverに番号をつける事が出来る.
portを指定しない場合は,デフォルトの25000を使う (標準出力に表示される).

(2) Clientの起動
HSPICEのワーカーを以下のコマンドで起動する.
% hspice -CC [input.sp] -port [server_name:num]

(3) Serverの終了
全てのジョブを終えたら,Serverを殺しておく(デフォルトでは1時間後にタイムアウトする).
% hspice -CC -K -port [server_name:num]

マニュアルには「Advanced server/clientモードはマルチスレッド動作(-mp)をサポートする.」とあるが,私の環境ではライセンスを1つしか取ってくれず,かなわなかった.
仕方が無いのでシェル側でマルチスレッドもどきを実装して利用した.

複数のマシンにワーカー割り当てることも可能らしいが,残念ながら試していない.

2016年9月22日木曜日

XFCE4のパネルを全て消す

XFCE4のパネルを全て消してしまいたいのだが,最後の1枚は消してもログアウトすると復活してしまう.あまり根本的なやり方ではないか,ログインセッションの情報を書き換える事で以下の様に対処した.

${HOME}/.cache/sessions/xfce4-session-{PC_name}:0

を開き,"panel"で検索しマッチした構文を全部削除し,ログアウト.
ログアウトはCtrl-Alt-DelでX11を落としてしまうのが簡単だと思われる(すぐにX11が再起動しログイン画面が出る).

根本的に殺したければ,

/etc/xdg/xfce4/xinitrc

を開き,xfce4-panel を呼び出している箇所をコメントアウトすればよい.が,これは全てのユーザーに効果が波及してしまう気がする…….(${HOME}/.xinitrcを作成して編集すればよいのかもしれないが)

2016年8月27日土曜日

PerlでNaNを使う.

Perlで数値解析をする際,ゼロ除算を適切に扱う必要がある.Perlはv5.6.1以上であればNaNを使える.NaNはどんな演算をしてもNaNとなるが,実数NaN共にゼロ除算ではエラーを吐いて止まってしまう.ゼロ除算時にNaNを発生し伝搬させるためには,分母が0であればNaNとなる様な関数を書いてやればよい(下の例ではsub DivNaN).
ちなみに無限も'inf'として使える.

2016年8月26日金曜日

octaveで関数プロット時に"error: expecting integer index..."と表示されエラーになる

octave では変数や関数を自作する事ができるが,変数と関数に同じ名前をつけることが出来ない.関数を変数で上書きした後に関数を呼び出すと,"error: expecting integer index..."とエラーになる.

octave:1> sin(pi)
ans =  1.2246e-16
octave:2> sin=10
sin =  10
octave:3> sin(pi)
error: expecting integer index, found 3.141593 ← エラーになる
octave:3> clear sin
octave:4> sin(pi)
ans =  1.2246e-16
octave:5> 

はまったのでメモ.

参考リンク.ハンガリー語のスライド.
http://xymarkus.web.elte.hu/Jegyzet/Fiznum_1_ea-10-11_csabai/lecture02.pdf

2016年7月19日火曜日

Panasonic VE-GDS01DL/KX-FKD402 (コードレス電話機)のキー確認音を鳴らさない

仕事場で Panasonic VE-GDS01DL を使っているが,その子機の KX-FKD402 のキープッシュ時の確認音(ピッ,ピッという音)がうるさい.マニュアルの目次には載っていなくて諦めていたのだが,電話機の機能一覧を眺めていたら設定法が書いてあったので記す.

[F1キー]を押し,[#058]を入力し,キー確認音を[ ナシ ]にする.

本当は音量を下げたかったが,大音量で鳴るよりは無音の方が遙かにマシなので助かった.着信音量や受話音量と個別に変えられます.

マニュアルは以下のリンクに.
http://panasonic.jp/fax/p-db/KX-FKD401_manualdl.html

2016年6月9日木曜日

Cadence AnalogArtistにおいてCUIからspiceInを行う

Virtuoso (AnalogArtist) において CDL や SPICE 形式のネットリストを読み込むときに spiceIn を利用する.GUI でも可能だが,大量にある場合は CUI で実行したい.
ここでは,spiceIn を実行する時のパラメータを記述した SKILL ファイルを用意する方法について述べる.

(a) conn2sch parameter file
spiceIn した schematic のオブジェクトの配置やラベルの大きさを制御している様だ.GUI で実行する時は用意する必要がなく,一方で実行後に勝手にできている.(しかし CUI では必要)

% cat schOpts_spiceIn.params                                                              
--  conn2sch parameter file prepared by Spice In:
sheet_symbol := none
page_row_limit := 1024
page_col_limit := 1024
label_height := 10
line_line_spacing := 0.200000
line_component_spacing := 0.500000
density_level := 0
pin_placement := left_and_right_sides

(2) DeviceMap file
ネットリスト中のトランジスタを schematic (正確にはトランジスタライブラリの)のトランジスタに対応させるファイル.これは GUI で実行する時であっても必要.PDK に依存する.
以下は,ネットリスト中のトランジスタ(*mos_net)を schematic のトランジスタ(*mos_sch)にマップしている.

% cat fet_map.spicein_map         
-- Device Mapping file generated from SpiceIn GUI
devSelect := pmos_net pmos_sch
        propMatch := pmos_sch
devSelect := nmos_net nmos_sch
        propMatch := nmos_sch

(3) spiceIn.param file
spiceIn に入力するファイル.

%cat spiceIn.param
piceInParams = list(nil
        'conn2schParamFile "schOpts_spiceIn.params"
        'language       "CDL"
        'netlistFile    "NAND4_4X.cdl"
        'outputLib      "CellLibrary"
        'refLibList     "cmos"
        'outputViewName "schematic"
        'simName        "auCdl"
        'outputSimName  "auCdl"
        'devMapFile     "fet_map.spicein_map"
)

(1)~(3)は,一度 GUI で spiceIn を実行すると生成されるので,保存してテンプレートとして利用するのも手である.

(4) spiceInの実行
Terminal において以下の様に実行すれば,spiceIn が起動する.
%spiceIn -param spiceIn.param

spiceIn は,上記に挙げたパラメータファイルをあらかじめ用意する方法と,引数にオプションとして記述する方法の2つの方法がある.
私の環境では後者は"conn2schParamFile"の場所を指定できず正しく動かない ($HOME/cadence/以下を探しに行く).

また,私の環境だと以下の2つのエラーがでてしまう,が schematic 生成には特に問題はない様だ.
*Error* eval: undefined function - ls
*Error* eval: undefined function - drLoadDrf