KURENAI NO SYSTEM
http://kurenainosystem.jp/

コンピュータの原理

コンピュータの原理


 ☆彡




はじめに

どうして0と1を判別できるだけの機械に、多種多様の複雑な計算を行わせているのか、その結果を人間が理解できるように表示させることができるのか考えてみよう。

コンピュータは. どんなに複雑に見えても、; 2進数で動いています.
「電気信号で動くスイッチ機能」を作ることが出来て、そのスイッチを組み合わせることでANDやORやNOTという論理機能を実現できます。

その論理機能を組み合わせて、メモリからプログラムの命令コードを持ってきて、命令コード00が来たときは、このレジスタの値とあのレジスタの値を加算する、とかそういう動作をしています。

ビットという言葉に代表される1と0というオン・オフ2つの信号だけを使って行う二進法の応用はコンピューターが誕生する原点であり、そこでは計算はもちろんのこと、文字も画像も音声もすべてこのビット単位を元にして処理されています。
 今日では、このオン・オフの信号処理がデジタルという言葉とともに、CDやDVDなどの音響映像機器やカメラをはじめ、放送や通信などあらゆる分野に入り込み、今や日常生活に溶け込んでいることはご存知のとおりです。
 ではまず本題に入る前に、十進法と二進法の簡単なおさらいをしておきます。
 十進法では0から9までの10個の数字を使いすべての数を表すものですが、その表現の仕方は10のべき乗という位取り単位が基本になっています。このべき乗という位取りは漢字で書くとよくわかります。たとえば279という数ならば、二百七十九という表現で、百が二つ、十が七つ、そして一が九つから成り立っている数だということを示しています。
 これはすなわち2x100+7x10+9で、書き換えれば2x(10)2+7x(10)1+9x(10)0と10のべき乗項で表せます。ただしどんな数でもそのゼロ乗は1という約束で、(10)0は1です。おわかりのように日常生活で我々はこのべき乗項の前の数字だけを「279」というように順に並べて、数を表現しているわけです。


Back to Top


ディジタル回路

 コンピュータとかのデジタル回路は、基本的なロジック回路で構成されています。中学校の数学でも習うAND、OR、NOTとかです。




さて、次に、2進数の演算です。
• 加算: 論理和と記号が同じなので要注意
0+0=0
0+1=1
1+0=1
1+1=10 (桁上がり)
• 乗算:
0×0=0
0×1=0
1×0=0
1×1=1

基本要素


名称  ANDゲート   ORゲート    インバータ
記号       



準基本要素

 名称   NANDゲート NORゲート  バッファ  XORゲート 
 記号        




NAND(なんど):NOT AND の短縮。
NOR(のあ):NOT OR の短縮
バッファ:信号増強 (内部はNOT NOTが多い)
XOR(EX-OR、えくすおあ):Exclusive OR、排他的論理和=HHのときにはLになるOR。

最強のゲート、NAND
ブール代数のところでは、AND, OR, NOT ですべてが表現できるといい、上では、AND, OR, NOTに加えて、NAND, NOR, NOT, XORのゲートを追加しました。実は、この中で、NAND(NOR, XORもですが)だけがあれば、すべてがつくれます。


加算回路
2進数の加算回路を考えます。
一桁分の加算回路をつくって、これをつないで複数桁の回路を構成してみます。まず、2進数の一桁通し、AとBの計算を考えると

A B S C 備考
0 0 0 0 0+0=00
0 1 1 0 0+1=01
1 0 1 0 1+0=01
1 1 0 1 1+1=10



順序回路の基礎
組み合わせ回路は入力が決定すれば、出力はその場で決まりますが、回路によっては、直前の影響をうけたり、最後の操作を覚える物があります。こういった回路を順序回路と呼び、「フリップフロップ」(FF)と呼ばれる回路がその代表です。
RSフリップフロップ
もっとも単純な順序回路の一つが、右図に示すRSFFです。「リセットセットフリップフロップ」の略です。
この回路は、入力の最後の操作を記憶します。
RSFFは/S, /R, Q, /Q端子と名前がついていますが、見て分かるように対称です。
それぞれのNANDゲートに注目すると、NANDは2入力ともHなら出力はL、どちらかがLなら出力はHになります。
その性質を考慮すると、/SをLにするとQがHに、/RをLにすると/QがHになります。
(出力を「H」にするために、「L」にしなければならない入力なので「/」をつける)
さて、/S, /R両者ともにHの場合です。
仮にQがHだったとします。下のNANDはH-Hが入力されるため、出力はL、/QはLになります。これが上のNANDに入力されるため、上のNANDはH-Lが入力されるため、NAND出力であるQはHになります。これは最初の仮定と同じであるため、この状態を保つことがわかります。
同じようにすると、/S=/R=Hのときは、直前のQ, /Qを保存することがわかります。






Dフリップフロップ

RS-FFにいろいろと手を加えて作られる物にDフリップフロップがあります。
D-FFは、覚えるべき入力は一本ですが、CLKという端子の信号がLからHになった瞬間(「立ち上がり」といいます)のDの状態を次の立ち上がりまで覚え続けます。
D-FFはよく使うため、専用のシンボルが用意されています。それが右図です。「>」記号の端子はCLKであると決められているため、敢えてCLKと書くことはほとんどありません。CLK端子、D,Qの3本です。
タイミングチャートは図のようになります。

縦線を引いたところは、CLKのち上がりです。 CLKとCLKの合間にはどれだけ変化しても、CLK立ち上がりの瞬間できまります。
このDFFは信号一本をCLKのタイミングで覚えるという特性のため、最近のディジタル回路でよく使われるようになってきました。
なお、実際のICなどの種類にもよりますが、ほぼ同時にCLKが立ち上がり、Dが変化した場合は、立ち上がり直前のDの値を取り込むことが一般的です。

カウンタ
さきほどのDFFを並べると、並べたビット数の記憶回路になります。
これに演算回路を組み合わせると、いろいろな回路が作れます。その代表例がカウンタです。

カウンタはDFF群と、「+1」する回路で構成されます。ある時点で、全ビットで「n」を表していた場合、+1回路の出力は「n+1」になっています。ここで、CLKがくると、DFF群が「n+1」を覚えます。これを繰り返すとカウントアップしていきます。
タイミングチャートはシンプルで、CLKの立ち上がり毎に値が増えます。

実用的なIC、回路では、この他に値を0にするクリア、またある値に設定できるプリセット、などいろいろ機能が普通はついています。
なお、「+1」回路はちゃんとした加算機ではなく、より単純なロジック回路で構成可能です。


Back to Top


10進数と2進数
パソコンはなぜ16進数を好むのか?


位取り記数法とは
数は十種類の文字(0,1,2,3,4,5,6,7,8,9)で表現する。
何もなければ「0」、一個なら「1」、二個なら「2」のように、数を意味する一文字を当てはめる。
十個以上になると、一文字で数を表すことができない。
そこで二つ以上の文字を組み合わせて数を表現する。
この方法は数が十倍になるたびに桁が増えていく。
だから、どんなに大きな数であっても、たった十種類の文字だけで表現できる

このように、桁を伸ばしていく数の表し方を位取り記数法という。

10進数と2進数
日常では十種類の文字(0,1,2,3,4,5,6,7,8,9)を位取り記数で利用する。
もし、使える文字が2種(0と1)しかなかったとしても、位取り記数法は同じように成立する。

十種で表現する場合 二種で表現する場合
(十進数) (二進数)
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100



十種類の文字を利用する位取り記数法を10進数、二種類の文字を利用する場合を2進数という。
日常で使う数字は10進数なのだ。

10進数で表現する場合は、十個以上で桁が増えた。
2進数を使ったときは2個以上で桁が増える
16種類の文字を用意すれば、16進数を作ることができる。
16種類の文字のうち十種類は通常の数字(0~9)、6種類はA~Fまでのアルファベットを使用する。

10進数 2進数 16進数
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10
17 10001 11
18 10010 12


人間が指を折って数える代わりに、コンピュータは電流が流れる、流れないという二種類の動作で数を扱う。
コンピュータは10進数よりも、二種類の数字しか使わない2進数との相性が優れているのだ。

ここで困ったことが起きる。
コンピュータを扱う技術者は、10進数ではなく2進数を使わなくてはならない。
例えば、「500」は「111110100」と書くことになる。


16進数と2進数の変換
そこで、コンピュータにとっては二進数のように扱え、人間にとっては短い桁で納まるような書き方が求められるようになった。
そのような都合のよい書き方が、16進数だ。

0~Fの範囲で2進数と16進数の対応表を見てみよう。

2進数 16進数 10進数
0000 0 0
0001 1 1
0010 2 2
0011 3 3
0100 4 4
0101 5 5
0110 6 6
0111 7 7
1000 8 8
1001 9 9
1010 A 10
1011 B 11
1100 C 12
1101 D 13
1110 E 14
1111 F 15



この表を見ると、1桁の16進数が最大値Fのとき、4桁の2進数も最大値1111になることが分かる。
言い換えると、1桁の16進数を2進数に変換する場合、2進数はどんなに大きくても最大で4桁あれば十分ということだ。

二桁の16進数の最大値はFFで、2進数では11111111になる。(十進数では255)

この値は8桁の二進数の最大の値だ。
ここから2桁の16進数を2進数に変換する場合、2進数はどんなに大きくても最大で8桁あれば十分ということだ。

同様に考えると次のように考えることができる。

1桁の16進数→4桁の2進数で変換可能
2桁の16進数→8桁の2進数で変換可能
3桁の16進数→12桁の2進数で変換可能
n桁の16進数→(4×n)桁の2進数で変換可能

このことから、2進数と16進数は「4桁」をキーワードとして強い関連を持っていることが確認できる。
2進数を16進数に変換する場合、2進数を4桁ごとに区切れば簡単だ。
その区切りごとに対応表を見て16進数に置き換えればいい。

例えば、次の2進数があったとする。
11101011101000011011001110
人間にとっては長くて扱いにくい量だ。

これを4桁ごとに区切る。先頭は2桁なので00を付けて4桁にあわせよう。

0011 1010 1110 1000 0110 1100 1110

それぞれの4桁を、対応表を見ながら16進数に置き換えるのだ。

0011 1010 1110 1000 0110 1100 1110
3 A E 8 6 C E



区切りを外した値3AE86CEが、16進数となる。

対応表があれば簡単に変換できることが分かったと思う。
たった16個の対応さえ覚えてしまえば、対応表がなくても変換は可能だ



inserted by FC2 system