WGexでスタンダードセルを使って論理回路を設計する
スタンダードセルで、NOTゲート(インバータ)やNANDゲートといった論理ゲートの作り方を紹介しました。というより、既に作ったものがあります。せっかくですから、既にあるもの(ライブラリ)は、活用しましょう。 スタンダードセルは、論理ゲートの物理的なレイアウト設計のデータですから、それを1つの論理ゲートとして、論理回路を設計する調子で並べてつないでいけば、好きな論理回路を作ることが(原理上は)できます。
例として、ANDゲート(論理積)をつくってみましょう。ANDゲートは、NANDゲートのあとにNOTゲート(インバータ)をつなげば作れます。
※集積回路(CMOS)では、ANDゲートを直接つくることはできず、必ずNAND・NOR・NOTのように、出力側に○(否定)がつく論理ゲートしかできません。そこでAND・ORのように○がない論理ゲートが必要なときは、このようにNOTゲートをつけたり、あるいはド・モルガンの定理などを活用して、なるべくNAND/NOR/NOTで論理回路を構成するようにします。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc00.png
これに必要なNANDゲートとインバータは、すでに(誰かが)作ったライブラリ(スタンダードセル)がありますので、それを有り難く使わせてもらいましょう。
↑こちらから、「nand2_v2.gex」と「inv1_v2.gex」の2つをダウンロードしておいてください。(今後のために全部ダウンロードしておいてもいいですよ!)
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc01.png
↑inv1_v2.gex
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc02.png
↑nand2_v2.gex
さて作業ディレクトリにgex.defを置いた状態でWGexを起動し、新しい回路の設計をはじめます。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc03.png
↑適当な場所でマウスを右クリックして、メニューを表示させ、この中の「セル」を押します。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc04.png
↑セルを置きたい場所で左クリックすると、このような置くセルを選ぶことができます。まずNANDゲート(nand2_v2.gex)を選びます。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc05.png
↑するとこのnand2_v2.gexが配置されます。これは個別に長方形を描いたものではなく、これ全体で一つのまとまり(グループ)ですので、個別の長方形を変形したりすることはできません。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc07.png
↑続いて、すぐ右側あたり(場所は適当でOKです)に、同じようにインバータ(inv1_v2.gex)を配置します。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc08.png
↑続いて両者がぴったり並ぶように移動します。なるべく近づけて、全体の面積を小さく収めたいところですが、設計ルールでメタル配線どうしの間隔の最小値などが決められていますから、それを満たす必要があります。 ここでは、この赤丸のところのML1(水色)が「4um」となるように配置してみましょう。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc09.png
↑この状態では、NANDゲートとインバータは、ただ並んでおいてあるだけで、つながってはいませんので、メタル配線で接続しましょう。NANDゲートの出力(Y)とインバータの入力(A)をつなげばよいわけですから、この赤丸のようにML1で長方形を描いて、両者がつながるようにします。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc10.png
↑もちろんこの両者がつながっていればいいわけですから、このようにML2(白)でつながるようにしてもOKです。※ML2の最小幅は6umですので、それ以上の幅になるように
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc06.png
↑このほか、配線を交差させたい場合は、ML1とML2をつなぐVIAを使って、こんな感じで配線をおけばOKです。基板の表面と裏面で縦と横の配線が交差している、ようなイメージです。
https://makelsi.github.io/images/docs/wgex_stdcell_usage/sc11.png
↑最後に、このANDゲートの入力と出力に、わかるように名前をつけておきましょう。この例では、入力にINA、INB、出力にOUTという名前をつけています。これは「文字列」として、ML1/ML2と同じレイヤで描いておきます。元のnand2_v2.gexやinv1_v2.gexに描いてあるA/B/Yの文字もありますが、気にしないでOKです。自分で描いた文字と区別したければ、文字の大きさを変えておくとよいでしょう。
参考までに、完成したANDゲートの例をおいておきます。