プリミティブ

皆さんが、プリミティブを目する機会は少ないと思います。

これは、ロジックセルやアナログIPなどの設計者が、Trレベルで設計した回路を
Verilogシミュレータ用にモデル化する際に用いる基本ゲート、スイッチのことです。


プリミティブの種類

プリミティブには、以下の26種類があります。
主だったものから順に説明します。

なお、以下のリストは、各項目へのリンクにもなっています。
お好みの方法でご覧ください。・・・ポチッと

GateSwitch
and
nand
or
nor
xor
xnor
buf
not
bufif0
bufif1
notif0
notif1
pulldown
pullup
nmos
pmos

rnmos
rpmos

cmos
rcmos
tran
tranif0
tranif1
rtran
rtranif0
rtranif1

nmos, pmosプリミティブ

nmos, pmosは、実際のTrと同じ動作をします。

ゲート=Highでnmos TrがOnし、Lowでpmos TrがOnします。
どちらも、TrがOnした状態ではドレインはソースの値を出力し、Offした状態ではHi-Zになります。
簡単ですね。

では、回路図と真理値表にまとめましたので確認してみましょう。

nmos、pmos

入力値にXやZがあることに気付かれましたか?
ロジックにはないですよね。

なぜ、XやZがあるのでしょう?

理由は簡単。Trレベルの回路には出力ショートがあるからです。
cmos、インバータ、nandなどがその例ですが、
それらはcmosの項で説明します。

では、ゲート(CONTROL)が不定(X)の場合を説明しますね。

不定は、"0 or 1のどちらか"のことなので、
ゲートが不定の場合、ドレイン(OUT)は、
 ソースの値 (DATA) or Hi-Z
ということになります。

従って、そのソースの値が、
 0ならば、ドレインは0 or Hi-Z
 1ならば、ドレインは1 or Hi-Z
 Hi-Zならば、ドレインはHi-Z

さらに、そのソースの値が、
 不定ならば、ドレインは0 or 1 or Hi-Z
ということになります。

ここで、真理値表にある
Lは、0 or Hi-Zのこと。Hは、1 or Hi-Zのことです。
(それぞれ何の略でしょうね? Lower? Higher?)

また、0 or 1 or Hi-Zは、・・・Xです。・・・さすがに。

これで不定の場合の説明は終わりです。

「ちょっと待ってください。simでL, Hなんて値はみたことがないです。」

確かにsimの出力値としてL, Hなんてないですね。
Xです。失礼しました。

ただシミュレータ自体は、LなX。HなX。という情報を持っています。
(後ほど、simで確認します)
これも出力ショートが許されるプリミティブならではです。
ややこしいですね。


最後にゲートがHi-Zの場合ですが、これだけ少しアナログ的です。

Hi-Zって何でしょう?
そう、中間電位です。

中間電位とは、電源の半分。・・・ではなく。中途半端な電位のこと。なので、
nmosのゲートがOnするかもね〜。
pmosがOffするかもね〜。
という電位です。

それって結局、ゲートがLowかもね〜。Highかもね〜。ということなので、
ゲートが"0 or 1のどちらか"という不定と同じ動作になります。


という訳で、simで確かめてみましょう。

テスト回路
回路記述

テストベンチ
tb_npmos.zip ・・・ポチッと

sim結果(ModelSim)
[nmos]
波形

[pmos]
波形

ONTROL=0の時、nmosはHi-Z。pmosはDATAを出力。
CONTROL=1の時、nmosはDATAを出力。pmosはHi-Z。
CONTROL=X() or Z()の時、
DATA=0は、StL(Lのこと)
DATA=1は、StH(Hのこと)
DATA=Xは、X。
DATA=Zは、Hi-Z。

真理値表と同じ結果になりました。

いかがでしたか?

なお、ModelSimでStLやStHを表示するには、FormatをLiteralにします。