マイコンの構成

初心者向けにCPU,ROM,RAMなどマイコンの構成をわかりやすく解説しています。

マイコンの構成

ヨースケ先生「マイコンは,図のようにI/O,CPU,ROM,RAM,周辺回路の部品で構成されています。
これら部品の組み合わせにより,
“何らかの入力を受け,ある決められた処理をし,何らかの信号を出力する”というマイコンの動作を実現しています。
ここで,それぞれの部品の役割を説明すると,
I/O:何らかの入力を受けて,何らかの信号を出力する部分。
CPU:ある決められた処理をする部分。
ROM:処理の内容を決めるソフトウェアが格納される部分。
RAM:処理結果など,一時的なデータが格納される部分。
周辺回路:マイコンの機能を豊富にする回路群。となっています。」

電気ケトルを例にしてみてみよう

さて次回から,『ボタン入力を受けてヒーターを加熱し,水を温める』電気ケトルを例にし,マイコン内部が
どのような動きをしているか見ていきましょう。

I/Oとは

ヨースケ先生「I/O(Input / Output)は,外部に接続された部品から信号を入力したり,
外部に接続された部品へ信号を出力したりします。
ここで電気ケトルの動作を考えてみてください。電気ケトルはボタン入力を受けてヒーターを加熱し水を温めます。
電気ケトルでは『ボタン入力を受け付けること』と『電気ケトル内温度計の信号を受け付けること』と
『ヒーターに制御信号を出力すること』がI/Oの役割になります。
ここでI/Oが無かった場合,ボタンや電気ケトル内温度計の入力,ヒーターへの制御信号の出力ができなくなります。
このように,I/Oはマイコンにとって入口と出口にあたる,とても重要な部分です。」

CPUとは

ヨースケ先生「CPUは中央演算処理装置(Central Processing Unit)と呼ばれており,マイコンの中で司令塔の役割をします。
電気ケトルのマイコンで例えると,ボタン入力を受けてヒーターへ加熱指示や水の温度上昇を受けてヒーター停止指示を
出している部分がCPUです。
たとえば電気ケトルで水の温度を90℃にしたい場合,
『もしボタンが押されたら,ヒーターを加熱して水を温める』
『もし電気ケトル内温度計の温度が90℃になったらヒーターを停止させる』
というように,あらかじめ処理を定めておきます。
これにより電気ケトルに水を入れてボタンを押せば,90℃の熱湯を作ることができるわけですね。
ここで,このあらかじめ定められた処理のことをプログラムといいます。このプログラムには,
予定された計画という意味があります。
したがって,CPUは司令塔として,この予定された計画通りに処理を実行していくわけですね。」

CPUが実行する処理(命令)について

ヨースケ先生「さて,CPUについてさらに具体的に見てみましょう。
『もし電気ケトル内の温度が90℃になったらヒーターを停止させる』
という処理を大きく分けると,以下の3つに分けられます。
1.数秒おきに電気ケトル内の温度センサー出力を受け取る。
2.取得した電気ケトル内の温度と閾値90℃を比較する。
3.もし温度が閾値90℃以上の場合ヒーターを停止させる。
上記の例はまだまだ細かく分けることができ,最小単位まで分けるとCPUが実行する処理(命令)となります。
具体的に言うと,上記の例の『2.』および『3.』の,『比較する』と『ヒーターを停止させる』という処理は,
CPUへの比較命令と分岐命令に当たります。これをマイコンの言語であるアセンブリ言語で記述すると
・CMP 電気ケトル内温度,90℃(電気ケトル内の温度と90℃を比較する)
・BGE ヒーター停止(もし電気ケトル内の温度≧90℃ならヒーター停止に分岐する)
となります。マイコンによって異なるのですが,比較命令はCMP(=compare:比較)というように,
アセンブリ言語の命令の多くは動作をイメージした記号が付けられています。その他命令には,転送命令MOV(move),
記憶命令ST(store) ,分岐命令B(branch)などがあります。ちなみに,C言語風に上記の命令を記述すると

if (電気ケトル内の温度 >= 90℃){
ヒーター停止();
}
となります。
CPUはこれら命令を実行していくわけですね。」

CPUによる命令の実行

ヨースケ先生「CPUの動作についてさらに深堀してみましょう。
CPUの内部は,プログラムカウンタ,命令デコーダ,演算回路から構成されます。
プログラムカウンタは,次に実行する命令の場所(アドレス)を保持する部分です。
命令デコーダは,命令をCPUが処理できる信号に変換する部分です。
演算回路は,命令を処理する部分です。
図の例を説明すると,
①プログラムカウンタにより比較命令CMPが格納されたアドレスが指定されます。
②プログラムカウンタで指定された命令を読み出し,デコーダに入力します。
③読み出した命令をデコーダにて,CPUが処理できる信号に変換し,演算回路に入力します。
ここで,プログラムカウンタは自動的にカウントアップし次の場所(アドレス)が指定されます。
ちょっと難しい話ですが,単純な分岐命令Bを使用している場合はプログラムカウンタに分岐先が指定されます。
④演算回路により命令に合わせて処理します。演算回路では,各命令に合わせて足したり引いたりを行っています。
例えば比較命令CMPは,引き算をしてどちらが大きいか確認しています。
⑤またちょっと難しい話ですが,比較結果を使用する特殊な条件分岐命令を用いていた場合,
処理の後プログラムカウンタに分岐先が指定されることがあります。
ちなみに,②はフェッチ,③はデコード,④はエグゼキュート(実行)と表現されます。
このようにCPUへの命令の組み合わせを準備することにより,CPUは順番通りひとつひとつを処理し,
上記の動作を実現するわけですね。」

CPUが命令を実行する時間について

ヨースケ先生「CPUの能力を示すパラメータの一つに命令を処理する時間があります。では,
CPUは比較命令CMPを実行するためにどれぐらいの時間が必要なのでしょうか?
マイコンによって異なりますが,遅くても100μsec程度で命令を実行します。速いマイコンになると,
数十nsecで実行できるものもあります。この命令を実行する速度を決めているものがクロックです。
クロックとは命令を実行する時間を定める信号で,単位は周波数[Hz]で表せられます。
このクロックが速ければ,命令を早く実行できます。CPUはこのクロックに合わせて,命令を順番通り実行していくわけですね。」

ROMとは

ヨースケ先生「ROM(Read Only Memory)は,読み出しのみ可能なメモリです。基本的には,内容を書き換えないメモリです。
電気ケトルに例えると,
『もしボタンが押されたら,ヒーターを加熱して水を温める』
『もし電気ケトル内温度計の温度が90℃になったらヒーターを停止させる』
といったプログラムが格納される場所です。そのため,プログラムメモリとも呼ばれています。
ROMの内容は,電源起動時から読みだされ,また電源を再起動しても保持しています。
そのため,電気機器の電源を再起動したとしても,電気ケトルなどの電気機器は毎回同じ動作をするわけですね。
ちなみに,現在のROMの主流は,ROMの内容を書き換えたいときに書き換えられるフラッシュメモリです。これにより,
マイコンの自由度が増し,さらに電気機器の開発期間の短縮やコストの削減が可能になりました。」

CPUと命令とROMの関係

ヨースケ先生「以前CPUでお話ししました,命令を覚えているでしょうか。CPUは,最小処理単位である命令を
ひとつひとつ処理します。そして,命令には,転送命令MOV,記憶命令ST,比較命令CMPなどがあります。
ROMには,これら命令がひとつひとつ保持されています。
ここで電気ケトルの例を振り返ってみましょう。
『もし電気ケトル内の温度が90℃になったらヒーターを停止させる』
という処理を大きく分けると,以下の3つに分けられます。
1.数秒おきに電気ケトル内の温度センサー出力を受け取る。
2.取得した電気ケトル内の温度と閾値90℃を比較する。
3.もし温度が閾値90℃以上の場合ヒーターを停止させる。
ここで『2.』および『3.』の処理をアセンブリ言語で記載すると
・CMP 電気ケトル内温度,90℃(電気ケトル内の温度と90℃を比較する)
・BGE ヒーター停止(もし電気ケトル内の温度≧90℃ならヒーター停止に分岐する)
となります。ROMにはこれら命令が保持されており,CPUはこれら命令を順番通りひとつひとつを処理しているわけですね。」

RAMとは

ヨースケ先生「RAM(Random Access Memory)は、読み出しと書き込みが可能なメモリで、
データが一時的に格納されるためデータメモリとも呼ばれます。
電気ケトルでは,湯沸し温度の設定や電気ケトル内にある温度センサーの測定結果,ヒーターなどの現在の状態が保持されます。
実のところ,以前説明した転送命令MOV,記憶命令STのような単純な処理のみの場合,RAMは必要ありません。
しかし,マイコンを使って実際の電気機器を作る場合には,複雑な処理が必要なためRAMは必要不可欠です。」

RAMの処理

ヨースケ先生「電気ケトルを例にしてRAMの処理を理解していきましょう。
例えば温度設定のできる電気ケトルの機能は以下のようになるでしょうか。
①湯沸し機能
・湯沸し停止中に湯沸しのボタンが押されると湯沸しを開始する。
・電気ケトル内の温度が設定した温度(目標温度)に達したら湯沸しを停止する。
・湯沸し中に湯沸しボタンが押されると湯沸しを停止する
②温度設定機能
・100℃,90℃,75℃の3段階の温度に設定できる。
・温度設定ボタンが押されるたびに,100℃⇒90℃⇒75℃⇒100℃⇒90℃と温度が切り替わる。
これらの機能を実現するためにもRAMが必要になります。では,どのようにRAMが使われているかを見ていきましょう。」

湯沸し機能

ヨースケ先生「湯沸し機能は,湯沸し停止中に湯沸しボタンが押されたことによって加熱を始めるので,
湯沸し中か,もしくは,湯沸し停止中かが分かるようになっている必要があります。したがって,
湯沸しON/OFFの状態をデータとして保持する必要があります。
ここでは,湯沸しON/OFFの状態をRAMに置いておくことにし,データの名前をHeaterStatusと付けることにします。
CPUは,湯沸しボタンが押された際は,RAMからHeaterStatusを読み出し,現在の状態を判断し,
そしてHeaterStatusを書き換える動作をします。」

ヨースケ先生「さらに具体的にいいますと,HeaterStatusがOFFの場合に湯沸しボタンが押されると,
ヒーターに電流を流しHeaterStatusをONにします。逆にHeaterStatusがONの場合に湯沸しボタンが押されると,
ヒーターの電流を止めHeaterStatusをOFFに変更します。」

ヨースケ先生「さらに具体的にいいますと,HeaterStatusがOFFの場合に湯沸しボタンが押されると,
ヒーターに電流を流しHeaterStatusをONにします。逆にHeaterStatusがONの場合に湯沸しボタンが押されると,
ヒーターの電流を止めHeaterStatusをOFFに変更します。」

ヨースケ先生「白文字で示した処理がRAMにデータを書き込んでいる部分になります。
もし,RAMのように変更できる領域がないと,現在の状態を保持できません。」

温度設定について

ヨースケ先生「温度の設定についても,設定温度は3種類あるので,どの温度に設定したのかを記憶しておく必要があります。
また,温度設定ボタンを1回押すたびに設定温度が変わり,ボタンが3回押されたらもとに戻る必要があります。
このように考えると,ボタンを押した回数と,その回数に該当する温度を目標温度のデータとしてRAMに保持しておけば
温度設定が実現できます。
これらのように,RAMという自由に読み書きできる領域があることで,より柔軟な処理が可能になるわけですね」

周辺回路とは?

ヨースケ先生「周辺回路(ペリフェラル)は,マイコンの中に搭載されたマイコンの機能を豊富にする回路群です。
といってもわかりにくいので,電気ケトルの動作を例にして,具体的に見てみましょう。
『もし電気ケトル内の温度が90℃になったらヒーターを停止させる』
という電気ケトルの処理は,以下の3つに分けられます。

1.数秒おきに電気ケトル内の温度センサ出力を受け取る。
2.取得した電気ケトル内の温度と閾値90℃を比較する。
3.もし温度が閾値90℃以上の場合ヒーターを停止させる。

たとえば『1.』の『数秒おきに電気ケトル内の温度センサ出力を受け取る』の処理をする上で,数秒の測定には
タイマという時間を計測する周辺回路が必要になります。
また,温度センサ出力を受け取るためにはA/D(アナログーデジタル変換器)が必要になります。
したがって,タイマやA/Dといった周辺回路が実装されたマイコンは,『1.』の動作を実現できるわけです。
このようにマイコンの中に周辺回路を搭載することで,CPUやROM,RAMだけではできない機能を実現するわけですね。
周辺回路はこのほかにもたくさんあります。今後はこれら周辺回路について具体的に見ていきましょう」

マイコンの構成

ヨースケ先生 「さてマイコンの構成要素についてまとめると以下のようになります。
・ROMにはプログラムが格納されており,マイコン起動時からCPUはそれを読み出す。
・RAMには演算結果などの一時データが保持され,CPUはそれを使って複雑な処理をする。
・I/Oにはマイコン外部部品との信号のやり取りをする役目がある。
・周辺回路によってマイコンの機能は豊富になる。
・CPUは上記の動作をすべて処理する司令塔

ヨースケ先生 「これを踏まえた上でI/O,CPU,ROM,RAM,周辺回路の図を見直してみるとわかりやすくなると思います。」

マイコン設計者がお答えします!技術的問い合わせフォーム