FPGA超入門 その1-論理回路-

2021/04/15に公開

この記事は論理回路についての基本的なことについて書きますので、知っている方は読み飛ばしてもらってよいと思います。

論理ゲート

まず、論理演算を行う論理ゲートについて簡単にまとめます。以下の3つを組み合わせることでどんな論理演算でも出来ます[1]

NOT(否定)

MIL記号 論理式 真理値表
\text{ Q=}\overline{\text{A}}\text{ }
回路図ではMIL記号のように表し、論理式ではAの上の棒\overline{ }がNOTを表します。入力の論理の反転が出力されます。

AND(論理積)

MIL記号 論理式 真理値表
\text{ Q=A}⋅\text{B }
回路図ではMIL記号のように表し、論理式ではAとBの間の・がANDを表します。場合によっては省略されることもあります。入力が全て真/1の場合に出力が真/1になります。言い換えると、入力の何れかが偽/0の場合に出力が偽/0になります。

OR(論理和)

MIL記号 論理式 真理値表
\text{Q=A}+\text{B}
回路図ではMIL記号のように表し、論理式ではAとBの間の+がORを表します。入力の何れかが真/1の場合に出力が真/1になります。言い換えると、入力が全て偽/0の場合に出力が偽/0になります。

他にも以下のようなものがあります。

NAND(否定論理積)

MIL記号 論理式 真理値表
\text{Q=}\overline{\text{A}⋅\text{B}}
回路図ではMIL記号のように表し、論理式ではAとBのAND全体の否定するように表現します。入力が全て真/1の場合に出力が偽/0になります。言い換えると、入力の何れかが偽/0の場合に出力が真/1になります。

NOR(否定論理和)

MIL記号 論理式 真理値表
\text{Q=}\overline{\text{A}+\text{B}}
回路図ではMIL記号のように表し、論理式ではAとBのOR全体の否定するように表現します。入力の何れかが真/1の場合に出力が偽/0になります。言い換えると、入力が全て偽/0の場合に出力が真/1になります。

XOR(排他的論理和)

MIL記号 論理式 真理値表
\text{Q=}\overline{\text{A}}⋅\text{B}+\text{A}⋅\overline{\text{B}}
\text{Q=A}\oplus\text{B}
回路図ではMIL記号のように表し、論理式ではAND/OR/NOTの組み合わせや\oplusの記号で表します。

XNOR(否定排他的論理和)

MIL記号 論理式 真理値表
\text{Q=}\overline{\text{A}\oplus\text{B}}
回路図ではMIL記号のように表し、論理式ではAとBのXOR全体の否定するように表現します。

以上のような論理ゲートを組み合わせて、複雑な論理演算を行わせる回路を組み合わせ回路と呼びます。
上記の真理値表では、偽/0、真/1という表現をしましたが、単純に0と1としてもよいです。(下記の順序回路ではその表記とします。)
これらの値を電気的に表現する際に、電源電圧に近い電圧(High)と0Vに近い電圧(Low)とに割り当てます。この時、偽/0=Low、真/1=Highと偽/0=High、真/1=Lowと2通りの方法があり、前者を正論理、後者を負論理と呼びます。混在すると若干混乱しますが、どちらの電圧の時に回路が動作するかと覚えておくくらいでもよいと思います。

順序回路

組み合わせ回路は、現在の入力によってのみ出力が決まりますが、過去の入力に依存して出力が決まる回路を順序回路と呼びます。
過去の入力によって決まるということは、内部状態を記憶しておく必要があり、そのための記憶素子について、簡単にまとめます。回路図は色々な作成方法があり、下記に記載したものでなくてはならないことはありませんので、予めお断りしておきます。また、フリップフロップはクロック有り(エッジトリガ)、それ以外のものラッチとして分けましたが、分類方法には諸説あるようです。

SRラッチ

最も基礎的な記憶素子で、先ほど出てきたNORやNAND(とNOT)を使って実現されます。
SRはSet-Resetの意味です。
NORやNANDをたすき掛けにすることで、状態を保持する動作を実現することが出来ます。

回路図 シンボル 特性表

SとRが共に0の場合にQ(と\overline{\text{Q}})の状態が保持され、S=1の場合にQが1に変化、R=1の場合にQが0に変化します。SとRが共に1の場合は、NORで作られたものとNANDで作られたものとで動作が異なる、またQと\overline{\text{Q}}が同じになってしまう、S=1,R=1からS=0,R=0へ変化させた際の挙動が不安定となる等の理由のため、SとRが共に1とする入力は禁止とされてます。

JKラッチ

JKラッチはSRラッチの入力禁止条件での動作を変更したものです。(SとJ、RとKが対応しています。)

回路図 シンボル 特性表
JとKが共に1の場合は、Qと\overline{\text{Q}}が反転する動作になります。

Dラッチ

DラッチはSRラッチを\text{S=}\overline{\text{R}}の条件だけで動作させるイメージです。

回路図 シンボル 特性表
D=0の場合にQが0に変化し、D=1の場合にQが1に変化します。これだとあまり記憶回路としての意味がないように見えます。

ゲート付きラッチ、エッジトリガFF

たすき掛け部分の前段に、入力が有効かどうかを制御する信号(ゲート、イネーブルとも言う)を追加することで、入力が有効でない場合は動作せず状態を保持したままとすることが出来る。例えば、先ほどのDラッチにゲートを付けると、記憶回路として動作するようになります。

回路図 シンボル 特性表
また、入力が有効な期間を信号の立ち上がり時(もしくは立ち下がり時)の狭い期間に限定させると、エッジトリガFFとなり、同期回路を組む上で重要となります。立ち上がりをポジティブエッジ、立ち下がりをネガティブエッジと呼びます。

Dフリップフロップ(D-FF)

クロック毎にQが遅延(Delay)しているように見えるフリップフロップです。

回路図 シンボル 特性表

シンボルの>のような印がエッジトリガを示します。〇印が>の左側に付いている場合はネガティブエッジトリガ(立ち下がり)を示します。

Tフリップフロップ

T信号によりQが反転(Toggle)するフリップフロップです。

回路図 シンボル 特性表
初期状態が不明なことがあるので、初期状態を設定するためのセット/リセット端子があることが一般的です。

FPGAにおいては、Dフリップフロップだけ覚えておけば問題ないと思います。

脚注
  1. NANDだけやNORだけでもどんな論理演算でも出来ます。どんな論理演算でも出来る論理ゲートの組み合わせを完全系と言います。 ↩︎

Discussion