電子工作のための備忘録

電子工作や組み込みシステムについての要素技術などについて備忘録も兼ねて書いていきます

コンピュータの3要素とCPUの3要素

前回は組み込みシステムとは何なのかについて触れました.
本稿ではその中核を担う「マイコン」について少し詳しくお話ししていきます.
マイコン」と言うからにはコンピュータの仕組みを見ていきましょう.

コンピュータの3要素

f:id:denshi-beginner:20170624172248p:plain
コンピュータの3要素を上図にまとめてみました.CPU,メモリ,I/Oインタフェースの3要素がバスによって接続されています.
バスってなんだと思われるかもしれませんがとりあえず今は”共通の信号線”と覚えておけば大丈夫かと思います.
コンピュータはよくCPUが頭脳(考える),メモリが記憶(憶える),I/Oインタフェースが五感のように人間に例えられる事があります.
少しイメージが湧いたでしょうか?以下それぞれについて少し詳しく見ていきましょう.

「CPU」実際に演算を行う

CPUは人間の頭脳に相当すると言いましたが,人間のように次は何しようかな〜と自発的に考えるわけではありません.
あらかじめCPUに用意された「AとBを足せ」や「AにBを格納しろ」のような命令(命令セットという)を組み合わせた手順書のようなもの(つまりプログラム)をあらかじめメモリに格納しておいてそれを順次読み出して実行していきます.
このようなコンピュータのことをノイマン型コンピュータと言います.
どのような命令を用意するかは各CPUの構造(アーキテクチャという)に依存します.
この命令セットの用意の仕方によってCPUは大きく次の2つに大別する事ができます.

RISC(Reduced Instruction Set Computer)

命令の種類を出来るだけ減らし,シンプルにする.複雑な命令は単純な命令を組み合わせて実現しなければならないが,命令の長さを固定長にする事ができるのでパイプライン処理が可能になる.要約すると簡単な命令を高速で実行することにより処理速度をあげようとする考え方の事です.

CISC(Complex Instruction Set Computer)

1つの命令でより複雑な処理ができるようにしたもの.各命令によって命令長が異なるためパイプライン処理は行えない.要約すると,各命令によって命令語長や実行サイクル数が異なるが複雑な処理を1つの命令で済ませることで処理速度をあげようとする考え方の事です.

また,CPUにもコンピュータと同様に3要素があります.
f:id:denshi-beginner:20170624190303p:plain

デコーダ

デコーダ(命令デコーダともいう)では,プログラムカウンタ(後述)が指すメモリの番地から命令を読み出してきて,その命令を解読します.この時,命令をメモリから取り出す事を「フェッチ」,命令を解読する事を「デコード」と言います.
CPUは命令をデコードした結果をみて何をするべきかを判断し,ALUを使って演算を行います.
なぜいちいちデコードするのかというと,例えば「AとBを足せ」という命令を実行したい場合,メモリには「AとBを足せ」と直接人のわかる言語では書いておけません.そこで,CPUが分かるマシン語(0と1の組み合わせ)と命令を対応付けておく必要があります.そのため実際のメモリにはマシン語が格納されています.そして読み出してきたマシン語をデコードする事で実際はどのような命令を実行すれば良いのかを判断する訳です.

ALU(Arithmetic and Logic Unit)

ALUとは算術論理演算回路のことです.名前の通り,足し算や掛け算などの算術演算や,論理積(AND)や論理和(OR)やビットシフトなどの論理演算を行います.

レジスタ

レジスタ(置数器)とは,0,1で表現された情報を格納しておく事ができる場所です.演算する値や演算結果を保存する汎用レジスタや,次に実行すべき命令が格納されているメモリのアドレスを格納しておくプログラムカウンタ,演算フラグなどに用いるステータスレジスタなどの特別な機能を持ったレジスタなどがあります.
CPUの内部にどのようなレジスタがあるかということはそのCPUのアーキテクチャに依存します.

「メモリ」記憶する

メモリは人間の記憶に相当すると言いました.つまり,コンピュータにおいては主にプログラムやデータが保存される部分です.
メモリはROMとRAMの2種類に大別する事ができます.

ROM(Read Only Memory)

電源を切っても書き込まれたデータが消えないメモリ(不揮発性メモリという)のことで,主に電源投入時やリセット時に実行するプログラムや,プログラム実行中に変化しない定数の保存などの用途に使われます.一般にROMは書き込んだデータは消去できませんが,最近はフラッシュメモリという不揮発性でありながらデータの書き換えが可能な便利なROMもあります.

RAM(Random Access Memory)

データの読み書きは自由に行えるが、電源を切ると内容が消えるメモリ(揮発性メモリという)のことで,主に,プログラムの変数を保存するといった用途に使われます.
RAMにも構造による違いがあり,構造が複雑で大容量化が難しいが高速アクセスが可能なSRAM(Static RAM)や構造が単純で大容量化が容易だが定期的なリフレッシュ動作が必要で比較的低速なDRAM(Dynamic RAM)があります.

「I/Oインタフェース」CPUと周辺装置を繋ぐ

普段パソコンを使う時にはキーボードやディスプレイ等の周辺装置を繋いで使っています.
マイコンも同様に周辺装置(ハードウェア)と接続して外部の情報を取得したり,外部に情報を発信したりする必要があります.その窓口になるのがI/Oインタフェースです.

以上がコンピュータの3要素のお話です.
次回からは,電子工作をするのに必要な知識である電子回路の基礎についてお話しようと思います.

「組み込みシステム」って一体なんだ?

「組み込みシステム」とはなかなか聞き慣れない言葉ではないか思います.
Wikipediaで調べてみると

組み込みシステム(くみこみシステム)あるいはエンベデッドシステム (Embedded system) とは、特定の機能を実現するために家電製品や機械等に組み込まれるコンピュータシステムのこと。

と書いてありますが正直何を言っているかよくわからない人も多いのではないでしょうか?
しかし,私たちの身の回りには組み込みシステムがたくさんあります.
例えば冷蔵庫,洗濯機,炊飯器,テレビ,自動車,…数えるとキリがありませんね.
本稿では,組み込みシステムとは一体なんなのかをざっくり説明していきます.

そもそも「組み込みシステム」って?

組み込みについてしっかり知りたいのに”ざっくり”かよ!と思った方もいると思います.
実は組み込みシステムとは厳密に定義することは難しいのです.
そもそも特定の機能を実現するためのコンピュータシステムって漠然としててよくわからない!という方も多いと思いますのでまずは逆に汎用のコンピュータシステムとは何なのかを考えてみましょう.

汎用のコンピュータシステム?

”汎用”とは平たくいうと色々な用途に使えるよ〜の意です.
では色々な用途に使えるコンピュータシステムって・・・?
察しの良い方ならもうお分かりでしょうが,つまりはパソコンのことです.
パソコンは例えばあなたが「文書を作りたいなぁ」と思ったらWordなどのワープロソフト,「音楽が聴きたいなぁ」と思ったらiTunesなどのソフトウェアを自由にインストールして色々な用途に使う事ができます.
即ち”汎用”なのです.

特定用途向けのコンピュータシステムって?

では全部パソコンを使えば良いと思われるかもしれませんが,例えば冷蔵庫や炊飯器にパソコンが入っていたらどうでしょう?
冷蔵庫の基本の仕事は「庫内を冷却すること」で,炊飯器の基本の仕事は「米を炊く事」です.
その両方に同じパソコンが入っていたらどうでしょうか?果てしなく無駄ですよね.というか正確にはそんなことは(一般的には)出来ません.
パソコンで文書つくれ!と言われたら簡単ですが冷蔵庫作れ!とか米を炊け!と言われたら誰もが「えっ…」となりますよね?
どこに冷蔵庫のコンプレッサや炊飯器の釜とかがあるんだよこのやろー!となるはずです.つまり冷蔵庫には冷蔵庫の,炊飯器には炊飯器の機能を果たすのに必要なハードウェア(コンプレッサや釜など)がそれぞれ必要なのです.ちなみにハードウェアとはシステムを構成する要素のうち物理的な要素を指します.平たくいうと人間が触れるものです.それに対してソフトウェアとはアプリケーションやOSなど人間が物理的に触る事ができないシステム構成要素の事です.
話が脱線しましたがモノによって必要なハードウェアが違うということはそれぞれにあった動かし方,すなわちコンピュータシステムが必要なのです.
即ちそれぞれのモノとそれに必要なハードウェアに”特化”したコンピュータシステムを作ってあげる必要があるわけで,このモノ(用途)に”特化”したコンピュータシステムの事を「組み込みシステム」と言うのです.

ここで使われるコンピュータの事を一般的に「マイコン」と呼びます.名前くらいは聞いた事あるという方も多いのではないでしょうか?
次はこの「マイコン」について少し詳しくお話しようと思いますがそれはまた別の記事でお話しようと思います.