2014年2月20日木曜日

Silicon Smartにおける"no convergence"の一原因

Silicon Smart AceとHSPICEを使ってスタセルのキャラクタライズを行っていたところ,以下の様なエラーをHSPICEが出力しキャラクタライズがとまる事態が発生した.

Error: Simulation initialization__ACQ_1.sif for cell SN51DFFRBQXC1 failed.
Error: Error while running simulation: Error found in simulator log file (deck.lis): **error** no convergence in operating point


キャラクタライズ対象のセルのネットリストが正常に動作する場合,Silicon Smartに入力する論理情報およびキャラクタライズ条件に不備がある可能性がある.今回のセル(非同期リセット付きポジティブエッジDFF)の場合,セルのインスタンスファイル(.inst)のピンの定義および論理情報は適切であったが,オプションのユーザー定義のキャラクタライズ条件(User-specified characterization and modeling configuration options.)に不備があり,Reset時の条件が書かれていなかった.そのため変なSPICE Deckを生成したと思われる.
LPEした回路の不備かと思った.紛らわしいエラーだ.

Calibre InteractiveでRunsetを読み込むと同時に自動実行する

Calibre InteractiveによるDRC/LVS実行時に,毎回[Run DRC]や[Run LVS]を実行する事が煩わしい.オプションを設定する事で,起動時にRunset選択後自動でDRC/LVSを実行する事が可能になる.オプションはCalibre Interactiveの[Setup]→[Preferences...]から[Misc]タブを選択し,[Run Calibre when runset is opend]にチェックを入れる.

こうすると,
(1) VirtuosoのCalibreメニューからDRC/LVSを選択
(2) Runsetを選択→自動でCalibre実行

となり,[Run DRC]等を選択するステップを減らす事が出来る.

さらに[Prompt to save changes before closing runset]と[Save runset each time Calibre is run]を選択しておくと,Calibre終了時に「Runsetの内容変わっているが保存するか?」という鬱苦しいダイアログが表示されなくなるので,こちらもおすすめ.





2014年1月17日金曜日

英文における単位の前のスペースと並列表記

一般に英語はwordごとにスペースを入れる.単位は一つのwordであるからスペースを入れると教わる.

100 meter
100 m


そのため並列表記の時は以下の様になる.

A and B increase to 3 and 10 cm, respectively.

ただし例外があり,パーセント(%)はスペースを空けないと教わる.これはパーセントはそれ単体では意味をなさず,数字と合わさって意味を持つためだと教わるためである.

Proposed design flow shows the energy consumption of the circuit is reduced to 86%.
Result shows impact of C and D decrease to 70% and 80%, respectively.


しかし,友人が言うにはInternational System of Units(SI単位系)およびISO 31-0ではパーセントはあけてはいけないらしい(Wikipedia: Percent sign).

Result shows impact of C and D decrease to 70 and 80 %, respectively.

まあ,これまで論文校正で突っ込まれたこともないし,あまり気にしなくてもいいのかもしれない.


"respectively"の位置は最後尾ではなく真ん中に入れた方が読み返しを防ぐのでよいという意見もあったが,自分の論文ライブラリにはそんな表記は全く見られずすべて最後尾に入れてた.

Result shows impact of C and D, respectively, decrease to 70 and 80 %.

2013年10月13日日曜日

dvipdfmxでpdfを作ると図がずれる

ptetexからtexlive(2013/10/12)に移行したら,dvipdfmxでpdfを生成する時に
図がずれる様になった.xdviで見る限りdviは問題なさそうである.

原因はグラフィックのパッケージへのオプションが不適切で,

\usepackage{graphicx}

から

\usepackage[dvipdfmx]{graphicx} 

に変えたら直った.

2013年9月16日月曜日

Windows8で休止状態を使うと音が鳴らなくなる

Windows8のWindows Media Centerで音を鳴らしながら休止状態に移行すると,休止状態から復帰しても音が鳴らなくなる.こうなるとWindows Media Centerでも他のプレイヤーでも音が鳴らなくなる.こうなると再起動するしかない.ボリュームを変えるとホワイトノイズは変わるし,視覚エフェクトも正常.原因がわからない.不便だ.

Windows 8の場合,コントロールパネルからのトラブルシューティングを立ち上げることができる.
[コントロール パネル]→[すべてのコントロール パネル項目]→[トラブルシューティング]
しかし「ボリュームを上げろ」と指示された以上の特に有用な情報を得ることはできなかった.

また,Windows Audioサービスを再起動しても結果は変わらなかった.

英語で検索したら,Microsoft Communityにすでにスレッドが立っていた(2012/11).
No audio after windows 8 wakup from sleep

サポートの人がまるで役に立っていない.「管理者として実行してみては?」というアドバイスもあったが効果はなかった.

2013年8月12日月曜日

コピー機の最大投入金額(16120円)に関する考察

なぜFuji Xeroxのコピー機の最大投入金額が16120円と中途半端なのか推測してみる.

複写管理機器(というらしい)Coinkit 9のカタログ(pdf)を見ると,硬貨だけの場合最大投入金額は15120円で,オプションの1000円紙幣ユニットをつけることで16120円になるらしい.
カタログを見ると,どうも硬貨の種類によって最大投入可能数が異なる様だ.従ってWikipediaから硬貨の厚みに関する情報を引き出してみると以下のようになった.
  • 10円:1.5mm x 90枚 = 135mm
  • 50円:1.7mm x 78枚 = 132.6mm
  • 100円:1.7mm x 77枚 = 130.9mm
  • 500円:2mm x 68枚 = 136mm  (Wikipediaによると1.8mmだが,他サイト[1][2]では2mm説が多いのでそちらを採用)

従って,硬貨を受けつけるトレイの大きさが136mmでありそれに制約されている可能性がある.微妙にずれがあるのは,硬貨のそり等を考慮したマージンの分であったり,硬貨の正確な厚みが公表されていない分の誤差の蓄積だと思われる(造幣局のサイトでは見つけられなかった).

2013年8月6日火曜日

SPICEネットリストビューアー

以前SPICEのネットリストのビューアーで良いものがないか問い合わせを受けた.自分の知っているビューアーは以下の通りである.

フリーのネットリストビューアーである.使い勝手は不明だが,デモを見る限り素子がぐちゃぐちゃに配置され可読性が低そうである.

  AnalogArtist
CIWから[File]→[Import]→[CDL…]でCDLとして読み込む.素子がぐちゃぐちゃに配置されるため,可読性が低い.
逆にComposer Schematicを使ってGUIでネットリストを作り,CDL outしてネットリストを生成することも可能(そこまでするならAnalog Design Environmentを使う方がよいかも).

Concept Engineeringというドイツの会社が出している.未使用なので使い勝手はわからない.デモを見る限り素子がきれいに配置されている.購入する必要がある.

Spice Explorer/Custom Explorer
現在Synopsysが提供している波形ビューアーであるが,Spice形式のファイルを表示することも可能である.Spice Explorerの場合マクロブロックの入出力単位,Custom Explorerであればマクロ間の配線をGUIで表示可能だが,使い勝手はイマイチである.特に後者はVDECのライセンスでは動作しないようだ(波形の表示はできる).

  Calibre RVE
個人的におすすめなのがRVEである.特に2010年版以降のGUIのネットリストビューアーのできがすばらしい.
% calibre -rve
で起動し,読み込むファイルとして[SPICE File]を選択しファイルをロードすればokである.信号のハイライト,回路ブロックの展開/収束も可能である.VDEC提供のライセンスで利用可能.ただしLVS用のネットリストビューアーなのでサブサーキットとして定義した回路ブロックしか見ることができないようだ.

IC Compilerで生成するVIAの種類を指定する(advanced via rule)

IC Compilerで利用する(Astroの)テクノロジファイルには一般に様々な種類のVIAマクロが定義されており,IC Compilerはそれらの中から状況に応じてVIAを使い分ける.IC Compilerが意図通りのVIAを生成しないときは,advanced via ruleを指定する事でユーザーの意図通りのVIAを選択させることができる.

例えば,電源ストラップ生成時のスタックドビアに利用するVIAを指定するには以下のように設定すればよい.

 set_preroute_advanced_via_rule -contact_code TECH_VIA1 -size_by_array_dimensions [list 5 1] -move_via_to_center


その後いつものように電源ストラップを生成する.


  create_power_straps -direction vertical -start_at 4.5 -num_placement_strap 2 -increment_x_or_y 20 -nets {VDD VSS} -layer M5 -width 1 -step 20 -pitch_within_group 1.75 -extend_low_ends force_to_boundary_and_generate_pins -extend_high_ends force_to_boundary_and_generate_pins -advanced_via_rules

-contact_codeでテクノロジファイル中のVIAを指定する事が可能である.-move_via_to_centerオプションをつけると,電源レールの真ん中にVIAを配置することが可能である(つけないとずれる).

2013年8月1日木曜日

NC-Verilogにおける実負荷シミュレーションのバッドノウハウ

NC Verilogを使ってSDFをアノテートしたシミュレーションをする時,アノテーションの手法は以下の2つがある.
  1. Verilogテストベンチ中に$sdf_annotate("file", module)を使う
  2. NC Verilog起動時に+sdf_file+<file>を引数で与える
これらの手法のうち,(1)で以下のワーニングが発生しうまくアノテーションできずはまった.

 ncelab: *W,sdfNET: failed Attempt to annotate to non-existent path...

しかし,同じファイルであっても(2)を試すとうまくいく.よくわからないが,(1)と(2)ではサポートしているSDFの構文が違うのだろうか.利用したのはncverilog 06.20-s004 (IUS62)である.
なお,(2)は+sdffile<file>と"+"なしでも正しくアノテーション可能である.

SDFをアノテーションすると当たり前だが各セル,配線遅延を想定したシミュレーションになる.従ってテストベンチのクロック周期を想定する回路のクロック周期に設定しないと当たり前だがタイミング違反になる.
Verilogシミュレーションにおいて,セットアップ違反はホールド違反として報告されることがある.早とちりせずに2つのタイミング違反の可能性について調査する必要がある.

何も考えずにシミュレーションをしていたところ,回路を100GHzでシミュレーションしてしまい結果ホールド違反(と思わせたセットアップ違反)がモリモリでてきて悩んでしまった.情けない.

IC CompilerでHold回避用遅延素子を指定する

IC Compilerによる配置配線においてHold違反を回避するために遅延素子を入れるが,私の環境ではインバータチェーンで構成されてしまい面積/消費電力的に無駄が多い.実際には特定のセル(DELAYセル)をホールド解決用に利用したい,そのためにはset_prefer属性を付加するしたうえでhold違反の修正を行う.以下のようにコマンドを入力すればよいようだ.

set_prefer -min {tech_lib/MY_DELAY_CELL}
set_fix_hold_options -preferred_buffer
set_fix_hold [all_clocks]


あとはroute_opt等の配線時にhold違反を修正するよう設定すればよい.