コンピュータはどうやってデータを覚えてるの?

コンピュータはどうやってデータを覚えてるの?

どうもこんにちは塚本です!

本日は,とある資格試験の過去問をみたときに
あ〜〜〜昔勉強したな〜〜って思ったのでこのネタにしました.

皆さんの持っているスマホや,
パソコンは何故データを保持したり,計算することができるのでしょうか?

その原点について,記憶を探りながらゆるくお話します.

論理回路

皆さんが持っているコンピュータには計算をしてくれる回路が内蔵されています.
パソコンだと,CPUっていうやつです.IntelのCore i7とかAMDのRyzenとか.

では,その回路は何から出来ているのでしょうか?
こたえは「論理回路」です.

コンピュータには電気が流れていると思います.

簡単に言うと,
電圧が「5Vなら真」・「0Vなら偽」という風に対応付けて論理演算を行う回路を論理回路といいます.

基本ゲート一覧(MIL記号)

こちらが基礎的な6つの回路になります.
こんなのがいっぱい集まって,コンピュータができています.

ちなみに,NANDゲートだけで,すべての論理演算が行えます.

順序回路

順序回路とは,過去の状態と入力で出力が決まる回路のことです.
この記事では,フリップフロップ回路をメインに紹介したいと思います.

フリップフロップ

フリップフロップ回路とは,
1ビットの情報を一時的に記憶することができる回路です.

これを別名でレジスタといいます.あとはキャッシュメモリとか…?
聞いたことがある人もいるのではないでしょうか?

SRフリップフロップ

セット・リセット フリップフロップです.

このような形をしています.
自分の出力が入力に影響しているのがパッと見でわかると思います.

真理値表は一般的に以下のようになります.

S R Q
0 0 Qを保持
0 1 0
1 0 1
1 1 不定

Setが1なら,出力Qが1になってると思います.
SetもResetも1っていうのは一般的に禁止で,結果はハードによって変わります.

この点を改良したものがJKフリップフロップといいます.

ここで注目してほしいのが,
SetもResetも0なら,出力Qを保持するということです.

つまり,フリップフロップを用いることで情報が記憶できています.
(書き切るにはスペースが足りないので,だいぶ省略した結論です.)

レジスタの構成

フリップフロップで情報を記憶できることをほとんど解説なしで事実のみ書きました.
今のままでは,0か1しか情報を保存できません.

でも,コンピュータはもっといろんな値を保存していると思います.

Dフリップフロップを用いて,
4ビットのデータを保存する簡単なレジスタを構成してみたいと思います.

Dフリップフロップ

なんだか難しそうな回路図ですが,
入力が1なら1を,0なら0を出力するものです.

D Q
0 0
1 1

したがって,一般的な真理値表はこんな感じになります.

かんたんな4ビットのレジスタ

単純に,フリップフロップ一つで1ビットだったので,
4つ連結してみただけの超簡単仕様です.

2進数で,0010と入力 つまり,D3 = 0, D2 = 0, D1 = 1, D0 = 0とすると,
出力はQ3 = 0, Q2 = 0, Q1 = 1, Q0 = 0 つまり,0010となります.

この回路はクロック信号に合わせて動作します.

ちなみに,Clock線がつながっている▶の部分ですが,
この回路図だと立ち上がりエッジトリガを意味します.

クロック信号に合わせて,回路が動作するということは
もっと複雑な回路になったときは,クロック信号の間隔が速ければ速いほど回路の動作が速いことを意味しています.

これが,CPUを買う時によく見るクロック周波数のことです.

まとめ

情報工学を学んだことのある方はあ〜懐かしいな〜と,ノスタルジックなきもちになれたと思います.