Perlで数値解析をする際,ゼロ除算を適切に扱う必要がある.Perlはv5.6.1以上であればNaNを使える.NaNはどんな演算をしてもNaNとなるが,実数NaN共にゼロ除算ではエラーを吐いて止まってしまう.ゼロ除算時にNaNを発生し伝搬させるためには,分母が0であればNaNとなる様な関数を書いてやればよい(下の例ではsub DivNaN).
ちなみに無限も'inf'として使える.
2016年8月27日土曜日
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
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
[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
ここでは,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
シェルスクリプト変数のsedへの展開
シェル(およびスクリプト)でsedコマンドを呼び出す時の作法をまとめる (ハマったので).
(a) 変数を展開せずにそのまま渡す場合→シングルクオート(')で囲む
sed -i 's/one/$two/g' target.txt
(b) 変数を展開して渡す→ダブルクオート(")で囲む
sed -i "s/out/$two/g" target.txt
上記ははよく知られているが,変数がディレクトリの場合,展開されてしまうと展開された文字列中のスラッシュ(/)にsedが反応してしまい,意図通りに置換できない.こういう場合は区切り文字を変えるとうまく動く.
sed -i "s;path;$HOME;g" target.txt
(a) 変数を展開せずにそのまま渡す場合→シングルクオート(')で囲む
sed -i 's/one/$two/g' target.txt
(b) 変数を展開して渡す→ダブルクオート(")で囲む
sed -i "s/out/$two/g" target.txt
上記ははよく知られているが,変数がディレクトリの場合,展開されてしまうと展開された文字列中のスラッシュ(/)にsedが反応してしまい,意図通りに置換できない.こういう場合は区切り文字を変えるとうまく動く.
sed -i "s;path;$HOME;g" target.txt
2016年4月21日木曜日
Visual Studioでビルド時に実行ファイルを作成できない(Application Experienceを有効にする)
Visual Studioでプログラムをプログラムをビルド時に,
fatal error LNK1168: ファイル C:***\Debug\***.exe を開いて書きこむことができません
と表示されてビルドが出来ない.
Debugディレクトリを消しても同じエラーで.exeは生成できず,またしばらく放置するとビルドできるという謎現象だった.再現性が微妙で困っていたが,最終的にはサービスApplication Experienceを無効にしていたのが原因だとわかった.サービスを「手動」にする事で解決した.
ビルド時の不明なファイルオープンエラー - Miscrosoft Developer Network
Application Experienceで調べてみるともう少し詳細に調べている人がいた.アプリケーション終了後の終了処理のタイムアウトに絡んでいるのか.だから少し待つとビルドが出来たのか.
Windows 7でファイルが消せない話
fatal error LNK1168: ファイル C:***\Debug\***.exe を開いて書きこむことができません
と表示されてビルドが出来ない.
Debugディレクトリを消しても同じエラーで.exeは生成できず,またしばらく放置するとビルドできるという謎現象だった.再現性が微妙で困っていたが,最終的にはサービスApplication Experienceを無効にしていたのが原因だとわかった.サービスを「手動」にする事で解決した.
ビルド時の不明なファイルオープンエラー - Miscrosoft Developer Network
Application Experienceで調べてみるともう少し詳細に調べている人がいた.アプリケーション終了後の終了処理のタイムアウトに絡んでいるのか.だから少し待つとビルドが出来たのか.
Windows 7でファイルが消せない話
2016年1月26日火曜日
JCB CARD Extageをコストをかけず解約する
JCB CARD Extageは,年会費は無料だが有効期限(5年)以内に解約するとカード発行手数料として2000円+税がかかる.
5年間持ち続ければ発行手数料は請求されないが,5年を過ぎるとJCB一般カードに更新されてしまい,JCB一般カードの年会費として1250円かかる.
コストを抑えてJCB CARD Extageを解約する方法をコールセンターに聞いたところ,JCB CARD Extageの更新月を挟んだ3ヶ月内に解約をすれば,JCB CARD Extageの発行手数料もJCB一般カードの年会費もかからず解約できるそうだ.
JCB CARD Extageは,海外利用(これはAmazon.co.jp等も含まれる)のポイントが~1.25%だったり旅行保険の利用付帯などが魅力的だが,国内だとポイント0.5%~0.75%なので使い所がちょっと難しい感じ.
5年間持ち続ければ発行手数料は請求されないが,5年を過ぎるとJCB一般カードに更新されてしまい,JCB一般カードの年会費として1250円かかる.
コストを抑えてJCB CARD Extageを解約する方法をコールセンターに聞いたところ,JCB CARD Extageの更新月を挟んだ3ヶ月内に解約をすれば,JCB CARD Extageの発行手数料もJCB一般カードの年会費もかからず解約できるそうだ.
JCB CARD Extageは,海外利用(これはAmazon.co.jp等も含まれる)のポイントが~1.25%だったり旅行保険の利用付帯などが魅力的だが,国内だとポイント0.5%~0.75%なので使い所がちょっと難しい感じ.
2015年12月16日水曜日
Transmeta の LongRun2 における「面積コストの無い基板バイアス手法」の達成方法
ちょっと気になって(今は無き) Transmeta の LongRun2 について調べた.(あまりプロセスのことはよくわかっていないので,間違っていたら指摘いただけると助かります.)
「面積コスト無く」「レイアウト再設計もなく」基板バイスを可能にするという話だったが(参考リンク,これはSpring Processor Forum 2006 での講演資料の引用と思われる),おそらく US Patent 7098512 B1 のDeep NW (DNW) を基板内にメッシュで埋め込むというやつだろうな.
https://www.google.com/patents/US7098512
図は Google Patent からの引用です.
Twin-Well だと Nwell が浮くし,Triple-Well だと Pwell が浮いてしまう.基板バイアスをかけるためには基板 TAP を打ち各基板 TAP に電源配線を引く必要があるが,これは面積コストを増大させる.DNW メッシュにすることでP基板による低抵抗な Pwell の保持と,DNW 配線による Nwell へのバイアス印加を両立する,という感じか.最終的に DNW には基板 TAP を打つ必要があるとしても, Well ほどこまめに基板 TAP を打たなくていいので面積効率も高い.マクロレベルでメッシュを追加すればよいのでレイアウト再設計も必要ないと言うことか.
Well の抵抗高いから頑張って金属(もしくはシリサイド)で配線しているわけで,プロセスが許すなら賢い技だと思った (許される製造プロセスを見たことがないので,工場にお願いするのだろう). PMOS しかバイアスかけられないのが少し悲しいのと,Well Proximity Effect でトランジスタの閾値電圧が場所ごとにばらつきそうだけれど,大丈夫なのだろうか.
「面積コスト無く」「レイアウト再設計もなく」基板バイスを可能にするという話だったが(参考リンク,これはSpring Processor Forum 2006 での講演資料の引用と思われる),おそらく US Patent 7098512 B1 のDeep NW (DNW) を基板内にメッシュで埋め込むというやつだろうな.
https://www.google.com/patents/US7098512
図は Google Patent からの引用です.
Twin-Well だと Nwell が浮くし,Triple-Well だと Pwell が浮いてしまう.基板バイアスをかけるためには基板 TAP を打ち各基板 TAP に電源配線を引く必要があるが,これは面積コストを増大させる.DNW メッシュにすることでP基板による低抵抗な Pwell の保持と,DNW 配線による Nwell へのバイアス印加を両立する,という感じか.最終的に DNW には基板 TAP を打つ必要があるとしても, Well ほどこまめに基板 TAP を打たなくていいので面積効率も高い.マクロレベルでメッシュを追加すればよいのでレイアウト再設計も必要ないと言うことか.
Well の抵抗高いから頑張って金属(もしくはシリサイド)で配線しているわけで,プロセスが許すなら賢い技だと思った (許される製造プロセスを見たことがないので,工場にお願いするのだろう). PMOS しかバイアスかけられないのが少し悲しいのと,Well Proximity Effect でトランジスタの閾値電圧が場所ごとにばらつきそうだけれど,大丈夫なのだろうか.
2015年11月27日金曜日
AnalogArtist(IC61)でLayout Editorのメニューが消える
久々にIC61を起動すると,以下の図のようにメニューが消えてしまっていた.
調べると,環境変数$ASSURAHOMEの設定がおかしいとこのように消えるらしい.
$ASSURAHOMEがIC51用のAssuraのインストールディレクトリを指していたので,IC61用のAssuraのインストールディレクトリを指定したところ,以下の図のように直った.
IC51とIC61で異なるAssuraを指定しなくてはいけない所が,Cadenceの駄目なところだと思う.せめてAssuraIC61とか名前を変えてほしい.
参考:Layout missing menu bar items - Cadence Technology Forums - Cadence Community
調べると,環境変数$ASSURAHOMEの設定がおかしいとこのように消えるらしい.
$ASSURAHOMEがIC51用のAssuraのインストールディレクトリを指していたので,IC61用のAssuraのインストールディレクトリを指定したところ,以下の図のように直った.
IC51とIC61で異なるAssuraを指定しなくてはいけない所が,Cadenceの駄目なところだと思う.せめてAssuraIC61とか名前を変えてほしい.
参考:Layout missing menu bar items - Cadence Technology Forums - Cadence Community
2015年11月10日火曜日
ERROR: Current execution environment is VCO=aoi. Software tree is for environment VCO=ixl
Calibre を実行するときに,
ERROR: Current execution environment is VCO=aoi. Software tree is for environment VCO=ixl
というエラーが出て起動しなかった.
調べた結果以下の事がわかった.
Calibre on Linuxにはいくつかバージョンがある.
・ixl:RedHat Enterprise Linux 5 (64bit)に最適化されたパッケージ
・aoi:RedHat Enterprise Linux 6 (64bit)以降に最適化されたパッケージ
・Calibre 32bitはもうサポートしません
そのため,Calibre実行時にCalibreは実行マシンのOSを調べ,自身がixlのパッケージなのに実行環境がRHEL6以降だと検知すると,動作を止めるらしい.
RHEL6でもixlを使いたい場合,環境変数を設定すればよいらしい.
例1:% export USE_CALIBRE_VCO=ixl
例2:% export CALIBRE_2013_4_ALLOW_IXL_ON_RHEL6=101010
参考:Calibre Platform Support Overview and Roadmap - Mentor Graphics
ERROR: Current execution environment is VCO=aoi. Software tree is for environment VCO=ixl
というエラーが出て起動しなかった.
調べた結果以下の事がわかった.
Calibre on Linuxにはいくつかバージョンがある.
・ixl:RedHat Enterprise Linux 5 (64bit)に最適化されたパッケージ
・aoi:RedHat Enterprise Linux 6 (64bit)以降に最適化されたパッケージ
・Calibre 32bitはもうサポートしません
そのため,Calibre実行時にCalibreは実行マシンのOSを調べ,自身がixlのパッケージなのに実行環境がRHEL6以降だと検知すると,動作を止めるらしい.
RHEL6でもixlを使いたい場合,環境変数を設定すればよいらしい.
例1:% export USE_CALIBRE_VCO=ixl
例2:% export CALIBRE_2013_4_ALLOW_IXL_ON_RHEL6=101010
参考:Calibre Platform Support Overview and Roadmap - Mentor Graphics
登録:
投稿 (Atom)