3.1 ファンアウト数の影響

3.1.1 サブサーキットによる階層化

一度動作確認した回路は、より大きい回路を構成するためのモジュール(回路ブロック)として再利用する。回路記述が簡潔になり、回路記述の手間が削減される。この手法を階層化とよぶ。(プログラミングにおける構造化に似ている)

SPICEでは、回路をモジュール化するためにサブサーキットというコマンドが用意されている。リスト3.1に図3.1のCMOSインバータをサブサーキット化した記述例を示す。このリストを、not1.incというファイルに保存せよ。

Inverter Cell
図3.1 CMOSインバータのサブサーキット用回路図

リスト3.1 インバータのサブサーキット記述例
リスト説明
.SUBCKT NOT1 S_IN S_OUT
M2 S_OUT S_IN VDD VDD  PMOS3
+L=0.5u W=2.5u AD=3.75p AS=3.75p
M1 S_OUT S_IN 0   0    NMOS3
+L=0.5u W=1.0u AD=1.5p AS=1.5p
CI S_IN  0  10fF
.LIB 'ic1.lib' typ
.ENDS
サブサーキットは、.SUBCKTと.ENDSの間に記述する。.SUBCKT行のフォーマットは、

.SUBCKT サブサーキット名 入出力ポート名のリスト

となる。入出力ポート名は、サブサーキット内部のノード名を使用する。好きなポート名をつけてよいが、サブサーキット内部のノード名も合わせて変更するのを忘れないように注意。この例では、NOT1がサブサーキット名で、S_IN, S_OUTという2ポートを持っている。尚、サブサーキット内のノード名は、ローカルノード(ローカル変数)として扱われるが、GNDノードであるノード0のみはグローバルノード(グローバル変数)となる(即ち外部の回路の0と接続される)。サブサーキット内のネットリスト記述は、通常の回路のネットリストと全く同じである。この例では、インバータの入力に繋がる配線の容量を考慮するために、キャパシタCIを追加してある。

[注意] .ENDS の行は必ず改行すること。サブサーキットは、全体の回路のネットリストにインクルードされるので、改行がないと、挿入先の次行とくっついてしまう。

次に、上で作成したサブサーキットを呼び出して使ってみよう。図3.2に示す回路で、インバータの出力に別のインバータを多数繋いだときになにが起こるかを調べる。論理ゲートの出力に繋がっているゲートの数をファンアウト数と呼ぶ。XINVが駆動インバータで、XL1, XL2・・・が負荷インバータ、CL1, CL2・・・は負荷インバータに繋がる負荷である。

Fanout
図3.2 ファンアウト数=n

リスト3.2は、図3.2のn=10までの場合のシミュレーションを行うためのSPICE入力ファイルである。fo1.sp というファイル名で保存しておこう。設計者名を、自分の氏名にすること。

リスト3.2 ファンアウト数を変えてパルス応答を調べる回路の記述例
リスト説明
CMOS NOT Circuit
* designed by Hoge Hoge,
* 1/1/2002

.GLOBAL VDD
**** Netlist ****
VPW  VDD 0 DC 3.3V
VIN  IN 0 DC 0V PULSE(0V 3.3V
+ 3ns 1ps 1ps 3ns 6ns)
XINV IN  OUT NOT1
XL1  OUT 1   NOT1
CL1  1 0 10fF

**** Sub-circuit ****
.INCLUDE not1.inc

**** Simulation ****
.OP
.OPTION LIST POST NODE ALT100
.TEMP 25
.TRAN 10ps 12ns

.ALTER n=2
XL2  OUT 2   NOT1
CL2  2 0 10fF
.ALTER n=3
XL3  OUT 3   NOT1
CL3  3 0 10fF
.ALTER n=4
XL4  OUT 4   NOT1
CL4  4 0 10fF
.ALTER n=5
XL5  OUT 5   NOT1
CL5  5 0 10fF
.ALTER n=6
XL6  OUT 6   NOT1
CL6  6 0 10fF
.ALTER n=7
XL7  OUT 7   NOT1
CL7  7 0 10fF
.ALTER n=8
XL8  OUT 8   NOT1
CL8  8 0 10fF
.ALTER n=9
XL9  OUT 9   NOT1
CL9  9 0 10fF
.ALTER n=10
XL10 OUT 10  NOT1
CL10 10 0 10fF

.END
1行目はタイトル行。

.GLOBAL 変数名 で、グローバルノード(グローバル変数)を指定する。この例では、VDDは、サブサーキット内部とサブサーキット外部で共通となり接続されたことになる。通常、電源ラインは、全てのサブサーキット中で同一名称にしておいて、グローバルノードに指定すると便利である。

XINVとXL1の行で、サブサーキットの呼び出しを行っている。XINVが駆動インバータ、XL1が負荷インバータである。記述フォーマットは下記のとおり。
XINVIN OUTNOT1
インスタンス名接続ノードリストサブサーキット名

サブサーキットは、Xで始まるインスタンス名(呼び出し側での名前)で呼び出す必要がある。.GLOBALで指定しない限り、サブサーキット内のノード名はローカルなので、同じ名前を外部で使用しても接続したことにはならない。接続ノードリストは、サブサーキットの.SUBCKT行で記述されたポートの順序でノードと接続される。この例では、ノードIN がサブサーキットのS_INポートに、ノードOUTがサブサーキットのS_OUTポートに接続される。

.INCLUDE行では、インクルードするファイルを指定する。ここでは、サブサーキットNOT1を使用するために、サブサーキットを記述したファイル not1.inc を呼び出してインクルードしている。勿論、サブサーキット記述を、直接このSPICE入力ファイル中に書き込んでもよいが、汎用性のある回路は、別のファイルに纏めて記述しておいてインクルードした方がスマートだ。

.OPTION ALT100 は、後述の.ALTERを使用できる最大回数を指定(デフォルトは32なので、この解析例では設定しなくてもよい)。

.ALTER が記述されていると、その行までを一旦読み込み、シミュレーションを実行する。シミュレーションが終わると次の .ALTER までを読み込んでシミュレーションを実行し、.ENDが現れるまでこれを繰り返す。従って、自動的に素子値などのパラメータを変更したり、入力波形の変更、トランジスタモデルの変更、サブサーキットを挿し換えなどを行いながら、シミュレーションを繰り返すときに使用される。ここでは、.ALTERが現れるごとに、負荷インバータを1個追加している。.ALTER の後ろの文字列はコメント用ラベル(任意)。

3.1.2 ファンアウト数による平均遅延時間の変化

3.1.1で作成したSPICE入力ファイルを用いてHSPICEで過渡解析を行い、駆動インバータXINVの出力電圧の平均遅延時間を求めよ。ファンアウト数を変化させると、平均遅延時間はどうなるだろうか。CosmosScopeで拡張子 .tr0〜.tr9 のシミュレーション結果ファイルを読み込んだら(Shift+ .tr0と .tr9をクリックするとまとめて選択できる)、駆動インバータの出力電圧を観察してみよう。.tr9 のファイルの信号選択フォームで、v(out)を選択し、Match ボタンをクリックすると、n=1〜n=10 のファンアウト数の信号が1枚のグラフに表示される。どの色が、どのファンアウト数かは表示されないので、グラフの凡例に示されている信号名(v(out)など)を右クリックし、ポップアップメニューから Attributes... を選び、Signal Attributes フォームの Label 欄に n = 1 のようにファンアウト数を記入しておこう。グラフの凡例は、.ALTER の順番に合わせて、上から順に表示されている。

レポート課題7ファンアウト数の解析方法
(1) 過渡解析に使用した入力ファイル(not1.inc および fo1.sp)は、レポートの実験方法の章に貼り付けるため、保存しておくこと。レポートには、入力ファイルを貼り付けるだけでなく、どのような条件設定でシミュレーションを行ったか説明を加えること。

レポート課題8ファンアウト数の実験結果とデータの処理
(1) n=1, n=5, n=10 に対するXINVの出力電圧波形をレポートに貼付けよ。比較のため、XINVの入力電圧波形も合わせて貼付けること。
(2) ファンアウト数nと平均遅延時間tdの関係を表すグラフを作成し、このグラフから、nとtdの関係式を導け。このグラフを Measurement Tool で作成するのは面倒なので、Gnuplot などのグラフ作成ソフトを使用するとよい。

レポート課題9ファンアウト数の実験結果の考察
(1) ファンアウト数nと平均遅延時間td のグラフにおいて n=0 に外挿しても遅延時間tdがゼロとならないとしたら、その理由について考察せよ。


INDEX
お問い合わせはこちらまで: kitagawa@is.t.kanazawa-u.ac.jp

Copyright © 2001 Akio Kitagawa, Kanazawa Univ. All rights reserved.