マイコンの内部に、ユーザーに解放していないROMを持っていて、そこに命令の処理手順を前もってプログラムしておく。該当するマクロ命令がフェッチされてきたら、そのマクロ命令の処理に相当するプログラムを走らせて、マクロ命令を処理する。このROMをμ-ROMと呼び、プログラムをμ-プログラムと呼ぶ。μ-プログラムはμ-コード(マイクロコード)と呼ばれることもある。
μ-ROMの構造やμ-プログラムの内容は、各マイコンメーカーにとって企業秘密中の企業秘密なので公開されることはない。そこで、一般的なμ-ROMの構造を簡単なブロック図にして図6に示す。実際はもっと複雑であり、特許の要素も入っているので、この図は実際と若干異なるが、μ-プログラムの処理手順を理解するには十分な図だと思う。
この図を基に、レジスタ1とレジスタ2を加算して、メモリ(RAMなど)の0x100番地に結果を入れる操作例を解説する。
これで「レジスタ1+レジスタ2→メモリアドレス0x100」の演算は完了だ。実際はもっと複雑な処理を一度に処理する構造になっていて、できる限り少ないクロックサイクルで複雑な命令を処理するように設計される。
このように、μ-プログラムを使用した演算処理は、1つのマクロ命令を実行するのに数クロックサイクルを要する。クロックサイクルごとにそのマクロ命令を実現するμ-プログラムの1ステップを実行するからである。そのため、非常に長い実行時間のマクロ命令が存在する場合もある。
では、そのような実行時間の長いマクロ命令のμ-プログラムの実行中に割り込みが起きたら、どうなるのであろうか? 実は、μ-プログラムにも割り込みの概念があり、μ-プログラムの各ステップで、割り込みが発生していないかチェックする機能がある。もし、割り込みが発生した場合は、割り込み処理のμ-プログラムに分岐するようになっているので、同期だけでなく非同期の割り込みにも、クロックサイクルレベルでの対応は可能だ。
マイコンの中に、もう1つ小さなマイコンが入っていると考えると理解しやすいと思う。
さらに、図6を見て、マクロ命令のデコーダがないことにお気づきになっただろうか? これは、マクロ命令のコードをそのままμ-ROMのアドレスに使えば、マクロ命令が不要になるためだ。マクロ命令のコードが重なることはないので、μ-ROMのアドレスの重なることはない。この手法でマクロ命令のデコーダを簡略化できるわけだ。
「μ-プログラムのデコーダが大きくなるのでは?」と思う読者もいるだろう。実はμ-ROMのビット数を数十ビットで構成し、各ビットに、こまごまと機能を割り付けると、各機能のデコーダが小さくなり、トータルでデコーダの論理規模を小さくできる。例えば、図7では、ALUの機能とALUの入力1になるソースと入力2のソースと、ALUの出力のディスティネーションを区分けして2ビットから4ビットで割り当てる。数十ビットを一度にデコードする場合のデコーダよりも、4ビット程度の比較的小さなデコーダが数個集まった方が、論理規模を小さくできる。
このように、μ-ROMを使うと、ちょっとした工夫で回路規模を小さくできる。前述したように、マイコンの内部論理回路をランダム論理またはワイヤード論理で構成するよりも、論理規模を小さくし構造を簡素化でき、回路効率を高めることが可能になる。
Copyright © ITmedia, Inc. All Rights Reserved.