~無限の可能性を持つソフトコアCPUの世界へようこそ~
はじめに
i8080A、MC6800、MCS6502、Z80・・・という型式を見てすぐに何だと解る方は、おそらく私と同年代かその前後の方でしょう。これらは皆1970年代後半に発売されたパーソナルコンピュータ(以下パソコンと省略)に搭載されていた 8bit マイクロコンピュータ(以下、マイコンと省略)の製品名です。
シリアル/パラレルのI/Oやタイマ等40ピンの周辺LSIと共に、14~28ピン程度のTTL(Transistor-Transistor-Logic) のDIP(Dual In-line Package)が整然と並んだ基板を見てディジタル世界の到来を感じたものでした。
単機能/チップの当時は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等、メーカによって呼び名は様々でした。しかし、周辺機能も含めて1チップ化されSoC(System On Chip)と呼ばれる現在の市販マイコンでは、演算とシーケンス制御をつかさどる機能部分をCPUと呼ぶのが一般的ですので、本連載ではCPUを使わせて頂きます。
今回は、CPUを中心としたマイコンシステムの構成要素を解説した後、市販マイコン+FPGAによるシステムが抱えている課題と、ソフトコアCPU内蔵FPGAがなぜその課題の解決手段になり得るのかについて解説したいと思います。
マイコンシステムの構成要素と初期の設計手順
図1にマイコンシステムを実現する代表的な構成要素を示します。アドレス・デコーダなどの論理は省略しています。周辺モジュールのINTCは割り込みコントローラ、Timerはインターバルタイマ、そしてI/Oは外部との入出力を行うパラレルもしくはシリアルの入出力ポートです。マイコンシステムで必須なのは、1.CPU、2.メモリ(ROM/RAM)、および 3.I/O(外部と何もやり取りしないシステムはあり得ない)で、それ以外は必要に応じて付加されるものだということを理解して下さい。

図1 マイコンシステムの構成要素
組み込み機器における電源投入からのプログラム 3ステップ |
1)電源を投入してリセットが解除されると、まずCPUがROM上に配置されたプログラムを実行し、
スタックポインタの設定や周辺モジュールの初期化を行い、マイコンシステムとして機能するため
の準備を終えます。
2)次にOSのブート等アプリケーション・プログラムを動作させるための準備を行います。
このプログラムはROM/RAMいずれでも実行可能で、システム設計時に決定します。
メモリ空間が64kバイトと狭かった8ビットマイコン時代は、プログラムはROM、ワークエリアはRAMと
明確に別れていましたが、メモリ空間の広い32ビットRISCが主流の現在では、外部バスを持たない
1チップ・マイコンを除き、プログラムもROMより高速なRAM上で動作させることが多くなっています。
3)最後にOS上で稼働するアプリケーション・プログラムが実行され、製品として動き出します。
以上の様な手順でプログラムが動作するハードウェアをマイコンが出始めた当初、
どの様に設計していたのか、その手順を下記に示します。

1) CPUを決定する。
2) 動かすプログラムに応じたメモリ(ROM/RAM)の搭載容量を決定する。
3) 決定したCPUファミリーの周辺LSIの中からシステムに必要なものを選択する。
4) メモリおよび周辺モジュールのアドレス割り付けを決定する。
5) 割り込み(およびDMA)を使う場合、その要因毎にレベル(優先順位)を決定する。
6) アドレス・デコーダ等の論理をTTLベースで設計する。
手順と書きましたが順番は重要ではありません。
以降の解説との比較をするため、どういう項目があるのかだけを覚えておいて下さい。
質問:
これまで解説してきた各機能がそれぞれ独立した部品だった場合、
自分が設計する製品に余分な部品を入れるでしょうか?
答えは・・・
もちろん、誰が答えてもノーですよね?
しかしそこには、市販マイコン・ベースの機器開発が抱えている課題があるのです。