無線技術の初学者向けの論理回路の要点



細田 隆之

おことわり

 本稿では、論理回路に使用する図記号に、MIL-STD-806B が規定していた、いわゆる MIL 記号とその派生記号を用いています。 簡素な論理には MIL 記号での記述の方がひと目でわかりやすいからです。 図のためのグラフィカルなシンボル(Graphical symbols for diagrams)の規格 IEC 117-15 1972 (現在の IEC 60617) に於いても その使用は禁止されていません。

 数学的にはともかく、IECの論理記号は 外形がみな四角であるためひと目では極めて判別しにくく、 論理変換や論理圧縮において利用しにくいものであったため、 論理回路設計者にあまり受け入れられませんでした。 禁止すると過去の回路図やドキュメントが読めなくなってしまうというのも理由の一つでした。

 IECの論理記号があまり受け入れられなかったもう一つの理由は、 IECによる規定がされて程なく、1978 年の PAL (Programmable Array Logic) の登場により 論理回路の設計は HDL (Hardware Description Language) での記述に速やかに移行したためです。 複雑な論理回路を論理記号を用いた回路図で記述するのは現実的ではなく、 またコンピュータによる論理圧縮などの処理にも適していないからです。 1980年には PALASM, 1983年には CUPL, 1984年には Espresso algorithm を搭載した ABEL が使われるようになっていました。

 1990年代以降、回路図においても論理回路の図記号の利用は、 部品間をつなぐいわゆるグルー・ロジック (glue logic) にとどまるようになったため、ひと目でわかる MIL記号は今でもポピュラーです。 グルーロジックとして多用される数個のゲートが入ったような IC のデータシートでは 2021年の現在でも MIL記号が多用されています。


  1. 論理回路に使われる、いわゆる MIL記号
  2. 論理値の1(真)、0(偽)はロジック回路の H、Lとは違う
  3. CMOS ロジックゲートはスイッチで出来ている
  4. 実用上、HDL(ハードウェア記述言語)表記に慣れる
  5. ド・モルガンの法則に慣れる
  6. 論理演算のおさらい
  7. AND OR の意味
  8. NAND が基本論理素子と言われる理由
  9. XOR の意義。XOR とは何の為にあるのか
  10. AND, OR, INV 以外の機能素子
  11. フリップ・フロップ
  12. CPLD のマクロセル
  13. IC と IC をつなぐときの問題点
  14. いわゆるパスコンについて
  15. 機械接点とのインターフェース
  16. 応用回路例(デジタル・デバウンス回路)
  17. トランジスタの利用とレベル変換
  18. 重い負荷をドライブする
  19. トランジスタ・アレイの利用
  20. 絶縁インターフェース
  21. 追補 — 誤り検出
  22. まとめ

論理回路に使われる、いわゆる MIL記号

論理回路において、いわゆる MIL記号では次の4つのシンボルを用います。

これは、左から AND (論理積)、OR (論理和)、BUF (緩衝増幅器)、NEG(logic negation, 負論理表示子)、となっています。
AND では入力の全てが真(True)のときに出力が真となります。
OR では入力の何れかが真(True)のときに出力が真となります。
BUF では入力と出力の論理値は同じとなります。
NEG は論理演算において NOT と呼ばれます。
正論理であれば NEG (○印) をつけず、負論理であれば NEG (○印) をつけます。
真(True) を 1 で表し、偽(False)を 0 で表す時、正論理と呼びます。
真(True) を 0 で表し、偽(False)を 1 で表す時、負論理と呼びます。
BUF の入力または出力に NEG が1つ付いたものは慣例的に INV (インバータ)呼ばれます。
INV では入力と出力の論理値は反転します。
AND 回路の出力が負論理になっているものを慣例的に NAND と呼びます。
OR 回路の出力が負論理になっているものを慣例的に NOR と呼びます。

論理値の 1(真)、0 (偽)はロジック回路の H、Lとは違う

実際のロジック回路では、電圧(や電流)によって論理値を表します。
ある閾値より高い信号を H 、ある閾値より低い信号を L で表し、それぞれに 論理値を割り当てて使用します。

例) 実際の NAND ロジック IC (Integrated Circuit) MC74VHC1G00 の例

⚠️実際のロジック IC には電源の供給はもちろん、電源ピンの近傍にデカップリングキャパシタが必要です。

MC74VHC1G00 では、入力 A, B が全て H になった場合に、L が出力 Y に出力されます。
MC74VHC1G00 を 3.0 V の電源電圧で使用するときの入力電圧は、2.1 V 以上が H、0.9 V 以下が L となります。
同様に出力電圧は電源電圧が 3.0V , 負荷電流が 4 mA 以内で、H のとき 2.34 V 以上、L のとき 0.52 V となります。

CMOS ロジックゲートはスイッチで出来ている

ゲートに同じ信号が入っている N-MOS と P-MOS は N-MOS がオンのとき P-MOS がオフになります。
これこそが、Complementary MOS と言われる所以でもあり、低消費電力の理由でもあります。
電流が流れる状態を真とした場合、直列のスイッチは論理積に、並列のスイッチは論理和になります。
CMOS ロジック・ゲートは、電圧制御スイッチで構成されていると考えられます。

NAND ゲートのシミュレーション回路例


上記 NAND ゲートの動作波形例 (3V/div, 25ns/div)


電圧が高い方を真とした場合には、入力が正論理で出力が負論理の AND と考えられます。
電圧が低い方を真とした場合には、入力が負論理で出力が正論理の OR と考えられます。

^

実用上、HDL(ハードウェア記述言語)的表記に慣れる

HDL の論理演算の表記は様々です。CUPL や ABEL 等の古典的 HDL を起源とする AHDL や、 C 言語風味な Verilog HDL、あるいは米国国防省の Ada の影響を受けた VHDL のようなものもあります。
NOT, AND, OR に加えた XOR (
後述) は排他的論理和 (Exclusive-OR) を表します。EXOR と表す場合もあります。

AHDL では論理演算に次のような記号が用いられています。
 記号  論理 
! NOT
& AND
# OR
$ XOR

Verilog HDL では次のような記号が用いられています。
 記号  論理 
~ NOT
& AND
| OR
^ XOR

VHDL では次のような記号が用いられています。
 記号  論理 
NOT NOT
AND AND
OR OR
XOR XOR
識別子と演算子が区別しにくいので個人的にはこんなの使いたく有りません。
他にも、次のようなものがありましたが廃れました。
 記号  論理 
/ NOT
* AND
+ OR
:+:XOR

例えば、入力が A, B 出力が Y の NAND 回路を HDL 記述すると


Y = !(A & B)

ド・モルガンの法則 (De Morgan's laws) に慣れる

入出力とも負論理の AND は正論理の OR である。
いわゆる NAND 回路は負論理入力、正論理出力の OR であるともいえます。
一般に、入出力の論理を反転すれば、AND は OR に OR は AND になります。


!(A & B) = (!A # !B)


!(A # B) = (!A & !B)


!((A & B) # (C & D)) = (!A # !B) & (!C # !D)

論理演算のおさらい

AND-OR の意味

全ての論理式は、AND-OR の積和形式表現できます。入出力の論理の変更には INV を付加します。
Y = ((A & B) 
    #(C & D))
のように AND による積を OR で足した形式を積和形式と呼びます。
このような形式で OR の数を最小にすることを(通常は)論理圧縮と呼びます。
ところで、B = !C とし、元の D を B に改めると、
Y = ((A & !C)
    #(B &  C))
となり、C によって A, B の何れかを選択出力するセレクタと呼ばる論理回路になります。
ロジック IC や PLD (プログラマブル・ロジック・デバイス) や ROM (リード・オンリー・メモリー)も積和を元に構成されています。
先程のド・モルガンの法則を思い出して見ましょう。 2段重ねの NANDは 負論理出力の AND を負論理入力の OR で受けると捉えられますので、

Y = !(!(A & B) & !(C & D))
  =  ( (A & B) #  (C & D))
NAND-NAND で 積和を構成することができます。
TTL では積和のために AND-OR-INV ゲートが使われていましたが、CMOS 論理 IC の中や、大規模プログラマブル論理デバイスでは、 NAND-NAND ゲートによって構成される AND-OR を利用して大規模な論理を合成することが行われています。

NAND が基本論理素子と言われる理由

 NAND が基本素子と言われるのは、NAND があればそれを組み合わせて全ての論理演算を行うことができるからですが、 実際の論理素子では多少ニュアンスが異なります。
 その昔、初期の半導体の論理素子は DTL (ダイオード・トランジスタ・ロジック) と呼ばれ、 ダイオードと NPN トランジスタで作られていました。 ダイオードを正論理の AND を構成するのに使用し、 NPN トランジスタのエミッタ電流を足して OR を構成し、 NPN トランジスタを反転増幅に使用するというのが基本構成でした。 この構成の基本論理素子を AND-OR-INVERT ゲート、略して AOI ゲートと呼びます。 AOI ゲートがあればすべての論理演算が可能です。 下図では、D1, D2 と D3, D4 でそれぞれ AND を構成し Q1, Q2 で OR を構成し Q3 で反転増幅して出力しています。 ここで、D3, D4, R3 と Q2 を端折れば NAND ゲートになりますし、D2, D4 を端折れば NOR ゲートになります。


  ≡ 

 DTL や入力の AND 用のダイオードをマルチエミッタ・トランジスタに置き換えた TTL (トランジタ・トランジスタ・ロジック) あるいはトランジスタを非飽和で動作させる ECL (エミッタ・カップルド・ロジック)も21世紀には前世紀の遺物となり、 論理素子は高速な Low Voltage CMOS ロジックが全盛です。 CMOS は N-チャネル の MOS-FET の方がオン抵抗などの性能が良いので、N-MOS の方を重ね、 P-MOS の方を並列にして基本論理素子として NAND ゲートを構成します。 CMOS 1段での増幅度は小さいため、通常入力や出力に3段程度の INV が反転増幅器として入れられます。


  ≡

^

XOR の意義。XOR とは何の為にあるのか

 XOR は反転と積和を伴い、AND, OR, INV だけで表現すると煩雑になるため、専用のシンボルが使われています。


Y = A $ B

  = ((  A & !B ) 
    #( !A &  B ))

この構成は、B が 1 のとき !A を、B が 0 のときに A を選ぶセレクタであると解釈することもできます。

CMOS XOR IC (e.g. CD4030) の中では使用トランジスタ数が少なくて済む次のような NOR + AOI 構成が用いられていました。


XOR は NAND だけを使って構成することもできます。


上記4つの NAND での XOR の構成例の論理式は、次のように変換できて論理合成の良い題材になっています。

Y = A $ B

  = ((A & (!A # !B))
    #(B & (!A # !B)))

  = (( A & !A)
    #( A & !B)
    #( B & !A)
    #( B & !B))

  = ((  A & !B ) 
    #( !A &  B ))

この4つの NAND を NOR に置き換えるとどうなるでしょう。


Y = !((!!(A # B) & !A) 
     #(!!(A # B) & !B))

  = !((A & !A)
     #(B & !A)
     #(A & !B)
     #(B & !B))

  =  (!A & !B)
    #( A &  B)

これは XOR の出力を反転したものとなっていて XNOR と呼ばれることがあります。 A と B が一致したときに Y が 1 となります。

  1. XOR は半加算器の下の桁です。
    半加算器

     一桁の値同士を足し算してみると、下の桁は入力の XOR、桁上がりは入力の AND となるのがわかります。
    これを2つ組み合わせるとキャリー入力を備えた全加算器ができます。これは数値演算の基本となります。

    全加算器

    CO =  (( !A &  B &  CI )
          #(  A & !B &  CI )
          #(  A &  B & !CI )
          #(  A &  B &  CI ));
    
    S  =  ((  A &  B &  CI )
          #(  A & !B & !CI )
          #( !A &  B & !CI )
          #( !A & !B &  CI ));
    
    上記、S の論理式は3入力 XOR としてよく利用されます。3入力 XOR のロジックICもあります。(e.g. 74LVC1G386)
  2. XORは、一桁の2の剰余系の加算器でもあります。 ある値同士を足して2で割った余りと考えることもできます。
    これはパリティーチェックや CRC などの謝り検出や、誤り訂正など符号理論の応用の基本となります。

    実例:
    (5, 2) ハミング符号の CoDec
  3. XOR回路は、ある信号の極性を別の信号で反転する回路と考えることができます。
    これは変調器などの基本となります。

    実例:
    QPSK 変調器 (部分)
  4. XOR は時間領域で見て、掛け算器とも呼ばれます。
    周波数領域でみるとこれは、周波数ミキサーとして働きます
    ダブルバランスドミキサーの動作は大雑把に言えば、XOR と同じです。

    実例 :

    下図のギルバート・セルのミキサーは 1, 4 ピンの差動入力で Q5, Q6 のコレクタ電流を作り、7,8 ピンの差動入力で Q1, Q2, Q3, Q4 でその出力先を切り替えています。 これは差動信号の電圧入力・電流出力の XOR と考えられます。

    Renesas HFA3101
  5. XOR は位相比較器とも呼ばれます。
    出力の区間積分あるいは平均値は、2つの入力信号の位相差に比例します
    XOR は無線回路技術者にとって重要な、 PLL を構成する位相比較器の基本となります。

    実例 :
    Onsemi (Motorola), MC74HC4046B

^

AND, OR, INV 以外の機能素子

論理演算の基本は AND, OR, NOT ですが、CMOS IC にはそれに加えて現実の世界に対処するために、 バイラテラル(bilateral)スイッチ、シュミット・トリガー(Schmitt-trigger)入力、3ステート(three-state)出力があります。
  • バイラテラル・スイッチ

    バイラテラルスイッチは双方向に電流を流すことができるスイッチで、 1組の N-MOS と P-MOS が並列に接続されてバイラテラル・スイッチの素子となっています。 これは、IC の内部で使われたり、アナログ信号を扱うアナログスイッチとして使われています。 (e.g. 74HCT4066, 74HCT4053)

  • シュミット・トリガー入力


    ある系の状態が過去の履歴に依存することをヒステリシス (hysteresis) と呼びます。 シュミット・トリガー (Schmitt trigger) は正帰還により入力の上り側と下り側で閾値が変わるヒステリシスを持つ電圧比較器で、 アナログ信号をデジタル信号に変換する能動回路です。


    シュミット・トリガーを表すシンボルはこのヒステリシス特性の図に由来します。

  • 3ステート出力
    3ステート出力とは、その出力が H または L にドライブする状態とハイ・インピーダンス状態の3つの状態を持つものを言います。
    データバスなど双方向にデータをやりとりするような箇所で使用されます。
    3ステート出力を備えたバッファ IC の例 (74LVC2G125)

^

フリップ・フロップ

SR-FF (Set-Reset Flip-Flop)

 OR 回路に帰還をかけてやると、セット・オンリー・フリップができます。

← 使えないやつ

 当然このままですと使い物になりませんので、帰還路に AND ゲートを設けて帰還を断ち切ることができるようにします。 すると、リセット出来る(!)セット・リセット フリップ・フロップが出来上がります。これを NAND ゲートで構成すると下図のように 負論理入力、正論理出力の SR-FF になります。


Transparent Latch

 SR-FF を1ビットの記憶素子として使うことを考えると、SR-FF には次の欠点があります。

(1) 2入力である。
(2) 入力の両方が同時にアクティブ(真)になった場合に不都合がある。
(3) 入力の変化が即座に出力に現れる。

(1),(2) の欠点を無くすために、セット入力とリセット入力をコンプリメンタリにし、
(3) の欠点を補うために、その入力にストローブ用ゲートを付け加え、
入力が安定している期間にストローブ信号により入力データを保持するようにしたものが 下図に示すトランスパレント・ラッチです。


D-FF (Delay Flip-Flop)

 記憶素子としてより使いやすく、クロック信号の立ち上がり('L'→'H' の変化)時に 入力データを保持すると同時に出力するようにしたものが、D-FF です。(立ち下がりで動作するものもあるが一般的ではない)



D-FF の動作説明

 ゲート A, B 及び ゲート C, D はクロック信号により ゲートされる SR-FF になっており、SR-FF(A, B) と SR-FF(C, D) には入力の コンプリメンタリな信号が入力されています。
クロック入力が 'L' の間は、SR-FF(E, F) の両入力が 'H'(インアクティブ)になって いるため出力は変化しません。
入力データが 'H' である時を考えてみます。
このとき SR-FF(A, B) は、クロック信号により帰還路がゲートされているけれども、入力データに より ゲート A 出力がセットされている状態になっています。
同時に SR-FF(C, D) はセットもされず、クロックによりリセットされている状態になっています。
ここで、クロックが 'H' に変化したとすると
SR-FF(A, B) はセットされた状態になると同時に SR-FF(C, D) をリセットし続けることになります。
従って SR-FF(E, F) を SR-FF(A, B) がセットすることになり出力 Q に 'H' が現れ 、入力データが保持されることになりました。
まとめると、クロックが 'L' のときには 出力フリップフロップ SR-FF(E, F) がデータを保持し、 クロックの 'L'→'H' の変化で 入力フリップフロップ SR-FF(A, B) または SR-FF(C, D) がデータを 取り込み、保持していると言えます。

 CMOS ロジック IC ならではの回路構成で、ラッチの構成用にバイラテラル・スイッチが活用されているものもあります。 (e.g. 74LVC1G79)




バイラテラル・スイッチを使った構成の D-FF の動作説明。
  • 黄緑色のインバータは出力が L になっています。
  • 橙色のインバータは出力が H になっています。
  • 白色のインバータの出力は気にしなくて良いことを表します。
  • 灰色のバイラテラルスイッチは遮断状態を表します。
  • 中の菱形が黄緑色または橙色のバイラテラルスイッチは導通状態で、それぞれ L または H になっていることを表します。
  • ピンク色の箇所は帰還ループが閉じていてデータを保持していることを表します。すなわちトランスパレント・ラッチとして働いています。
  • クロックが H のときには、左側のプライマリ・ラッチ (primary latch) がデータを保持していて、それが出力されています。
  • クロックが H → L のに変わると、右側のセカンダリ・ラッチ (secondary latch) にデータが保持されて、それが出力されます。
    このとき、プライマリ・ラッチ側には次のデータが入力されています。
  • クロックが L → H に変わると、次のデータがプライマリ・ラッチに保持されて、それが出力されます。

JK-FF (JK Flip-Flop)

 SR-FF を使いやすくするために、クロックに同期して J でセット、K でリセットできるようにしたものが JK-FF です。
J, K 共に 1 のときにはクロックに同期して Q と Q が反転します。

 JK-FF は、Q が 1 の時には K を、Q が 0 のときには J を選択するように、D-FF の入力にデータセレクタを 追加したものと等価です。


また、J, K にコンプリメンタリな入力データを与えるとその動作は、D-FF と同じになります。

 個別の JK-FF の IC が使われることは稀ですが、ASIC や CPLD などの内部で シーケンサ(順序回路)を構成するときのモデルとして JK-FF はしばしば使われています。

 JK-FF の名前の由来は、Q (Queen) を J (Jack) と K (King) が奪い合うからだそうです…と聞き及んでいましたが、実は次のようなことだそうです。

「ジェット推進研究所(JPL)のエンジニアであるリンドリー氏 (P. L. Lindley) が 1968 年 6 月 13 日付の電子技術誌 EDN 8 月号に寄稿した手紙によると、 1954 年の UCLA で行われたモントゴメリー・フィスター氏 (Montgomery Phister) のコンピューター設計の講義の中で、 2つの入力が '1' のときに出力状態が変化するフリップフロップが初めて取り上げられました。 当時ヒューズ・エアクラフト社 (Hughes Aircraft) のエルドレッド・ネルソン博士 (Dr. Eldred C Nelson) がそのフリップ・フロップのことを J-K と呼んでいました。 ネルソン博士は、J と K が「無害で良い文字」であることから、J と Kをシステムの各フリップフロップのセットとリセットの入力として使用することにしました。 ネルソン博士は、1953 年 9 月 8 日に申請されて 1958 年 9 月 2 日に認可されたアメリカ合衆国の特許 US2850566A の中で、j-input, k-input という言葉を使っています。」

"High-speed printing system" US2850566A より一部抜粋
Patent US2850566

^

CPLD のマクロセル

 これまでに述べたロジックまとめてユーザーでプログラム可能にしたデバイスとして、 CPLD (Complex Plogrammable Logic Device) や FPGA (Field Programmable Gate Array) が作られています。 下の図はやや古典的な Altera(現 Intel) の CPLD のマクロセルの例です。 マクロセルとは1つの出力を構成することのできるプログラマブルな論理セルのことです。 このようなデバイスをプログラムするために、HDL(ハードウェア記述言語)が用いられています。



^

IC と IC をつなぐときの問題点


^

いわゆるパスコンについて

⚠️電気信号を扱う全ての IC や LSI の電源端子には、一般に良くパスコンと呼ばれるデカップリング・キャパシタが必須です。

 ある LSI メーカーによるとハードウェア的トラブルの 99 % 近くはパスコン不足もしくは不適切なパスコンに起因するものだそうです。 小規模なロジック IC では、パスコンに 100nF 〜 1uF 程度の MLCC (Multi Layer Ceramic capacitor) が多用されています。 パスコンは自身の安定動作のためにも必要ですが、不要輻射を低減するためにも IC の(電気的な)極近傍に配置することが重要です。 高速な CMOS ロジックでは、スイッチング時のスパイク電流や各所の容量を充放電するのに、パスコンの電荷が再分配されていると言っても過言では有りません。そしてその急峻なスパイク電流が流れる面積が大きいと不要輻射も大きなものとなるからです。

⚠️電源のパスコンに固体タンタル・コンデンサを使ってはなりません。故障モードの 90 % 以上が短絡で発火に至ることも稀では有りません。 ヒューズ入りの固体タンタル・コンデンサでは発火を防げる場合もありますが、RoHS 指令以降ヒューズ内蔵の固体タンタル・コンデンサも姿を消しました。セラミック・キャパシタは短絡しても発火することは有りません。 IC 周辺の電源の大容量のパスコンは 22μF 程度の大容量 MLCC(積層セラミックキャパシタ)を複数個使用し、共振防止にはチップ・フェライトでダンピングするのが現在の主流です。


^

基本インターフェース

機械接点とのインターフェース

波形を整形する回路


^

応用回路例(デジタル・デバウンス回路)

 フリップ・フロップの応用回路例として、デジタル・デバウンス回路を紹介します。 デジタル・デバウンス回路はスイッチやリレーなどメカニカルな接点からの信号を受け取る箇所に使われる回路で、 接点が特にオフからオンになる過渡時に機械的な跳ね返りや酸化皮膜などの影響で断続的になるのを除去する回路です。 静電気の放電や外来雑音のスパイクによる誤入力を防ぐ役割もあります。

 この回路では、外部スイッチの信号を EMI フィルタで高周波や静電気の影響を低減した後、 フィルタでなまった波形をシュミット・トリガー・インバーター (e.g. 74HC14) で波形整形しつつ正論理に変換して デジタル・デバウンス回路に入力しています。

 デジタル・デバウンス回路では、外部からの信号 D をただ1つの D-FF で受け取り、 それを直列接続のもう2つの D-FF に入力します。この3つの D-FF の出力が全て 1 になったとき、 すなわち、クロックの3回分の時間連続して入力として 1 がサンプリングされたとき、 次のクロックでに次段の JK-FF がセットされます。 同様に3回連続して 0 がサンプリングされたときに JK-FF はリセットされます。

 クロックの周波数(あるいはクロック・イネーブルの間隔)は想定されるバウンスが収まる時間と同程度に 設定します。サンプリング間隔の合間に外来雑音の短いスパイクがあったとしても、 サンプリングされないため、この影響を除去することができます。

 スイッチ・インターフェース部の補足ですが、R2, C1 で EMI フィルタを構成し、中波から UHF の EMI や 静電気の放電(ESD, Electro Static Discharge)の影響を低減します。ここで、R2の値はスイッチ Sw がオンになったときに C1 の放電電流 がスイッチの定格電流を超えないようにR2の値を設定してします。 小信号スイッチの最大電流は 50 mA 程度のものが多いため VIO が 3.3 V として ISw(max) = 3.3 / 220 = 15 mA としています。

 D-FF はクロック入力のエッジに対して、入力データが変わってはいけない時間が決められており、 クロックの前の安定しているべき時間がセットアップ時間 tsu、クロック後に安定しているべき時間がホールド時間 th です。

ところが外部からの信号はクロックに対して非同期ですので、セットアップ時間の違反が起こることがあります。 このようなときには、D-FF の出力が安定するのに長い時間を要することがあります。 このような状態をメタ・ステーブルと呼び、非同期の信号を扱うときには常に考慮しなければなりません。 メタステーブル対策的に、外部からの信号は「ただ1つの D-FF で受ける」のが鉄則と言えます。

 最近では、雑音が多かったり鈍った波形の信号とのインターフェース用に、入力がシュミット・トリガーになっている D-FF (e.g. SN74HCS174) も発売されています。



 デジタル・デバウンス回路が個別のロジック IC で構成されることは稀で、一般的には FPGA (Field Programmable Gate Array) の一部、 あるいは MCU (Micro Control Unit) のソフトウェアの処理の一部として組み込まれます。 (c.f. ハードウェア的プログラミングのすすめ)
従って、通常は機械接点インターフェースとしてのハードウェア的には、プルアップ抵抗とフィルタとシュミット・トリガー入力があれば良いことになります。

デジタル・デバウンス回路も回路図で書くと複雑に感じますが、論理式で書くと簡単です。
    Q1 := D;
    Q2 := Q1;
    Q3 := Q2;
    SW :=  (!SW & (Q1 & Q2 & Q3))
          #( SW & (Q1 # Q2 # Q3));
但し、ここではクロックに同期した D-FF への入力を := で表すこととします。

^

トランジスタの利用とレベル変換


^

重い負荷をドライブする


^

トランジスタ・アレーの利用


^

絶縁インターフェース

フォトカプラ(Photocoupler, Opto-isolator)を使う

^

追補 — 誤り検出

パリティ・チェック

パリティ・チェックは一番簡単な誤りチェックです。 データにパリティ・ビットを付け加えて符号とし、符号中の 1 の数が偶数(または奇数)になるようにパリティ・ビットを決めます。 このパリティ・ビットにより符号のハミング距離が 2 となり 1-bit 誤りの検出が可能となります。 符号中の 1 の数が偶数になるようにパリティ・ビットを選んだものを偶数パリティ (even parity) と言い、 奇数のものを奇数パリティ (odd parity) と言います。 偶数パリティはデータ中の 1 を mod 2 で加算した結果とも言えるし生成多項式 X + 1 で割った余りとも言えます。

例:5-bit のデータが 10110 の場合
  • パリティ生成: X + 1 で割った余り
      10110 データ
      11
      -----
       1110
       11
       ----
         10
         11
         --
          1 偶数パリティ
    
  • 符号生成:データの末尾にパリティ・ビットを追加し送信符号とする
    101101 送信符号

  • 受信誤りがない場合
      101101 送信符号
      000000 誤り無し
      ------
      101101 受信符号
      11
      ------
       11101
       11
       -----
         101
         11
         ---
          11
          11
          --
           0
    
    余りが 0 → 誤り無し

  • 受信符号に 1-bit 誤りがある場合の例
      101101 送信符号
      00X000 誤り
      ------
      100101 受信符号
      11
      ------
       10101
       11
       -----
        1101
        11
        ----
           1
    
    余りが 1 → 誤り有り
反転2連送

反転2連送はデータにデータを反転したものを付け加えて符号とします。
反転2連送は簡単な構成でデータ長以下のバースト誤りの検出ができます。
またデータが 0 や 1 に固着した誤りの検出もできます。

例:8-bit のデータが 1011 0010 の場合
  • 符号生成:データと反転データ
      1011 0010 0100 1101 : 送信符号
    
  • 受信誤りがない場合
      1011 0010 0100 1101 送信符号
      0000 0000 0000 0000 誤り無し
      -------------------
      1011 0010 0100 1101 受信符号
      0100 1101
      ---------
      1111 1111
    
    データと反転データ部の XOR が全ビット 1 → 誤り無し

  • 受信バースト誤りがある場合
      1011 0010 0100 1101 送信符号
      0000 0X0X X0XX 0000 7-bit バースト誤りあり
      -------------------
      1011 0111 1111 1101 受信符号
      1111 1101
      ---------
      0100 1010
    
    データと反転データ部の XOR に 0 のビットがある → 誤り有り
CRC (Cyclic Redundancy Check, 巡回冗長検査)

CRC は巡回符号に基づいた誤り検出符号の一種です。 データ列を決められた n + 1 ビットの生成多項式で割った余りをデータに付け加えて符号とします。 チェック・ビットが n-bit の CRC は符号中の n-bit 以下のバースト誤りを検出することができます。 生成多項式により各種の CRC がありますが、よく使用されるものには次の辺りです。

  • CRC-8-CCITT : x8 + x2 + x1 + 1 (0x107)
  • CRC-8-Dallas/Maxim : x8 + x5 + x4 + 1 (0x131)
  • CRC-8-Bluetooth : x8 + x7 + x5 + x2 + x + 1 (0x1a7)
  • CRC-16-CCITT : x16 + x12 + x5 + 1 (0x11021)
  • CRC-16-IBM : x16 + x15 + x2 + 1 (0x18005)
  • CRC-32 (IEEE-802.3) : x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1 (0x104c11db7)
  • CRC-32C (Castagnoli, RFC 3720, iSCSI) : x32 + x28 + x27 + x26 + x25 + x23 + x22 + x20 + x19 + x18 + x14 + x13 + x11 + x10 + x9 + x8 + x6 + 1 (0x11edc6f41)

CRC の計算における生成多項式での剰余を求める計算は、 シリアルデータの場合は下図のようなリニア・フィードバック・シフト・レジスタで簡単かつ高速に求められるため、 固定長やフレーム構造を持つシリアルデータの誤り検出に多用されています。

生成多項式 x8 + x5 + x4 + 1 での除算回路例

Data の入力が終わったときのレジスタの内容が剰余となり、これを CRC とします。
誤り訂正
2元 BCH 符号及びバースト誤り訂正符号 — 生成多項式一覧及び誤り訂正デモンストレーションとプログラム例(C, JAVA)
Charmsec® 誤り訂正文字化符号 — デリミタ対応・スーパーデータも使える

まとめ

作りたい機能があれば論理式や状態遷移等を考えて設計し、論理合成します。論理合成は今は HDL コンパイラの仕事です。 人間の仕事は、実現したいことを考えることと、信頼できる装置を実現することと、周りに迷惑な雑音を発生させないことです。 人は割と簡単に死ぬ脆弱な生き物です。 たかが電子装置のせいで火災や事故が起きたりして尊い命が失われないようにすることが何よりも大切です。 便利さや機能にとらわれたり、納期に追われたりしておろそかにしがちですが、 デバッグや問題解決よりも問題を発生させないための設計に時間を使いたいものです。
▼ 改訂履歴

おすすめの参考書
www.finetune.co.jp [Mail] © 2000 Takayuki HOSODA.