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

シェルスクリプト変数の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

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でファイルが消せない話

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%なので使い所がちょっと難しい感じ.

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 でトランジスタの閾値電圧が場所ごとにばらつきそうだけれど,大丈夫なのだろうか.


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

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