今、ある入力端子に、
1を入力するとOnし、0を入力するとOffするLSIと
0を入力するとOnし、0を入力するとOffするLSIがあるとします。
そのLSIに対して、図のようにスイッチでOn/Offする回路を接続しました。
さて、この回路、正しく動作するでしょうか?
答えはNoです。
確かに、スイッチがOnの時は、目的の1 or 0が入力されるのですが、
スイッチがOffの時は、何も接続されない入力オープンの状態となり、
目的の0 or 1が入力されないから。というのがその理由です。
もう少し説明を加えると、
入力オープンの状態では、入力端子の電位が0 or 1に定まらず、
その先にある論理回路が、
1が入力された場合の動作をするのか、
0が入力された場合の動作をするのか、
の予測ができません。
更にノイズなどで電位が揺らされると、動作不安定な状態となります。
このように、LSIにとって、入力オープンの状態というのは、
誤動作を引き起こす原因となります。
そこで登場するのが、プルアップ、プルダウンです。
(やっとここまできました。あともう少しです)
これで、
プルダウン(左)は、スイッチOn時に1を入力し、Off時に0を入力する回路。
プルアップ(右)は、スイッチOn時に0を入力し、Off時に1を入力する回路。
となり、正しく動作させることができそうです。
「いちよう聞いておきますが、図の抵抗は何ですか?」
ご質問ありがとうございます。
一般的に、プルアップ抵抗、プルダウン抵抗と呼ばれるものです。
この抵抗がないとスイッチOn時に電源とGNDがショートします。(電流&infin)
「プリミティブなのでLSIの中ですよね?」
その通りです。失礼しました。
(以上です・・・多分)
論理はsimで確認してください。
テスト回路
テストベンチ
tb_pullud.zip ・・・ポチッと
sim結果(ModelSim)
入力がHi-Z(オープン)の時、Hにプルアップ or Lにプルダウンされ、
その他は入力値が、そのまま出力されています。
いかがでしたか?
なお、プルアップ、プルダウンされた箇所が点線で表示されていますが、
これらは、プルアップ、プルダウンされた信号が、
端子から入力された信号よりも弱い信号であることを示しています。
この信号の強弱を信号強度と呼び、図のSt0, St1, StX, Pu0, Pu1は、
それぞれ、strong0, strong1, strongX, pull0, pull1の略で、
strong0, strong1, strongXの方がpull0, pull1よりも強い。という関係にあります。
strong*, pull* 以外にも幾つかありますが、
信号強度については、別の機会に説明したいと思います。
cmosプリミティブ | 信号強度 |