このＰＤＦは，ＣＱ出版社発売の「改訂新版 定本 ディジタル・システムの設計」の一部分の見本です．
内容・購入方法などにつきましては以下のホームページをご覧下さい．
<http://shop.cqpub.co.jp/hanbai/books/38/38921.htm>

第1章

Digital 回路の基礎

物理現象を実際に扱うときは，実
ディジタル

際上はすべて digital 値で行っていア ナ ロ グ

ます．すなわち analog 値といえども，その値を読み取って人に伝えるには，一定の有効数字で打ち切った数字の羅列にするしかないのです．

第 1 章 Digital 回路の基礎

10

1.1

Digital とはDigital という言葉は著者が大学を卒業した半世紀ほど前には，専門用語だった記憶があります．もちろんそれに対比して使われている analog という言葉も専門用語でした．
ここではまず，analog と digital の違いを温故知新してみます．もちろんすでにご存じの方は先に進んでください．

1.1.1

Analog と digital

例題 1.1 右脳思考
人間の脳の機能を説明する通説として図 1.1 のように，右脳を働かせることができる人は思考が digital 的ではないという議論があるが，それについてどう思うか．

図 1.1

Analog 脳と digital 脳？

［解］
この通説では「右脳は analog 的，情緒的，pattern 的思考を行い，左脳は digital 的，論理的，言語的思考を行う」ということですが，右利きの人の数 % と左利きの人の約半数には右脳に言語に関する機能があるそうです．また，日本語を母国語とする人は擬態語や擬声語が発達しているので，虫の音などの自然界の音を言語として認識しているそうです．
Logic（論理）ということばは言語や真理を表す古代ギリシャ語の λoγoζ から来ていると言われています．古代から言語は論理的であると考えられていたのでしょう．
実際に analog とか digital ということば自体は，電子工学（Electronics）や情報科学（IS：Information Science）
・情報技術（IT：Information Technology）の世界に限らず，広く一1.1

Digital とは11

般に使用されています．さらにこれを拡張して，人間には analog 人間と digital 人間がいるというように，人間の性格を論じるのに用いることもあるようです．
＊＊＊

本章ではこのようなあいまいな意味ではなく，電子工学や情報科学・情報技術で一般に使われる analog，digital の意味について考えてみることにします．Analog と digital は，
ある注目する対象がもつ数量をどう表現するか，またその扱いをどうするかの方法を論じたものといえます．

例題 1.2 Analog と digital の違い
Analog と digital はどう違うのか，例を出して考えよ．
［解］Analog は表 1.1 に示すように，対象のもつ数量を長さ，面積，角度，電圧，電流などの連続的に変化する物理量によって表す方式をいいます．そして，この連続した物理量を
analog 量と呼んでいます．
このように analog は，対象のもつ数量を物理量に相似させて表します．Analog という単語はもともと類似物（相似物）という意味の名詞です．一方 digital は d igit（指）から派生した形容詞で数字で計算をするという意味です．

表 1.1 Analog 表示と digital 表示
数量の表現方法
身

図 1.2

長

Analog 表示（物理量による）

Digital 表示（数値による）

測定した物差しや柱のキズの位置176.3 cm
（文字表記）

Digital 表示では単位量が必要

第 1 章 Digital 回路の基礎

12Digital では対象のもつ数量を数値によって表現します．文字による数量の表記や計算は基本的に digital 処理といえます．すなわち数量を一定桁数の数字の羅列にして表記し，計算をしているのです．
たとえば，表現する対象が学生の数や自動車の台数のようにその量が離散的で一つずつ数え上げられれば，その値をそのまま数字で表します．しかし，時間や水量のように連続的な量ならそのままでは表せないので，図 1.2 のように，分，秒や m3 のようなある単位量を決めてその何倍という形で表します．
このような，とびとびの有限の桁数からなる数値を digital 量と呼びます．ただ，一般的にはもう少し意味を広げて，単に連続的な量を analog 量，離散的な量を digital 量ということもあります．
＊＊＊

1960 年代までは analog computer というものが世の中に存在しました．それは計算すべ
き数量を電圧などの物理量に対応させ，電子回路によって電圧間の加算などを行って計算処理する方法でしたが，今では博物館の陳列物になっています．

例題 1.3 Analog 時計と digital 時計
Analog と digital の違いがよく例になる時計の表示について考えよ．
［解］
時計自体は日時計や水刻（水時計）でもないかぎり，チック・タックとゆっくりした音を出して動く振り子時計は digital 的に動いています．ただ表示方式が違います．
時計の表示方式は，従来からの針式すなわち analog 式と，多数の素子を集積した IC（Integrated Circuit：集積回路）化とともに普及した digital 式に大別できます．

図 1.3
時計の analog 表示と digital 表示（a）Analog 式（b）Digital 式

1.1

Digital とは13（1）Analog 表示式の時計は，図 1.3（a）のように，時刻を長針と短針がそれぞれ作る角度（Analog 量）で対応させて表す．
（2）Digital 式の時計では図 1.3（b）のように，時刻を秒ないし分を単位として離散的に数字（Digital 量）で示す．

例題 1.4 計算尺とそろばん
今はあまり見ることもない計算用の器具である計算尺とそろばんについて，
analog と digital の演算処理方式の違いを考えよ．
［解］
図 1.4 に示す計算尺とそろばんが例として考えられます．計算尺は最近はほとんど使われませんが，乗除算や平方根，べき乗の計算などが簡単にできます．1970 年代に電卓が普及するまでは，理工系の研究者・技術者や学生にとっては必携の道具でした．

（a）計算尺（2×3＝6 の計算をしているところ）（b）そろばん（算盤：中国から伝わった．1〜9 の数値が入れてある）

図 1.4

計算尺とそろばん

計算尺の特徴そろばんの特徴（1）計算しようとする数値を対数目盛上の（1）数値をそのまま玉の位置（Digital 量）で長さ（Analog 量）に対応させ，その長さを継ぎ足したり差し引いたりする操作によって計算結果を求める．
（2）目盛りを合わせるだけで，乗除算や平方根・べき乗の計算の答を誰でも簡単に表し，玉の上下操作で計算する．
（2）熟練者は別として，複雑な計算は，計算に時間がかかる．平方根やべき乗の計
算はむずかしく，これをやろうとすると非常に複雑な操作を要す．

第 1 章 Digital 回路の基礎

14（3）計算の精度を必要とするなら，機構的得ることができる．

に桁数の許す限り何桁でも得られる．

（3）刻まれている目盛以上の精度は目分量（4）そろばんは形さえ整っていれば一応使で読み取るしかない．

用に耐える．多少玉の滑りが悪くても計（4）ちょっとでもゆがんでいたり，Cursor

算の精度は同じように得られる．

ががたついていると精度が悪くなり，場（5）計算中操作が乱れて玉が正規の位置よ合によっては使用に耐えられなくなって

り多少ずれても，玉の上下の位置がどちしまう．

らか判別できたなら値は特定できるので，（5）計算の途中でズレが生じると計算結果

計算結果に影響を与えない．

も狂ってくる．

以上のような計算尺とそろばんの特徴は，電圧値などをそのまま data として使う
analog 処理と，電圧の高低を基準とする digital 処理の特徴にもなっています．

例題 1.5 Analog 処理と digital 処理の比較
Analog 処理と対比して digital 処理の特徴を整理してみよ．
［解］表 1.2 に analog 処理と digital 処理の特徴をまとめたものを示します．
表 1.2

Analog 処理と digital 処理の特徴
Analog 処理

Digital 処理
外乱や自己の不安定性の影響に強い，digital 量を 2 値的に表現した場合は顕著
誰がやっても同じ答が出る
桁数を多くとれば精度をそれだけ高められる

利点

処理過程が直感的

欠点

精度が出ないAnalog IC などの素子の性能が悪いと直接的に装置全体の性能に影響
Program 処理が難しい

少しでもこみいった処理を行おうとすると操作が複雑となり，それを扱う装置や機械も複雑化してしまう
一つ一つの数値を数学的・論理的に処理するので，原理的には処理が長くかかる
複雑な処理は program を作成しなければならない

不安定性に強いということは，digital 処理装置においてその構成する素子の性能にそれほど依存しないということです．すなわち，装置を構成する素子である digital IC の性能が多少劣化していても，論理どおりに機能さえすれば装置は正しく動作します．
＊

＊

＊

第

2章

Bool 代数とDigital 回路の表記― 論理式・回路図・HDL ―ブール

歴史的には digital 回路は Bool 代数があってはじめて実用的に使えるようになりました．もし Bool 代数がなければ digital 回路を構築するのはたいへんでした．
この Bool 代数は論理学と直接的な関係があります．Bool 代数は集合論のごく基本的な知識があれば，だれでも直感的に理解できます．
では，しばらく頭の体操にお付き合いください．

第 2 章 Bool 代数と Digital 回路の表記

54

2.1

Digital 回路の機能への Bool 代数の導入

2.1.1

Digital 回路の機能を数式と真理値表で表現

例題 2.1 回路機能の数式表現
Analog 回路および digital 回路は，その動作をどのように解析したり設計したりするのか．
［解］Analog 回路では回路の機能を行列で表します．Transistor 回路の場合は前章で少し触れたように，行列の要素を図 2.1（a）のように h －parameter で与えて機能を規定します．
しかし，行列という言葉を聞くだけで挫折感を覚える人もいるかも知れません．
入力電流（ Ii ）
入力
電圧
（Vi ）

Analog回路
機能は行列で表現
Ii
Vi = hie hre
hfe hoe Vo
Io

（ ）（

）（ ）

出力電流（ Io ）
出力
電圧
（Vo ）

頭が痛くなる……

入力 A

入力 B

（a）Emitter接地transistorの機能

図 2.1

Digital回路
機能は論理式で表現
Y = A・B

出力 Y

すっきり簡単！
（b）AND機能

回路の機能を式で表現

一方 digital 回路では，前章で示したように digital 信号を H と L という二つの状態で表現
し，この H と L を扱う digital 素子を組み合わせて種々の機能を実現します．Digital 回路では，この回路の機能を表現するために，二つの状態 H と L に二つの数字‘1’と‘0’を対応させると，図 2.1
（b）のように数学的な取り扱いができます．Analog 回路よりは見た目には簡単な式で記述されていることが分かります．
ブーリアン・アルジェブラ

このような 2 値を扱う学問には Bool 代数（Boolean algebra）というものがあり，digital
回路の種々の機能の記述に，この Bool 代数が導入できます．一般に digital 回路の機能をロジカル・ファンクション

論理機能（Logical function）といってます．すなわちdigital回路の機能はBool代数の関数（論理式）で表されるということです．論理機能は Bool 代数の計算式になりますから論理演算
ともいいます．

2.1

Digital 回路の機能への Bool 代数の導入

55

例題 2.2 真理値表による表現
AND，OR，NOT という論理演算それぞれについて，入力の組み合わせによる出力状態の表を作成して記述せよ．
［解］Bool 代数では 2 値を‘1’と‘0’で表し，以下の三つの演算を定義します．
名称

本書での記号

論理積

AND，“・”

英語名
Logical product

論理和OR，“＋”

Logical sum

否定

NOT，“ ”

Negationプ ロ ダ ク ト
サ ム

ネゲーション

表 2.1
Bool 代数の演算規則

AND

OR

NOT

1・1 ＝ 1

1＋1＝1

1＝0

1・0 ＝ 0

1＋0＝1

0＝1

0・1 ＝ 0

0＋1＝1

1＝1

0・0 ＝ 0

0＋0＝0

0＝0

表 2.1 はこの AND，OR，NOT について，入力の‘1’‘0’すべての場合の Bool 代数の演，算規則を表したものです．
この演算規則は 10 進数の九九などのように値そのものに対する規則ですが，通常の代数と同じく各論理機能の入力や出力に‘1’，‘0’のどちらかの値をとる変数 A，B，Y を導入
バ リ ア ブ ル

することができます．これを論理変数（Logical variable）といいます．
すると二つの 2 値変数 A，B に対しては表 2.2 のように演算結果 Y を表にまとめることができます．このように論理演算の各入力変数のすべての入力の組み合わせに対する出力をツルース・テーブル

表にまとめたものを真理値表（Truth table）といいます，

表 2.2
基本論理演算の真理値表

入力

出力

入力

出力

A

B

A・B

A

B

A＋B

0

0

0

0

0

0

入力

出力

0

1

0

0

1

1

A

A

1

1

1

1

1

1

0

1

1

0

0

1

0

1

1

0

（a）AND（論理積）（b）OR（論理和）（c）NOT（否定）第 2 章 Bool 代数と Digital 回路の表記

56

ツ ル ー

表 2.2
（a）で は 論 理 積 に つ い て の 出 力 値 を 示 し て い ま す が，‘1’を 真（True）‘0’を 偽，フェイルス（False）とみなせば，A と B が真のときに結果（ A・B）が真となるので，論理的に AND の操作となっています．表 2.2（b）では，A か B の少なくともどちらか一方が真ならば，結果は真となるので，OR の操作を行っていることが分かります．
表 2.2（c）は，A が真なら偽，偽なら真となり，明らかに NOT の操作となっています．
このように Bool 代数の基本論理演算は，それぞれ論理操作に対応していることが分かります．

例題 2.3 論理演算の式
フォーミュラBool 代数の演算で書かれた式を論理式（Logical formula）という．二つの論理式を等号で結んだ恒等式は，どのようなものが成り立つか調べよ．
［解］
恒等式とは変数の値にかかわらず等号（＝）の左右にある式の値が常に等しくなる式をいいます．Bool 代数は代数の一種ですから，表 2.3 のように代数学上の恒等式はそのまま成立します．
表 2.3 Bool 代数の恒等式
A・B ＝ B・A
A＋B ＝ B ＋ A
（A＋B）
＝A
A・
吸 収 則
A＋A・B ＝ A・C ＝ A・
（B・C）
（A・B）
結 合 則
（A＋B）
＋C ＝ A＋（B ＋ C）
交

換

則

分

配

則

deMorganの法則‘1’と‘0’に関する法則（B ＋ C）＝ A・B ＋ A・C
A・・（A ＋ C）
A ＋ B・C ＝（A ＋ B）
A・B ＝ A ＋ B
A ＋ B ＝ A・B
A・1 ＝ A，A・0 ＝ 0
A ＋ 1 ＝ 1，A ＋ 0 ＝ A

ド ・ モ ル ガ ン

吸収則や deMorgan の法則があったり分配則の一部が実数の代数と異なる点は，視点を変えて後の例題 2.10 で説明する集合論から考えれば容易に理解できます．
これらの式が成り立つことは通常の代数と同じように証明できますが，変数に‘1’，‘0’を代入してすべての場合について検証を行うことでも，容易に確かめることができます．
これは場合の数が有限である Bool 代数の大きな特徴といえます．
なお，これらの式で混乱が起こらない限り，論理積の記号“・”は省くことがあります
が，本書では省くと 2 文字以上からなる変数と間違いやすいので，省かずに記述しています．
また一般に式の中にこの三種の演算が含まれるとき，“”，“・”，“＋”の順に演算が優2.1

Digital 回路の機能への Bool 代数の導入

57

先されます．もちろん（ ）内の演算が最優先となることは，普通の代数とまったく同じです．

例題 2.4 deMorgan の法則
deMorgan の法則が成り立つことを論理式にすべての場合の‘1’，‘0’を代入することで示せ．
［解］
実際に表 2.4 のように各変数のすべての‘1’，‘0’の組み合わせについて式の値を計算す
ると，deMorgan の法則の式の両辺の値は常に等しいことが証明できます．
表 2.4
A

真理値表による deMorgan の法則の証明
B

0
0
1
1

0
1
1
0

A
1
1
0
0

B
1
0
0
1

A・B
0
0
1
0

A・B
1
1
0
1

A＋B
1
1
0
1

A
0
0
1
1

B
0
1
1
0

（a）A ・B ＝A ＋B の証明

A
1
1
0
0

B
1
0
0
1

A＋B
0
1
1
1

A＋B
1
0
0
0

A・B
1
0
0
0

（b）A ＋B ＝A ・B の証明

例題 2.5 論理式の簡単化
次の等式が成り立つことを示せ．
（1）A・A ＝ A，A ＋ A ＝ A（べき等則）（2）A・A ＝‘0’（排他律），A ＋ A ＝‘1’
（排中律）
［解］
論理式の簡単化の方法は，A ＝‘1’と A ＝‘0’のそれぞれの場合について，表 2.1 の演算
規則と照らし合わせて考えると，明らかであることが分かります．

第 2 章 Bool 代数と Digital 回路の表記

58

例題 2.6 吸収演算の練習
複数の基本論理演算からなる論理式は，Bool 代数の演算法則にしたがって，より簡単な形に変形することができる．
吸収演算の法則を用いて，次の式が成り立つことを示せ．
（1）A ＋ A・B ＝ A（2）A ＋ A・B ＝ A ＋ B（3）（A ＋ B）
・
（A ＋ B）＝ A［解］（1）A ＋ A・B ＝ A・1 ＋ A・B ＝ A・（1 ＋ B）＝ A（2）A ＋ A・B ＝ A・
（1 ＋ B）＋ A・B ＝ A ＋ A・B ＋ A・B ＝ A ＋（A ＋ A）・B ＝ A ＋ B（3）（ A ＋ B）
・
（A ＋ B）＝ A・A ＋ A・B ＋ B・A ＋ B・B＝ A ＋ A・B ＋ A・B ＝ A ＋ A・（B ＋ B）＝ A ＋ A ＝ A＊＊＊（1）では A ＝ A・1 を用い，分配則により A ＋ A・B は A・1 ＋ A・B と置き換えることができます．
この式をかっこでくくると A・（1 ＋ B）となります．すると 1 ＋ B ＝ 1 であるため，この式は A・1 ＝ A となり，

A ＋ A・B ＝ Aが成り立つことが分かります．
（2）では（1）で証明されたように A・（1 ＋ B）＝ A となるので，まず A を A・（1 ＋ B）に置
き換えることで，

A ＋ A・B を A・（1 ＋ B）＋ A・Bと変形します．次に A・（1 ＋ B）の部分を展開して，A・（1 ＋ B）＋ A・B を A ＋ A・B ＋ A・Bという形に変形します．A・B ＋ A・B は分配則 A・B ＋ A・C ＝ A・（B ＋ C）
により，

B・A ＋ B・A ＝ B・（A ＋ A）と B でくくることができ，

A ＋ A・B ＋ A・B ＝ A ＋（A ＋ A）・Bとなります．最後に，A ＋ A ＝ 1 であるため，

A ＋（A ＋ A）・B ＝ A ＋ 1・B

第3章

いろいろな組み合わせ論理回路の実現
こ の 章 か ら HDL と 回 路 図 で の 記 述 を 主 と し ま す．HDL は
Verilog HDL で記述し，VHDL の記述も極力加えます．Digital 回路の設計技術のむずかしさは，じつはかなりの部分が組み合わせ論理回路の設計に属しています．複雑な論理機能は基本的には組み合わせ論理回路で決定し，その結果をflipflopやregister，
memoryに保存するだけです．
組み合わせ論理回路も複雑な論理の多段接続による実現だけでなく，LSI の大規模化に伴い，並列処理による高速化や，従来実現をあきらめていた program 処理の hardware 化へも手が出せる
シ ー ム レ ス

時代になりました．このように hardware と software の seamless（継ぎ目がない）化が進行していますが，hardware には softwareが弱い同時動作という特徴があります．

第 3 章 いろいろな組み合わせ論理回路の実現

122

3.1

Data を選択する回路―Selector

3.1.1

二つの data や信号から一つを選択する回路

例題 3.1 信号の選択（従来の論理式と HDL）
‘0’で切り替えて出力 Y として出したい．Bool
入力信号 A と B を選択信号 S の‘1’，
代数の論理式と HDL の論理式とで記述せよ．
［解］

A
B

2to1Sel

Y

Y

B

A
B

S＝ 1

S

図 3.1

A

Y
S＝ 0

1 bit 信号の selectorA

図 3.2
信号 selector の MIL 記号回路図

B
S

Y

図 3.1 に示す回路は通常，選択信号 S が‘1’か‘0’かによって二つの data や信号のどちらを選択するかを決定します．
図 3.1 は MIL 記号で描くと図 3.2 のようになります．なお，AND と OR が連続して描かれていますが，これは間の線を省略したものです．
Digital system では二つの data や信号のどちらかを選択して監視したり，利用したりす
セ レ ク タマ ル チ プ レ ク サる用途がたくさんあります．この機能は data selector とか data multiplexer と呼ばれています．
● 従来の論理式による記述

Y ＝ A・S ＋ B・S● Verilog HDL の論理式による記述

module sample3_1(Y, A, B, S); // 回路の名称と入出力信号の定義
input A, B, S;// 信号の宣言，同じものをまとめてもよい3.1

Data を選択する回路―Selector

output Y;
assign Y = A & S | B & !S;
endmodule

123// 論理式を代入（式ごとに ; が必要）// 終了（; は不要）

論理式などを別の信号に代入（物理的に接続）するには assign 文を使います．Verilog
HDL で は， 回 路 を 定 義 す る module 文 の () の 後 に は ; を 付 け， 設 計 の 最 後 を 示 すendmodule 文の後に ; は付けません．Verilog HDL ではいくつかの回路設計（Module）
を一つの file にまとめることができます．
● VHDL の論理式による記述（宣言文の一部は省略）

entity sample3_1 is// 信号の宣言部// 一つずつ宣言する

port(A: in std_logic;
B: in std_logic;
S: in std_logic;
Y: out std_logic);end sample3_1;// 宣言部終了
architecture rtl of sample3_1 is
begin

Y <= (A and S) or (B and not S); // 論理式を代入（式ごとに ; が必要）

end rtl;// 終了（; が必要）

VHDL では代入には <= を使い，文は基本的に ; で区切ります．また入出力 port の宣言
は信号や data ごとに行います．なお，宣言文の一部は省略してあります．
論理演算の優先順位は not だけが高く，ほかの and，or，nand，nor，xor は同じです．Verilog HDL のように AND は OR に優先しないので，かっこで括る必要があります．
な お， 本 書 の 本 文 で は AND，OR，NOT は 大 文 字 を 使 っ て い ま す が， 各 設 計 中 のVHDL の予約語は Verilog HDL と同様に小文字で書きます．
回路設計が思った通りになっているかどうかは動作 simulation を行って検証します．本書では simulation は simulator の波形 editor で検査波形を作成して実行します．
図 3.3 に示すように，選択信号 S が‘1’，‘0’と変わるにしたがって，それぞれ A，B が交互に選択されて出力 Y に送られているのが分かります．
ヘルプ

なお simualtion を実行するための simulator の使い方についてはその simualtor の help およびいろいろな解説記事や web site を参照してください．

第 3 章 いろいろな組み合わせ論理回路の実現

124

図 3.3 信号 selector の simulation 波形

例題 3.2 Byte data の選択（Verilog HDL）
各 8 bit の入力 data A と B を選択信号 S で切り替えて data Y として出力したい．この回路を Verilog HDL の論理式で設計せよ．
［解］
グループ

バ ス

二つ以上の多 bit からなる group data は bus data ともいいます．Bus data をまるごと選
ベ ク タ

択して出力する回路は非常に多く使われています．なお，多 bit data は VHDL では vectorと名付けられています．
従来の論理式では group data を表現する方法は書籍によってバラバラでした．Verilog
HDL や VHDL では，C などの programming 言語と同じようにその表現形式が決まっています．
Verilog HDL では bus data は信号番号の上限と下限を : で区切って並べ，[7:0] と表します．この bus の記述を data の名称の後に A[7:0] と空白を置かずに付けます．Bus
data を宣言するときには，C 言語にならって入出力宣言の input，output が文の先頭に置かれ，data 幅の定義，data 名称の順に，

input ␣ [7:0] A;と並べます．宣言文と信号名称との区切り記号は空白␣を使います．
Bus data の中の一つを単独で指定するときは，bit 番号を A[3] などと書きます．これを A3 と略記することはできません．
Verilog HDL では，bus data に対する論理演算子は data 同士の対応する bit ごとの演算になります．そのため従来の論理式でよく使われるように bus data と 1 bit の制御信号のAND を一つの論理式で，A[7:0] & S と直接に記述することはできません．そこで，bus
data は bit ごとに分解して論理演算を施します．
8 bit 幅の選択信号 s[7:0] を宣言して，data として AND を取ることもできますが，複雑になるだけです．

3.1

Data を選択する回路―Selector

125● Verilog HDL の論理式での記述

module Sample3_2 (Y, A, B, S);// 回路の名称と入出力信号名
input [7:0] A, B;// Data や信号の宣言
input
S;
output [7:0] Y;
assign Y[7] = A[7] & S | B[7] & !S; // 論理式をassign 文で定義
assign Y[6] = A[6] & S | B[6] & !S;
assign Y[5] = A[5] & S | B[5] & !S;
assign Y[4] = A[4] & S | B[4] & !S;
assign Y[3] = A[3] & S | B[3] & !S;
assign Y[2] = A[2] & S | B[2] & !S;
assign Y[1] = A[1] & S | B[1] & !S;
assign Y[0] = A[0] & S | B[0] & !S;
endmodule// 終了
例題 3.3 Selector を数式で記述（HDL）
例題 3.2 の Verilog HDL の記述は同じような式がたくさんあり，たいへん不便である．Verilog HDL や VHDL で論理式を使わないで，数式で記述するにはどうすれ
ばよいか．
［解］
● Verilog HDL の条件付き代入文での記述

module Sample3_3 (Y, A, B, S);
input [7:0] A, B;
input
S;
output [7:0] Y;
assign Y = (S == 1'b1) ? A : B;
endmodule// 条件付き代入文

Bus data を選択条件信号 S などで選ぶときは，Verilog HDL では条件付き代入文を使う方法があります．条件が成立したときの代入値は“?”の後に，成立しなかったときの代入値は“:”の後に置きます．

assign data や信号 = (条件式または論理値) ? 条件成立時の値:条件不成立時の値 ;この記述法は C 言語にある条件演算子と同じですが，ちょっと見ただけでは理解しにく第 3 章 いろいろな組み合わせ論理回路の実現

126

い書き方なので，C 言語に慣れていない人は，Verilog HDL にある程度習熟してから使った方がよいかもしれません．
＊＊＊

条件付き代入文では条件式は () に入れなくても使えます．しかし式が見にくくなるので，() を使うほうがよいでしょう．
選択信号 S を比べる相手には，この設計では論理値を表す 1’b1 を使っていますが，10進数の値として 1 を使い，(S==1) とも書いてもかまいません．

() 内の判断式は，変数 S が 1 bit 幅の data のときは，(S==1) や (S==1'b1) としなくても，S を boolean と見立てて，(S) としても同じになります．ただしこれは，C 言語の記法をそのまま持ち込んだ形なので，論理値であることが明確な場合以外は使わないほうがよいかもしれません．
● VHDL の when 〜 else 文での設計（宣言文の一部は省略）

entity Sample3_3 isport(A: in std_logic_vector(7 downto 0);
B: in std_logic_vector(7 downto 0);
S: in std_logic;
Y: out std_logic_vector(7 downto 0));end Sample3_3;
architecture Sample3_3 isbegin
Y <= A when (S = '1') else B;
end rtl;
VHDL では，when 〜 else 文構造が Verilog HDL の条件付き代入文と同じように使えます．
Data や信号 <= 条件成立時の値 when( 条件式 ) else 条件不成立時の値 ;この条件式はかならず () に入れて記述します．なお条件が等しいことを調べる等号は== ではなく，= を一つだけ書きます．
＊＊＊

VHDL では 1 bit の論理値は '1' あるいは '0' と記述します．なお条件文は Verilog
HDL のように (S) と省略することはできません．
多 bit からなる group data は VHDL では vector として扱い，下記のように宣言時にその第4章

演算用の回路2 進数での演算，それは digital 回路が使われはじめた当初か
ら要求された機能でした．2 進数でも 10 進数と同じく位取り記
法を使います．
インドにおける零の発見とそれによる位取り記法の概念がなかったアジアでも，和算に代表される数学はかなり高度な水準まで発達しました．しかし，それはやはりとてつもなく難解な学問であったと思われます．2 進数の演算は位取り記法の便利さを私たちに如実に分からせてくれます．

第 4 章 演算用の回路

172

4.1

2 進数の計算

Digital 回路では数値，文字，記号を data として符号化して扱います．Digital 回路におバ イ ナ リ

いて，数値は 2 進法（Binary）によって表示された 2 進数（Binary number）を用います．わデ シ マ ル

れわれが通常使用しているのは，10 個の記号（数字）よりなる 10 進法（Decimal）
です．数を表す記号が二つしか存在しない 2 進法で大きな数を表すにはどうすればよいのでしょうか．
2 進数については前にも簡単に触れましたが，ここでまとめて考えます．

4.1.1

2 進数による data の表現

例題 4.1 2 進表記
2 進数値の小さいほうを×，大きいほうを○とした場合，0 ～ 7 までの 10 進数はどう表現できるか．
［解］表 4.1
2 進数の位取り

10 進数

0

1

2

3

4

5

6

7

2 進数

×

○

○×

○○

○××

○×○

○○×

○○○

2 進数値を表現する方法は二つの異なる記号さえあれば何でもかまいません．小さいほうを×，大きいほうを○ではなくて，それぞれ“零”，“壱”としても同じです．ただ表
4.1 のような位取り記法を用いなくては大きな数値は表現できません．2 進法では通常，
Bool 代数との整合性を考え，×に‘0’，○に‘1’を対応させます．
2 進数から 10 進数への変換，あるいはその逆は，表 4.1 を拡張した対応表を作っておけばよいのですが，数が大きくなると実用的ではありません．しかし，表 4.2 のように 0 から 15 くらいまでの対応は覚えておくといろいろと便利です．4 桁の 2 進数では 16 種のpattern が表現できるので，10 ～ 15 に英字の A ～ F を対応させた 16 進表示が実用の世界
表 4.2
10/16 進数と2 進数の対応

10（16）進数
2 進数
10（16）進数
2 進数

0

1

2

3

4

5

6

7

0000

0001

0010

0011

0100

0101

0110

0111

8

9

1000

1001

10（A） 11（B） 12（C） 13（D） 14（E） 15（F）
1010

1011

1100

1101

1110

1111

4.1

2 進数の計算

173

ではよく使われます．
ここで非常に重要なことは，同じ‘1’，‘0’を用いていても Bool 代数と 2 進数は似て非なるものだということです．Bool 代数は論理機能を記述する数学で，2 進数は表現が違うだ
けで，10 進数が従っていた代数と同じ代数の管理下にあります．当然，Bool 代数では
‘1’＋
‘1’＝‘1’ですが，2 進数では 1 ＋ 1 ＝ 10 です．絶対に「Bool 代数は 1 ＋ 1 が 2 でなく 1 となる代数」などという皮相的な見方をしないでください．

例題 4.2 10 進－2 進変換
10 進数を 2 進数に変換する方法を考えよ．
［解］
10 進数を 2 進数に変換する場合，一般的な変換法則を用いることが有効です．図 4.1 は
10 進数から 2 進数への変換を示してあります．これには図 4.1（a）の 2 の n 乗を引いていく方法（減算法）と，図 4.1（b）の 2 で割っていく方法（除算法）があります．減算法では前もっ余り（a）減算法

図 4.1（b）除算法

10 進数から 2 進数への変換方法（366 → 101101110）（a）加算法（b）乗算法図 4.2 2 進数から 10 進数への変換方法（11011001 → 217）

第 4 章 演算用の回路

174て 2 の n 乗の値を知っておかなければなりませんが，上から 2，3 桁分計算すれば概算値が分かるという利点があります．一方，除算法では 2 で割って余りを並べて逆に読むことになり，最後まで計算しないと桁数さえ分かりません．しかし，2 の n 乗の値を知らなくても変換できるという利点があります．

例題 4.3 2 進－10 進変換
2 進数を 10 進数に変換する方法を考えよ．
［解］
2 進数を 10 進数へ変換するには，図 4.2（p.173）のように逆に 2 の n 乗を加えていく方法（加算法）と，2 倍していく方法（乗算法）があります．2 の n 乗の値を知っていれば，加算法は簡単です．これに対して乗算法は，多少手間がかかりますが 2 の n 乗の値を知らなくても使えます．筆算では，10 進数から 2 進数への変換には除算法が，2 進数から 10 進数への変換には加算法が手慣れた人には便利です．
＊＊＊

2 進数を用いた 10 進数のより容易な表現法として，第 3 章で少し説明した 2 進化 10 進法（BCD：Binary Coded Decimal）があります．
この BCD では，10 進数の各桁を表 4.3 のように 2 進数で表現します．したがって，たと
えば 73 という数値を BCD 符号で表すと，図 4.3 のようになります．このように 10 進数の1 桁ずつを，2 進数の 4 桁ずつで区切って表現しているので，変換が非常に簡単です．しかし，2 進数の 4 桁で表現できる数は 0 から 15 まであるので，この方法では 10 から 15 まで，

表 4.3
2 進化 10 進法

10 の進数の各桁

BCD

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

図 4.3 10 進数 73 の BCD と 2 進数による表現4.1

2 進数の計算175すなわち 2 進の 1010 から 1111 までが BCD では使用されず，その意味で符号としてむだが
あります．
表 4.4
3 余り符号と3 余り
Gray 符号

10 進数

3 余り
Gray

3 余り

A

B D C

0

0

0

1

1

0

0

1

0

1

0

1

0

0

0

1

1

0

2

0

1

0

1

0

1

1

1

3

0

1

1

0

0

1

0

1

4

0

1

1

1

0

1

0

0

5

1

0

0

0

1

1

0

0

6

1

0

0

1

1

1

0

1

7

1

0

1

0

1

1

1

1

8

1

0

1

1

1

1

1

0

9

1

1

0

0

1

0

1

0

（a）10 進数と 3 余り，3 余り Gray

CD
AB

00

01

11

00

10
0

01

4

3

2

1

11

5

6

7

8

10

9

（b）Gray 符号の Karnaugh 図
グ レ イ

このほかに表 4.4 に示すように，3 余り（Excess−3）符号や 3 余り Gray 符号があります．
3 余り符号は数字の 0 と data のない場合の 0 が区別でき，また 4 との 5 の間を境にして，‘1’と‘0’を反転させると上下対称となります．3 余り Gray 符号は数字が一つ隣りに移るとき，2 進数の四つの桁のうち一つだけ‘1’と‘0’が反転するようになっています．すなわち隣り同士の数は，表 4.4（b）の Karnaugh 図で分かるように，その構成する 4 bit 中で 1 bit のみ
異なる Bool 空間での Hamming 距離 1 の構造となっています．
Digital 回路では，数値以外に文字や記号もしばしば扱うことがあります．そのために文字や記号を‘1’‘0’で符号化しなくてはなりません．これにはいくつか決められた符号，
ア ス キ ーがあります．一般的には ASCII 符号が使われています．また，事務処理用の大型計算機
では EBCDIC 符号が使われていたこともあります．日本でも JIS（日本工業規格）で，カタ
アルファベットロ ー マ

カナや Alphabet（Roma 文字）の符号が決められています．JIS に決めた 8 bit の符号を表4.5 に示します．この表から，たとえば英文字 A は“01000001”という符号で与えられることが分かります．

第 4 章 演算用の回路

176

表 4.5

8 bit 情報交換用符号
Control

下位

上位

上位4 bit

英数

カナ0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100

1101 1110 1111

0000 NUL DLE

SP

0

@

P

'

p

未定義

ー

タ

ミ

0001 SOH DC1

!

1

A

Q

a

q

。

ア

チ

ム

2

B

R

b

r

「

イ

ツ

メ

#

3

C

S

c

s

」

ウ

テ

モ

0010 STX DC20011 ETX DC3

下位4 bit

0100 EOT DC4

$

4

D

T

d

t

、

エ

ト

ヤ

0101 ENQ NAK

%

5

E

U

e

u

・

オ

ナ

ユ

0110 ACK SYN

&

6

F

V

f

v

ヲ

カ

ニ

ヨ

7

G

W

g

w

ァ

キ

ヌ

ラ

0111 BEL ETB
1000

BS

CAN

(

8

H

X

h

x

ィ

ク

ネ

リ

1001

HT

EM

)

9

I

Y

i

y

ゥ

ケ

ノ

ル

1010

LF

SUB

＊

:

J

Z

j

z

ェ

コ

ハ

レ

1011

VT

ESC

+

;

K

[

k

{

ォ

サ

ヒ

ロ

1100

FF

FS

,

<

L

¥，
\†

l

│

ャ

シ

フ

ワ

1101

CR

GS

−

=

M

]

m

}

ュ

ス

ヘ

ン

1110

SO

RS

.

>

N

^

n

˜

ョ

セ

ホ

゛

1111

SI

US

/

?O

̲

o

DEL

ッ

ソ

マ

゜

ASCII keyboardではshift側
通常，shiftと関係ないkeyとする

4.1.2

未定義

†ASCII code

2 進法の加算と減算

例題 4.4 10 進数の計算を 2 進数で行う
10 進数の 13 と 27 の加算を 2 進法で行うためにはどうすればよいか考えよ．さらに，
72 から 33 を引く場合はどうすればよいか．
［解］
10 進数の 13 と 27 の加算を 2 進法で行うと，図 4.4（a）のようになります．すなわち，13は 2 進数で“1101”，27 は“11011”で，その各桁の加算法則は図 4.4（b）のように被加数 X
キ ャ リと加数 Y および下の桁からの桁上げ（Carry）
c の三つの組み合わせからなります．
次の 2 進法の減算も，同じように行うことができます．10 進数の 72 から 33 を引くことに相当する 2 進法の計算は，図 4.5（a）のように加算と同じく下から順次計算すればよいのです．
ここで 1 から 0 は引けますが，0 から 1 は引けないので，さらに上の桁から借ります．も第5章

Flipflop，Register と同期式論理回路
汎用論理 IC である 74 series で回路を構築していた時代は，回路の実装密度も低く，少ない IC で多くの機能を実現する技術がもてはやされました．その結果 flipflop や counter も多くの種類が用意され，使い勝手に応じて利用されました．
GA や Standard cell，FPGA のような LSI が主力になった今では，flipflop の動きが単純なほど設計ミスが少なくなり，検証も楽であるという認識で回路を作成します．Digital system
設計者に対する評価では，いかに楽に検証できる回路を作るかという技術力が，処理速度を上げることと同じ程度に重要視され，回路数を減らすことにはあまり熱心にならなくてもよくなりました．

第 5 章 Flipflop，Register と同期式論理回路

232

5.1

Flipflop の原理を理解する

前章までの gate 回路では，入力端子の‘1’，‘0’（H，L）が決まれば，それに応じてある
動作遅れ時間後に出力が一義的に決まりました．さらに gate 回路をいくつか組み合わせ
てつないでも，動作遅れが増すのみで，やはり出力は一義的に決まります．
フィードバック

その入力の一つに自分自身の出力を feedback（ 帰還）して使うということを考えます．
すると出力の値は，外部からの入力の値から一義的には決まらなくなります．それは現在の自分自身の出力も論理操作の対象となるからです．
これらの回路の動作を歴史的な進歩も考慮に入れて，原理からの理解を進めます．

5.1.1

論理回路に feedback を付ける

例題 5.1 Feedback のある回路
Feedback のある回路を用いて data の状態を保存するにはどうすればよいか．
［解］
ある論理回路で入力を A，B，C，…とし，出力を Y とすると，その論理機能は一般的に，

Y ＝（
f A，B，C，…）
コ ン ビ ネ ー シ ョ ナ ルという論理式で記述できます．このような回路を組み合わせ論理回路（Combinational
circuit）と呼んでいます．組み合わせ論理回路では，回路のもつある遅延時間以上経過す
れば，入力条件のみから出力が得られ，回路は論理式通りに動作したと見なせます．
図 5.1（a）の回路と異なり，出力を表す論理式 f の中に自分自身の出力 Y が，

Y ＝（
f Y，…，A，B，C，…）
A
B
C

組み合わせ
論理回路

Y

A
B
C

Feedback
がある回路

F

図 5.1
Feedback がある
回路（a）一定時間内に出力が一義的に決まる（b）出力は内部状態で異なることがあるY5.1

Flipflop の原理を理解する

233と入力論理変数として含まれている場合はどうでしょうか．これは図 5.1（b）の図中に示すように，組み合わせ論理回路の出力が，入力へ feedback している回路になります．
Feedback のもっとも簡単な形は，図 5.2 のように inverter の出力を直接入力側につないだものです．この回路では，入力を‘1’（H）とすると出力は‘0’（L）になり，この出力の‘0’（L）は feedback して入力を‘0’（L）にします．すると，入力が‘0’（L）なので出力は‘1’（H）にならなければならず，結局，出力はこの inverter の遅延時間の 2 倍の周期で，
‘1’
（H）
と
‘0’
（L）の間を交互に往復して発振することになります．
このように時刻 t ＋ 1 のときの出力 Yt ＋ 1 が，時刻 t のときの出力 Yt を含む入力条件によって，

Yt ＋ 1 ＝ （f Yt ，A，B，…）
シーケンショナル

というように決まる回路を順序回路（Sequential circuit）といいます．

Inverter（NOT機能）

0

1

図 5.2
もっとも簡単な順序回路

0

1

1

実際に発振させるには3段以上つないで，遅れ時間を確保する

001

ただし，図 5.2 の回路は立ち上がり時間 tr が遅延時間 td とほぼ等しくなるために，普通は原理通りには発振しません．原理通りに動かすには，遅延時間を大きくしなくてはならないので，inverter を最低でも 3 段くらいつなぐ必要があります．このような回路を
オ シ レ ー タ

logical oscillator といい，回路の実質的な遅延時間の測定に用います．奇数個の inverterをつないだものは，すべて同じ発振動作となります．
では，次に inverter を偶数個つないだ場合を考えてみます．このもっとも簡単なものは，
図 5.3 のように二つの inverter からなる場合です．この回路の二つの inverter は正論理か
ら負論理，負論理から正論理に変換する inverter 機能として使われています．したがって，
ノ ー ド

左端が
‘1’のとき回路内の node（つなぎ目，節）はすべて‘1’となり，また，左端が‘0’のとき内部の node はすべて‘0’となり二つの安定な状態が存在します．
もちろん，これを H や L level で見た場合でも，左端が H なら L，H となって feedback

第 5 章 Flipflop，Register と同期式論理回路

234

図 5.3
2連inverter回路による基本flipflop（P：Positive，N：Negative）

1（H）

1（L）

P

N

InverterInverter

0（L）

0（H）

P

N

Inverter

1（H）

0（L）

Inverter

され，左端の H と一致しています．もう一つの場合も，左端が L なら順に H，L となり，やはり左端が L なので矛盾しません．このように，この回路は図 5.2 の logical oscillator と異なって，状態が安定していて発振現象は起きないことが分かります．
ところでこの回路で，最初に状態が‘1’，‘0’，‘1’となっていたり，逆に
‘0’
‘1’
，
‘0’
，
とな
っていると，どのようになるかを考えてみます．この状態は，回路として非常に不安定な状態ですが，通常は入力が出力に伝搬する速度が二つの inverter で差があるので，たちまちどちらかの安定状態に収まってしまいます．したがって，このような不安定な状態が続くことはないと考えてよいでしょう．
このように安定状態が二つある回路は，その安定状態の出力が
‘1’
か
‘0’
かによって，二フリップフロップ

者択一の情報の記憶が可能となります．一般にこのような回路を f l i p f l o p と呼んでいて，
digital 回路でもっとも基本的な機能を実現する回路の一つです．

5.1.2

RS−flipflop の原理

例題 5.2 RS－flipflop の動作とその解析
Flipflop を実際に利用するためにはどのような回路にすればよいか考えよ．
［解］
図 5.3 の flipflop は安定な状態が二つありますが，それを利用する場合，一方の状態から他方の状態への変化が可能であったり，あるいは指定の状態を外部から set できないと
digital 回路として利用価値が低くなってしまいます．それには図 5.3 のような inverter 回

5.1

Flipflop の原理を理解する

235

路だけの組み合わせでは無理で，図 5.4 のように 2 入力以上の回路を用いて feedback loopを外部から切れるようにしなければなりません．
nS

α

図 5.4
NAND素子によるflipflop

nQ

β

OR機能

AND機能

Q

H

この回路は二つの NAND 素子で構成されていて，正論理，負論理が明らかになるよう
セット

ホールド

に記述されています．この回路の一方の入力端子を s et（nS），
もう一方を hold（H）と名付け，
出力端子を Q，nQ とします．n が付いている信号は負論理で使われていることを意味しています．この flipflop がどう動くか調べてみます．
A

nS

OR機能

C

B
D
H

F
E

Q

nQ

A

B

C =Q

D

E

F =nQ

0

0

0

0

0

0

0

1

1

0

1

0

1

0

1

1

0

0

1

1

1

1

1

1

AND機能

B =F

（a）回路の正論理／負論理とNANDの論理機能（b）Gateαの
真理値表

D =C
（c）Gateβの真理値表

図 5.5 Flipflop の論理機能

図 5.4 の回路を見やすくするために，図 5.5（a）のように書き直します．この回路で使っている二つの素子は両方とも NAND 素子ですが，αは入出力の正論理 / 負論理を考えると
OR の機能となり，βは AND の機能となります．その真理値表は図 5.5（b），（c）のようになります．ここで入力 nS を‘0’，H を‘1’としておき，出力 Q，nQ がともに‘0’のときから以下のように調べてみます．なお，出力端子 nQ は負論理なので注意してください．
（1）初期状態では図 5.6（a）のように，αの入力は二つとも‘0’なので，真理値表から出力は‘0’，βの入力は‘0’と‘1’で AND は成立せず，出力は‘0’となり，設定した Q，nQ の状態と一致しており，安定している．
（2）ここで入力 nS を‘0’から‘1’にすると，αが OR なので図 5.6（b）のように Q は‘1’となり，βの二つの入力が‘1’，‘1’になる．その結果，AND が成立して nQ も‘1’となる．これ

第 5 章 Flipflop，Register と同期式論理回路

236

nS ＝ 0Q ＝0nS ＝ 0 → 1

①

②

⑤

Q＝0 → 1

①から⑤へ 1 が伝搬する③

nQ ＝ 0

H ＝1

H ＝ 1（はじめの状態）④

nQ ＝ 0 → 1＝ 0 → 1〔（d）からの変化〕（a）nS ＝ 0（b）

Q＝1 → 0nS ＝ 1 → 0

nQ ＝ 1 → 0
H＝1 → 0

①から⑤へ 0 が伝搬する

Q＝1

nQ ＝ 1

H ＝1

（d）

（c）

図 5.6 Flipflop の動作によってαのもう一方の入力が‘0’から‘1’へ変わるが，これはαが OR なので，すでに出力 Q は‘1’に変わっているので，安定な状態となる．
（3）この状態で nS 入力を‘0’へ戻してみる．しかし，こうしても図 5.6（c）のように，αの出力は‘1’のまま変化しないので，flipflop の出力の状態は変わらない．
（4）同じように，入力 H を‘1’から‘0’にすると，図 5.6（d）のようにβの AND が成立しな
くなり，出力 nQ は‘0’となる．この結果，OR 機能のαの出力 Q も両方の入力が‘0’なの
で‘0’になる．出力 Q が‘0’になっても，βはすでに出力が‘0’なので変わらない．この状態も安定な状態となる．
（5）ここで入力 H を‘0’から‘1’へ戻しても，βの AND は成立しないので，図 5.6（a）と同じ状態に戻るだけで出力の変化はない．
この回路の動作をまとめると，nS ＝‘0’，H ＝‘1’が基準状態の入力条件です．
ここで Q が‘0’のとき，入力端子 nS を‘0’から‘1’にする（nS ＝‘1’，H ＝‘1’）と，出力 Qは‘1’となり，Q が‘1’のとき nS を‘1’から‘0’や，‘0’から‘1’に変えても Q は変化しません．
一方，Q が‘1’のとき入力端子 H を‘1’から‘0’へ変えると（nS ＝‘0’，H ＝‘0’），Q は
‘0’

第

6章

Digital System の構築― State machine への道 ―Digital system は digital 回路の延長線上にあります．しかし概念としては一つ上に位置しています．Computer の設計の世界では昔から必要な数の register を用意して，それからその間の data 移動や加工の論理を組み合わせ論理回路で書くことが当たり前でした．
この考え方が素直に RTL（Register Transfer Level）記述に変わったわけです．したがって register 類をどう用意するかは，
digital system をうまく設計する際の上手い下手に直接影響します．さらに，digital system の構築には state machine の考え方も必要です．

第 6 章 Digital System の構築

296

6.1

Digital System の IC への組み込み

Digital system は一つないし複数個の IC の組み合わせで構築します．Digital の実際の機能の多くは IC の中で実現されています．
量産を行うときは GA（Gate Array）などに，実験や中小規模生産のときは FPGA や CPLD
内に機能を組み込みます．主に汎用論理 IC を使う時代は前世紀で終わりました．

6.1.1

自分で内容を書き込める論理 IC

例題 6.1 昔の digital system
前世紀の 90 年代初頭まで 74 series の汎用論理 IC を print 基板に並べて，自分が必要とする digital 処理回路を作っていた．その歴史的な流れを追ってみて，大規模 IC化の必然性を考えよ．
［解］
入出力
Connector

図 6.1
すべて汎用論理 IC を使った
digital system

電源
Connector

入出力
Connector
RAMROM

外寸は100〜400mm

従来は図 6.1 に示すように，RAM/ROM 以外は 74 series に代表される汎用論理 IC を使って，種々の論理機能の配置と配線は print 基板上で行って，digital system を実現してきました．この場合必要によっては通常の print 基板でなくても，万能基板に手で配線をす
れば実験用などの回路はたった 1 台でも作ることができました．
かつて「ミニコン」と呼ばれる誰でも使える computer が出現した 1960 年代の終わりには，74 series IC を並べる方法でこの「ミニコン」が作られていました．1970 年代に一世ふうびを風靡した「インベーダーゲーム」も初めはこのようにして作られていました．ただ，汎用 IC を使う方法では，digital system への多大な要求に対処できなくなっていきました．

6.1

Digital System の IC への組み込み

入出力
Connector

図 6.2
高機能 LSI と汎用論理 IC を使った digital system

入出力
用IC

297

入出力
用IC

CPU
RAM

電源
Connector

入出力
Connector

ROM

外寸が50〜250mm

1970 年代には演算機能を中心とした IC である CPU が市販されました．その後は，CPU
な ど の 機 能 LSI と 汎 用 論 理 IC の 組 み 合 わ せ で， 図 6.2 の よ う に print 基 板 上 に digitalsystem を作るようになりました．これは大規模な汎用 IC が用意されたことと同じであると解釈できます．

例題 6.2 Field programmable logic の時代へ
以前は実験や中小規模製品を設計するときに，74 series の汎用論理 IC を print 基
板に並べて，自分が必要とする digital 処理回路を作ってきた．FPGA が出現してdigital 回路の作り方はどう変化したか．
［解］● FPGA 以前の設計
IC を作る技術がどんどん進み，いろいろな機能が一つの IC の中に盛り込めるようになりました．図 6.3 のように，電卓や時計だけでなくいろいろの機器をたった一つの LSI だ
けで動かせるようになりました．かつて実際に汎用論理 IC で回路を作っていると，いろいろな問題がありました．
（a）価格が高くなる

CPU
付き
IC

ROM
RAM

大容量のmemoryなどは外に付けるよく使われる外寸が20〜150mmと小さくなった

入出力

電源

CPU，ROM，RAM内蔵で小さくなった

入出力

電源

図 6.3
高機能 IC だけで digitalsystem を作る

高機能
LSI

298

第 6 章 Digital System の構築（b）電源消費が大きい（c）外形寸法が大きい（d）速度が遅い（e）回路図を使うので設計の一覧性が悪いなどです．これらはどれも致命傷とも言える弱点です．しかし，汎用論理 IC をなかなか捨てられなかったのは，（f）MIL 記号による簡便な設計（g）専用 IC を作る時間と費用（h）動作検証の手段などに満足できる解答がなかったからです．
高専や大学などにおける digital 回路の教育にも問題があったかもしれません．学校教育はしばしば技術の世界の最先端から遅れる傾向があります．
スタンダード・セル

現在は量産用なら gate array や standard cell などが半導体各社から用意されていて，HDL を使ったり学んだりする人たちの多くが，この水準の設計に従事しています．
● FPGA が設計の世界を変えた
フ ィ ー ル ド ・ プ ロ グ ラ マ ブ ル

コンプレックスト

IC 製造技術の発展により FPGA
（Field Programmable Gate Array）
や CPLD（Complexed
Programmable Logic Device）などの，一つずつ内部の論理回路を外部から書き込むことができる IC が出現しました．なお，これらの内部構造については参考図書や data sheet
を参照してください．
研究室で 1 台だけとか，工場で 100 台だけとかの digital system も，従来の 74 series 汎用論理 IC を使っていた時代のような「高い・遅い・でかい」を我慢せずに，FPGA/CPLD を使って大規模 IC の恩恵に預かることができるようになったのです．
歴史は戻りますが，74 series ではなくても任意の論理回路を作りたいという考えを実
ジェネリック

現した IC として PAL（Programmable Array Logic），GAL（Generic Array Logic）など，
user が内部の論理を自由に書き込める論理 IC が作られました．
PLD（Programmable Logic Device）というのはこれらの IC 類の総称です．PAL は一度回路を書き込んでしまうと内部の構成は消せないので，あまり流行りませんでした．GAL
は EEPROM の技術を使っていて，書き込んだ回路を消すことができるので，まだ現役で使うこともあります．
現在本書で設計の target IC として考えているのは，GAL が発展した形の CPLD や GA

6.1

Digital System の IC への組み込み

299と同じ発想で回路が作成される FPGA です．

例題 6.3 FPGA/CPLD 時代の設計
FPGA や CPLD を使って自分が必要とする digital 処理回路を作るには，どんな手順でやればよいか．
［解］開発 tool の入手

試験

HDL で設計・Simulation

FPGA
CPLD

専用基板の設計・発注

入出力

うまくいく
まで何回でも電源

HDL の学習

評価用基板を入手
動作

動作試験合格実験や製品へ

専用基板の組み立て

図 6.4 FPGA/CPLD で独自の digital system を設計する手順

FPGA や CPLD で digital system を設計する手順は，おおよそ図 6.4 にある通りです．
以下，順を追って説明します．
（1）Digital 回路を組み込む対象となる vendor（Altera 社や Xilinx 社など）の開発 tool を購入するか，無償の機能限定版を website から download で入手する．Software の size は非常に大きく 1 GByte を越えることもあるので，HDD（Hard Disk Drive：ハードディ
スク）の C drive の空き容量に注意する．
ターゲット（2）Target の FPGA/CPLD が付いている print 基板を用意しておく．このとき FPGA/
ケーブル

CPLD の program に必要な cable 類も用意する．Cable はパソコンの USB port や printer
コ

ネ

ク

タ

port から JTAG あるいは特別な connector に接続するものである．Vendor の純正品以外にも安価な代替品（コンパチ品ともいう）がある．
（3）Print 基板は，回路が比較的簡単なときは，市販されている FPGA/CPLD の評価用基板を使うのがよいだろう．回路が複雑であったり，基板形状や機能に独自性が必要なときは print 基板を特注する．
（4）使用予定の FPGA/CPLD の回路数が，設計する回路規模と比べて数倍のゆとりがあピ ンる場合は，FPGA/CPLD への入出力信号や data の pin（端子）配置を適当に決めて，print
基板を先行して作成する．

第 6 章 Digital System の構築

300（5）基板を先行作成できないときは，汎用の基板で実験を進めて，ある程度の目処が立ってから print 基板を作成する．そうしないと指定した信号を IC の指定 pin へ配置することが困難になることがある．
（6）論理回路を仕様書通りに設計する．仕様書はかならず作っておく．きちっと書かれた仕様書がないと，後で変更するときなどに困る．
（7） 設 計 言 語 に は，VHDL，Verilog HDL， 回 路 図 な ど が 使 え る． 本 書 で は，Verilog
HDL を用いている．回路図入力は以前の 74 series 汎用 IC 時代から設計をしていた技術者のための方式で，HDL がよく理解できない人の救済策だと考えてほしい．
（8）HDL 自体の形式や設計のやり方および開発 tool の使い方などについては，各 tool の
help，website の情報および HDL 専門図書で確認する．
（9）設計した論理回路は tool 上で動作を simulation してから，FPGA/CPLD に書き込む．
Simulation をしていないと，FPGA/CPLD の内部の信号は測定器では追いかけることができないので，動かないときは何がなんだか分からなくなる．
（10）実回路で期待した動作が検証できれば HDL による設計は完成である．だめなら，設計に戻ってやり直しになる．
Tool 類は自己完結しているので，簡単に自分の希望の digital system を作成できます．
さらに，CPU を含めて PCI bus の interface 回路などいろいろな機能回路が，設計済み
インテレクチャル・プロパティの回路（IP：Intellectual Property）として FPGA/CPLD vendor から提供されているので，それらについては自分で timing などを調べる必要がありません．この点では，FPGA/CPLD は独立機能の大規模 IC を組み合わせる図 6.3 と同じことができます．

6.1.2

注文生産の digital IC

例題 6.4 注文生産の IC の作り方
携帯電話や時計，game など情報機器に組み込まれている digital IC はどのように作られるのか，簡単に説明せよ．
［解］
注文生産の大規模な IC（以下 LSI のことを意味する）の作り方には，大きく分けて 3 種あ
ります．
スクラッチ

カ ス タ ム• すべての回路の半導体 pattern を零から（From scratch などという）起こす full custom．