ワンチップマイコンについて

#はじめに
組み込みシステム開発で用いられるワンチップマイコンについてまとめる。
#ワンチップマイコンとは
パソコンに採用されている多くのマイコンでは機能ごとのICを複数個、プリント基板上で接続することによってコンピュータの五大機能を構成している。
一方でコンピュータの五大機能（後述）の全てを一個のICの中に詰め込んだものをワンチップマイコンという。
ワンチップマイコンはプログラムをどのように記憶させるかによって大きく以下の二つに分類される。

- IC製造時にプログラムを記憶させてしまい、その後の修正はできないマスクROMタイプで、量産製品に採用されている。
- IC製造後に専用の書き込み器（ROMライター）で記憶させるプログラマブルROM（PROM）タイプ。
さらにPROMはプログラムの消去法によって、紫外線を当てて消去するUV-PROMと、電気的に消去するEE-PROMに分けられる。UV-PROMにはチップ上に紫外線を当てるための丸いガラス窓があるのが特徴である。一方、EE-PROMは外見的な特徴はなく、単なるICにしか見えない。

ワンチップマイコンは多くの小規模な組み込みシステムに採用されており、汎用というより特別な目的のための機能や性能を持たせたものが多く、ほとんどが受注生産となっている。CPUは共通でもメモリの容量、I/Oの種類や数などをアレンジして最適なワンチップマイコンを構成している。
#コンピュータの五大機能とは
「コンピュータ」と呼ぶためにはハードウェア構成に条件がある。
まずハードウェアとはコンピュータに限らず一般に機械装置のことを指す。「ハード」とは「硬い」という意味なので「手で触って存在を確認できる機械装置」をハードウェアと呼ぶ。
一方、「手では触れないもの」をソフトウェアと呼ぶ。
コンピュータのハードウェアには以下のような五つの機能が揃っていなければならず、これらを「コンピュータの五大機能」と呼ぶ。それぞれを人間に置き換えると次のような説明になる。

- 入力機能
    - 人間の目や耳、鼻といったいわゆる五感の機能に相当し、コンピュータが外部から情報を受け取る
- 記憶機能
    - 脳に記憶して覚える機能のことで、データやプログラムを記憶する
- 演算機能
    - 暗算や電卓を用いて計算する
- 制御機能
    - 目的を達成するために各部の動作を調整する機能で、プログラムに従って処理を進めるために他の機能をコントロールする
- 出力機能
    - 口で話したり手足を動かしたりする機能に相当し、コンピュータが外部へ情報を提供する

コンピュータの場合、これらの機能のうち記憶・演算・制御の三つを一つの筐体に入れ中央処理装置（CPU:Central Processing Unit）と呼ぶ。マイコンの場合には演算と制御の二つを一つのICにし、マイクロプロセッサと呼ぶ。CPUやMPU（Micro Processing Unit）と呼ぶこともあるが、コンピュータとは包含する機能の範囲が異なる。
#コンピュータとマイコンの違い
マイコンもコンピュータと呼ばれるからにはコンピュータの五大機能を全て供えていなければいけないが、マイコンの場合にはそれらの機能の持ち方に特徴がある。コンピュータの場合には各機能ごとが装置になっているのに対し、マイコンの場合にはICとして実装される。
汎用コンピュータの構成は標準仕様となっているものがほとんどであるため、変わったシステム構成や特徴のある使い方はできない。対してマイコン、とりわけ組込システムではその都度最適な仕様を考えることに違いがある。
マイコンの記憶には「ROM」と「RAM」という二種類のメモリICが採用される。RAMは読み書きが自由にできるメモリICである。一方でROMは読み出し専用のメモリICで、ROMに記憶された内容は電源を切っても消えない。そのため、機能が固定となっている組込システムでは、その専用プログラムをROMに記憶させておいて電源が投入されたら直ちに目的とする動作を開始することができる。
さらに、組み込み用マイコンは入出力の種類が豊富である。様々なアナログ情報がデジタル情報となってマイコンに入力され、演算した結果をアナログ情報に再変換して出力される。
#三種類のバス
マイクロプロセッサ（以下、プロセッサ）を中心としてプログラムやデータを記憶するメモリIC、外部とデータのやりとりをしたり周辺機器を接続するためのインターフェースICなどがマイコン回路の基本的な構成要素である。それらのICがプロセッサから伸びる以下の三種類のバスと呼ばれる信号線の束によって接続されているのがマイコン回路の特徴である。

- アドレスバス
    - データをやりとりする相手を特定するための情報（アドレス）を伝えるための信号線の束。データをやりとりする片方はプロセッサであるため、もう片方を指定する情報を伝える。
- データバス
    - データを伝えるための信号線の束。データを伝える方向は双方向であり、プロセッサからデータを送り出す場合を書き込みまたは出力と呼び、その逆方向にデータが伝わる場合を読み込みまたは入力と呼ぶ。
- コントロールバス
    - データのやりとりをうまく行うために必要なタイミング信号を伝える。このバスはそれぞれに違った機能を持った複数の信号線の束で、伝わる方向もそれぞれ決まっている。

#マイコン回路の動作
マイコン回路では、各ICが勝手に動作しないようにクロックが号令をかける仕組みになっている。各ICはクロックのタイミングに従って一糸乱れずに行動する回路になっている必要がある。このクロックの速さ、つまり周波数が高ければ高いほど動作速度が速い高性能のマイコンである。
基本的に次の三つの動作をそれぞれに決められたクロック回数で処理を行う。

- フェッチ
    - メモリに記憶されているプログラムを構成している命令を一個読み出す
- デコード
    - 読み出した命令を解読する
- エグゼキュート
    - 解読した結果に従って処理を行う

フェッチするためにはプログラムが記憶されている場所を特定する必要があり、その情報を伝えるのがアドレスバスである。そして、読み込むタイミングを知らせるのがコントロールバスである。さらに、読み出された命令はデータバスを経由してプロセッサに伝わり解読され、その処理に必要な準備が行われる。これらを経て実行段階となる。実行段階では様々な処理があり、それぞれの命令によって異なる。 
#正論理と負論理
「Hi」「Lo」はデジタル回路などのハードウェアの動作状態を電圧で表すときに使う記載である。回路の電源電圧に近いときを「Hi」、シグナルグランドの0Vに近い時を「Lo」と表し、それぞれICの特性として決まっている。
一方、「1」「0」はソフトウェアで希望する動作や条件判断の結果が真の時は「1」、希望しない動作や偽の時は「0」を使用する。
マイコンや組込システムはハードウェアとソフトウェアが一体となったシステムのため、両方の表記が混在してしまう。そこで、「1」と「Hi」、「0」と「Lo」を対応させる場合を「正論理」、「1」と「Lo」、「0」と「Hi」のように逆に対応させる場合を「負論理」という。
#デジタルICの出力回路について
出力回路は一般的にトランジスタが上下二階建てで構成されていてその中間位置から出力が取り出される。それぞれのトランジスタの動作はスイッチに例えられ、どちらか一方だけをONにすることによって「Hi」と「Lo」の状態を作り出す。
一部のICには両方のスイッチともOFFという状態があり、このとき、出力端子が内部回路のどこにも繋がっていない「ハイインピーダンス」という宙ぶらりん状態になる。「Hi」「Lo」「ハイインピーダンス」の3つの状態を合わせもつ回路を「スリーステート」または「トライステート」と呼ぶ。
データバスに複数のメモリICが接続されていても出力信号同士が衝突しないのは、アドレスデコーダによって選択されていないときのICの出力がどれもハイインピーダンス状態になっているからである。
なお、両方のスイッチともONという状態はありえない（ショート）。
また、上段のトランジスタは電源に、下段はグランドに繋がっており、「Hi」のときには電源から出力端子方向へ電流が流れ、この方向に流れる電流のことを「ソース電流」と呼ぶ。
一方、「Lo」のときには電流がIC外部から出力端子を経由しICのグランド端子に流れる。この方向に流れる電流のことを「シンク電流」と呼ぶ。
ICの出力回路には、上段のトランジスタがない「オープンコレクタ型出力回路」がある。この場合には出力端子に接続される負荷を介して電源に接続するという使い方をする。このメリットは、この種のIC出力を複数束ねて接続しても衝突しないこと、及び、どれか一つ以上のICの出力が「Lo」になったときに負荷にシンク電流が流れる。この動作が不論理のOR回路になっていることから「ワイヤードOR」と呼ばれる。
#デジタル信号の入出力
マイコン回路はデジタル信号で動作しており、クロックというタイミング信号に従って規則正しく高速に動作している。
マイコン関連で身近な入力センサにスイッチがある。スイッチはONまたはOFFの状態を機械的に保ち続けているのでプロセッサが必要な時に必要な時間だけ(スイッチが押されている間だけ)その状態をデータバスから確認できるようにする必要がある。そのための回路をDIポートと呼び、バッファ回路によって構成される。
スイッチの機械的なONとOFFの状態は電圧の状態（「Hi」と「Lo」）によって表される。スイッチの接点が開いているOFFの状態ではバッファへの配線が抵抗で電源電圧まで引き上げられ「Hi」になる。スイッチをONにすると接点が閉じバッファへの配線はグランドへ直結されるのでいくら抵抗で引っ張り上げようとしても0Vのまま「Lo」になる。スイッチを押すという行為に対して「Lo」になるということなので、この関係は負論理ということができる。
身近な出力デバイスとしてLEDがある。プロセッサからの出力信号はデータバスにほんの一瞬しか乗らないため、コントロールバスからのタイミングに従って記憶し、その状態をLEDへ出し続ける必要がある。そのための回路をDOポートと呼び、ラッチという記憶回路によって構成される。
組み込みシステムにおいては多くのデジタル信号を入出力する要求が強く、そのため複数のDIポートとDOポートが必要。よって、これらを一つの専用ICとしてまとめたI/O（またはDI/DO）がマイコン構成用として用意されている。
#アナログ信号の入出力
マイコンではアナログ信号を2進数（デジタル信号）に変換して取り扱う。この変換をA/D変換という。様々な種類のA/D変換器（専用IC）があり、目的によって使い分ける。
組み込みシステムで取り扱うアナログ信号はセンサなどで検出した微弱な信号の場合が多いため、増幅器フィルタを用いて信号を増幅し、不要な部分を切り取ってからA/D変換器でデジタル信号へ変換する。
2進数で表されたデジタル信号をアナログ信号に変換して出力する場合にはD/A変換器という専用ICを用いる。デジタル信号をD/A変換すると階段上のガタガタした波形になるので、ローパスフィルタという回路を通して滑らかにしてアナログ信号を抽出する。
D/A変換方式の一つに、PWM（Pulse Width Modulation、パルス幅変調）がある。例えば、直流モータの速度を制御する組み込みシステムなどで多く採用されている。「Hi」と「Lo」の切り替えを高速に行い、単位時間あたりの比率（パルス幅）でアナログ量を表現する。これによって、デジタル回路だけでアナログ出力を行うことができる。
##フィルタの種類と特性
組み込みシステムではアナログ信号を取り扱う時にローパスフィルタを多く採用する。フィルタには他にもいくつかの種類が存在する。フィルタを実装する方法として、オペアンプを用いたハードウェアとして組み込む方法と、ソフトウェアによる信号処理として実装する方法がある。
フィルタの種類は以下のようなものがある。

- ローパスフィルタ
    - 低周波数成分だけを通過させる
- ハイパスフィルタ
    - 高周波成分だけを通過させる
- バンドパスフィルタ
    - 特定の周波数成分だけを通過させる
- バンドエリミネーションフィルタ
    - 特定の周波数成分以外を通過させる

ローパスフィルタとハイパスフィルタ、バンドパスフィルタとバンドエリミネーションフィルタは、周波数特性がそれぞれ逆の関係になっている。
#組み込みシステムに採用される専用ICの種類と機能
マイコンを構成しているICは五大機能だけでなく、共通して利用することの多い回路についてはそれぞれ専用ICが開発されている。

- I/O（DI/DO）IC
    - デジタル信号を入出力する際に必要なバッファ回路とラッチ回路を複数個ずつまとめたもので、五大機能の一部を構成する重要なICの一つ。
- タイマ/カウンタIC
    - マイコンのクロック信号を基準として任意の時間信号を作り出せる専用IC。一定時間ごとに繰り返し出力するタイミング信号を作成できる。
    - クロック信号の代わりに外部からのデジタル信号を入力すればその信号の変化を数えるカウンタになる。
- 通信IC
    - リモコンなどに採用されているIrDA（赤外線通信）、ウェアラブル機器や近距離通信で利用されているBluetooth、Wi-Fiなどの無線LANは専用ICが用意されている。また、インターネットなどの有線通信、周辺機器やメモリなどを接続するためのUSBなども便利で多用されているICといえる。
- 電源IC
    - 電源アダプタから供給された電圧を機器に最適な電圧に調整するものや、電圧の違う複数の電源を作り出すものがある。
    - 電圧の変化を常に監視し電圧異常を検知する電圧監視ICがある。電圧監視ICは電圧異常を検知すると瞬時にマイコンに知らせる。するとマイコンは処理再開に必要なデータを退避させるので、システムが完全に停止してしまうまでのわずかな時間に対処することができる。

#参考文献
坂巻佳壽美, トコトンやさしい組込みシステムの本, 今日からモノ知りシリーズ, 日刊工業新聞社, 2019年.