TSpiceでデジタル回路
アナログ回路は、電圧または電流の大きさ自体をデータとして扱います。例えば、12.5Vとか、29.07mA のようにです。
一方、デジタル回路では、値は単に2値として扱います。ONかOFFか、2.5Vより高いか低いか、磁極がN極かS極か、等々、取り決めた値に関してレベルを二つの区域に分けて取り扱います。二つの値だけなので、数学上では、0と1を使います。そして、デジタルで複雑なデータを表す場合は、複数の信号データ(複数の信号線、あるいは複数の周波数域など)を使い、または、時間分割されたシリアル信号のかたちで、取り扱われます。データの要素はビットという概念を使い、2進法では、0100111000101、、、となりますが、人間にわかりにくいので、4ビット単位で、0、1、2、、、9、A、B、C、D、E、F の計16文字を当てて、 0xFF0017B0 (0xは16進表記記号) のように書き表す場合もあります。
デジタル・データの良さは、データの正確さを容易に保つことができる点に尽きます。長い伝送系や、複雑な演算を繰り返しても、デジタルデータなら劣化を回避することができます。更に冗長ビットを利用して、データの信頼性を補完したり、誤りデータの回復さえ可能です。現在では、コンピュータの中ばかりでなく、通信データもアナログからデジタルに置き換わりつつあります。
しかし、このデジタル時代、回路技術者のデジタル技術レベルは上がっているでしょうか? 答えは多分NOです。1980年前後までは、確かに回路設計者達は、明けても暮れても74ゲート回路をひねくりまわして、複雑なデジタル論理回路を組んでいましたが、CPUが普及すると共に急速に、それは退けられてしまったからです。しかし、基本的なアナログ回路技術同様、デジタル回路技術も捨て去るべきではありません。
CPUに頼っていては不可能な動作も、デジタルやアナログ回路なら可能となる場面が多々あるからです。
◆論理ゲート
基本的には、デジタル回路は論理ゲートで構成されています。上は論理ゲートの記号です。
(実は上の記号はLTspice専用の記号のため、一般の図記号とちょっと違っています。入力側は最大5端子接続できるように小さな四角い端子が見えている点と、出力端子側に正論理端子と負論理端子の2本出ている点です。特に正式な記号では、出力端子は中央から1本だけなのですが誤解無きよう注意してください。)
信号は図記号の左側から入力され、右側へ出力されます。NOTゲート以外は2つ以上の入力端子があり、出力は何れもひとつです。
信号の電圧レベルが高い(H)状態が論理1、低い(L)レベルが論理0で表すことになっています。素子の種類はTTL、HTTL、CMOS、など各種あり、それぞれのH/L判断レベルは異なっていますが、論理的にはあくまで1か0で扱います。
小さな○記号は反転論理記号、つまりLが1、Hが0で表されることを意味します。そして、同一の信号上では、素子の論理を一致させることになっています。例えば、同じNOTゲートでも、正論理の回路の入力側は○なし、出力側に○が付きますが、負論理回路の入力側に○を付け、出力側には○が無い記号を使います。ただし、LTspiceなどCADでは論理記号を簡単に変更することができないため、この約束ごとは守られていないのが現状です。
NOTは、入力論理を反転して出力 (1を0に 0を1に) します。
ANDは入力が全て1の場合、出力が1
NANDは、入力が全て1の場合、出力が0
ORは、入力の何れかが1の場合、1
NORは、入力の何れかが1の場合、0
XORは、二つの入力が異なっていた場合1
XNORは、二つの入力が異なっていた場合0
が出力される論理回路です。
論理ゲートは複数の見方ができます。例えば、 「AとBが共に1」、という条件は、「AまたはBの何れかが0」と同じことになります。論理記号上では表記法が異なる 「AND」 と、「負入力のNOR」 も、回路上は全く同じ素子ということになります。詳しくは「ブール代数」の範疇に入りますので、ここでは省略します。
ところで、上のゲートの中でも、NOTと、2 INPUT-ORと、2 INPUT-ANDの3つのゲートは、最も基本的なゲートで、この3種のゲートがあれば、他のどんな論理ゲートも、組み合わせで構成することができます。我々の使う通常言語でいえば、「でない」「または」「かつ」の3種類の文法があれば、あらゆる任意な対象群を特定できるということと、通じています。
蛇足ですが、3つの論理には、人間が得意とする「かも?」が欠けていることは注目に値します。
◆
クリスタル発振回路
10MHz
インバーター(A1,A2) 2個を使い、初期ショックを与えて発振させています。R1,R2が適当でなないと発振しなかったり、てい倍発振になります。
◆
微分パルス発生
緑:入力パルス 青:出力微分パルス
コンデンサを直列に入れる微分回路はノイズに弱い欠点がありますが、この回路は積分波形とANDを取ることで微分波形を得ていますので誤動作に強い回路です。A1〜A3はANDの負論理出力を使っていますのでNANDと呼ばれています。
◆
分周回路
緑:入力クロック 青:Q1 赤:Q2 水色:Q3
DフリップフロップはCLKを1/2に分周する機能があります。上は3段分周回路です。
74LS74はD-FF×2個入り。2進カウンター、周波数逓減のためのプリスケーラー、アドレスデータ生成等によく使われます。
◆
JK-FFでバイナリ動作
緑:クロックパルスV1 青:出力Q V2= /リセット
上は6-NANDで構成したJKフリップフロップ。
JとKを、共にHに接続してバイナリ動作としている。クロックが1/2に分周されます。
◆
JK-FFでDFF
緑:クロックパルスV1 青:データV3 赤:出力Q V2:/リセット
JK-FFを使い、KにJの反転データを入力すると、クロックパルスに同期してデータを取り込むD型FFとなります。
◆
フリップフロップ
フリップフロップ(FF)はデジタル回路の主要な要素です。特に、CPUの中のレジスターはFFのかたまりとも言えます。データを1または0の2値として記憶し、他の回路にデータを伝達する機能素子として、無数のFFが組み込まれています。
上のJK-FFの働きを、詳しく追っかけると判ってくると思いますが、FFは帰還回路と、帰還回路による動作時間の遅れを巧みに利用した回路です。
◆
NOT回路
CMOSによる NOT 回路です。 1→0 に、 0→1 のように論理を反転します。
【解説】バイポーラ・トランジスタを使った回路は、多少とも、常に電流が流れている状態で使うため、LSIなどの回路においては、その消費電力や発熱の問題を避けることができません。P-MOSとN-MOSを使ったC-MOS集積回路は、入力は電圧でおこなわれ、出力がONとOFFだけでよいデジタル回路の場合は、同じ状態を保つだけなら、基本的には電流は不要のため、大幅に消費電力を減少させることができます。
しかし、動作周波数が上がってくると、電極容量を充放電するために流れる電流が無視できなくなります。この問題は、回路パターンの微細化で次々と克服されています。最小パターン幅の競争は、単に数字上の競争ではなく、即、消費電力低減と動作速度に結びくからです。
それでもなお、高性能なCPUでは、ヒートシンクでは収まらず、強制空冷、水冷、ヒートポンプなどが使われています。
TTLのNOT回路(インバーター)
下は74LS06 の内部回路です。単なるインバーターとはいえ、とても凝った回路になっています。
Q1のベース入力からQ3までの回路は必須ですが、他は速度を上げるための回路です。
図はサイン波を入力した時の出力波形です。
◆
OR回路
MOSによる OR回路です。 AまたはBの何れかが1なら、出力は1になります。
◆
AND回路
MOSによる AND回路です。 AとBが1なら、出力は1になります。
◆
XOR回路
MOSによる XOR回路です。 AとBの論理が等しくない場合、出力が1になります。この回路は4つのNANDで構成されています。
4-NANDで表記すると下記のようになります。(上の回路では多くの素子を使っていますが、実際はもっと素子数を減らすことも可能です)
◆
12進リプルカウンタ
時計など12進法で計数するのカウンタ回路の例。 グラフは下からクロックIN、QA、QB、QC、QD、ANDゲートA1で作られるQBクリヤ信号。
各FFのQ出力がどう変わるか、下の表で見てみると、
カウント |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
QD |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
↑0 |
QC |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
↑1 |
1 |
↑0 |
QB |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
| 0 |
0 |
| 0 |
QA |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
FFの値 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
C |
D |
0 |
カウントの1番目から9番目までは通常のバイナリカウンタと同じですが、10番目のQBを見ると、髭のような信号になっています。これは、QBが1になった結果、自分自身のFFにクリヤが掛かり、瞬間でQBが落ちたためです。表では
| と表記してあります。
しかし短いパルスとは言え、パルスはパルスですから、上の桁QCにキャリーが上がっています。結果、FFは、1100 つまり、10(A)番目の計数にも係わらず、FFは2カウント多い12(C)にジャンプしたことになります。
同じような現象は12番目でも起こり、今度は、FFはDから、0にジャンプします。つまり、2回のジャンプで、4カウント分多い状態を作りだした結果、初期の0に戻ったということになります。
先例の分周回路や、上のカウンタは非同期カウンタと呼ばれるカウンタです。非同期カウンタは各FFが同一のクロックに合わせて一斉に動作するのではなく、下位から順に上位桁に動作が連鎖していきます。非同期カウンタは回路が簡単なのでよく用いられますが、弱点は、桁上げが揃わずバラバラになることです。ある瞬間のQの並びを写真に撮ってみたら、何故かおかしなカウント値が写っていた、というようなことが起きる可能性があるのです。
◆
同期カウンタ
上のカウンタは、比較的シンプルな同期カウンタの例です。全てのFFのクロックには同じクロックが入力されています。
しかし、良く考えると、FFは、下から上がってきたデータが自身のQと異なっていた場合はクロックに合わせてデータ変更されるため、確かに”クロック同期”ですが、桁数が多いと、直列に入れられたANDゲートからのデータは遅れて来ないのか?という疑問が出てきてしまいます。(この回路の動作速度を下げるか、段数を増して実験すると、結果を確認することができます。)
同期カウンタにはいくつかのタイプがあり、複雑な回路構成も見られるようです。桁数が多く、高速動作が要求される環境においては、下位桁の動作結果が次々と上位桁の動作と干渉しつつ、反映される訳ですから、実はFFにとっては、結構厄介動作なのです。
複雑な論理ゲート網より、簡潔で高速な非同期カウンタで構成し、最大桁上げに掛かる時間を予め待った上で、一斉にQを表に出してくるという、偽同期カウンタはどうなのでしょう? 何であれば、クロックは密かに早めに出しておくとか、先行する裏カウンタを幾つも用意しておいて、都合の良い答えだけを表クロックに合わせて出してくるとか、、
実は、高速CPUの中では以前から使われている、少しずるい手なのです。しかし、優れた棋士は、相手が指してから考え始める棋士などいません。何十手も先立って考えておくのは当たり前ですから、デジタル回路にだってその手は有りなのです。
◆
8ビット全加算器
上は8ビットの全加算回路
上例では、
A = 58 (0b00111010 0x3A)
B = 84 (0b01010100 0x54) が入力され、
答えSに A+B = 142 (0b10001110 0x8E) が出力されています。
下図は部分拡大図で、上位桁のA7〜A6 B7〜B6 および S7〜S6 とキャリービットCY
下図は下位桁のA1〜A0 B1〜B0 および S1〜S0 と 下位からのキャリービットCYL(ここでは0)
2進全加算器は全桁とも、同じ構造の桁から構成されています。
1桁の加算回路は XORとANDから成る半加算器と、もうひとつの半加算器とから構成され、ORでキャリーを取り出すことで、
0+0=0
1+0=1
0+1=1
1+1=0 + CY
の論理計算をしています。CY は次の上位桁への桁上げです。
8ビットでは、0〜255 の正の整数、または -128〜127 の数値を扱うことができます。
ビットを増やすことで
16ビットでは、0〜65,535 または -32,768〜32,767
32ビットでは、0〜4,294,967,296 または -2,147,483,648〜2,147,483,647
を扱うことができることになります。(ただし、桁上げの速度が問題になって来ますので、回路上の工夫が必要です)
以上のように、NOT,AND,OR (XOR) を組み合わせた回路は、あらゆる論理演算が可能で、加算器ばかりでなく減算、乗算、除算を始めコンピューターの演算機能を担っています。なお、減算は各ビットを反転して+1した(2の補数)を加算することで減算をすることができます。また、乗算と除算は、加算および減算の繰り返しでもできますが、ビットをひとつ右シフトすることで×2が得られ、左シフトで÷2ができることを応用すると、より高速演算が可能となります。
◆
DA変換回路
上は8ビットのデジタル-アナログ変換回路。
R-2Rラダー回路と呼ばれ、例では5kと10kの抵抗を使っています。
デジタル出力に0VとHボルトを使うことで256分のHボルトの分解能でアナログ出力を得ることができます。
例では10Vの 10100001 をアナログ変換しています。
10V×1/2=5V
10V×1/8=1.25V
10V×1/256=0.03906V
計 6.2890625
Top page