ハードウェアの仕組みとソフトウェア処理 ―― マイコンの動作を理解する

宮崎 仁

ここでは,マイコンが動作する仕組みについて解説します.まず,ソフトウェアを実行するためのハードウェアの仕組みを説明します.次に,ソフトウェアで多くの処理を実現できる理由を,ソフトウェアの基本道を示しながら説明します.(編集部)

1. ハードウェアの基本動作を理解する

 マイコンは,メモリに置かれたソフトウェアの命令コードを取り出して実行します.命令コードの取り出しと実行を担当するのがCPUです.そのために,CPUには命令を取り出す機構と,取り出した命令を実行する機構が置かれています.

 最近のCPUの高速化技術では,命令コードの取り出しから実行までの一連の動作を細分化して連続的に実行したり,複数の命令を並列に処理することによって,CPUの処理効率を大幅に向上しています.

● 命令コードの取り出しから実行の流れ

 CPUは,あらかじめメモリに並べられた命令を順番に取り出して,内容を解読して,実行します(図1).


図1 命令コードの取り出しと実行

CPUは,アドレスを自動的に進めながら,あらかじめメモリに並べられた命令(Instruction)を順番に取り出し(Fetch),内容を解読(Decode)して,実行(Execution)することを繰り返す.

 

 命令を正しい順序で取り出すために,命令が置かれたアドレスを保持するレジスタを持っています.このレジスタは,CPUが次に実行すべき命令のアドレスを保持します.CPUはそのアドレスを参照して,命令を取り出します.同時に,レジスタの値を自動的に増やして,次の命令を指します.この仕組みによって,CPUは実行すべき命令を順番に取り出すことができます.

 取り出した命令は,CPUの命令レジスタに保持されます.命令レジスタに保持された命令は,命令デコーダに送られて解読され,解読結果に従って実行されます.

● 命令は大きく3種類に分かれる

 マイコンがどのような命令を持つかは,製品ファミリによって異なりますが,基本的な命令は似通っています.

 命令は,図2のように,

  • CPUとメモリの間でデータをやり取りする命令
  • CPUとI/Oの間でデータをやり取りする命令
  • CPUの中だけで実行される命令

に分けることができます.


図2 基本的な命令と動作

命令は,CPUとメモリの間でデータをやり取りする命令,CPUとI/Oの間でデータをやり取りする命令,CPUの中だけで実行される命令に分けることができる.

 

 データを扱う命令の大部分は,一時的な記憶場所であるレジスタを使用します.CPUの中にあって,命令によって任意のデータを書き込んだり読み出したりできるレジスタを,汎用レジスタと呼びます.

 例えば,汎用レジスタに置かれたデータをメモリに書き込んだり,メモリに置かれたデータを汎用レジスタに読み出したりします(図2の①).相手がI/Oの場合は,汎用レジスタに置かれたデータをI/Oのレジスタに書き込んだり,I/Oのレジスタに置かれたデータを汎用レジスタに読み出したりします(図2の②).

 CPUの中だけで,汎用レジスタから別の汎用レジスタにデータを移すような命令もあります(図2の③).データを記憶できる場所はメモリとレジスタしかありません.データを扱う命令は,必ずメモリかレジスタを使用します.

 データの演算を行う命令では,汎用レジスタに置かれたデータに対して演算を行い,結果は汎用レジスタに書き込まれます(図2の④).この処理をもう少し細かく見ると,汎用レジスタに置かれた演算前のデータを,ALUと呼ばれる演算実行回路に送って演算を行い,演算後のデータを汎用レジスタに書き込みます.ALUでは,整数の加算,減算などの数値演算や,AND,OR,NOTなどの論理演算を実行します.

● メモリやI/Oとのやり取りにはバスを使う

 CPUと,その外側にあるメモリやI/Oとの間では,一般にバスと呼ばれる共用の配線を用いてデータを転送します(図3).バスを用いることによって,一つのCPUに対して,メモリやI/Oの種類,個数を柔軟に選ぶことができます.


図3 バスによる接続
CPU,メモリ,I/Oは同じ配線を共有してデータをやり取りする.CPUからは,やり取りする相手を区別するためにアドレス信号を出力する.メモリやI/O機能を1チップに集積しているマイコンであっても,LSIの内部はバス接続になっている.

 

 CPU,メモリ,I/Oがそれぞれ異なる部品に分かれるマルチチップ構成のマイコンでは,プリント基板にバスのパターンを作って,そこに各LSIのバス信号線を接続します.CPU,メモリ,I/Oを1個のLSIに統合した1チップ構成のマイコンでは,バスは外部に出力されていないことが多いのですが,LSIの内部ではバス接続になっているのが普通です.

 バスに接続された相手を区別するにも,アドレスを使います.そのため,バスは大きくアドレス・バスとデータ・バスに分かれています.

 CPUからメモリやI/Oにデータを書き込む場合,CPUは相手のアドレスを出力してからデータを出力します.メモリやI/OからCPUにデータを読み出す場合,CPUが相手のアドレスを出力すると,指定されたデバイスがデータを出力するので,CPUはそれを読み取ります.このようにデータは双方向にやり取りされますが,アドレスは常にCPUが出力します.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日