
組み込み入門第三弾の今回は、プロセッサがメモリや入出力に対してどのようにアクセスしているのかについて解説していきます。
目次
メモリの構成とアドレス

メモリアクセスでの基本となるアドレスについて見ていきましょう。データを格納するためのメモリですが、その最小単位はもちろん1ビットの'0'と'1'になりますが、多くのプログラムでは8ビット分をまとめて1BYTEとして表現します。そして、この1BYTEという単位は2進数で00000000(=0)〜11111111(256)までの数値を表現します。2進数での表現は文字数が多く、見づらいため多くの場合は、16進数2桁の値で前半4bitと後半4bitをそれぞれ表現します。そして、16進数ですよという意味として頭に0xとつけます。対して、2進数は頭に0bとつけることが多いです。
すなわち、0b11111111=0xFFとなります。
アドレスは、たくさん並んだデータ構造の中から何番目のデータにアクセスする!と位置を表現するものとなります。
例えば、0x00000015のデータを1BYTE分読み出すと、0x21が取得できるといったイメージです。
メモリ空間へのアクセス

メモリへのアクセスがどのように指定されるのかはわかりました。では、センサやアクチュエータなどの入出力装置に対してはどうでしょう?
実は、入出力装置に対してもまた、アドレスによる指定が用いられています。
????
と思ったあなたは鋭い!
メモリと入出力装置どちらもアドレス指定するならどう切り分けされているのでしょうか?

入出力のアドレス表現には2つの方法があります。
- メモリマップドIO方式
- IOマップドIO方式(ポートマップドIO方式)
です。
メモリマップドIO方式とは
「メモリ」と「入出力」が同一メモリ空間に存在する方式です。すなわちCPUからみたら、メモリも入出力も同じように扱い、アドレスだけ区分けされています。
IOマップドIO方式(ポートマップドIO方式)とは
「メモリ」と「入出力」が別々のメモリ空間に存在する方式です。CPUから見たら、メモリと、入出力はそれぞれ別の空間にあるため、それぞれ別個のアドレスを持ちます。すなわちメモリの0x0000と入出力の0x0000を別で扱います。

それぞれのメリットを比較していきましょう。
メモリマップドIO方式のメリット
CPUの設計時に、入出力装置のための特別な回路を用意する必要がないため、回路規模の縮小が可能になります。その結果、高速化や低コスト化が可能になります。
昔は、アドレス空間が小さかったため、できる限りメモリ空間を広く扱うためにこのような工夫が重宝されました。RISCなどのアーキテクチャでは、簡単化できるこちらの手法が用いられています。
IOマップドIO方式(ポートマップドIO方式)のメリット
CPUのアドレス空間を全てメモリ空間に使えるため、CPUの扱えるサイズが小さい時に重宝します。
また、メモリアクセス飲め入れと入出力アクセスの命令が異なるため、コードの可読性が若干上がります。(おまけみたいなものですが)
まとめ
本記事では、プロセッサのメモリと入出力装置へのアクセスについて解説してきました。
プロセッサに関する解説は今回で終了し、次回からは「メモリ」自体の解説をしていきます。どんな種類や特徴があるかなど基本をまとめていくいますよ。お楽しみに!