2022年11月26日土曜日

サーバーの物理的に引っ越したらネットワークがつながらなかった

サーバーを物理的に別の場所に引っ越したらネットワークにつながらなくて7ヶ月ほど長らく苦しんでいた.オチとしては,

/etc/sysconfig/network-scripts/ifcfg-xxxx

が前の場所に向けて設計されていたので,NetworkManager (GUI) の設定と矛盾していて動作ができなかったみたい.接続プロファイル作り直したらあっさり動いてトホホ.どこカスタムしたかなんて覚えてないしな.OS 入れ直せばよかったのかも.(でも OS 入れ直すと CAD 動かすためのシェアードファイル探すの大変だしな)

2022年10月12日水曜日

DesignCompilerの電力解析結果

 ボスが面白いデータをくれた.DesignCompiler の電力解析結果である.乗算器を遅延制約を変えて合成している.

Period Intl     Switch Leak         Total
1 ns 636.4446 uW 523.31 uW 2.20E+04 nW 1.18E+03 uW
10 ns 63.6445 uW 52.331 uW 2.20E+04 nW 137.9381 uW
100 ns 6.3645 uW 5.2331 uW 2.20E+04 nW 33.5603 uW

すべて電力(ワット)で書かれているが,単なる和では Total は求まらない.

変換するにはエネルギーに変える.回路が同じだから処理あたりのエネルギーは同じ.
Intl+Sw (Power)        Intl+Sw (Energy)
1159.7546    nW 1159.76 fJ
115.9755     nW 1159.76 fJ
11.5976     nW 1159.76 fJ

リークもエネルギーに変える.単位時間に応じてリークは増える.
Leak (Energy)
2.20E+04 aJ
2.20E+05 aJ
2.20E+06 aJ

和を取ってエネルギーを求め,それをクロック時間で割って時間あたりのエネルギーである電力を計算する.結局,DesignCompilerの電力解析結果は,サイクルあたりの電力の総和を計算している事になる.
Total (Energy) Total (Power)
1.18E+03 fJ 1.18E+03 uW
1.38E+03 fJ 1.38E+02 uW
3.36E+03 fJ 3.36E+01 uW

[内部電力] = [内部エネルギー] / [時間]
[外部電力] = [外部エネルギー] / [時間]
[処理あたりのエネルギー] = [内部電力 + 外部電力 + リーク電力] * [時間] 
ということですね.



2022年9月13日火曜日

ランダウアーの原理と集積回路のエネルギー

ランダウアーの原理で盛り上がっていたので調べてみた.

ランダウアーの原理:情報を1bit消去するために必要なエネルギー:k T ln2
k: ボルツマン定数,T:絶対温度

室温だと E_landauer = 1.38e-23 JK-1 * 300K * ln2 = 2.87e-21 J

intel Broadwell-U が13億トランジスタで,ざっくり半分がコア,半分アンコアとしてコア部を構成するのは6.5億トランジスタ,これをざっくり NAND2 換算すると1.4億ロジックゲート,すべての NAND2 で1サイクルあたり 1 E_landauer を消費するとして,サイクルあたり4.02 e-13 J,3 GHz で動いて 1.2e-3 J/s = 1.2 mW といったところ.TDPが15W なので,ランダウアーの原理で消費するエネルギーは全体に比べて1万分の1程度である.

今の集積回路のエネルギーはトランジスタのゲート容量や拡散配線などの寄生抵抗容量で構成されていて,仮に「寄生」成分がない理想的な状況であっても (CMOS) トランジスタのゲート容量は本質的に必要なので,ランダウアーの原理がコンピュータの消費エネルギーを支配する事は当分はなさそう.

2022年9月8日木曜日

ASAP7 のセルライブラリの一覧

 良く忘れるので載せておく.7.5 Track セルです.
# AND-OR
A2O1A1Ixp33_ASAP7_75t_R.gds
A2O1A1O1Ixp25_ASAP7_75t_R.gds
AO21x1_ASAP7_75t_R.gds
AO21x2_ASAP7_75t_R.gds
AO22x1_ASAP7_75t_R.gds
AO22x2_ASAP7_75t_R.gds
AO31x2_ASAP7_75t_R.gds
AO32x1_ASAP7_75t_R.gds
AO32x2_ASAP7_75t_R.gds
AO33x2_ASAP7_75t_R.gds
AO211x2_ASAP7_75t_R.gds
AO221x1_ASAP7_75t_R.gds
AO221x2_ASAP7_75t_R.gds
AO222x2_ASAP7_75t_R.gds
AO322x2_ASAP7_75t_R.gds
AO331x1_ASAP7_75t_R.gds
AO331x2_ASAP7_75t_R.gds
AO332x1_ASAP7_75t_R.gds
AO332x2_ASAP7_75t_R.gds
AO333x1_ASAP7_75t_R.gds
AO333x2_ASAP7_75t_R.gds
# AND-OR-INVERTER
AOI21x1_ASAP7_75t_R.gds
AOI21xp5_ASAP7_75t_R.gds
AOI21xp33_ASAP7_75t_R.gds
AOI22x1_ASAP7_75t_R.gds
AOI22xp5_ASAP7_75t_R.gds
AOI22xp33_ASAP7_75t_R.gds
AOI31xp33_ASAP7_75t_R.gds
AOI31xp67_ASAP7_75t_R.gds
AOI32xp33_ASAP7_75t_R.gds
AOI33xp33_ASAP7_75t_R.gds
AOI211x1_ASAP7_75t_R.gds
AOI211xp5_ASAP7_75t_R.gds
AOI221x1_ASAP7_75t_R.gds
AOI221xp5_ASAP7_75t_R.gds
AOI222xp33_ASAP7_75t_R.gds
AOI311xp33_ASAP7_75t_R.gds
AOI321xp33_ASAP7_75t_R.gds
AOI322xp5_ASAP7_75t_R.gds
AOI331xp33_ASAP7_75t_R.gds
AOI332xp33_ASAP7_75t_R.gds
AOI333xp33_ASAP7_75t_R.gds
# AND2-4 
AND2x2_ASAP7_75t_R.gds
AND2x4_ASAP7_75t_R.gds
AND2x6_ASAP7_75t_R.gds
AND3x1_ASAP7_75t_R.gds
AND3x2_ASAP7_75t_R.gds
AND3x4_ASAP7_75t_R.gds
AND4x1_ASAP7_75t_R.gds
AND4x2_ASAP7_75t_R.gds
AND5x1_ASAP7_75t_R.gds
AND5x2_ASAP7_75t_R.gds
# DFF w/ asyncronous set/reset
ASYNC_DFFHx1_ASAP7_75t_R.gds
# Buffer (f is fast: FO3, other: FO4,5,6)
BUFx2_ASAP7_75t_R.gds
BUFx3_ASAP7_75t_R.gds
BUFx4f_ASAP7_75t_R.gds
BUFx4_ASAP7_75t_R.gds
BUFx5_ASAP7_75t_R.gds
BUFx6f_ASAP7_75t_R.gds
BUFx8_ASAP7_75t_R.gds
BUFx10_ASAP7_75t_R.gds
BUFx12f_ASAP7_75t_R.gds
BUFx12_ASAP7_75t_R.gds
BUFx16f_ASAP7_75t_R.gds
BUFx24_ASAP7_75t_R.gds
# Posedge clk DFF w/ neg. data polarity (QN<=!D)
DFFHQNx1_ASAP7_75t_R.gds
DFFHQNx2_ASAP7_75t_R.gds
DFFHQNx3_ASAP7_75t_R.gds
# Posedge clk DFF w/ pos. data polarity (Q<=D)
DFFHQx4_ASAP7_75t_R.gds
# Negedge clk DFF w/ neg. data polarity (QN<=!D)
DFFLQNx1_ASAP7_75t_R.gds
DFFLQNx2_ASAP7_75t_R.gds
DFFLQNx3_ASAP7_75t_R.gds
# Negedge clk DFF w/ pos. data polarity (Q<=D)
DFFLQx4_ASAP7_75t_R.gds
# D-latch (High-transparent)
DHLx1_ASAP7_75t_R.gds
DHLx2_ASAP7_75t_R.gds
DHLx3_ASAP7_75t_R.gds
# D-latch (Low-transparent)
DLLx1_ASAP7_75t_R.gds
DLLx2_ASAP7_75t_R.gds
DLLx3_ASAP7_75t_R.gds
# Full adder
FAx1_ASAP7_75t_R.gds
# ?? (Not Half adder)
HAxp5_ASAP7_75t_R.gds
# Hold buffer (#stack)
HB1xp67_ASAP7_75t_R.gds
HB2xp67_ASAP7_75t_R.gds
HB3xp67_ASAP7_75t_R.gds
HB4xp67_ASAP7_75t_R.gds
# Integrated clock gating (ICG) cell
ICGx1_ASAP7_75t_R.gds
ICGx2_ASAP7_75t_R.gds
ICGx3_ASAP7_75t_R.gds
# Inverter
INVx1_ASAP7_75t_R.gds
INVx2_ASAP7_75t_R.gds
INVx3_ASAP7_75t_R.gds
INVx4_ASAP7_75t_R.gds
INVx5_ASAP7_75t_R.gds
INVx6_ASAP7_75t_R.gds
INVx8_ASAP7_75t_R.gds
INVx11_ASAP7_75t_R.gds
INVx13_ASAP7_75t_R.gds
INVxp33_ASAP7_75t_R.gds
INVxp67_ASAP7_75t_R.gds
# Majority (inverse, non-inverse)
MAJIxp5_ASAP7_75t_R.gds
MAJx2_ASAP7_75t_R.gds
MAJx3_ASAP7_75t_R.gds
# NAND
NAND2x1p5_ASAP7_75t_R.gds
NAND2x1_ASAP7_75t_R.gds
NAND2x2_ASAP7_75t_R.gds
NAND2xp5_ASAP7_75t_R.gds
NAND2xp33_ASAP7_75t_R.gds
NAND2xp67_ASAP7_75t_R.gds
NAND3x1_ASAP7_75t_R.gds
NAND3x2_ASAP7_75t_R.gds
NAND3xp33_ASAP7_75t_R.gds
NAND4xp25_ASAP7_75t_R.gds
NAND4xp75_ASAP7_75t_R.gds
NAND5xp2_ASAP7_75t_R.gds
# NOR
NOR2x1p5_ASAP7_75t_R.gds
NOR2x1_ASAP7_75t_R.gds
NOR2x2_ASAP7_75t_R.gds
NOR2xp33_ASAP7_75t_R.gds
NOR2xp67_ASAP7_75t_R.gds
NOR3x1_ASAP7_75t_R.gds
NOR3x2_ASAP7_75t_R.gds
NOR3xp33_ASAP7_75t_R.gds
NOR4xp25_ASAP7_75t_R.gds
NOR4xp75_ASAP7_75t_R.gds
NOR5xp2_ASAP7_75t_R.gds
# OR-AND
O2A1O1Ixp5_ASAP7_75t_R.gds
O2A1O1Ixp33_ASAP7_75t_R.gds
OA21x2_ASAP7_75t_R.gds
OA22x2_ASAP7_75t_R.gds
OA31x2_ASAP7_75t_R.gds
OA33x2_ASAP7_75t_R.gds
OA211x2_ASAP7_75t_R.gds
OA221x2_ASAP7_75t_R.gds
OA222x2_ASAP7_75t_R.gds
OA331x1_ASAP7_75t_R.gds
OA331x2_ASAP7_75t_R.gds
OA332x1_ASAP7_75t_R.gds
OA332x2_ASAP7_75t_R.gds
OA333x1_ASAP7_75t_R.gds
OA333x2_ASAP7_75t_R.gds
# OR-AND-INVERTER
OAI21x1_ASAP7_75t_R.gds
OAI21xp5_ASAP7_75t_R.gds
OAI21xp33_ASAP7_75t_R.gds
OAI22x1_ASAP7_75t_R.gds
OAI22xp5_ASAP7_75t_R.gds
OAI22xp33_ASAP7_75t_R.gds
OAI31xp33_ASAP7_75t_R.gds
OAI31xp67_ASAP7_75t_R.gds
OAI32xp33_ASAP7_75t_R.gds
OAI33xp33_ASAP7_75t_R.gds
OAI211xp5_ASAP7_75t_R.gds
OAI221xp5_ASAP7_75t_R.gds
OAI222xp33_ASAP7_75t_R.gds
OAI311xp33_ASAP7_75t_R.gds
OAI321xp33_ASAP7_75t_R.gds
OAI322xp33_ASAP7_75t_R.gds
OAI331xp33_ASAP7_75t_R.gds
OAI332xp33_ASAP7_75t_R.gds
OAI333xp33_ASAP7_75t_R.gds
# OR
OR2x2_ASAP7_75t_R.gds
OR2x4_ASAP7_75t_R.gds
OR2x6_ASAP7_75t_R.gds
OR3x1_ASAP7_75t_R.gds
OR3x2_ASAP7_75t_R.gds
OR3x4_ASAP7_75t_R.gds
OR4x1_ASAP7_75t_R.gds
OR4x2_ASAP7_75t_R.gds
OR5x1_ASAP7_75t_R.gds
OR5x2_ASAP7_75t_R.gds
# Scan-DFF w/ posedge clk
SDFHx1_ASAP7_75t_R.gds
SDFHx2_ASAP7_75t_R.gds
SDFHx3_ASAP7_75t_R.gds
SDFHx4_ASAP7_75t_R.gds
# Scan-DFF w/ negedge clk
SDFLx1_ASAP7_75t_R.gds
SDFLx2_ASAP7_75t_R.gds
SDFLx3_ASAP7_75t_R.gds
SDFLx4_ASAP7_75t_R.gds
# Tie cell
TIEHIx1_ASAP7_75t_R.gds
TIELOx1_ASAP7_75t_R.gds
# XOR, XNOR
XNOR2x1_ASAP7_75t_R.gds
XNOR2x2_ASAP7_75t_R.gds
XNOR2xp5_ASAP7_75t_R.gds
XOR2x1_ASAP7_75t_R.gds
XOR2x2_ASAP7_75t_R.gds
XOR2xp5_ASAP7_75t_R.gds

2022年8月24日水曜日

Google Siteを公開する

新しい Google Site に移行してから,Site が検索結果に表示されなくて困っていた.原因は Google Site の情報が Google Drive 上で非共有になっていたためだった.Google Drive で Google Site の情報を格納しているファイルを選択し,右側のメニューから「アクセスを管理」→「公開済みサイト」→「公開」を選ぶと Google 未ログインでもアクセスできるようになった.

自分自身は常に Google アカウントでログインしているから検索結果に出てくるのだが,非ログインで表示されなくてようやく気がついた.

2022年7月30日土曜日

作成したWebページを検索エンジンに表示させる (Google Search Consoleを使う)

とある国際会議の Web ページを作成したのだが Google 検索でヒットしない.しばらく放っておけばクロールされるのかもしれないが,手動で登録するには Google Search Console を使うらしい.


やるべき事は以下の通り.

・Google Search Console に目的のページを入力して自分の Google アカウントがサイトの所有権を持っているか確認する.

・所有権がない場合,所有権を認識するための HTML を Google Search Console からダウンロードし,目的のサイトに FTP などでアップする.

・Google が上記 HTML を認識したらGoogle Search Console で目的のサイトの検索パフォーマンスなどが表示できるようになる.

・クローラが Web サイトの構造を認識できるサイトマップを用意する.SEO 対策であれば XML や HTML で記述すべきらしいが Text 形式でアップした HTML の URL をリストアップするのでもよいみたい.

・アップしたサイトマップを Google Search Console 経由で登録する.ステータスが「成功しました」になればOK.

今回のケースは,サイトマップを登録したら則検索結果に反映されるようになった.ただ,学会名と開催年の間にスペースを入れないと見付からないけれど….

2022年7月29日金曜日

XREA のレンタルサーバーに Mediawiki を入れる

基本的にこちらのサイトの通りに入れればよい.

いくつかつまずいたのでメモ
2022/07/29での最新版は1.38.2だが,現地点の XREA では php-xml が入っていないかうまく呼び出せずファイルのアップロードに失敗する.(XMLReaderが無くてファイルフォーマットを検知できない).なのでこの問題の無い 1.31 を選ぶ.セキュリティの問題は目をつぶろう…( .htaccess とログインパスワードの2重に鍵をかけておこう)

1.31だとファイルはアップロードできるが画像表示に失敗する.どうも/image/.htaccressの記述に問題があるようなので,
Options +FollowSymLinks
の記述をコメントアウトする.

XREA のレンタルサーバーを借りると勝手に .com ドメインを作ってくれるのだが次年度以降費用がかかる.XREA のサブドメインだけにすれば費用はかからないが,SSL が使えない.
どうにかできるのかもしれないが,知識が無いのでどうしたものか.

2022年6月22日水曜日

Primelib は SiliconSmart と同じ

 タイトルそのまま.同じスクリプトがそのまま動きます.むしろ起動時に
> Reading  /cad/synopsys/primelib/T-2022.03-1/etc/sis.err...done
なんてログが出てくるので,「さては SiliconSmart だな,テメー」,という気分になります.

2022年6月3日金曜日

インターンシップの思い出

唐突に,1x年前の学部時代のインターンシップの事を思い出したので書いてみる.もう時効だよね.当時まだ赤かった頃です.

・統合して4年経つのに旧M,旧Hと言う言葉が普通に使われる.福利厚生も違うという噂.
・技術者数に対してCADのライセンスが全く足りない.そのため技術者はライセンスサーバーをポーリングするスクリプトを書いて,ライセンスを取れたら仕事をするという感じだった.
・上記のため,回路設計のためのシミュレータ(Cadence ncverilog)がほとんど使えない.仕方が無いので別のマイナーメーカーの設計ツールを利用していた(Novas debussy).手持ちのノートPCにインストールした Veritak の方が便利だった始末.
→ debussy は使えると便利で,後継(?)の Veridi をたまに利用するようになった.
・前年度落選したベンダーが翌年営業攻勢をかけるため使えるCADが年度ごとに変わる.当時は意味を理解していなかったが,今思うと毎年習熟すべき CAD が変わるとか習熟コストを考えると非効率的すぎるのでは.
・技術者は忙しいのか,メンターさん含めてあまりこまめに見てもらえなかった.朝から晩まで会議だったり.派遣の方が一番優しかった気がする.これは部署や時期にもよるだろう.
・いっぽうでたばこ休憩が多かった.
・食堂がキツキツなうえにとにかくご飯がおいしくなかった.
・昼休憩後のトイレの個室が空いているところを見たことがない.寝てる?
・寮の食堂が量は多いわおいしいわで天国だった.お風呂も広かった.
・8時出社して20時帰寮して22時ぐらいまで試行錯誤していた.

3週間かけてI2Cの仕様書を理解してバスマスタ・スレーブのRTLを書く課題で,半泣きだったけれどステートマシンの理解がきちんとできたのでそういう意味では大変よかった.大学院生向けの課題だと聞いて後で泣いた.ここには絶対就職しないとも思った.事業所はなくなった.
青くなった今はよくなっていると思います,たぶん.

2022年5月28日土曜日

Setup search inside SiliconSmart

Flip-Flop の遅延特性のうち,Setup time の定義は2つある.
(1) C2Q 遅延の最小値から C2Q 遅延が 3~5% 悪化した点の D2C 遅延を Setup とする.
(2) D2Q 遅延が最小となる D2C 遅延を Setup とする.

広く認識されているのは (1) で,(2) はマイナーなイメージ.多くの人が参照している CMOS VLSI Design では (1) と (2) の両方を上げて,(2)でよいのではと述べている.

実際のキャラクタライザではどうしているのか調べたところ,SiliconSmart では D2C 遅延を変更し Q 出力が失敗する直前を探す探査をしているとマニュアルに書かれていた((1),(2)とも違う動き).
なお SiliconSmart が吐き出した SPICE ネットリストを見ると,SiliconSmart 自身は HSPICE による Setup の bisection 探査を呼び出していて,HSPICE の内部アルゴリズムが Setup を調べてレポートしているようだ.

Calibre PEX を使ってみる

とあるプロセスのプロセスパラメータがわからないので,個々の要素の抵抗容量を見積もりたい(リバースエンジニアリング?).ルールファイルが暗号化されているので生の値はわからないので,Calibre PEX の見積もり結果を RVE で解析してみる.

まず前提として,Calibre で RC 抽出する.今回は xACT を使った.xRC でもいけるのかはわからない.xACT の起動方法はこちら.

次に,レイアウトビューアから RVE を起動する.Virtuoso でもかまわないし,Calibre DESIGNrevでもかまわない.Database Type に PEX を選択し,RC抽出時に生成されるsvdbを指定する.



Net ごとにRC抽出結果が表示される.それぞれ
R Count:抽出された抵抗の素子数
C:固有容量値
CC:他ネットへのカップリング容量
C+CC:容量総和
となる.

ネット名をダブルクリックすると詳細を解析できる.VSSを選択してみる.



CCを選ぶと,VSSとカップリングしているネット名とカップリング容量が表示される.



Pt-to-Pt Res. を選ぶと,ネットもしくはピン間の抵抗の総和を計算してくれる.またレイアウトに抵抗値と経路も表示してくれる.("5"の左横のZ状の黄色線が経路)

2022年5月21日土曜日

VNC で画面が真っ黒になる

Cent OS7 のマシンに Windows10 PC で VNC 接続をしたいが,接続すると画面が真っ黒になる.
CentOS (server):TigerVNC 64bit v1.8.0
Windows (client):UltraVNC 1.3.81

~/.vnc/xstartup に
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
を追記したら XFCE4 セッションが見えるようになった.

CentOSマシンは同じで,以前のWindows10マシン@UltraVNC 1.2.3.0 では unset しなくてもよかったのだが,なぜかクライアント側ではなくサーバー側の変更が必要になってしまった.

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
については,今となっては TigerVNC は xstartup や同一アカウントによる複数の Xvnc セッションのサポートをしていないので不要(なはず)らしい.一方で過去にこのようなサポートを必要とした時に,個々の Xvnc ごとに D-Bus セッションバスインスタンスを分離するために必要であったと言うお話が書かれていた.互換性のためにも unset はした方がよいとのことだった.
https://groups.google.com/g/tigervnc-users/c/8s4pLFNHitA

2022年5月5日木曜日

Silvacoのツール名とできる事の対応表

わからなくなったので調べた.

Victory Process:プロセスシミュレータ
Victory Device:デバイスシミュレータ
Utmost IV:Spiceモデルジェネレータ
SmartSpice:Spiceシミュレータ
SmartView:波形ビューア
Gateway:回路図エディタ
Expert:レイアウトエディタ
Cello:ライブラリジェネレータ(旧Nangate Library Creator?)
Viola:キャラクタライザ(旧Nangate Library Characterizer?)

Cello と Viola は使ってみたいがライセンスもバイナリも無いのである.

旧 Nangate の 15nm/45nm Open Cell Library は利用されている方もいらっしゃるだろう.ダウンロード申請はここから.
https://si2.org/open-cell-library/

2022年4月29日金曜日

Calibre をサポート外 OS で動かしたい

タイトル通りなのだが,Calibre は RedHat,CentOS,Suse Linux しかサポートしていないので,それ以外の OS 例えば Ubuntu では
ERROR: Unknown Linux operating system environment
と表示されて起動しない.

途方に暮れていたのだが,中国の掲示板に
「/etc/redhat-release を作成して"CentOS Linux release 7.3.1611 (Core)"って書いとけばいいよ」
とあって,実行したら Caliber のバイナリが走った.そんな.

参考:https://bbs.eetop.cn/thread-481273-1-1.html

2022年3月21日月曜日

HSPICEで容量を測る

 容量を測るには3つ方法がある.

・AC解析で測る
.print ac cap(Node)
.ac dec 15 .1k 100k
対象 Node の容量の周波数特性を評価することができる.ただし,Nodeとどこの間の結合容量を見ているのかはわからない.他のすべてのノードとの容量の和なのだろうか.

・captabを使う
.option captab
回路中の全ノードを対象に,GND(0)に対するDC容量を評価する.抵抗などでGNDとつながっているノードの容量値の算出はできない.

・過渡解析で充電してみる
実際に過渡解析で充電を行い,流れた電流の積分(Q)とノード間電圧(V)からC=Q/Vで求める.理想コンデンサとして近似できる事が前提.

2022年2月22日火曜日

Mendeley Desktop で Citation Key が生成されない

タイトル通り,Mendeley Desktop で Citation Key が生成されなくて困っていた.ググると,Tools → Options → Document Detail を開き,当該タイトルの Document type を選択し,Citation Key にチェックを入れるとよい.チェックを入れると Citation Key の項目が開くが,登録されているすべての文献をチェックしに行くのか Mendeley が劇重になるので注意.

2022年1月16日日曜日

IC Compiler で配置が正しく行われているか調べる(check_legality)

IC Compiler で配置が正しく行われているか,check_legality コマンドで調べる事が出来る.

check_legality

実行すると,行 (Row) に載っていないセルの数,重なっているセルの数などが報告される.また legalize できなかったのでエラーコード PSYN-215 が報告される.
これを利用して,IC Compiler で配置が正しくできなかった場合に終了するプロシージャを以下に示す.


使い方

2022年1月15日土曜日

IC Compiler で DRC Error の一覧を出力する(get_drc_errors)

DRC Error をリスト形式で得るために get_drc_errors を利用する.

get_drc_errors
-error_view mw_error_view : 対象の Milkyway view (デフォルトで現在の view)
-error_id error_idserror_idと一致するオブジェクトのみ出力
-type error_typeerror_type に一致する違反を出力
-bbox {lx ly ux uy}:検索範囲
-quit:マッチしないときのメッセージを表示しない
-regexp | -exact-regexp では正規表現を有効に,-exact はワイルドカードを有効に
-nocaseerror_id および -filter オプションで大文字小文字を区別しない
-filter expressionfilter_collection コマンドで指定可能な形式でフィルタする

例えばショートが1000以上ある場合に ICC を止めるプロシージャを以下のように書ける.

2023/02/28 嘘を書いていたことが判明.get_drc_errors は collection を出力するので, get_object_name で list に変換しないといけません.

2022年1月14日金曜日

IC Compiler で配置配線可能な最小面積を調べる

Shell スクリプトで IC Compilerの create_floorplan のパラメータを変更していき設計が最後まで到達できたか調べれば良いのだが,面積制約を満たさない場合は DRC 違反が大量に出る中 ICC は(100%設計完了できないにもかかわらず)延々と頑張って設計改良をするので時間がかかる.一方で一度面積制約を満たしたら処理は終了したい.
そこで
(0) Shell スクリプトで tcl ファイルの create_floorplan のパラメータを変える
(1) 処理の要素要素で Utilization を調べて既定値以下なら終了する
(2) 一度最後まで到達したらフラグを出力し for ループをブレイクする

(0) はこんなコード

 
このコードをさらに外部のsedコマンドで%%START%%,%%END%%,%%INC%%,%%ROW%%を置換する.

(1) 以下のようなプロシージャを定義して


メインのtclファイル中で要所要所で呼び出す.


(2) メインのtclファイルの末尾に完遂した場合のフラグファイルの出力と,冒頭にフラグファイルがある場合にquitするようにする.


フラグファイルがある場合は(0)のシェルスクリプトでもbreakするようにしているので,tcl 中の if 文は無駄ではあるが念のため.

2022年1月5日水曜日

Procedural-continuous assignments

Verilog では以下のように always の中に assign 文を入れることが出来るらしい(@ryos36さんのTwitterから).
always 文の中に assign を入れる構文は Procedural-continuous assignments (手続き文の継続的代入?)と呼ぶらしく,DesignCompiler では「Procedural-continuous assignments は合成できないよ」とエラーが出た.純粋に動作モデルを立てるために使うのだろう.