非同期分周器のVerilogシミュレーションでforce文を使ったのでメモ.
Verilogで特定のノードの値を強制的に指定するために,force文を使う.force文の指定を解除するためには,release文を使う.非同期分周器の場合,分周器の入力に対して強制的に値を指定し,クロック立ち上がりを入力し値をDFFに取り込む.次に,release文を使う事でforce文を解除する.
2017年7月21日金曜日
2017年7月13日木曜日
AnalogArtist のセルをSKILLコマンドでリネームする(ccpRename)
AnalogArtist 中のセルをリネームするには,ccpRenameコマンドを使う.
リネーム前,リネーム後のセルは,gdmSpecオブジェクトを指定する.従って以下の様に組み合わせてやればよい.
mySpecSrc = gdmCreateSpec("lib" "srcCellName" "view" nil "CDBA")
mySpecDst = gdmCreateSpec("lib" "dstCellName" "view" nil "CDBA")
ccpRename(mySpecSrc mySpecDst)
ここで,srcCellName がリネーム前のセルの名,dstCellNameがリネーム後のセル名,view 対応するview(layout/schematic/symbol...)である.
リネーム前,リネーム後のセルは,gdmSpecオブジェクトを指定する.従って以下の様に組み合わせてやればよい.
mySpecSrc = gdmCreateSpec("lib" "srcCellName" "view" nil "CDBA")
mySpecDst = gdmCreateSpec("lib" "dstCellName" "view" nil "CDBA")
ccpRename(mySpecSrc mySpecDst)
ここで,srcCellName がリネーム前のセルの名,dstCellNameがリネーム後のセル名,view 対応するview(layout/schematic/symbol...)である.
2017年4月12日水曜日
Star-RC で電源配線を抽出する(POWER_EXTRACT)
Star-RC で電源配線の抽出を制御するには,POWER_NETSコマンドとPOWER_EXTRACTコマンドを使う.
POWER_NETSコマンドの後ろに,抽出させたくない電源名を記述する.
POWER_NETS: VDD1 VDD2 ...
POWER_EXTRACTコマンドを利用して,電源の抽出の仕方を選ぶ.
POWER_EXTRACT: YES | NO | RONLY | DEVICE_LAYER
YES: 電源配線のRCを抽出
NO(Default): 電源配線のRCを抽出しない.ただし信号配線のRC抽出において電源配線の影響は考慮される.
RONLY: 電源のRのみ抽出し,別のファイルとして出力する.
DEVICE_LAYERS: マッピングファイル中のdevice_layerキーワードに登録された配線層における,RCのみを抽出する.
RONLYオプションをつけた場合,POWER_EXTRACTコマンドを使うことでRの縮約もできる.
POWER_NETSコマンドの後ろに,抽出させたくない電源名を記述する.
POWER_NETS: VDD1 VDD2 ...
POWER_EXTRACTコマンドを利用して,電源の抽出の仕方を選ぶ.
POWER_EXTRACT: YES | NO | RONLY | DEVICE_LAYER
YES: 電源配線のRCを抽出
NO(Default): 電源配線のRCを抽出しない.ただし信号配線のRC抽出において電源配線の影響は考慮される.
RONLY: 電源のRのみ抽出し,別のファイルとして出力する.
DEVICE_LAYERS: マッピングファイル中のdevice_layerキーワードに登録された配線層における,RCのみを抽出する.
RONLYオプションをつけた場合,POWER_EXTRACTコマンドを使うことでRの縮約もできる.
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
(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: 外部からデータセットを読み込む.
伝統的なガウス関数(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
情報処理学会の正会員費を割り引くことができる.
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国内ミラーの使い方
では本家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つしか取ってくれず,かなわなかった.
仕方が無いのでシェル側でマルチスレッドもどきを実装して利用した.
複数のマシンにワーカー割り当てることも可能らしいが,残念ながら試していない.
ライセンスをチェックアウトした後,そのまま保持するために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を作成して編集すればよいのかもしれないが)
${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'として使える.
ちなみに無限も'inf'として使える.
登録:
投稿 (Atom)