市販マイコン・ベースの機器開発が抱えている課題

現在の組み込み機器の多くが、市販マイコン・ベースで設計されています。先ほどと同様に設計手順を下記に示します。

 

1) CPUファミリーを決定する。
2) 動かすプログラムに応じたメモリ(ROM/RAM)の搭載容量を決定する。
3) 搭載している周辺モジュールが製品の要求仕様を実現する上で、一番近い市販マイコンを選択する。
4) 内蔵メモリでは容量不足の場合、外付けメモリで補う。
5) 不足している周辺機能があればFPGAを搭載して補う。

初期段階の設計手順と比較してみて下さい。

3)以降が大きく変わっていますね。

 

SoC化された市販マイコンは、内蔵している周辺モジュールのアドレスや割り込みレベル等が固定化され、設計時に考える必要がない場合が多いのです。後は使用するマイコンのハードウェア仕様に合わせてそれ以外を設計していくことになります。一見デバイスベンダーが自社のマイコンにとって最適化しているので、ユーザはそのまま使えば設計効率も上がる様に見えますが、本当にそうでしょうか?

 

私は市販マイコン・ベースの設計に携わる度、幾つもの疑問(課題)を感じるようになりました。

今回はその内、2点について解説します。

 

1.使わない機能までついてくる

この記事を読んでいる方の中で、現在実際に使っている市販マイコンに内蔵されている周辺モジュールを全て使っているという方はおそらく少ないでしょう。使っていないA/D(D/A)や汎用I/Oポートの数を数えてみて下さい。特にアナログ系を全く使っていないケースは多いと思います。(図 2参照)

図2 使わない機能がついてくる市販マイコン

 

ここで先ほどの質問を思い出してみて下さい。機能単位で設計する場合は搭載しない部品を、市販マイコンではパッケージ化されているので見えませんが搭載しているのです。原価面で差がないと言われるかもしれませんが、もし欲しい機能のみが組み込まれたラインナップがあったら、より安価に入手できるはずです。

 

 

使わない機能付きデバイスの購入 = ムダな出費

 

 

この式を市販マイコンのユーザは他に選択肢がないと考え、甘んじて(意識せずに?)受け入れているのではないでしょうか。皆さんがお使いの市販マイコンのハードウェア・マニュアルにブロック図や端子配置図があったら、実際に使っている部分を塗りつぶしてみて下さい。未使用部分の割合を認識できると思います。

 

 

2.割り込みに自由度がない

ユーザ・アプリケーションは千差万別であり、アドレス割り付けはともかく割り込みレベルについては、同じ機能を使ってもシステムから見た優先度は異なるはずです。しかしCPUの動作速度がどんどん上がり、更にリアルタイムOSと組み合わせ、割り込みタスクの処理が割り込み発生=イベントフラグを立てるだけとなり、優先順位判定はOS依存という設計が多くなっている現在では、内蔵周辺モジュールおよび外部からの割り込みレベルが固定化されている製品を多く目にするようになりました。

 

図 3を見て下さい。あるアプリケーション・プログラム実行中に2系統の割り込みが発生した時のプログラムの遷移状態を時系列で表したものです。(1)と(2)が割り込み発生のタイミングで、システム上(2)の方が優先処理したい割り込みだとします。

図3 割り込み応答時間に差が

 

採用した市販マイコンの割り込みレベルが要因(1)の方が高くかつレベル変更ができない場合、割り込み(1)タスク実行中に要因(2)の割り込みが発生してもその処理が終わるまで割り込み(2)タスクの実行が待たされます。一方割り込みレベルが変更できる場合は、割り込み(1)タスクが実行中でも、要因(2)の割り込みが発生した時点で割り込み(2)タスクを実行することができ、システムの要求仕様をより満たした製品に仕上げることができます。

 

もちろん割り込みレベルを変更できる市販マイコンも存在しますし、組み込み機器開発工数の大半がソフトウェアになりつつある現在に、重箱の隅をつつくような話は煙たがられるだけかもしれません。しかしここまで考えて物作りをするか・しないかは、必ず製品の使い勝手等に表れていると私は思います。

 

システム設計者はアプリケーションを最適な形で実現することを求めているはずですし、それに応えられるソリューションを提供することがベンダーの使命のはずですが、高額な開発費(NRE:No Recurring Engineering)を必要とするSoCでは、適用範囲の拡がりと共に多様化するユーザ・ニーズ全てに対応することは不可能なのです。

 

 

課題解決手段としてのソフトコアCPU内蔵FPGA

さて、FPGAに目を向けてみましょう。言うまでもなくFPGAは、「必要なときに、必要な機能を、必要なだけ組み込める」デバイスです。そのFPGAにソフトコアCPUを搭載してシステム開発する場合の手順を下記に示します。

 

1) CPUを決定する。(選択肢は多くないですが・・)
2) 動かすプログラムに応じたメモリ(ROM/RAM)の搭載容量を決定する。
3) CPU、内蔵する周辺モジュールおよびメモリ容量等を考慮してFPGAデバイスを決定。
4) メモリおよび周辺モジュールのアドレス割り付けを決定する。
5) 割り込み(およびDMA)を使う場合、その要因毎にレベル(優先順位)を決定する。

 

市販マイコンより初期の設計手順に似ていることに気がつかれたでしょうか。ソフトコアCPUや周辺モジュールをそれぞれ部品とみなせば、1機能/部品の時代と設計手法が似るのは当然と言えます。更に市販マイコンだから故に生じていた課題からも全て解放されることを意味します。自由度が増すため設計には十分な事前検討が必要になりますが、本来やるべきことをやっていなかっただけなので、正面から取り組むだけです。

 

また周辺モジュールで固定した動作パラメータがある場合、開発ツールで設定すればソフトウェアによる設定が不要になるだけでなく、パラメータ設定用のレジスタも割愛でき論理規模を低減できるという効果も、FPGAだからできるということを付記したいと思います。

 

 

おわりに

ソフトコアCPU内蔵FPGAの良さについてご理解いただけたでしょうか。市販マイコンが要求仕様を100%満たす場合も存在しますし、自社向けのカスタムマイコンを開発する資本力のある企業には無関係な話かもしれません。しかし高騰の一途をたどっている開発費を捻出できない小中量産機器メーカにとって、ソフトコアCPUとFPGAの組み合わせは「ユーザオリエントなSoCがミニマムオーダー1個から実現できる唯一の選択肢」なのです。

 

次回は、ソフトコアCPUの代表格であるNios II についてユーザの視点から解説する予定です。