デジタル回路(デジタルかいろ、英: digital circuit - ディジタル回路)は、アナログ回路に対比してデジタル表現された電気信号の論理演算、相互変換、蓄積及び伝達などを行う、離散的な電位範囲などを情報の表現に用いる電子回路で、論理回路の実現法のひとつである。信号レベルが公差、減衰、ノイズなどで若干変動したとしても、しきい値の範囲内ならば無視され、いずれかの状態として扱われる。許される範囲に間隔が設定されていて、「いずれの状態でもない」という異常として検出されるといった場合もある。

まず2状態を前提として説明する。2000年代の多くの機器では、0Vに近い電圧と、5Vや3V、1.2Vといった電圧を、2種類の状態に対応させている。これらはそれぞれ「Low」「High」、「L」「H」などと表現される。Lowを0や偽、Highを1や真に対応させる正論理と、逆に対応させる負論理は、相互接続などではどちらかに決めないといけないが、内部的には適宜使い分ける(回路的にはANDやORよりもNANDやNORのほうが作りやすいといったこともあり、適宜使い分けないと非常に効率が悪い)。かつては15V程度までは使われることもあった。以上は集積回路ベースの現在広く使われている回路の場合で、いわゆるディスクリート部品の時代や、真空管による回路の時代にはもっと高い電圧が使われていた。また、2010年代に増えてきたMLCのフラッシュメモリなどのように、多値論理に相当する、2よりも多くの状態を利用している素子や機器といったものもそれなりにある。

## 概要

正確に連続な値の変化を再現する必要がなく、いくつかの既知の状態だけを扱えばよいので、アナログ回路よりも扱いが容易なことも多い。一方、電流の合計などとして加算を扱うことができる、といったように、アナログ的なほうが扱いが簡単な場合もある。デジタル回路は、その機能に応じて様々な回路が考案されている。以下の代表的なデジタル回路については、それぞれの項目に詳細な説明があり汎用ロジックICにこれらの製品に関する説明がある。

- フリップフロップ
- カウンタ
  - プログラマブル・カウンタ
- シフトレジスタ
- 位相同期回路
- 加算器、乗算器
- デジタル-アナログ変換回路
- アナログ-デジタル変換回路

## 利点

アナログ回路と比較したときのデジタル回路の利点は、伝送された信号がノイズによって劣化しても、あらかじめ見込んだ許容範囲内ならば、ディジタル的に表現された情報は劣化することなく伝送できるという点である。例えば、連続な音響信号も1と0の並びとして伝送すれば、ノイズが1と0を区別できなくするほど大きくない限り、誤りなしで元の音響信号を再現することができる。アナログ記憶されているLPレコードが直径12インチ (30cm) で収録時間30分に対し、直径12cmのコンパクトディスクには約1時間分の音楽を録音でき、その記録は約60億個の1と0で構成されている。

デジタルシステムでは、より正確に信号を表そうとするとより多くのビット数を必要とする。すると信号を処理するのにより多くのデジタル回路が必要となるが、個々のビットの処理に必要なハードウェアは同種のものである。アナログシステムで分解能を上げようとすれば、回路の線形性やノイズ特性といった根本的な改善が必要となる。

コンピュータ制御のデジタルシステムはソフトウェアで制御され、ハードウェアを改造しなくとも機能を追加できる。この場合の機能追加は工場の外で行われ、製品のソフトウェアをアップデートすることで行われる。製品設計に問題があったとしても、顧客が自分の手で後から修正することも可能となる。

情報の格納はアナログよりもデジタル回路の方が容易である。デジタルシステムのノイズ耐性により、格納して取り出す際にもデータが劣化しない。アナログシステムでは、経年劣化や磨耗によってノイズが蓄積し、格納されている情報が劣化する。デジタルシステムでは、そのようなノイズが一定のレベル未満であれば、情報を完璧に復元できる。

## 欠点

場合によっては同じことをするアナログ回路よりもエネルギーを多く消費することがあり、結果として発熱も多くなる。携帯型のバッテリー駆動のシステムでは、このことがデジタルシステム利用の制約になることがある。

例えば、携帯電話は基地局との無線通信のフロントエンド部(増幅や同調)に低消費電力のアナログ回路を使うことが多い。一方、基地局は通常の電力網から電力供給されるので、電力消費が大きいが非常に柔軟なソフトウェア無線を利用できる。その場合、無線の規格変更にもプログラムの変更で柔軟に対応可能である。

デジタルシステムの多くは連続なアナログ信号を離散的なデジタル信号に変換する必要がある。このとき量子化誤差を生じる。量子化誤差を低減するには、必要な忠実度にあわせて信号を表すデジタルデータの量を増やせばよい。標本化定理は、アナログ信号を正確に表すのに必要なデジタルデータの量について重要な指針を与える。

システムによっては、デジタルデータのごく一部が失われたり壊れたりしただけで関連する大きなデータブロックの意味が完全に変わってしまう。例えばアナログのテレビは信号(電波)が弱くなると徐々にノイズが多くなるが、デジタルテレビではノイズがあるしきい値を越えると突然映像の再現が全くできなくなる。

デジタルの脆さはシステムの頑健性を高める設計によって改善できる。例えば、パリティビットや誤り検出訂正といった手法を信号経路に挿入する。それらは誤りを検出して、さらにその誤りを訂正できるものであり、あるいは少なくともデータの新たなコピーの再送を要求できる。状態機械では、未使用状態を捉えるとリセットシーケンスのトリガーとしたり、誤り訂正処理を開始したりするよう状態遷移ロジックを設計できる。

デジタルのメモリシステムや通信システムは、誤り検出訂正の技法として追加のデータを使って訂正するという方法を採用することができる。
一方で、1ビットの誤りにも無防備なデジタルシステムもある。これは、より下のレイヤで誤りを検出して訂正するか、訂正不能な場合は破棄・再送するなどしていて、誤りが入り込まないことを前提にできる場合である。たとえば、FTPには通常、誤り訂正などは無いが、それはTCPにチェックサムによるチェックがあるためであり、さらに良く使われているイーサネットでCRCによるチェックが入るため、誤りはまず無いとして良いからである。

## 電圧レベル

デジタル回路では2つの電圧レベルを、二進数または論理レベルの「0」と「1」を表すために使う。正論理では、Lowは二進数「0」、Highは二進数「1」を表し、負論理(アクティブ・ロー)では逆の意味に使われる。たとえば、0から1.5ボルトは論理0、3.5から5ボルトは論理1というようになる。1.5から3.5ボルトの間はスレッショルド・レベルと呼ばれる論理遷移時以外では禁止された電圧領域であり、HighとLowの入力の区別がつかないために動作の保証が得られなくなる。論理遷移の期間というのは、通常は過渡的な現象であり、ほとんどの回路は純粋な抵抗回路ではないので電圧レベルがすぐに変化しないことによって起こる。このような異常状態を検知できる論理回路もあるが、多くの場合、後段の回路では前段の回路での遷移によって出力を変化させる前に前段の遷移が終了しHigh又はLowに安定するが、前段の回路での遷移に時間が掛かれば、後段回路では入力をHigh又はLowのいずれかとして解釈する。

CMOSによるデジタル回路の場合、その内部構造の都合上、この異常状態にある間は回路が大量の電力を消費してしまう。このため、異常状態を長く継続させてしまうと発熱により素子が破壊されるため、異常状態の継続を避ける回路上の工夫が必要となる。

一方、波形の立ち上がりと立ち下がりで論理遷移の値を意図的に異なる値とすること(ヒステリシス、履歴現象)で異常状態を回避する方法があり、シュミットトリガと呼ばれる。抵抗器の接続により容易に実現可能であるほか、専用の汎用ロジックICもある。

二値論理レベルの例

| 回路素子 | Lowの電圧 | Highの電圧 |
| --- | --- | --- |
| CMOS | 0 - 0.3Vdd | 0.7Vdd - Vdd |
| TTL | 0 - 0.8V | 2V - Vcc |

VddとVccは電源電圧を意味する。TTLの電源電圧の許容範囲は4.75-5.25Vである。

電源電圧が同じCMOSとTTLが同一回路上に混在している場合、CMOSの出力をTTLに入力することは問題ないが、その逆はTTLのHレベル出力電圧の下限がCMOSのHレベル入力電圧の下限を満たさないため、誤動作する可能性がある。このようなときは、TTLの出力をプルアップするなどの処理が必要となる。

初期のデジタル回路では、シリコン基板上へのトランジスタの形成の制限によりPMOS、又はNMOSにより回路内部を構成していた。この場合、入力がLowの時にはあまり電力を消費しないが入力がHighの時には大きく電力を消費する、又はその逆の特性を持つため、この都合に合わせてアクティブ・ハイで論理回路を設計するか、アクティブ・ローで論理回路を設計するかが消費電力削減には重要な意味を持っていた。

## プルアップ・プルダウン

上で述べたように、デジタル回路の電圧レベルは、原則として「High」または「Low」の論理レベルに合致した電圧が印加されていなければならない。「High」と「Low」の中間の電圧の状態になると、内部状態が不安定になり誤動作を起こしたり、消費電力が著しく増加したりする。また、「Low」よりも低い電圧や「High」よりも高い電圧が印加されると、設計外の電流の流れが発生して回路の破壊などが起こりえる。

一般に、デジタル回路の入力端子は内部インピーダンスが高い(電源回路との絶縁性が高い)。そのため、入力端子がどこにも接続されないような状態にあると、近辺の静電気や電磁誘導による電流の侵入によって予期せぬ電圧が印加される場合がある(電圧は電流とインピーダンスを掛け合わせた値で、微弱な電流でも高い電圧としてあらわれる)。このように、入力端子がどこにも接続されていない状態は「浮いている」と表現されることが多く、内部の回路に障害(影響)を受けないよう対策をとらなければならない。

対策としては、電源電圧または接地電圧と、入力端子との間に、数kΩから数百kΩという比較的高い値の抵抗器を挿入する。電源(電源電圧)側に抵抗器を挿入することをプルアップと呼び、しばしば「電源に吊りあげる」などと表現することもある。また、接地(接地電圧、グランド)側に抵抗器を挿入することをプルダウンと呼び、しばしば「グランドに落とす」などと表現される。

プルアップまたはプルダウンされた入力端子は、出力端子が何も接続されていない状態でも、抵抗器(「プルアップ抵抗」、「プルダウン抵抗」という)の効果により、大きな電磁誘導等が起こらない限り電源電圧(High)または接地電圧(Low)のデジタル回路としての電圧が常に保たれる。なお、他のデジタル回路から出力信号を受ける場合、その出力中の回路は内部インピーダンスが極めて低くなるため、プルアップやプルダウンに使われる抵抗値は、回路全体としてはほとんど無視できる状態になる。

プルアップ抵抗の値は、大きすぎると絶縁とあまり変わらない状態になり、電磁誘導などに弱くなってしまう。しかし、小さすぎるとそこに接続される出力素子に大きな電流を流す要因となり、回路の消費電力の増大や最悪の場合出力素子の破損につながることになる。

入力端子につながる信号線が、通信線などのように比較的長い距離を持つものである場合、その線で電磁誘導が起こって電源電圧や接地電圧の範囲外の異常電圧が加わる可能性が高くなる。こういった場合には、プルアップ抵抗に並列にダイオードを挿入し、異常電圧による電流が電源線のほうに逃げてデジタル回路素子内に流れ込まないように工夫をする。この用途のダイオードは「クランプダイオード」と呼ばれる。デジタル入力の保護目的以外でも、電圧値域を制限する目的のダイオードはクランプダイオードと呼ばれる。

複数の回路数を持つ汎用的な集積回路を使った設計を行うとき、ひとつの集積回路の中に入っている全ての回路を使わずに、一部の回路だけを使うということがよく行われる。この時、使用しない回路の入力端子はその状態が High だろうが Low だろうが動作に全く関係がないため、ともすればどこにも接続されずに放置されてしまうことがある。しかし、入力端子の電位が設計範囲外になったりしきい値付近になると設計外の電流の流れが生じ、周辺の回路を巻き込んで破壊されてしまうことがある。特にTTLでは入力端子が解放されていても破壊の危険性が比較的低かったため、配線省略などを意図して未使用入力端子の処理をしないことも多かった。しかし、CMOSの場合は中間電圧が加わった時に大電流が流れるなど回路破壊の可能性が高く、入力端子の処理を怠ると危険である。また、TTLであっても未使用入力端子を放置すればゲート回路はノイズを入力源としたアンプとして働き、電力をムダに消費しながら周囲の信号の変化に応じて電源とグランドの電位を揺らすため避けなければならない。これらの処理を正しく行っていない回路は、一応は動作するためミスに気付き辛く、量産をしたり長期運用をしたときに故障率が異常に高いことによって発見されるということもある。実際の回路設計では、TTLであるかCMOSであるかを区別せず、未使用回路の入力端子は必ず処理されなければならない。

近年の組み込み用CPUなどの集積回路の場合、外部に付けなければいけない部品点数を削減するために、このプルアップ抵抗を集積回路の中に内蔵しているというものが多くなってきている。また、製品によっては、このプルアップ抵抗を使うか使わないかをソフトウェアで選択できるようになっているものもある。

## ファン・アウト

デジタル回路では、ひとつの出力端子に複数の後段回路の入力がつながることはごく普通に行われる。出力端子につながれた入力端子の数のことを、出力端子を扇の要に見立てて、ファン・アウトと呼ぶ。

デジタル回路では電圧値により情報を素子から素子に伝達するが、この際電気回路であるから当然電流の流れが伴う。具体的には、出力側のレベルをLにする為には、出力端子が後ろの回路から電流を吸い込む動作をし、出力側のレベルをHにする為には、出力端子が後ろの回路に電流を吐き出す動作をする。

TTLのように、入力端子に流れ込んだり、入力端子から流れ出したりする電流が比較的大きな素子で回路を組む場合、前段の出力側素子の電流駆動能力によって、ファン・アウトの数が制限されてくる。

TTLの場合、標準タイプ・LSタイプ・ALSタイプなど様々なタイプのシリーズがあるが、そのシリーズ内の規格により出力端子の駆動能力と、入力端子が吸い込む(または吐き出す)電流の最大値が規格化されているため、同じシリーズのIC同士であれば、ファンアウトの制限値は同じになる。

ただし、多数の入力に信号を分配する目的のために、同じ論理回路でもファン・アウト値を大きくした回路素子が用意されている。そういう回路素子は論理的には何もしない、または反転するだけの単純なものである事が多く、バッファ、バスバッファ、ドライバなどと呼ばれる。

違ったタイプのシリーズを組み合わせて使う場合には、それぞれのデータシートを調べて、接続出来る個数を確認する必要がある。

CMOS型ロジックの場合は、入力端子は内部インピーダンスが高くつくられている(電源線や接地線に対する抵抗値が高い)ため、定常状態での電流値は微々たるものであるが、たくさんの入力端子を接続すると、それぞれの端子と配線部分の静電容量が並列接続されることにより、出力側から見た容量性負荷が増大する。このため、出力側素子の駆動能力が足りないと、HからL、LからHの状態遷移に時間が掛かることになり、これが回路動作上の制約となるため、やはり後段につなげられる入力端子の個数は制限される。

## ハイ・インピーダンス

1つの信号線に対して、信号を出力する素子を複数接続しているバス構造を用いる場合、信号を出力しようとしている素子とその信号を受信しようとしている素子のみがバスを通じて電気的に接合されていなければならない。回路の制御を誤って、不必要な複数の出力回路が同時に接続されてしまうと、回路間に電流が回り込んでしまい素子の破壊につながる。

この破壊を避けるためには、信号を出力する素子以外の出力回路については、全て電気的に絶縁しなければいけない。このように、出力している信号線以外を電気的に切り離した状態をハイ・インピーダンスと呼び、HighでもLowもない第三の状態として扱う。ハイ・インピーダンス状態は記号では「Z」で示される事が多い。

しかし、入力端子につながっている全ての出力端子がハイ・インピーダンス状態になった場合、入力端子には電気的に何も接続されていないのと同じになり(「浮いている」状態)、今度は、先に述べたような電磁誘導等による誤動作や素子破壊を伴うような状態におかれてしまう。このため、対策として、ハイ・インピーダンス状態を伴う信号線にはプルアップまたはプルダウンをするのが常套手段となっている。

ハイ・インピーダンス出力と似たものとして、オープンコレクタ出力がある。これは、出力が論理1の時にはLの電圧を出力するが、論理0の時にはHの電圧を出すのではなくハイ・インピーダンス状態になるという出力素子である。(負論理の出力になっている)

論理0の時にハイ・インピーダンスになるので、複数のオープンコレクタ出力の出力信号を単純に接続してしまった上でプルアップしておけば、出力のどれかが論理1になった時にLになる(全ての出力が論理0の時にはHになる)という回路になり、これは(負論理の)論理和を演算していることになる。このように、論理和用のデジタル回路素子を使うこと無く論理和を実現する回路のことを「ワイアードオア」と呼ぶ。

なお、オープンコレクタ出力の端子は、一般の出力端子よりも多く電流を流すことができるという特性も持つため、アナログ回路による電流増幅器を介すること無く、直接LEDを点灯させるなどの周辺装置の駆動ができる。

## スリーステート・バッファ

出力をハイ・インピーダンスにできる出力回路はスリーステート(三状態の意味)と呼ばれる。また、入力信号をそのまま出力する、信号を出力しない、ハイ・インピーダンスにするかの三状態に切り替えることができる回路は「スリーステート・バッファ」と呼ばれる。回路記号では、バッファを示す三角の印の側面にハイ・インピーダンスにするか否かの入力信号線が入る図形で示される。トライステートとも呼ばれるが、ナショナル セミコンダクターの商品名で、米国では"TRI-STATE"は商標登録されている(登録番号0941335・2138646)。なお、日本で「トライステート」「TRISTATE」は他者が登録している(登録番号 第2671297号)。

出力をハイ・インピーダンスにしないことを指示する入力信号線は、ゲートの意味で「G」と表記されたり、イネーブルの意味で「E」または「EN」と表記されることが多い。また、データバスなどのバス構造を持つ部分に使われる場合には、アウトプット・イネーブルの略で「OE」という記号が使われたり、チップ・セレクトの略で「CS」という記号が使われることも多い。

スリーステート・バッファを2つ組み合わせて、データ通信の方向を切り替えることができるようにした回路もよく使われている。この回路は「双方向バッファ」と呼ばれ、入力GがLの時にはYからXの方向にデータが伝わり、入力GがHの時にはXからYの方向にデータが伝わる。
スリーステート・バッファや双方向バッファは、いくつもの回路ブロックが信号線を共用するデータバスやアドレスバスなどに多用される。このため、データバスなどのビット数の単位となりやすい8個のスリーステート・バッファを一つにまとめたICが製造されており、よく利用されている。

また、同じくスリーステート・バッファを複数組み合わせ、ワイアードオアの原理を利用して複数の入力信号の一つだけを出力に伝えるという回路を構成することもできる。これは「データセレクタ」と呼ばれる。データセレクタは、一般の論理素子だけを用いて構成することもできる ($Y\leftarrow (S\land X1)\lor ((\lnot S)\land X2)$) が、スリーステートを利用することによりはるかに簡単な内部回路で実現できる。本例は2入力のデータセレクタであるが、4入力、8入力などのデータセレクタもこの回路の応用で簡単に作れる。

## デジタル回路でのアナログ問題

デジタル回路はアナログ回路と同様に一般的な電子部品で構成されており、物理的な現象に支配される。設計に当たってはそれら部品のアナログ的性質に影響されずに必要なデジタルな動作をさせるようにしなければならない。デジタルシステムはノイズやタイミングのマージン、寄生インダクタンスや寄生キャパシタンスを管理し、電源との接続をフィルタリングしなければならない。

設計に不備があると「グリッチ」と呼ばれる極めて細いパルスが発生し、ごく一部のロジックだけがそれに反応する。また、「ラントパルス」というしきい値に到達しないパルスが発生したり、ロジックの状態が予期しない組み合わせになったりする。

さらにクロックで駆動されるデジタルシステムをアナログシステムや異なるクロック周波数のデジタルシステムと接続する場合、入力の変化がデジタル入力ラッチの設定時間に違反することもある。このような状況は自然に解決するがそれまでにかかる時間は不定であり、その間に無効な信号がデジタルシステム内を伝播することになる。

デジタル回路はアナログ電子部品で出来ているため、同等の体積と電力を使ったとき、低精度のアナログ回路よりも処理速度が遅くなる。しかしデジタル回路はノイズへの耐性が高いため、繰り返し計算することができる。一方、高精度の計算(例えば14ビット以上の精度が必要な場合)では、アナログ回路はデジタル回路よりも大規模になり、電力も多く消費する。

## 構築

デジタル回路は論理ゲートと呼ばれる小さな電子回路から構成されることが多く、それによって組合わせ論理を形成する。個々の論理ゲートはブール論理の関数を実装している。論理ゲートは電気で制御されるスイッチを配置したもので、スイッチとしてトランジスタを使ったものが多い。論理ゲートはそれぞれに回路記号が対応している。詳しくは論理回路を参照。

論理ゲートの出力は電流または電圧であり、それがさらに後段の論理ゲート群を制御する。

論理ゲートはトランジスタの個数を最小に押さえて、大きさ・電力消費・コストをなるべく低減し、同時に信頼性を高く保つよう設計される。

集積回路は大量の論理ゲートを安価に生産する手段である。集積回路の設計にはEDAソフトウェアを使うのが一般的である(後述)。

参照テーブルを使ってデジタル回路を構築する技法もある(プログラマブルロジックデバイスなど)。参照テーブルを使った技法は、論理ゲートに基づく場合と同等の機能を実装でき、同時に配線を変更せずに容易に再プログラム可能である。すなわち、設計者が配線を変更せずに設計ミスを修正できる。したがって少量生産ではPLDなどをよく利用している。それらも一般にEDAソフトで設計されている。

デジタル回路として大規模なものが必要になり、低速であっても複雑なアルゴリズムや連鎖的動作が必要な場合、組み込みシステムとしてマイクロコントローラにプログラムを搭載して使うことが多い。

工場の生産ラインの制御などでは、プログラマブルロジックコントローラ (PLC) がよく使われている。こちらはラダー・ロジックなどを使って生産ラインのエンジニアがプログラミングを行う。

### デジタルシステムの構造

回路の複雑さを低減させるためには、なるべく単純化して機能を最小限にすることが多いが、これにより誤りも少なくなり安価となる。回路の単純化のためのアルゴリズムとしては、CADシステムに組み込まれたエスプレッソ・ヒューリスティック・ロジック・ミニママイザーなどがよく使われているが、古典的な二分決定図、自動化したクワイン・マクラスキー法、真理値表、カルノー図、ブール代数なども使われてきた。

デジタル回路の設計にとって、その表現は重要である。一部の解析手法は特定の表現でないと使えない。デジタル回路の古典的表現として論理ゲートを使ったものがある。もう1つの表現はトランジスタなどの電子スイッチを使って構成を表す方法がある。簡単な方法の1つとして、真理値表をメモリー上に配置する方法がある。入力群をメモリのアドレスとして使い、そのアドレスの指すメモリの内容が論理関数の出力となる。自動解析のために、これらの表現にはデジタルのファイルフォーマットがあり、コンピュータプログラムで処理することができる。

表現の選択にあたってはデジタルシステムの種類を考慮する。ほとんどのデジタルシステムは組合わせ回路と順序回路に分けられる。組合わせ回路は入力(の組合わせ)が同じであれば常に同じ出力を示す。これは論理関数を組み合わせたもの(基本論理ゲートの組合せ)といえる。

順序回路は一部の出力が入力にフィードバックされる組合わせ回路ということができる。これによって「逐次的」な動作を実現できる。最も単純な順序回路としてフリップフロップがあり、二進法の数字または「ビット」を保持することができる。

順序回路は有限オートマトンとして設計することが多い。その場合、システムの大まかな振る舞いを設計すれば論理関数の詳細を考慮せずにシミュレーションで検証できる。

順序回路はさらに2つに分類でき、クロック信号で駆動することで状態が一斉に変化するクロック同期システムと、入力の変化に伴って変化が伝播していく非同期システムがある。同期順序回路はフリップフロップのような非同期回路で構成されていて、それらがクロック信号にあわせて状態を変化させるようになっているため、タイミングマージンの設計には注意が必要である。

同期順序状態機械を実装する一般的な方法は、それを組合わせ回路部分と「状態レジスタ」と呼ばれるフリップフロップ群とに分けることである。クロック信号のパルスの度に状態レジスタが組合わせ回路の以前の状態から生成されたフィードバックを捉え、状態機械の組合わせ回路部分への不変の入力としてそれをフィードバックする。クロック周波数をどれだけ上げられるかは、組合わせ回路で最も時間のかかる経路によって決まる。

状態レジスタは単に二進数の数値を表している。状態機械の状態に番号を振れるとすれば、論理関数は次の状態の番号を生成する組合わせ回路だと言える。

それに対して非同期システムはありうるタイミングを全て考慮し、あらゆる状態を考慮しなければならず、設計が難しい。一般的手法としては、個々の状態が存在しうる最短時間と最長時間の表を作成し、そのような状態の数が最小になるよう回路を調整していき、全体が周期的に「自己再同期」と呼ばれる互換状態に入って待つようにする。そのように注意深く設計しないと容易に不安定な状態になり、個々の電子部品の値の公差などに起因する遅延が蓄積して予測不可能な結果となる。ある種の回路は本質的に非同期であり(フリップフロップで構成されるシンクロナイザ、スイッチデバウンサ、調停回路、外部からの非同期な信号が同期順序回路に入るような回路など)、このような設計が必須である。

2005年現在、同期設計の方が設計と検証が容易なため、デジタルシステムのほとんどが同期設計となっている。設計/シミュレーションツールも非同期回路用のものはほとんど存在しない。しかしうまく設計できればクロック周波数に制限されないぶんだけ非同期の方が優れていると言われている。

多くのデジタル回路はデータフローマシンと見なせる。この場合、同期式レジスタ転送レベルで設計ができ、VHDLやVerilogなどのハードウェア記述言語を使うことができる。

レジスタ転送レベルでは、一連のフリップフロップで構成されるレジスタに二進数の数を格納する。レジスタの出力は「バス」と呼ばれる配線の束に繋がっており、バスがその数を他の計算機構に向けて転送する。計算機構は単なる組合わせ回路である。計算機構にも出力バスがあり、いくつかのレジスタの入力と繋がっている。レジスタの入力にはマルチプレクサが配置されていることもあり、いくつかのバスから選択して数を格納することができる。あるいは、複数の出力をスリーステート・バッファ経由でバスに接続し、1つを除いて他の出力を遮断することができる。逐次状態機械は、それぞれのレジスタが入力から新たなデータを受け取る時点を制御する。

1980年代、一部の研究者はFIFO式同期論理を使うことでほとんどの同期式レジスタ転送機械を非同期設計に変換できることを発見した。この場合デジタル機械はデータフローの集合と見なせる。フローの各ステップにおいて、非同期の「同期回路」はその出力が妥当なものかどうかを判断でき、次のステップに対して「データを使ってよい」という信号を出すことができる。したがって、相対的に単純なステップ間の同期回路だけを設置すればよい。

コンピュータは最も汎用的なレジスタ転送論理機械である。コンピュータの制御装置は一般にマイクロシーケンサ上でマイクロプログラムを動作させるよう設計されている。マイクロプログラムは自動ピアノの巻紙に似ている。マイクロプログラムの「ワード」またはテーブルのエントリは、コンピュータを制御する全てのビットの状態を指揮する。マイクロシーケンサはカウントし、そのカウントが次のマイクロプログラムを格納したメモリ位置や組合わせ回路を指定する。マイクロプログラムの個々のビットは演算論理装置やメモリや他のコンピュータの部分を制御し、それにはマイクロシーケンサ自身も含まれる。

このようにして、コンピュータを制御するという複雑な設計をもっと単純な論理回路の集合体のプログラミングという比較的単純な作業に還元することができる。

### 自動化設計ツール

開発コストを低減するため、大規模な論理機械の設計の大部分は自動化されてきた。そのためのコンピュータソフトウェアをEDAツールと呼ぶ。

EDAは多くの場合単純な真理値表のような記述を最適化でき、必要な出力を行う論理ゲート数を縮小したシステムかより小さな参照テーブルを自動的に生成する。そのようなソフトウェアとして最も一般的な例がエスプレッソ・ヒュースリティック・ロジック・ミニママイザーである。

大規模なシステムを最適化する最も実用的アルゴリズムは、代数的操作か二分決定図を使い、遺伝的アルゴリズムや焼きなまし法を実験的に使った例もある。

コストのかかる開発プロセスを自動化するため、一部のEDAは有限オートマトンの振る舞いを記述した状態表を入力とし、その状態機械の組合わせ回路の真理値表(機能表)を自動生成する。状態表は各状態を並べたテキストの断片であり、さらに状態遷移の条件や出力信号などが書かれている。コンピュータで生成された状態機械の機能表は、Minilogなどのロジック最小化ソフトウェアで最適化するのが一般的である。

実際には大規模な回路を部分ごとに設計し、ツールフローを使ってそれらを結合するのが一般的である。ツールフローは一般にスクリプトであり、設計ツールを正しい順序で呼び出すことができる。マイクロプロセッサなどの大規模なシステムのツールフローは数千におよぶコマンド列であり、多数の技術者の作業を連結する役目を果たす。

デジタル回路を設計する会社は、ツールフローを書いてデバッグすることが仕事となっている。ツールフローは最終的に詳細なコンピュータファイルまたはファイル群を出力し、そこには回路を物理的にどのように構築するかが記されている。多くの場合、集積回路やプリント基板上でトランジスタや配線をどう配置するかが描かれている。

ツールフローの一部は、所定の入力に対するシミュレーション結果を確認することで「デバッグ」される。テストツールはコンピュータファイルに入力と出力を与え、シミュレート動作と期待される動作の間の不一致を強調する。

入力データが正しいと信用されたとしても、設計自体の正しさも検証が必要である。一部のツールフローはまず設計を生成することで設計を検証し、次にツールフローのための互換入力データを生成するためにその設計を走査する。走査によって生成されたデータと入力データが一致すれば、ツールフローがエラーを指摘することはない。

機能検証データを一般に「テストベクタ」と呼ぶ。機能テストベクタは新たに構築した論理回路を正しくテストするために工場などで保存され使われる。しかし、機能テストパターンは一般的な製造工程での障害を検出しない。製造工程用のテストはATPG(自動テストパターン・ジェネレーション)と呼ばれるソフトウェアツールで設計されることが多い。設計自体もテスト可能なようになされ(次節参照)、網羅率が100%に近くなる。

設計が完了し、検証され、テスト可能になったら、さらに製造可能なように処理が必要とされることが多い。最近の集積回路は光の波長よりも構造が細かい。露光マスクの解像度とコントラストを強化するため、干渉縞パターンをマスクに追加するソフトウェアも存在する。

### 検証可能な設計

論理回路のテストにはいくつかの理由がある。開発したばかりの回路は、設計の意図通りかどうかを検証し、機能やタイミングの要求仕様を満たしているかを確認する意味でテストを必要とする。大量生産に移行した場合も製造工程で問題が生じていないことを確認するためにテストが必須である。

大規模なデジタル回路は天文学的な数の状態をとりうる。1つの状態の確認に1μ秒しかかからないとしても、工場で全ての状態をテストすることは明らかに現実的ではない。しかし、大規模な回路はもっと小さなデジタル回路の集合体として設計されるのが一般的である。時間を節約するため、「テスト容易化設計」と称してテスト用の回路を組み込んでおき、部分ごとに単独でテストできるようにすることができる。

よく使われるテスト技法として「スキャン設計」がある。外部試験装置から一連のビットをシフトレジスタを通して逐次入力してテストする方式である。シリアルスキャンには1本か2本の線しか使わず、普段使用しないテスト用回路の大きさとコストをなるべく抑えるよう設計されている。

基板のテスト環境も含め、JTAGというバウンダリスキャンテストの規格が定められている。

他に、回路の一部をテストサイクル状態に移行させるテストモードを提供する方式もある。テストサイクルは通常大きめの独立した部分を対象とする。

### トレードオフ

デジタル論理回路の実用性を決定するいくつかの数値がある。技術者らはファン・アウト、高速性、低コスト、信頼性という4点の組み合わせが理想的なデバイスを探究してきた。

論理ゲートは大量に使うため、そのコストは極めて重要である。1930年代、初期のデジタル回路は電話用リレーを使っていた。それは、リレーが安価で比較的信頼性が高かったためである。その後も技術者らは要求を満足しつつ、、その時代で入手できる最も安価なスイッチデバイスを常に採用してきた。

集積回路には幸運な偶然があった。当初、集積回路は低コストだから使われたわけではなく、軽さを重視して採用され、アポロ誘導コンピュータでの慣性航法装置の制御が可能となった。初期の集積回路の論理ゲートのコストは50ドルほどだった(1960年当時の価格であり、技術者の年報が1万ドルほどだった)。その後の集積回路の改良には常にコスト低減が伴っている。

集積回路が発展してくると、チップの絶対数削減もコスト低減の一面を表すようになった。設計の目標には単に回路を単純化することだけでなく、部品点数を減らすことも含まれるようになった。その結果、デジタル回路はやや複雑化することもあったが、部品点数を減らすことで基板を小さくでき、消費電力も低減できるという効果があった。

例えば、一部のロジックファミリではNANDゲートが最も基本的な論理ゲートとなっている。他の論理演算は全てNANDゲートで実装できる。回路で既にNANDゲートを1つ使っているとしたとき、一般に1つのチップにNANDゲートは4つ集積されているので、残りのNANDゲートを例えばANDゲート(NANDゲート2個で構成可能)として利用することができる。こうすると、異なる種類の論理ゲートを集積したチップを使う必要がなくなる。

論理ゲートの信頼性は平均故障間隔 (MTBF) で表される。デジタル機器は数百万の論理ゲートを使うことも多い。また、デジタル機器もコスト低減が重要な目標であることが多い。そのため冗長性は考慮されず、1つの論理ゲートの故障で機器全体が動かなくなることが多い。

論理ゲート(またはスイッチ)のMTBFが数百時間を越えたころ、デジタル機器が実用的になってきた。当時のデジタル機械の多くは複雑で、十分試行された修理手順を持っていたが、真空管が焼き切れたりリレーに蛾が挟まったりすると何時間も停止した。現代の半導体集積回路の論理ゲートのMTBFは820億時間(8.2×10)以上だが、あまりにも多数の論理ゲートを使っているためそれだけのMTBFが必要となっている。

ファン・アウトは論理ゲートの1つの出力に接続して電流駆動能力の範囲内で制御できる入力の数である。ファン・アウトは少なくとも5以上でないと実用的でない。CMOSの論理ゲートではファン・アウトは最低でも50弱ぐらいである。

スイッチング速度はインバータ(NOTゲート)が1秒間に出力を反転させられる回数で表される。高速であればより短時間により多くの処理が可能となる。初期のデジタル回路は50Hzで動作できるようになったころに人間が機械式計算機を操作するよりも高速となり、実用的となった。最近では5GHz(5×10Hz)でスイッチングできるのが当たり前となり、実験室レベルでは1THz(1×10Hz)以上も可能となっている。

### ロジック・ファミリ

デジタル回路はリレーを使ったものから始まった。リレーは比較的安価で安定動作したが、低速だった。それでも時折故障が起きていた。ファン・アウト数は約10で、コイルの抵抗値に制限されており、高い電圧を印加すると接点で火花が散るという問題が生じた。

次に真空管が使われるようになった。非常に高速だが、発熱量が大きく、フィラメントが焼き切れやすく信頼性は高くなかった。ファン・アウト数は一般に5から7で、発熱に制限された。1950年代にはケイ素のような高温で揮発する性質のある元素を除去したフィラメントを使ったコンピュータ専用の真空管が作られ、数十万時間動作した。

最初の半導体ロジックファミリは抵抗・トランジスタ・ロジック(RTL) である。真空管よりも数千倍信頼性が高く、発熱量も少なく、消費電力も小さかったが、ファンイン数は3と非常に少なかった。ダイオード・トランジスタ・ロジック(DTL)はファン・アウトを約7まで改良し、消費電力をさらに低減させた。ファン・アウト数を増加させるため、NPNのDTLとPNPのDTLを交互に相互接続し、それぞれに電源を用意する方式も考案された。

トランジスタ・トランジスタ・ロジック(TTL)はそれまでのロジックファミリからの大幅な改良をもたらした。ファン・アウト数は初期のデバイスで10まで増加し、後の改良版では20まで安定動作した。また高速であり、20ナノ秒未満のスイッチング時間を達成している。TTLは今も一部用途で使われている。

エミッタ結合論理(ECL)は非常に高速だが、消費電力が大きい。一時期は高性能コンピュータによく使われた(ILLIAC IV など)。

現在最も多く使われているのはCMOSである。高速で小さく、消費電力も低い。ファン・アウトは40以上が可能だが、たくさん接続しすぎると性能が低下する。

## 最近の発展

半導体を使ったトランジスタをベースとするデジタル回路以外に、最近では次のようなものが研究開発されている。

- 超伝導の発見により、ジョセフソン効果を使ったRSFQ (rapid single flux quantum) 回路技術が開発されている。
- 非線形な光学部品を使った光コンピューティングの研究が進んでいる。