シリーズ「コンピュータの文字のしくみ」 第2回

回路が「数字を光らせる」とは?

時計と、発車の時刻

前回の話を、短く振り返っておく。

コンピュータの中にあるのは、0 と 1 の並び、パターンだけだ。 0100 0001 を「A」と読むのは、人が決めた表(文字コード)のほうである。 同じパターンを、数として読むこともできる。 名札を貼るのは、読む側だ。

前回は、こう締めくくった。 回路は表を見ていないし、「A」がどんな形をしているのかも知らない。 それなのに、駅の掲示板は、ちゃんと文字の形を光らせている。

パターンを、どうやって光る形にするのか。

いちばん簡単な形から始めよう。 掲示板の、発車の時刻の数字だ。

数字だけなら、身の回りに、もっと簡単な光らせ方がある。 デジタル時計や電卓の数字を、近くで見てほしい。 どの数字も、7 本の棒でできている。

「8」は 7 本ぜんぶ。「1」は右の 2 本だけ。 発車の時刻の「10:25」も、この 7 本があれば書ける。

この回は、4 桁のパターンを、7 本の棒の形にする回路を作る。

7 本の棒

まず、7 本の棒に名前を付けておく。

abcdefg
上から時計回りに a〜f、真ん中が g

いちばん上が a。そこから時計回りに、b、c、d、e、f。真ん中が g。 このような表示を、棒(セグメント)が 7 本なので、7 セグメントと呼ぶ。 部品として売っている 7 セグメントの表示も、たいてい、この名前で棒を呼んでいる。

次に、数字をパターンで表す。 0〜9 は 10 通りなので、4 桁あれば足りる(4 桁で 16 通り)。

4 桁のパターンを数として読むときは、右の桁から順に、1 の位、2 の位、4 の位、8 の位と読む。 前回の 8 桁と同じ読み方を、4 桁に縮めただけだ。 1 の立っている位の重みを足せば、数になる。 たとえば 0111 は、4 + 2 + 1 で 7。

数字ごとに、パターンと、光らせる棒を表にしてみよう。 ● が、光らせる棒だ。

数字パターンabcdefg
00000●●●●●●
10001●●
20010●●●●●
30011●●●●●
40100●●●●
50101●●●●●
60110●●●●●●
70111●●●
81000●●●●●●●
91001●●●●●●

光らせると、こうなる。

00000
10001
20010
30011
40100
50101
60110
70111
81000
91001
0〜9 の形。どれも、7 本のうちどれを光らせるかだけで決まる

6・7・9 の形は、作りによって少し違う。 「6」の上の棒(a)や、「9」の下の棒(d)を光らせない作りもあるし、「7」に左上の棒(f)を足す作りもある。 決まった規格があるわけではない。 この回は、上の表の形にする。

ついでに、前回の表を思い出してほしい。 文字の「0」〜「9」は、0011 0000 から 0011 1001 だった。 下 4 桁が、ちょうどこの表のパターンになっている。

表を、回路に

この表を、回路にしたい。 入口は 4 桁のパターン。出口は、7 本の棒それぞれの「光る(1)」「消える(0)」だ。

一度に考えると難しいので、2 段に分ける。

パターンを、10 本の線に

まず、4 桁のパターンを、10 本の線にほどく。 「0 の線」「1 の線」……「9 の線」。 パターンが 0011 のときは「3 の線」だけが 1 になり、ほかの 9 本は 0 のまま。そういう回路だ。

使う部品は 2 つ。

AND(アンド)は、入口が全部 1 のときだけ 1 を返す。1 つでも 0 があれば 0。 NOT(ノット)は、入口が 1 つで、0 と 1 をひっくり返す。

「3 の線」を作ってみる。 0011 は、8 の位が 0、4 の位が 0、2 の位が 1、1 の位が 1。 0 の桁は NOT でひっくり返してから、4 本そろって AND に入れる。

桁パターン 0011 ではAND に入れる線
8 の位0NOT を通した線
4 の位0NOT を通した線
2 の位1そのままの線
1 の位1そのままの線

パターンが 0011 なら、AND に入る 4 本は全部 1 になり、「3 の線」は 1。 1 桁でも違えば、どれかが 0 になって、「3 の線」は 0。

ほかの 9 本も、同じ作り方で作れる。 NOT 4 個(桁ごとに 1 個)と、AND 10 個。 どのパターンを入れても、1 になる線は多くて 1 本だけだ。

パターンを、パターンごとの線にほどき直すこの部品を、デコーダという。 『CPU のしくみ』を読んだ人は、第2回のデコーダを思い出してほしい。命令の上 4 桁から 16 本の線を作り、動かす箱の入口を開けていた。作り方はまったく同じだ。

棒ごとに、まとめる

次に、棒を 1 本だけ考える。 表の e の列を、縦に見てほしい。 e が光るのは、0・2・6・8 のときだ。

だから、「0 の線」「2 の線」「6 の線」「8 の線」のどれか 1 本でも 1 なら、e を光らせればいい。

ここで使うのが OR(オア)だ。 OR は、入口のどれか 1 つでも 1 なら 1 を返す。全部 0 のときだけ 0。

4 本の線を、1 つの OR にまとめる。

棒 e の回路

左の 4 つのスイッチを押して、パターンを替えてみてください

デコーダ0 の線1 の線2 の線3 の線4 の線5 の線6 の線7 の線8 の線9 の線eOR↓ 下の表示の、棒 eへ08 の位04 の位02 の位01 の位
abcdefg

パターン 0000(0)

0 の線 だけが 1

棒 e が光る

破線の棒は、まだつないでいない

左の 4 つのスイッチが、パターンの 4 桁だ。押すと 0 と 1 が切り替わる。 真ん中の縦長の箱がデコーダで、右の辺から「0 の線」〜「9 の線」が横に出ている。

はじめは 0000。「0 の線」が 1 になり、棒 e が光っている。 4 の位のスイッチを押して 0100 にしてみてほしい。 「4 の線」に替わる。「4 の線」は e の縦の線につないでいないので、e は消える。 0010、0110、1000 では、e が光る。

● が、まとめている場所だ。 ● の並びは、表の e の列の ● と、同じ並びになっている。

押して、確かめる

残りの 6 本も、同じように作る。 棒ごとに OR を 1 個置き、表でその棒に ● が付いている数字の線を、全部つなぐ。

7 本の棒 シミュレータ

左の 4 つのスイッチを押して、パターンを替えてみてください

デコーダ0 の線1 の線2 の線3 の線4 の線5 の線6 の線7 の線8 の線9 の線abcdefgOROROROROROROR↓ 下の表示の、棒 a〜gへ08 の位04 の位02 の位01 の位
abcdefg

パターン 0000(0)

0 の線 だけが 1

光る棒:a・b・c・d・e・f

はじめは 0000 で、「0」が光っている。 スイッチを押して、0 から 9 まで、順に作ってみてほしい。 0001、0010、0011……。表のとおりの形が光るはずだ。

図の ● の並びを、2 節の表と見比べてほしい。 まったく同じ形をしている。

表の ● を 1 つ書くことと、配線を 1 か所つなぐことは、同じことなのだ。 表を書き終えた時点で、回路はもうできている。

部品を数えてみよう。 NOT 4 個、AND 10 個、OR 7 個。あわせて 21 個。 まとめている場所(●)は 49 か所で、これは表の ● の数と同じだ。

パターンを形にするのも、表を回路にするだけだ。どの棒を光らせるかの表を書けば、ゲートで組める。

この回路は、「7」がどんな形かを知らない。 0111 が来たら「7 の線」が 1 になり、その線につないである a・b・c の OR が 1 になる。それだけだ。 それを「7」と読んでいるのは、ここでもやはり、表示を見ている私たちである。

ちなみに、もっと少ない部品で作ることもできる。 表の c の列を見ると、c が消えるのは「2」のときだけだ。 それなら、9 本の線を OR でまとめなくても、「2 の線」を NOT でひっくり返せば、0〜9 では同じ光り方になる。 こうした工夫を重ねると、式は短くなっていく。 けれど、どんな工夫をしても、出発点はいつも、さっきの表である。

使わないパターン

4 桁のパターンは 16 通りある。 数字に使ったのは、0000 から 1001 までの 10 通り。 1010(10)から 1111(15)までの 6 通りは、使っていない。

上のシミュレータで、8 の位と 2 の位を 1 にして、1010 を作ってみてほしい。

どの棒も光らない。 デコーダの線も、1 本も 1 になっていない。

表に、1010 の行は無い。 行が無いから、デコーダに「10 の線」も無い。 表に書いていないパターンは、回路にも無いのだ。

ただし、これは、この回路をそう作ったからである。 さっきの「c は、2 の線の NOT」で作った回路なら、1010 では「2 の線」が 0 なので、c だけが光る。 意味のない、半端な形になる。

数字しか入ってこないと分かっているなら、それで困ることはない。 使わない 6 通りは「どう光ってもいい」ことにすれば、式はもっと短くできる。 どちらにするかも、表を書く人が決める約束である。

「あ」は、書けない

数字は、7 本の棒で書けた。

英字も、一部なら書ける。 「E」は a・d・e・f・g。「F」は a・e・f・g。「H」は b・c・e・f・g。「L」は d・e・f。「P」は a・b・e・f・g。 表に行を足して、デコーダに線を足せばいい。

けれど、「M」や「W」は書けない。 7 本の棒には、斜めの線も、真ん中を縦に通る線も無いからだ。

ひらがなは、なおさらだ。 「あ」の、丸く曲がった線は、どの棒を光らせても書けない。 掲示板の行き先の「品川」も、もちろん書けない。

棒の数を増やせば、書ける文字は増える。 けれど、増やすほど棒の形は細かくなり、それでも書けない文字が残る。

前回の初めに、駅の掲示板は「細かい点が光って文字を描く」と書いた。 掲示板は、7 本の棒よりも、ずっと自由に形を光らせている。

どんな形でも出せる光らせ方は、ないだろうか。

参考文献