愛用している【・・dynabook SS RX2のタッチパッドのコーティングがはがれ,所々滑りが悪くなってきた.元々はさらさらした滑りだったのだが,ツルツルになり滑りが悪い.
この問題を解決するために調べたところ,タッチパッドにテフロンシートを貼ることで滑りを改善する事ができるらしい.
http://www.amazon.co.jp/gp/product/B0056EWK6M/
KAWADAのテフロンシートを買ってみた.Amazonで945円.上記写真では黄色だが,実物はほぼ透明である.剥離すると分厚いシートと薄いシートに分離できるが,薄いシートの方がテフロンシートだと思われる(粘着面があるので).
張り替えた結果だが,指がさらさらしている状態では摩擦も少なく上等だが,汗ばむとツルツルと抵抗を感じるのが残念.ただしコーティング剥げ状態よりは具合はよい.945円で延命ができたと考えれば,上等かと思われる.
結構大きいので,もう一回り小さいものでも良いかもしれない.いずれにせよ,おすすめ.
http://www.amazon.co.jp/KAWADA-TZ13-ハード・テフロンシート-Mini-Z用/dp/B005DJP9TA/ref=pd_sim_sbs_hb_1
2012年12月31日月曜日
2012年11月23日金曜日
Excelの数式を他のExcelブックにそのままコピーする
あるExcelブック(ファイル)内で数式を使っている時に,数式を他のブックに流用したいことありますよね.たとえば
・Book1.xlsのシート1を参照するシート2の数式
をそのまま
・Book2.xlsのシート1を参照するシート2の数式
として使いたい事があります.
しかし,元のExcelブック内の他のシートを参照している場合,単純にコピーするとExcelのブック間リンク機能が有効になってしまいます.
これでは,Book2.xlsのシート1ではなくBook1.xlsのシート1を参照してしまいます.
このようなときは,Excelのワークシート分析を使います.キーボードの[Ctrl+Shift+@]を押すと,シートに書かれている数式がそのまま表示されます.
これをBook2.xlsに貼り付けると…
残念ながらこれでもブック間リンクになってしまいます.
一旦メモ帳に貼り付けると,ようやく意図したとおり,Book2.xlsのシート1を参照するシート2の数式になりました.
Excelブックの数式を他のブックに流用したいときすごく便利ですよ!
参考:教えてGoo 【Excel】数式をそのまま他のシートにコピーする方法
・Book1.xlsのシート1を参照するシート2の数式
をそのまま
・Book2.xlsのシート1を参照するシート2の数式
として使いたい事があります.
しかし,元のExcelブック内の他のシートを参照している場合,単純にコピーするとExcelのブック間リンク機能が有効になってしまいます.
これでは,Book2.xlsのシート1ではなくBook1.xlsのシート1を参照してしまいます.
このようなときは,Excelのワークシート分析を使います.キーボードの[Ctrl+Shift+@]を押すと,シートに書かれている数式がそのまま表示されます.
これをBook2.xlsに貼り付けると…
残念ながらこれでもブック間リンクになってしまいます.
一旦メモ帳に貼り付けると,ようやく意図したとおり,Book2.xlsのシート1を参照するシート2の数式になりました.
Excelブックの数式を他のブックに流用したいときすごく便利ですよ!
参考:教えてGoo 【Excel】数式をそのまま他のシートにコピーする方法
2012年11月13日火曜日
HSPICEでモンテカルロで変動させたパラメータを表示させない(.option mcbrief)
HSPICEでモンテカルロシミュレーションを行うと,シミュレーションの過程で変動させたパラメータが標準出力(.lis)および.MEASUREの出力ファイル(.ma0, .mt0, .ms0等)に出力される.モンテカルロシミュレーションで大量の変数を変動させた場合,見たいパラメータが変動した変数に埋もれてしまう.
モンテカルロシミュレーションの結果をこれらのファイルに出力しないために,MCBRIEFオプションを使う.
.option mcbrief=value
valueは0から3の数字で,それぞれ
0: 変動したパラメータをすべて表示(default)
1: 標準出力(.lis)および.MEASUREの出力に変動したパラメータを表示しない
2: 標準出力のみ変動したパラメータを表示
3: .MEASUREの出力のみ変動したパラメータを表示
である.おすすめはMCBRIEF=1である.
なお余談だが,HSPICEの乱数は種を意図的に変えない限り再現性があるので,何度モンテカルロシミュレーションを行っても同じ結果が得られる.
乱数の種を変えるには,SEEDオプションを使う.
.option SEED="value | random"
valueが指定する乱数の種であり,1から259200の間の値を取る."random"を指定すると,HSPICEはシステムクロックから乱数を生成し,乱数の種とする(再現性が無くなる).
モンテカルロシミュレーションの結果をこれらのファイルに出力しないために,MCBRIEFオプションを使う.
.option mcbrief=value
valueは0から3の数字で,それぞれ
0: 変動したパラメータをすべて表示(default)
1: 標準出力(.lis)および.MEASUREの出力に変動したパラメータを表示しない
2: 標準出力のみ変動したパラメータを表示
3: .MEASUREの出力のみ変動したパラメータを表示
である.おすすめはMCBRIEF=1である.
なお余談だが,HSPICEの乱数は種を意図的に変えない限り再現性があるので,何度モンテカルロシミュレーションを行っても同じ結果が得られる.
乱数の種を変えるには,SEEDオプションを使う.
.option SEED="value | random"
valueが指定する乱数の種であり,1から259200の間の値を取る."random"を指定すると,HSPICEはシステムクロックから乱数を生成し,乱数の種とする(再現性が無くなる).
2012年11月12日月曜日
gnuplotのグラフをPowerPointに貼る
PowerPointでは,gnuplotが出力したepsファイルをOffice描画オブジェクトとして編集することができる.
epsファイルをドラッグアンドドロップでスライドに移動させると,epsがスライドに表示される.この状態で右クリック→[図の編集]を選択すると,以下のようなダイアログが表示される.
ここで[はい]を押すと,Office描画オブジェクトに変換される.任意の回数右クリックし,[グループ化]→[グループ化の解除]を選択すると,以下のように各オブジェクトを個別に操作することが可能になる.
ベクターイメージなので,拡大しても綺麗なままなのがうれしい.A0のポスターに貼り付けたがビットマップイメージと異なり綺麗なまま印刷できた.
昔はepsから外部ツールを使ってemfに変換したり,それではうまくいかないからと泣く泣くpng等に変換して貼っていたが,ドラッグアンドドロップでうまくいくとは気がつかなかった.
epsファイルをドラッグアンドドロップでスライドに移動させると,epsがスライドに表示される.この状態で右クリック→[図の編集]を選択すると,以下のようなダイアログが表示される.
ここで[はい]を押すと,Office描画オブジェクトに変換される.任意の回数右クリックし,[グループ化]→[グループ化の解除]を選択すると,以下のように各オブジェクトを個別に操作することが可能になる.
昔はepsから外部ツールを使ってemfに変換したり,それではうまくいかないからと泣く泣くpng等に変換して貼っていたが,ドラッグアンドドロップでうまくいくとは気がつかなかった.
2012年10月30日火曜日
コマンドの出力結果から空白行を消す
HSPICEの出力結果は,ムダに空白行が多い.わかりにくいので,zshの関数を使って出力結果の空白行を削除してみた.ついでに,"***"から始まる行を消し,.lisに標準出力をリダイレクトするようにしてみた.
# cshなら引数をエイリアスに入れられるが,zshだと関数にしないといけないらしい.
function hspice-func () {
local input_file_name
input_file_name=$1
hspice64 $1 | grep -v -e '^\s*$' | grep -v '\*\*\*' | tee ${1}.lis
}
1つめのgrepで,空白行に該当しなかった行を表示し,2つめのgrepで,***に該当しなかった行を表示させている.他に,grepを駆使しまくれば,いらないメッセージもどんどん消せるだろう.出力結果はなるべくシンプルにしたいものだ.
11/13追記:
grepで"***"を消してしまうと,HSPICEの出す***simulation concluded***というメッセージも消してしまうので,やめた方が良いかも.
# cshなら引数をエイリアスに入れられるが,zshだと関数にしないといけないらしい.
function hspice-func () {
local input_file_name
input_file_name=$1
hspice64 $1 | grep -v -e '^\s*$' | grep -v '\*\*\*' | tee ${1}.lis
}
1つめのgrepで,空白行に該当しなかった行を表示し,2つめのgrepで,***に該当しなかった行を表示させている.他に,grepを駆使しまくれば,いらないメッセージもどんどん消せるだろう.出力結果はなるべくシンプルにしたいものだ.
11/13追記:
grepで"***"を消してしまうと,HSPICEの出す***simulation concluded***というメッセージも消してしまうので,やめた方が良いかも.
2012年10月25日木曜日
GVimのフォントを変える
GVimのフォントを変える際,以下の手順をたどると良い.
(1) GUIで好みのフォントを探す.
(2) 指定したフォントを.vimrcに指定する.
(1) フォントを探す
GVimをひらき,[編集]→[フォント設定]をひらく.するとGUIでフォントを選ぶ画面が出るので,好みのフォントを入れる.
(2) 指定したフォントを.vimrcに指定する.
次に,指定すべきフォントの名前を調べる.現在のフォントの設定は,以下のコマンドで調べることができる.
:set guifont
実行した結果を以下に示す.
(1) GUIで好みのフォントを探す.
(2) 指定したフォントを.vimrcに指定する.
(1) フォントを探す
GVimをひらき,[編集]→[フォント設定]をひらく.するとGUIでフォントを選ぶ画面が出るので,好みのフォントを入れる.
今回は,Osakaフォントの10ptを選ぶ.
(2) 指定したフォントを.vimrcに指定する.
次に,指定すべきフォントの名前を調べる.現在のフォントの設定は,以下のコマンドで調べることができる.
:set guifont
実行した結果を以下に示す.
これを,.vimrcに書けばよい.フォントの名前に全角が入っているが,きちんと認識するようだ.スペースはバックスラッシュ"\"を使ってエスケープする必要がある.
set guifont=Osaka-等幅\ 10
参考にしたサイト
新しくフォントをインストールしてVimエディタから利用する。
vim/任意のフォントを設定する方法
set guifont=Osaka-等幅\ 10
参考にしたサイト
新しくフォントをインストールしてVimエディタから利用する。
vim/任意のフォントを設定する方法
2012年10月23日火曜日
HSPICEの出力桁の制御(.option measdgt/numdgt)
HSPICEは標準出力(.lis)および..MEASUREの出力ファイル(.ma0,.mt0,.ms0等)に測定結果を書き込むが,デフォルトの出力桁は4桁でしかない.出力桁数を変えるには,MEASDGTオプションおよびNUMDGTオプションを使う.
MEASDGTオプションは.MEASUREの出力ファイルへの出力桁数を指定し,NUMDGTオプションは標準出力への出力桁数を指定する.
.option measdgt=value
.option numdgt=value
valueのところに桁数を指定する事で,出力桁を制御する.なお,最大値は10である.
MEASDGTオプションは.MEASUREの出力ファイルへの出力桁数を指定し,NUMDGTオプションは標準出力への出力桁数を指定する.
.option measdgt=value
.option numdgt=value
valueのところに桁数を指定する事で,出力桁を制御する.なお,最大値は10である.
2012年10月19日金曜日
HSPICEのライセンス数を知る
最近のHSPICEは-mpオプション(マルチプロセッサ),-mtオプション(マルチスレッド)等があり,うまく制御できれば計算速度を飛躍的に向上させることができる.一方でこれらの高速化機能を使うとモリモリライセンスを占有してしまう欠点がある.特にVDECのCADを使わせてもらっているところでは,むやみにライセンスを占有すると他の利用者に迷惑になる可能性が高い.
従って,今存在しているFloating License数を知る事ができれば,ある程度並列化しても良い規模を見積もることができる.
HSPICEでシミュレーションを実行すればライセンス数はわかるが,毎回C-cで止めるのはおっくうである.この場合,HSPICEをインタラクティブモードで起動させることで,HSPICEのライセンスを知ることができる.
hspice -I
インタラクティブモードで起動することで,1ライセンスを取り,次の入力待ちとなる.なおquitでHSPICEを終了する.
% hspice -I
lic:
lic: FLEXlm: v10.8
lic: USER: xxxxxxxxxx HOSTNAME: xxxxxxxxxx
lic: HOSTID: xxxxxxxxxx PID: 2426
lic: Using FLEXlm license file:
lic:
lic: Checkout 1 hspice
lic: License/Maintenance for hspice will expire on 01-may-2013/2011.09
lic: 37(in_use)/xxx(total) FLOATING license(s) on SERVER
lic:
Hspice license have checked out
HSPICE >quit
lic: Release hspice token(s)
%
もう少しエレガントにできればいいのだが,まあこれで満足(でもC-cと大して変わらないかも).
従って,今存在しているFloating License数を知る事ができれば,ある程度並列化しても良い規模を見積もることができる.
HSPICEでシミュレーションを実行すればライセンス数はわかるが,毎回C-cで止めるのはおっくうである.この場合,HSPICEをインタラクティブモードで起動させることで,HSPICEのライセンスを知ることができる.
hspice -I
インタラクティブモードで起動することで,1ライセンスを取り,次の入力待ちとなる.なおquitでHSPICEを終了する.
% hspice -I
lic:
lic: FLEXlm: v10.8
lic: USER: xxxxxxxxxx HOSTNAME: xxxxxxxxxx
lic: HOSTID: xxxxxxxxxx PID: 2426
lic: Using FLEXlm license file:
lic:
lic: Checkout 1 hspice
lic: License/Maintenance for hspice will expire on 01-may-2013/2011.09
lic: 37(in_use)/xxx(total) FLOATING license(s) on SERVER
lic:
Hspice license have checked out
HSPICE >quit
lic: Release hspice token(s)
%
もう少しエレガントにできればいいのだが,まあこれで満足(でもC-cと大して変わらないかも).
2012年10月18日木曜日
HSPICEの出力フォーマットを変える(.option measform)
HSPICEの出力結果は,デフォルトで見やすいものではなく,またgnuplotやExcel
等の加工に向かない.
いままではスクリプトを使って加工していたが,実はHSPICEのオプションで制御できる.
.option measform=value
valueは0から3の数字で,それぞれ
0: default
1: スペース区切り
2: HSIM互換
3: csv (.m*は作らない)
となる.
以下に,それぞれのオプションの出力結果を示す.
(1) .option measform=0
% cat nmos_TT.ms0
$DATA1 SOURCE='HSPICE' VERSION='E-2010.12 32-BIT'
.TITLE '*ring oscillator'
index _vdd iload ipower
temper alter#
1 1.000000e-01 3.992798e-10 1.215245e-08
2.500000e+01 1
2 2.000000e-01 5.940276e-09 1.756581e-07
2.500000e+01 1
3 3.000000e-01 7.720563e-08 2.095723e-06
2.500000e+01 1
4 4.000000e-01 7.989804e-07 1.771483e-05
2.500000e+01 1
(2) .option measform=1
% cat nmos_TT.ms0
$DATA1 SOURCE='HSPICE' VERSION='E-2010.12 32-BIT'
$OPTION MEASFORM=1
.TITLE '*ring oscillator'
index _vdd iload ipower temper alter#
1 1.000000e-01 3.992798e-10 1.215245e-08 2.500000e+01 1
2 2.000000e-01 5.940276e-09 1.756581e-07 2.500000e+01 1
3 3.000000e-01 7.720563e-08 2.095723e-06 2.500000e+01 1
4 4.000000e-01 7.989804e-07 1.771483e-05 2.500000e+01 1
(3) .option measform=2
% cat nmos_TT.ms0
$DATA1 SOURCE='HSPICE' VERSION='E-2010.12 32-BIT'
$OPTION MEASFORM=2
.TITLE '*ring oscillator'
index = 1.000000e+00
_vdd = 1.000000e-01
iload = 3.992798e-10
ipower = 1.215245e-08
temper = 2.500000e+01
alter# = 1.000000e+00
index = 2.000000e+00
_vdd = 2.000000e-01
iload = 5.940276e-09
ipower = 1.756581e-07
temper = 2.500000e+01
alter# = 1.000000e+00
index = 3.000000e+00
_vdd = 3.000000e-01
iload = 7.720563e-08
ipower = 2.095723e-06
temper = 2.500000e+01
alter# = 1.000000e+00
index = 4.000000e+00
_vdd = 4.000000e-01
iload = 7.989804e-07
ipower = 1.771483e-05
temper = 2.500000e+01
alter# = 1.000000e+00
(4) .option measform=3
% cat nmos_TT.ms0.csv
$DATA1 SOURCE='HSPICE' VERSION='E-2010.12 32-BIT'
.TITLE '*ring oscillator'
index,_vdd,iload,ipower,temper,alter#
1, 1.000000e-01, 3.992798e-10, 1.215245e-08, 2.500000e+01,1
2, 2.000000e-01, 5.940276e-09, 1.756581e-07, 2.500000e+01,1
3, 3.000000e-01, 7.720563e-08, 2.095723e-06, 2.500000e+01,1
4, 4.000000e-01, 7.989804e-07, 1.771483e-05, 2.500000e+01,1
個人的には,.option measform=1にするのがお薦め.
等の加工に向かない.
いままではスクリプトを使って加工していたが,実はHSPICEのオプションで制御できる.
.option measform=value
valueは0から3の数字で,それぞれ
0: default
1: スペース区切り
2: HSIM互換
3: csv (.m*は作らない)
となる.
以下に,それぞれのオプションの出力結果を示す.
(1) .option measform=0
% cat nmos_TT.ms0
$DATA1 SOURCE='HSPICE' VERSION='E-2010.12 32-BIT'
.TITLE '*ring oscillator'
index _vdd iload ipower
temper alter#
1 1.000000e-01 3.992798e-10 1.215245e-08
2.500000e+01 1
2 2.000000e-01 5.940276e-09 1.756581e-07
2.500000e+01 1
3 3.000000e-01 7.720563e-08 2.095723e-06
2.500000e+01 1
4 4.000000e-01 7.989804e-07 1.771483e-05
2.500000e+01 1
(2) .option measform=1
% cat nmos_TT.ms0
$DATA1 SOURCE='HSPICE' VERSION='E-2010.12 32-BIT'
$OPTION MEASFORM=1
.TITLE '*ring oscillator'
index _vdd iload ipower temper alter#
1 1.000000e-01 3.992798e-10 1.215245e-08 2.500000e+01 1
2 2.000000e-01 5.940276e-09 1.756581e-07 2.500000e+01 1
3 3.000000e-01 7.720563e-08 2.095723e-06 2.500000e+01 1
4 4.000000e-01 7.989804e-07 1.771483e-05 2.500000e+01 1
(3) .option measform=2
% cat nmos_TT.ms0
$DATA1 SOURCE='HSPICE' VERSION='E-2010.12 32-BIT'
$OPTION MEASFORM=2
.TITLE '*ring oscillator'
index = 1.000000e+00
_vdd = 1.000000e-01
iload = 3.992798e-10
ipower = 1.215245e-08
temper = 2.500000e+01
alter# = 1.000000e+00
index = 2.000000e+00
_vdd = 2.000000e-01
iload = 5.940276e-09
ipower = 1.756581e-07
temper = 2.500000e+01
alter# = 1.000000e+00
index = 3.000000e+00
_vdd = 3.000000e-01
iload = 7.720563e-08
ipower = 2.095723e-06
temper = 2.500000e+01
alter# = 1.000000e+00
index = 4.000000e+00
_vdd = 4.000000e-01
iload = 7.989804e-07
ipower = 1.771483e-05
temper = 2.500000e+01
alter# = 1.000000e+00
(4) .option measform=3
% cat nmos_TT.ms0.csv
$DATA1 SOURCE='HSPICE' VERSION='E-2010.12 32-BIT'
.TITLE '*ring oscillator'
index,_vdd,iload,ipower,temper,alter#
1, 1.000000e-01, 3.992798e-10, 1.215245e-08, 2.500000e+01,1
2, 2.000000e-01, 5.940276e-09, 1.756581e-07, 2.500000e+01,1
3, 3.000000e-01, 7.720563e-08, 2.095723e-06, 2.500000e+01,1
4, 4.000000e-01, 7.989804e-07, 1.771483e-05, 2.500000e+01,1
個人的には,.option measform=1にするのがお薦め.
2012年7月8日日曜日
dynabook SS RX2のCPUファンを換装する
dynabook RX2 TJ140Hを買って3年.今年の冬にHDDを投げ捨ててSSDにしたこともあり快適なのだが,古いSSD(Kingston V100S2/256GB)が理由なのか妙に熱い.
最近はWindowsMediaPlayerで音楽聞きながら書類書きという軽作業でもCPUが100%に張り付き,温度は65度に張り付き,動作がのろのろと遅くなる.またキーボードもパームレストもあっちっちで.CPUから廃熱もすっごく熱い空気がちょろちょろとしか出てこない.CPUファンがダメになってしまったようだ.
そこで,出張ついでにCPUファンを買ってきた.お店はもちろん,東芝ファンの聖地,信頼とサービスのチチブデンキである.「dynabook SS RX2用のCPUファンありますか?」と聞いたら0.1ぐらいのディレイで出てきて笑ってしまった.それだけみんな買い換えているのだろうか.
1個3150円です.念のため2個買っておいた.
買ったブツ.GDM61000413という部品らしい.
帰宅し,さっそく愛機を解体して,CUPファンを取り出す.
こいつがCPUファン.
買ったもの.
取り外したもの.型番は同じだけれど,スタンプされた記号も,シールのフォントも異なる.ロットが異なるのだろう.
CPUに着いている硬化したグリスを拭き取り,新たにグリスを塗り,新しいファンに交換.電源を入れると
「ブオン!」
とファンの音が.そういえばこいつ,起動時にファンが一瞬全力で動作するんだっけ.完全に忘れていたwww
ファンを交換したことで,負荷をかけても媒体が熱くなることもなく,動作もサクサクである.おそらく以前はCPUの温度が制限値に達したためにNOPをボンボン入れてたので遅くなっていたのだろう.ファンの横に位置するSSDの温度も下がった!RX2は,あと10年は戦える!
あなたの愛機,CPUファンはちゃんと動いていますか?
最近はWindowsMediaPlayerで音楽聞きながら書類書きという軽作業でもCPUが100%に張り付き,温度は65度に張り付き,動作がのろのろと遅くなる.またキーボードもパームレストもあっちっちで.CPUから廃熱もすっごく熱い空気がちょろちょろとしか出てこない.CPUファンがダメになってしまったようだ.
そこで,出張ついでにCPUファンを買ってきた.お店はもちろん,東芝ファンの聖地,信頼とサービスのチチブデンキである.「dynabook SS RX2用のCPUファンありますか?」と聞いたら0.1ぐらいのディレイで出てきて笑ってしまった.それだけみんな買い換えているのだろうか.
1個3150円です.念のため2個買っておいた.
買ったブツ.GDM61000413という部品らしい.
帰宅し,さっそく愛機を解体して,CUPファンを取り出す.
こいつがCPUファン.
買ったもの.
取り外したもの.型番は同じだけれど,スタンプされた記号も,シールのフォントも異なる.ロットが異なるのだろう.
CPUに着いている硬化したグリスを拭き取り,新たにグリスを塗り,新しいファンに交換.電源を入れると
「ブオン!」
とファンの音が.そういえばこいつ,起動時にファンが一瞬全力で動作するんだっけ.完全に忘れていたwww
ファンを交換したことで,負荷をかけても媒体が熱くなることもなく,動作もサクサクである.おそらく以前はCPUの温度が制限値に達したためにNOPをボンボン入れてたので遅くなっていたのだろう.ファンの横に位置するSSDの温度も下がった!RX2は,あと10年は戦える!
あなたの愛機,CPUファンはちゃんと動いていますか?
2012年5月24日木曜日
gnuplotのプロット結果をzsh関数を使ってファイルに書き出す
測定結果をgnuplotでプロットする事が多いと思いますが,あとで微修正しようとして「ああ,どういう条件でプロットしたか忘れた!」と言うこと,よくありますよね.私は一つの図に対して一つのgnuplotのコマンドファイルを用意するようにしているのですが,saveコマンドでは余計な変数定義が大量に挿入されること,replotがすべてplotに結合されてしまう事から,
(1) gnuplotに打ち込んだコマンドをヤンク
↓
(2) テキストエディタにコピー
↓
(3) gnuplotのターミナル等を手動で消す
という作業をしていました.
zed等を使っていたのですが,もっと効率的に作業できないかと思い,zshの関数zed-plt()を作ったので公開してみる.~/.zshrcに書き込むだけ!
function zed-plt () {
local zed_file_name
zed_file_name=$1
echo "usage: C-xC-w:save C-c:cancel"
zed $zed_file_name
if [[ -f $zed_file_name ]] then
sed -e "s/gnuplot> //g;/Terminal type set to/D;/Options are/D" $zed_file_name > tmpfile.plt
mv tmpfile.plt $zed_file_name
fi
return 0
}
使い方は
% zed-plt "filename.plt"
でまずzedが開くので,ここにgnuplotに打ち込んだコマンドをコピー&ペースト
その後C-x,C-wでzedをセーブすると,sedで不要な文字列を削除という流れ.
% zed-plt hoge.plt
usage: C-xC-w:save C-c:cancel
gnuplot> plot "Sec4-VCCS-Current.txt" w lp
gnuplot> set yrange [0:200]
gnuplot> set size 0.7,0.7
gnuplot> replot
gnuplot> set terminal tgif 24
Terminal type set to 'tgif'
Options are 'portrait [1,1] color linewidth 1.000000 dashed "Helvetica" 24'
gnuplot> set output "Sec4-VCCS-Current.obj"
gnuplot> replot
gnuplot> exit
% cat hoge.plt
plot "Sec4-VCCS-Current.txt" w lp
set yrange [0:200]
set size 0.7,0.7
replot
set terminal tgif 24
set output "Sec4-VCCS-Current.obj"
replot
exit
お手軽にコマンドをセーブできるようになって上機嫌!
(1) gnuplotに打ち込んだコマンドをヤンク
↓
(2) テキストエディタにコピー
↓
(3) gnuplotのターミナル等を手動で消す
という作業をしていました.
zed等を使っていたのですが,もっと効率的に作業できないかと思い,zshの関数zed-plt()を作ったので公開してみる.~/.zshrcに書き込むだけ!
function zed-plt () {
local zed_file_name
zed_file_name=$1
echo "usage: C-xC-w:save C-c:cancel"
zed $zed_file_name
if [[ -f $zed_file_name ]] then
sed -e "s/gnuplot> //g;/Terminal type set to/D;/Options are/D" $zed_file_name > tmpfile.plt
mv tmpfile.plt $zed_file_name
fi
return 0
}
使い方は
% zed-plt "filename.plt"
でまずzedが開くので,ここにgnuplotに打ち込んだコマンドをコピー&ペースト
その後C-x,C-wでzedをセーブすると,sedで不要な文字列を削除という流れ.
% zed-plt hoge.plt
usage: C-xC-w:save C-c:cancel
gnuplot> plot "Sec4-VCCS-Current.txt" w lp
gnuplot> set yrange [0:200]
gnuplot> set size 0.7,0.7
gnuplot> replot
gnuplot> set terminal tgif 24
Terminal type set to 'tgif'
Options are 'portrait [1,1] color linewidth 1.000000 dashed "Helvetica" 24'
gnuplot> set output "Sec4-VCCS-Current.obj"
gnuplot> replot
gnuplot> exit
% cat hoge.plt
plot "Sec4-VCCS-Current.txt" w lp
set yrange [0:200]
set size 0.7,0.7
replot
set terminal tgif 24
set output "Sec4-VCCS-Current.obj"
replot
exit
お手軽にコマンドをセーブできるようになって上機嫌!
2012年4月19日木曜日
AnalogArtistでレイヤの表示/非表示を一発で切り替える.
研究が進まない時に限って,研究以外の仕事に手が向いてしまう.
AnalogArtistでレイアウトを書いていると,LSWで頻繁にレイヤの表示/非表示を切り替える必要がある.
近年のプロセスは配線層が多層なので,たとえば12層配線あるとメタルとVIAを消すのに23回もクリックしないといけない.これはあまりに非生産的.
これを解決するために,簡単なプログラムを書いてみた.
図を見れば一発でわかると思うが,念のため説明すると上から順に
[1] 全レイヤーの非表示
[2] Diffusion,Poly,I.I+,コンタクト,M1の表示
[3] M1からM3まで表示
[4] M4からM6まで表示
[5] Semi-Global1からSemi-Global3まで表示
[6] Global1からGlobal2まで表示
[7] コメントレイヤの表示(未実装)
[8] 全レイヤーの表示
である.
プログラムは以下の通りである.単にleSetLayerVisibleコマンドでレイヤの表示/非表示を切り替えているだけである.
;; ;; layerselect.il 2012/04/19 ;; ;; version: 0.1 ;; ;; Description: ;; (1) adds "VisibleLayer" menu in toolbar of Layout and Layout-XL ;; (2) set some shortcut keys to change the visibility of design layers. ;; [1] ALL Inisible ;; [2] Diff-Poly-M1 Visible ;; [3] M1-M3 Visible ;; [4] M4-M6 Visible ;; [5] SG1-SG3 Visible ;; [6] G1-G2 Visible ;; [7] ALL Comments Visible (not implemented) ;; [8] ALL Visible ;; ;; Usage: ;; [.cdsinit] ;; (load "layerselect.il") ;; (deRegUserTriggers "schematic" nil nil 'LayerAddMenusTrigger) ;; (deRegUserTriggers "maskLayout" nil nil 'LayerAddMenusTrigger) ;; (deRegUserTriggers "maskLayoutXL" nil 'nil LayerAddMenusTrigger) (procedure LayerCreatePullDownMenu() (let (item001 item002 item003 item004 item005 item006 item007 item008 menuItems) item001 = (hiCreateMenuItem ?name 'item001 ?itemText "ALL Invisible" ?callback "setLayerVisible( 1 )" ) item002 = (hiCreateMenuItem ?name 'item002 ?itemText "Diff-Poly-M1 Visible" ?callback "setLayerVisible( 2 )" ) item003 = (hiCreateMenuItem ?name 'item003 ?itemText "M1-M3 Visible" ?callback "setLayerVisible( 3 )" ) item004 = (hiCreateMenuItem ?name 'item004 ?itemText "M4-M6 Visible" ?callback "setLayerVisible( 4 )" ) item005 = (hiCreateMenuItem ?name 'item005 ?itemText "SG1-SG3 Visible" ?callback "setLayerVisible( 5 )" ) item006 = (hiCreateMenuItem ?name 'item006 ?itemText "G1-PM1 Visible" ?callback "setLayerVisible( 6 )" ) item007 = (hiCreateMenuItem ?name 'item007 ?itemText "ALL Comments Visible" ?callback "setLayerVisible( 7 )" ) item008 = (hiCreateMenuItem ?name 'item008 ?itemText "ALL Visible" ?callback "setLayerVisible( 8 )" ) menuItems = (list item001 item002 item003 item004 item005 item006 item007 item008 ) (hiCreatePulldownMenu 'trLayerPulldownMenu ; menu handle "VisibleLayer" ; menu title menuItems ) ) ; end let ) ; end procedure createLayerPullDownMenu ;;========================================== ;; ;;========================================== (procedure LayerAddMenus() (let (newMenu) newMenu = (LayerCreatePullDownMenu ) (hiInsertBannerMenu getCurrentWindow() 'newMenu hiGetNumMenus(getCurrentWindow()) ) ) ; let ) ; procedure ;;========================================== ;; ;;========================================== (procedure LayerAddMenusTrigger(args) (let (newMenu) newMenu = ( LayerAddMenus ) (list newMenu) ) ) ;;========================================== ;;========================================== (procedure setLayerVisible(value) (let (winID) (case value (1 leSetAllLayerVisible( nil ) ) (2 leSetLayerVisible(list("df" "sd") t ) leSetLayerVisible(list("pii" "sd") t ) leSetLayerVisible(list("nii" "sd") t ) leSetLayerVisible(list("ndii" "sd") t ) leSetLayerVisible(list("p" "sd") t ) leSetLayerVisible(list("vaa" "sd") t ) leSetLayerVisible(list("maa" "sd") t ) ) (3 leSetLayerVisible(list("maa" "sd") t ) leSetLayerVisible(list("vab" "sd") t ) leSetLayerVisible(list("mab" "sd") t ) leSetLayerVisible(list("vac" "sd") t ) leSetLayerVisible(list("mac" "sd") t ) ) (4 leSetLayerVisible(list("vad" "sd") t ) leSetLayerVisible(list("mad" "sd") t ) leSetLayerVisible(list("vae" "sd") t ) leSetLayerVisible(list("mae" "sd") t ) leSetLayerVisible(list("vaf" "sd") t ) leSetLayerVisible(list("maf" "sd") t ) ) (5 leSetLayerVisible(list("vba" "sd") t ) leSetLayerVisible(list("mba" "sd") t ) leSetLayerVisible(list("vbb" "sd") t ) leSetLayerVisible(list("mbb" "sd") t ) leSetLayerVisible(list("vbc" "sd") t ) leSetLayerVisible(list("mbc" "sd") t ) ) (6 leSetLayerVisible(list("vca" "sd") t ) leSetLayerVisible(list("mca" "sd") t ) leSetLayerVisible(list("vcb" "sd") t ) leSetLayerVisible(list("mcb" "sd") t ) ) (8 leSetAllLayerVisible( t ) ) ); case ); let ); procedure setLayerVisible ;;========================================== ;;==========================================「どこかで見覚えがあるぞ」と思った方はご明察.元ネタは吉原研Wikiのグリッド変更SKILLである.このSKILL自体もバグがあるので,修正する必要がある. 吉原研のWikiは必読である.大変勉強になる.ただし「NDA的に大丈夫なのかしら」と思ってしまう事も事実だが... NDAを恐れない吉原研のアグレッシブさに負けないように,本Blogも積極的に技術情報を提示できるよう頑張りたいものである.
2012年2月21日火曜日
配線負荷モデル
配線負荷モデルってなんですの?ということで調べてみた.
配線負荷モデル(Wire Loading Model)とは,DesignCompiler等で論理合成する際に,ゲート間の配線に寄生する容量,抵抗等を論理合成ツールに考慮させるためのパラメータである.
実際の回路ではゲート内のRC以外にも,ゲート間の配線に寄生する容量(C)や抵抗(R)が存在する.これらのパラメータは配線長,およびファンアウト(次段につながるゲート数)に依存して変動する.
一方論理合成する際は正確な配線長はわからない.正確な寄生容量/抵抗を知るためにはレイアウトを行う必要がある.そのため過去に設計したレイアウトから回路の面積やファンアウトに対する寄生容量/抵抗の値を統計的に抽出し,この統計情報を利用して論理合成した回路内の配線の寄生容量/抵抗を考慮する.
セルのキャラクタライズを行った後のデータベース(.lib)がファブから提供されている場合,配線負荷モデルの値は.libファイルに書かれている.配線負荷モデルの一例を挙げると以下のようになる.
wire_load hoge_area200 {
resistance : 0 ;
capacitance : 1 ;
area : 0 ;
slope : 10e-10;
fanout_length: 1.0 10e-4 ;
fanout_length: 2.0 20e-4 ;
fanout_length: 4.0 40e-4 ;
}
"hoge_area200"は配線負荷モデルの名前を示す.後述するが配線負荷モデルは回路面積(想定される配線長)に応じて使い分けることができる.
"area"は配線が占める面積,"capacitance"は単位配線長あたりの容量,"resistance"は単位配線長あたりの抵抗,"slope"はファンアウト数あたりの波形の傾きである.fanout_lengthはファンアウト数に対する配線資源を示す.
配線負荷モデルの選択は
wire_load_selection Libname {
wire_load_from_area : 0.00 200 hoge_area200 ;
wire_load_from_area : 200.50 400 hoge_area400 ;
wire_load_from_area : 400.50 800 hoge_area800 ;
}
の様にかける.ここで"wire_load_selection"内の"wire_load_from_area"の値,つまり回路面積に応じて対応する"wire_load"に分岐する事ができる.
今回は回路面積に対する配線負荷モデルを示したが,たとえば消費電力の最悪値を見積もるために,別の配線負荷モデルを使い分ける事もできるようだ.
配線負荷モデル(Wire Loading Model)とは,DesignCompiler等で論理合成する際に,ゲート間の配線に寄生する容量,抵抗等を論理合成ツールに考慮させるためのパラメータである.
実際の回路ではゲート内のRC以外にも,ゲート間の配線に寄生する容量(C)や抵抗(R)が存在する.これらのパラメータは配線長,およびファンアウト(次段につながるゲート数)に依存して変動する.
一方論理合成する際は正確な配線長はわからない.正確な寄生容量/抵抗を知るためにはレイアウトを行う必要がある.そのため過去に設計したレイアウトから回路の面積やファンアウトに対する寄生容量/抵抗の値を統計的に抽出し,この統計情報を利用して論理合成した回路内の配線の寄生容量/抵抗を考慮する.
セルのキャラクタライズを行った後のデータベース(.lib)がファブから提供されている場合,配線負荷モデルの値は.libファイルに書かれている.配線負荷モデルの一例を挙げると以下のようになる.
wire_load hoge_area200 {
resistance : 0 ;
capacitance : 1 ;
area : 0 ;
slope : 10e-10;
fanout_length: 1.0 10e-4 ;
fanout_length: 2.0 20e-4 ;
fanout_length: 4.0 40e-4 ;
}
"hoge_area200"は配線負荷モデルの名前を示す.後述するが配線負荷モデルは回路面積(想定される配線長)に応じて使い分けることができる.
"area"は配線が占める面積,"capacitance"は単位配線長あたりの容量,"resistance"は単位配線長あたりの抵抗,"slope"はファンアウト数あたりの波形の傾きである.fanout_lengthはファンアウト数に対する配線資源を示す.
配線負荷モデルの選択は
wire_load_selection Libname {
wire_load_from_area : 0.00 200 hoge_area200 ;
wire_load_from_area : 200.50 400 hoge_area400 ;
wire_load_from_area : 400.50 800 hoge_area800 ;
}
の様にかける.ここで"wire_load_selection"内の"wire_load_from_area"の値,つまり回路面積に応じて対応する"wire_load"に分岐する事ができる.
今回は回路面積に対する配線負荷モデルを示したが,たとえば消費電力の最悪値を見積もるために,別の配線負荷モデルを使い分ける事もできるようだ.