2014-02-26

HSPICE過渡解析: 途中経過をみる

.option wave_pop=val
valに0.001から1の範囲の値を設定することで, 出力バッファをフラッシュする.

同様のオプションが HSIM にもあったが, 名前は忘れた.

2014-02-24

set_preroute_advanced_via_rule の設定を解除

set_preroute_advanced_via_rule で電源配線などのビアを設定できるが, 間違えて設定した場合に元に戻す明示的なコマンドはない.

report_preroute_advanced_via_rule が出力する結果を見ながら, どのようにすると元に戻るか調べてみた.

その結果, どうやら -cut_layerオプションだけを付けて実行すると, デフォルトのルールに設定が上書きされるらしいという事がわかった.

  1. V6にルールを設定.
    icc_shell> set_preroute_advanced_via_rule -contact_codes ZZZV6HV -move_via_to_center -size_by_array_dimensions {2 1} -rotation_mode off
    icc_shell> report_preroute_advanced_via_rule
    Default set:
    ----------------
       Size:         an area (x-size X y-size) 0.000 X 0.000
       Contact code: to be selected automatically
       Rotation:     Enable
    ...
    ----------------
    Rule for cut-layer "V6":
       Size:         via-array (nx X ny) 2 X 1
       Contact code: "ZZZV6HV" 
       Rotation:     Disable
    ----------------
    Rule for cut-layer "V7":
       Same as default
    
    V6ルールにサイズ・コンタクトコード・回転可否の条件が設定された.
  2. icc_shell> set_preroute_advanced_via_rule -cut_layer V6
    icc_shell> report_preroute_advanced_via_rule
    Default set:
    ----------------
       Size:         an area (x-size X y-size) 0.000 X 0.000
       Contact code: to be selected automatically
       Rotation:     Enable
    ...
    ----------------
    Rule for cut-layer "V6":
       Size:         an area (x-size X y-size) 0.000 X 0.000
       Contact code: to be selected automatically
       Rotation:     Enable
    ...
    
    V6ルールに Default set の値がコピーされた. これでデフォルトのルールに戻ったようだ.

2014-02-23

ICC: セルの配置時にエラー

ICCが place_opt, legalize_placement で以下のようなエラーを出した.
Error: Cell xx/xx/xx unplaceable! - cannot satisfy placement constraints. (PSYN-1106)
Error: lib cell 'xxxx' of cell xx/xx/xx is illegal for all sites in the block. (PSYN-061)
Error: Could not find a legal placement.
このセルは triple height なのだけど, 他の triple height のセルでは問題ない. セルライブラリを Milkyway で作成した時に, 以下のように triple height にしたという警告がでるのだけれど, 他のセルがここに紛れ込んでいた.
Information: Set cell  as triple height. (MWLIBP-122)
原因は, 別のセルで Boundary Layer を書き忘れていたことだった.

2014-02-17

EDAツールのライセンス設定をベンダ毎に記述

Cadence, Mentor, Synopsys のツールのライセンスは, 環境変数で指定する. 多くの人は LM_LICENSE_FILE にて各ライセンスサーバを指定するが, ツール毎に別々のライセンスサーバを立てている場合は, ライセンス取得までに時間がかかる場合がある. 別のベンダーのライセンスサーバにアクセスし, 取得に失敗するためである.

あまり知られていないが, ベンダー毎にライセンスサーバを別々に設定することができる. こうすることで, 別のベンダーのライセンスサーバにアクセスすることがなくなり, ライセンス取得までの時間を短縮できる.

Cadenceのライセンス設定

export CDS_LIC_FILE=port@server1-cadence:port@server2-cadence
export CDS_LIC_ONLY=1
環境変数CDS_LIC_ONLY1に設定しておくと, LM_LICENSE_FILEではなくCDS_LIC_FILEからライセンスサーバの情報を取得する.

Mentorのライセンス設定

export MGLS_LICENSE_FILE=port@server1-mentor,port@server2-mentor
環境変数MGLS_LICENSE_FILEに, コンマ区切でライセンスサーバの情報を書いておく. MGLS_LICENSE_FILEが空または設定されていないと, LM_LICENSE_FILEからライセンスサーバ情報を取得するようだ.

Synopsysのライセンス設定

export SNPSLMD_LICENSE_FILE=port@server1-synopsys:port@server2-synopsys
環境変数SNPSLMD_LICENSE_FILEにコロン区切でライセンスサーバの情報を書いておく.

2014-02-14

SPICEのAC解析による容量の評価

HSPICEのAC解析によって, 容量を導出する方法を紹介する.

MOSFETのゲート-ソース間容量など, バイアス条件や他の端子の状態によって刻々と変化するような場合でも, 容量を導出することができる.

.param vbias=0.6
V1  1 0  DC 'vbias' AC .1591549430918953 0
* 以下に理想的な容量素子を例に書いておく. この値と比較する.
.param C1=1p
E1  n1 0 1 0 1
C1  n1 0  'C1'

* 評価したい素子 (この例ではMOSCAPという名前のサブサーキット)
E2  n2 0 1 0 1
x1  n2 VDD VSS MOSCAP
VVDD VDD 0  1.5
VVSS VSS 0  0.0
.measure AC C_MOSCAP avg par('Ii(E2)/Ii(E1)*C1') from=10k to=100meg

* パラメータ vbias を振って解析する
.ac dec 10 1k 1g sweep vbias 0.0 1.5 0.05

2014-02-12

GNUplotによるヒストグラム描画

GNUplotでヒストグラムをプロットする方法をメモする.
bin(x,y)=floor((x+y*0.5)/y)*y
set yrange [0:]
set boxwidth 10
plot 'tmp.dat' u (bin($2*1e3, 10)):(1) smooth freq with boxes t ''
  • bin(x,y)で, yの大きさのビンに切り分ける.
  • set yrange [0:]で, 縦軸の下端を0にする.
  • smooth freqで, 個数を積算する.
  • 2014-02-06

    CSSでHTMLの見出しに番号をつける

    CSSに, 以下のように記述する. これで, H1タグをつけた見出しに番号がつく.
    body { counter-reset: section; }
    h1:before { 
      counter-increment: section;
      content: counter(section) ". ";
      display: inline;
    }
    

    2014-02-03

    find と xargs

    ある条件に合致するファイルに対して, ある操作を加えるという場合, findxargs を使用することが多い. しかし, とくにオプションを使用しないと, ファイル名にスペースが含まれている場合に問題が生じる. findは改行を区切り文字とし, xargsはスペース (改行を含む) を区切り文字としているためである.
    以下のように, 区切り文字を NUL (\0) とするオプションを使用することで, このような問題を回避できる.
    find ... -print0 | xargs -0 ...
    
    いつもこのオプションを付けておくようにしたい.

    よく使用する例

  • ジェネラルなファイル (ディレクトリでない) に対して, 実行権を除く.
     find -type f -print0 | xargs -0 chmod -x 
    Windowsユーザの典型的な特徴として, ZIPで圧縮する, 空白をファイル名に使用するという点がある. ZIPで圧縮されたファイルを展開するとすべてに実行権がついてしまう (ことがある) ので, 上記のコマンドを打つ.