(57)【特許請求の範囲】
【請求項１】
少なくともプログラム及びデータを記憶する記憶手段と、該記憶手段に記憶された波形データをアクセスする音源と、該記憶手段に記憶されたプログラム及びデータをアクセスするＣＰＵと、上記記憶手段が繋げられた共有バスと、該共有バスに対し上記音源とＣＰＵが時分割交互にアクセスさせる制御を行うバスコントローラとを備えたターゲットシステム環境で動作することを目的とするオブジェクトプログラムを生成するクロスコンパイラであって、
前記ＣＰＵが共有バスを使用する命令を検出する第１の検出手段と、
該第１の検出手段が検出した命令が実行されるタイミングが、前記共有バスをＣＰＵが使用するべきタイミングであるかどうかを検出する第２の検出手段と、
前記第１の検出手段の検出した、ＣＰＵが共有バスを使用する命令が、前記音源が共有バスを使用するべきタイミングに実行されることを、前記第２の検出手段により検出した場合に、該命令の前に前記ＣＰＵに対して、ＣＰＵが共有バスを使用して実行する命令の次の命令に交換可能か否かを判定する判定手段と、
その判定結果に基づき、次の命令に交換可能であれば、その命令に交換し、逆に次の命令に交換可能でなければ、共有バスを該ＣＰＵが次に使用するタイミングまで休止する命令を挿入するオペレーション手段とを備え、
上記共有バスを上記音源が使用するタイミングに、上記ＣＰＵが共有バス以外をアクセスするように動作するオブジェクトプログラムを生成することを特徴とするクロスコンパイラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定のターゲットシステム環境で動作することを目的とするオブジェクトプログラムを生成するクロスコンパイラに関する。
【背景技術】
【０００２】
従来、記憶手段に記憶された波形データをアクセスする音源と、該記憶手段に記憶されたプログラム／データをアクセスするＣＰＵとが共有し、且つ時分割交互に使用される共有バスを備えた電子学音発生器では、上記ＣＰＵのプログラム開発は、プログラム言語を単純に機械語命令に変換するように実施されていた。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかし、上記のようなプログラム開発がなされると、音源とＣＰＵのアクセスタイミングを、プログラム実行時に分離する必要が生じ、該ＣＰＵがバスを使用しない命令が実行される場合でも、音源がバスを使用する間は、そのＣＰＵの実行を待たねばならなくなるという問題があり、処理スピードが落ちる問題を生じていた。特にパイプライン処理が実行される場合は、その問題が顕著に反映される。
【０００４】
本発明は、以上のような問題に鑑み創案されたもので、上記電子学音発生器環境で動作することを目的とするオブジェクトプログラムを生成するクロスコンパイラであって、上記環境下で動作し、そこに含まれるＣＰＵの実行速度を上げることができる、クロスコンパイラを提供せんとするものである。
【課題を解決するための手段】
【０００５】
本発明の構成は、
少なくともプログラム及びデータを記憶する記憶手段と、該記憶手段に記憶された波形データをアクセスする音源と、該記憶手段に記憶されたプログラム及びデータをアクセスするＣＰＵと、上記記憶手段が繋げられた共有バスと、該共有バスに対し上記音源とＣＰＵが時分割交互にアクセスさせる制御を行うバスコントローラとを備えたターゲットシステム環境で動作することを目的とするオブジェクトプログラムを生成するクロスコンパイラであって、
前記ＣＰＵが共有バスを使用する命令を検出する第１の検出手段と、
該第１の検出手段が検出した命令が実行されるタイミングが、前記共有バスをＣＰＵが使用するべきタイミングであるかどうかを検出する第２の検出手段と、
前記第１の検出手段の検出した、ＣＰＵが共有バスを使用する命令が、前記音源が共有バスを使用するべきタイミングに実行されることを、前記第２の検出手段により検出した場合に、該命令の前に前記ＣＰＵに対して、ＣＰＵが共有バスを使用して実行する命令の次の命令に交換可能か否かを判定する判定手段と、
その判定結果に基づき、次の命令に交換可能であれば、その命令に交換し、逆に次の命令に交換可能でなければ、共有バスを該ＣＰＵが次に使用するタイミングまで休止する命令を挿入するオペレーション手段とを備え、
上記共有バスを上記音源が使用するタイミングに、上記ＣＰＵが共有バス以外をアクセスするように動作するオブジェクトプログラムを生成することを基本的特徴としている。
【０００６】
上記構成によれば、前記第１の検出手段の検出した、ＣＰＵが共有バスを使用する命令が、前記音源が共有バスを使用するべきタイミングに実行されることを、前記第２の検出手段により検出した場合に、該命令の前に前記ＣＰＵに対して、ＣＰＵが共有バスを使用して実行する命令の次の命令に交換可能か否かが、判定手段により判定され、その判定結果において、次の命令に交換可能であれば、オペレーション手段によってその命令に交換され、逆に次の命令に交換可能でなければ、該オペレーション手段によって共有バスを該ＣＰＵが次に使用するタイミングまで休止する命令が挿入されるようになるため（コンパイラで生成されたオブジェクトプログラムが、ＣＰＵの共有バスアクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでＣＰＵのバス使用を休止する命令が出力されるため）、ＣＰＵがバスを使用しない命令が実行される場合にあっては、音源がバスを使用する間に、そのＣＰＵは待つことなくその命令をそのまま実行でき、結果的に該ＣＰＵの実行速度を上げることができるようになる。
【発明の効果】
【０００７】
以上のような本発明の構成によれば、コンパイラで生成されたオブジェクトプログラムが、ＣＰＵの共有バスアクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでＣＰＵのバス使用を休止する命令が出力されるため、ＣＰＵがバスを使用しない命令が実行される場合にあっては、音源がバスを使用する間は、そのＣＰＵは待つことなくその命令をそのまま実行でき、結果的に該ＣＰＵの実行速度を上げることができるようになるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態を、図１〜図１９の図面を用いて説明する。
【実施例】
【０００９】
本実施例のクロスコンパイラは、電子鍵盤楽器という別のターゲットシステム環境で動作することを目的に、図１のようなプログラム開発環境で開発される、オブジェクトプログラムを生成するクロスコンパイラである。
【００１０】
まず、図１は、本発明のコンパイラを作成する別システムのワークステーションの機能ブロック図を示している。
【００１１】
本ワークステーションは、システムバス１０００を介して、ＣＰＵブロック１００４、ダイレクトメモリアクセスコントローラ１００６、外部機器との接続を行うインターフェース１００８、メモリブロック１０１０、ディスクＩ／Ｏユニット１０１２、ハードディスクドライブ１０１４が接続されており、また、上記インターフェース１００８を介してＩ／Ｏバス１００２にもつながっている。該Ｉ／Ｏバス１００２は、さらにＧＰＵ１０１６の他、タイピングキーボードやマウス、外部デバイスにも接続されている。該ＧＰＵ１０１６は、外部ディスプレイに当たるビデオモニタ１０１８の画面制御を行う。
【００１２】
ここでは、後述する電子鍵盤楽器で構成されるターゲットシステムのＣＰＵ１０上に、後に述べる各機能部で構築される構成が生成されることになる、本クロスコンパイラにより生成されるオブジェクトプログラムの開発環境が提供されることになる。
【００１３】
図２は、上記コンパイラの処理フローを示すフローチャートである。まず、全ソースコードにわたって前処理がなされる（ステップＳ１００）。前処理とは、実際のコンパイルに先立って行われる処理であり、例えばマクロを通常の命令に展開する、等のことをいう。
【００１４】
そして全てのジャンプ命令（分岐）やサブルーチン呼出し命令などのラベルの抽出処理がなされる（ステップＳ１０２）。
【００１５】
これらの命令のコード化処理が行われ（ステップＳ１０４）、命令カウンタｉを０とし（ステップＳ１０６）、以後ステップＳ１２２まで１命令ずつ処理が実行される。
【００１６】
すなわち、ＣＰＵ４０が処理すべきｉ（０から全命令数−１までの順に）番目の命令が取得され（ステップＳ１０８）、それが後述する図５の第１検出部１により、同じく図４のエクスターナルバス４０アクセスを要求しているか否かがチェックされる（ステップＳ１１０）。該命令がエクスターナルバス４０アクセス要求をしていない場合（ステップＳ１１０；Ｎ）、後述するステップＳ１２０に移行する。
【００１７】
反対にその命令がエクスターナルバス４０アクセス要求をしていることが、第１検出部１により検出された場合（ステップＳ１１０；Ｙ）、そのアドレスは８の倍数［８ｎ（ｎ＝０、１、…）］か否かが、同じく後述する第２検出部２によって、チェックされる(ステップＳ１１２)。これは、ＣＰＵ１０は全体として１クロックで１命令を実行するが、８の倍数アドレスに置かれた命令が偶数クロックでＣＰＵ１０にフェッチされ、その３クロック後（即ち奇数クロック）に、必要ならエクスターナルバス４０をアクセスしようとするからであり、一方で該音源２０は奇数クロックに、エクスターナルバス４０をアクセスするからである。この２つのチェックによって、ＣＰＵ１０がアクセス違反しているか否かのチェックが行われているわけである。
【００１８】
８の倍数でない（命令長は４バイト固定長であるので、即ち８の倍数＋４の）アドレスの場合（ステップＳ１１２；Ｎ）、後述するステップＳ１２０に移行する。
【００１９】
反対に８の倍数のアドレスの場合（ステップＳ１１２；Ｙ）、同じく後述する判定部３によって、次に続く命令と交換可能か否かがチェックされる（ステップＳ１１４）。
【００２０】
次に続く命令と交換可能な場合（ステップＳ１１４；Ｙ）、同じく後述するオペレーション部４によって、命令が交換される（ステップＳ１１６）。反対に次に続く命令と交換ができない場合（ステップＳ１１４；Ｎ）、後述するオペレーション部４によって、ＮＯＰ命令（休止命令）がそのタイミングに挿入される（ステップＳ１１８）。
【００２１】
いずれのステップＳ１１６又はＳ１１８の後も、命令カウンタｉをインクリースする（ステップＳ１２０）。
【００２２】
命令カウンタｉが全コード数に達したか否かがチェックされ（ステップＳ１２２）、達していない場合（ステップＳ１２２；Ｎ）は、前記ステップＳ１０６に復帰し、全ソースコードにわたって、以上の処理を繰り返す。
【００２３】
命令カウンタｉが全コード数に達した場合（ステップＳ１２２；Ｙ）、ラベル位置補正が行われる（ステップＳ１２４）。すなわち、該ラベル位置補正では、全てのジャンプ（分岐）命令及びサブルーチン呼出し命令の飛び先に当たるラベル（アドレス）を８の倍数に、飛び元にある命令のアドレスを８の倍数＋４にする処理が行われることになる。飛び元にある命令のアドレスが８の倍数である場合はＮＯＰを挿入して８の倍数＋４になる様にする。この結果、コンパイラはターゲットに接続しないでも、全ての命令をアクセス違反が無いように配置することができるようになる。
【００２４】
以上でコンパイラの処理フローが終了する。
【００２５】
図３は、上記ワークステーションを使用しながら、そこでクロスコンパイラを用いることで、ターゲットシステム環境である電子鍵盤楽器で動作することを目的とするオブジェクトプログラムの開発作業手順を示すフローチャートである。
【００２６】
まず、ワークステーションに備えられたエディタを起動して、上記図２で示したフローのソースコードが作成される（ステップＳ２００）。又は、ステップＳ２００では、既存のソースコードを修正してもいい。また同じくワークステーションに備えられたコンパイラを起動して、該コンパイラにより、作成されたソースコードがマシン語のターゲットプログラムに変換される（ステップＳ２０２）。
【００２７】
そして該プログラムにエラーがあるか否かがチェックされ（ステップＳ２０４）、エラーがあれば（ステップＳ２０４；Ｙ）、上記ステップＳ２００に復帰し、ソースコードの修正がなされる。
【００２８】
反対にエラーがなければ（ステップＳ２０４；Ｎ）、ワークステーションのＩ／Ｏバス１００２につながっている外部デバイス端子から、インターフェース１００８及び後述する図４に示すターゲットシステムである電子鍵盤楽器に対して、同じくインターフェース６６を通じて、作成されたターゲットプログラムが転送される（ステップＳ２０６）。上記電子鍵盤楽器で動作確認が行われ（ステップＳ２０８）、異常があるか無いかがチェックされる（ステップＳ２１０）。異常があれば（ステップＳ２１０；Ｎ）、上記ステップＳ２００に復帰し、以上の処理を繰り返す。反対に異常がなければ（ステップＳ２１０；Ｙ）、両インターフェース１００８と６６の接続を切り、ワークステーションをターゲットシステムの電子鍵盤楽器から切り離し、該電子鍵盤楽器を完成させる。
【００２９】
図４は、上記ターゲットシステムの電子鍵盤楽器の構成概要ブロック図である。該電子鍵盤楽器は、１つのＬＳＩ中に組み込まれたデータインターナルバス７０を介して、ＣＰＵ１０（データの出入はこのバスを介して行われる）と、音源（ToneGenerator）２０と、バスコントローラ３０とがつながっており、さらに、命令インターナルバス６０を介して、上記ＣＰＵ１０（命令の出入はこのバスを介して行われる）と、メモリコントローラ６２とがつながっている。該メモリコントローラ６２は、プログラムを記憶したフラッシュメモリ６４に繋げられており、さらに、該フラッシュメモリ６４は、上述のようにしてインターフェース６６及びメモリコントローラ６２を介してターゲットプログラムが記憶されている。上記ＣＰＵ１０は、電源ＯＮと同時に、指示を出し、命令インターナルバス６０及びメモリコントローラ６２を介して、フラッシュメモリ６４から、そこに記憶されたターゲットプログラムを読み出し、以後該ターゲットプログラムに従って、ＣＰＵ１０の処理がなされることになる。
【００３０】
このＣＰＵ１０は、例えば２４ｂｉｔｓのアドレス空間及び３２ｂｉｔｓのデータバス幅を有しており、後述するように、５段のパイプライン処理が行われるＲＩＳＣ型ＣＰＵである。また上記メモリコントローラ６２は、ターゲットシステムである電子鍵盤楽器からターゲットプログラムを転送する間、フラッシュメモリ６４を上記ワークステーションに接続し、転送終了後はフラッシュメモリ６４を、上記ＣＰＵ１０に接続する。
【００３１】
他方、ＣＰＵ１０と音源２０とは、バスコントローラ３０を介して、上記ＬＳＩの外部にあるエクスターナルバス４０につながっており、そのバスに繋げられている、データを記憶しているＲＯＭ（ここでは音色データや様々なデータや係数などのテーブルが記憶されている）及びＲＡＭ（ＣＰＵ１０の演算結果が書き込まれる）５０と、波形データを記憶しているメモリ５２との間で、ＣＰＵ１０はプログラムやデータを、また音源２０は、波形データを、時分割交互にアクセスする構成となっている。そのためこのエクスターナルバス４０は、上記ＣＰＵ１０と音源２０との共有バスとなっている。
【００３２】
波形データの読み出しを行った音源２０は、そこで楽音波形を生成し、上記のデータインターナルバス７０につながったＤＳＰ２２で主にディレイを中心とした音響効果が付加されて、ＬＳＩ外部の後述する音響システムに出力される。該ＤＳＰ２２は、ＣＰＵ１０からの指示と、係数の出力により、音源２０からの楽音波形に種々の音響効果を付加するが、ディレイ効果を付す場合は、ＬＳＩ外部にあるＤＳＰバス２２ｂを介してつながっているディレイメモリ２２ａを使用しながら、該音響効果を楽音波形に付加することになる。
【００３３】
該ＤＳＰ２２から出力された楽音波形は、デジタルアナログコンバータ（ＤＡＣ）２４でアナログ信号に変換され、アンプ２６で増幅されて、スピーカ２８を介して外部に放音することになる。
【００３４】
さらに、ＬＳＩのデータインターナルバス７０には、インターフェース７２を介して、外部から例えばＭＩＤＩなどの演奏情報が取り込まれることになる。
【００３５】
上述のように、ターゲットシステムである電子鍵盤楽器では、各種データ（計算結果を含む）を記憶する記憶手段たるＲＯＭ／ＲＡＭ５０及び波形データメモリ５２と、該波形データメモリ５２に記憶された波形データをアクセスする音源２０と、該ＲＯＭ／ＲＡＭ５０に記憶されたデータをアクセスするＣＰＵ１０と、上記記憶手段が繋げられた共有バスたるエクスターナルバス４０と、該エクスターナルバス４０に対し上記音源２０とＣＰＵ１０が時分割交互にアクセスさせる制御を行うバスコントローラ３０とが備えられている。
【００３６】
図５は、上記フラッシュメモリ６４から読み出されたターゲットプログラムがＣＰＵ１０によって実行された際に、該ＣＰＵ１０上に形成されることになる構成の機能ブロック図である。
【００３７】
該図面に示すように、ターゲットシステム環境である電子鍵盤楽器で動作することを目的として、上記ワークステーションにおいて、そこで使用されるクロスコンパイラによって、ソースプログラムが変換されて生成されるオブジェクトプログラムが、ＣＰＵ１０に読み出されて実行されることで、該ＣＰＵ１０が、全ての命令を入力してそのうちエクスターナルバス４０を使用する命令を検出する第１検出部１（命令コードで検出が可能）と、該第１検出部１が検出した命令が実行されるタイミングが、該エクスターナルバス４０をＣＰＵ１０が使用するべきタイミングである（ＣＰＵ１０のバスアクセスタイミングが上述のステップＳ１１２のように奇数クロック）かどうかを検出する第２検出部２と、第１検出部１の検出した、ＣＰＵ１０がエクスターナルバス４０を使用する命令が、前記音源２０がエクスターナルバス４０を使用するべきタイミング（音源２０は奇数クロックの際にエクスターナルバス４０をアクセスする）に実行されることを、第２検出部２により検出した場合に、該命令の前にＣＰＵ１０に対して、ＣＰＵ１０がエクスターナルバス４０を使用して実行する命令の次の命令に交換可能か否かを判定する判定部３と、その判定結果に基づき、次の命令に交換可能であれば、その命令に交換し、逆に次の命令に交換可能でなければ、エクスターナルバス４０を該ＣＰＵ１０が次に使用するタイミングまで休止する命令を挿入するオペレーション部４とを上記電子鍵盤楽器のＣＰＵ１０上に構築することになる。
【００３８】
上述のように、ＣＰＵ１０と音源２０とは、バスコントローラ３０を介して、上記ＬＳＩの外部にあるエクスターナルバス４０につながっており、そのバスに繋げられている、データを記憶しているＲＯＭ及びＲＡＭ５０と、波形データを記憶しているメモリ５２との間で、ＣＰＵ１０は上記データなどを、また音源２０は、波形データを、時分割交互にアクセスする（上述のように、ＣＰＵ１０は本来奇数アドレスタイミングの際にエクスターナルバス４０をアクセスし、音源２０は偶数アドレスタイミングの際にエクスターナルバス４０をアクセスする）構成となっており、そのためこのエクスターナルバス４０は、上記ＣＰＵ１０と音源２０との共有バスとなっている。
【００３９】
音源２０がエクスターナルバス４０を使用するべきタイミングは、上述のように、奇数クロックの時であり、図２のフローチャートのステップＳ１１０〜ステップＳ１１８に示すと同様に、もしその際に、第１検出部１によって、ＣＰＵ１０がエクスターナルバス４０を使用する命令が検出された場合、第２検出部２により、そのバスアクセスタイミングが奇数クロックか否か、即ち命令アドレスが８の倍数か否かが検出される。バスアクセスタイミングが奇数クロックの場合は、判定部３により、ＣＰＵ１０がエクスターナルバス４０を使用しないで実行する命令の次の命令に交換可能か否かが判定される。そして、次の命令がエクスターナルバス４０を使用せず、交換可能であれば、オペレーション部４により、次の命令に交換されてＣＰＵ１０上でその命令の実行が行われる。反対に次の命令に交換可能でなければ、同じくオペレーション部４により、エクスターナルバス４０を該ＣＰＵ１０が次に使用するタイミングまで休止するＮＯＰ命令が挿入される。
【００４０】
図６は、上記電子鍵盤楽器のＣＰＵ１０の内部構成を示す機能ブロック図である。該ＣＰＵ１０は、上述のように、パイプライン処理が行われるＲＩＳＣ型のＣＰＵであり、図５に示すような内部構成となっている。すなわち、本ＣＰＵ１０には、まずクロック生成部１９０があって、ＬＳＩ上で用いられた動作クロック（ＭＣＫ）を入力し、反転動作クロック（ＸＭＣＫ）を生成して、該反転動作クロック（ＸＭＣＫ）と上記動作クロック（ＭＣＫ）をＣＰＵ１０内部で用いる。
【００４１】
また図中ＰＲはパイプラインレジスタ、ｐ１〜ｐ４は対応するパイプラインの段数であり、各段の処理結果を格納する。パイプラインの最終段（５段目）は処理が終了していて処理結果を格納する必要がないため、パイプラインレジスタを備えない。内部各部はパイプラインの各段を形成している。夫々は前段のパイプラインレジスタからデータを読み取り、動作クロック（ＭＣＫ）の１サイクルの間に後述するような各部の動作を行って、対応するパイプラインレジスタＰＲにデータを記憶する。
【００４２】
詳述すると、該ＣＰＵ１０内には、ターゲットプログラムを入力する命令インターナルバス６０につながる命令フェッチ部１００があり、プログラムの命令フェッチ（InstructionFetch）が行われる。そして、パイプライン１のパイプラインレジスタ（ＰＲｐ１）１１０にフェッチされた命令（Instruction）が一時的に記憶される。次のステージでその命令（Instruction）は、命令デコード部１２０に移行し、該命令デコード部１２０により、レジスタファイル１９２（後述する図７参照）が参照されて、該命令（Instruction）のデコードがなされる。そのデコード結果は、パイプライン２のパイプラインレジスタ（ＰＲｐ２）１３０に一時的に記憶される。さらに次のステージでそのデコード結果は、演算部１４０に移行して、そこで演算がなされ、その演算結果は、パイプライン３のパイプラインレジスタ（ＰＲｐ３）１５０に一時的に記憶される。
【００４３】
そして、バスコントローラ３０につながっているデータインターナルバス７０に接続されたメモリアクセス部１６０に、次のステージで、バスコントローラ３０を介し、エクスターナルバス４０につながっているデータＲＯＭ／ＲＡＭ５０にアクセスして、必要なデータをそこからロードしたり、或いは上記演算結果が出力（ライト）される。またその演算結果は、パイプライン３のパイプラインレジスタ（ＰＲｐ３）１７０に一時的に記憶される。
【００４４】
さらに次のステージで、ライトバック部１８０により、レジスタファイル１９２（後述する図７のｒ０〜ｒｆのレジスタ群を参照）に必要な参照データが書き込まれる。
【００４５】
以上の命令フェッチ、命令デコード、演算、メモリアクセス、ライトバックの各部は、並列的に動作することになる。
【００４６】
図７は、上記ＣＰＵ１０のレジスタファイル１９２のレジスタ構成を示している。ｒ０〜ｒｅまで３２ビット長構成の汎用レジスタであり、レジスタｒｆのみ、８ビットがステータスレジスタ、２４ビットがデータを記憶するＲＯＭ／ＲＡＭ５０中のデータＲＡＭのスタックポインタである。
【００４７】
図８は、上記ＣＰＵ１０内部構成の命令フェッチ部１００（と１段目のパイプラインのパイプラインレジスタＰＲ１１０）の構成の概要図である。同図において、命令フェッチ部１００は、命令ポインタＩＰと加算器１０４を有している。
【００４８】
２４ビット幅のレジスタである命令ポインタＩＰ１０２の値が、アドレスとして、命令インターナルバス６０へ出力される。
【００４９】
同時に命令ポインタＩＰ１０２の値は、加算器１０４によって固定値４と加算され、１段目のパイプラインレジスタＰＲ１１０のエリアＮＡに次期命令アドレス予測値ＮＩＥＸとして格納される。命令アドレスは必ず４の倍数になるので、命令ポインタＩＰ１０２は最下位２ビットを省略して２２ビット幅としても良い。
【００５０】
命令インターナルバス６０のデータバスから現在の命令コードＲＩＣＤを読み込み、１段目のパイプラインレジスタＰＲ１１０のエリアＩＣに格納する。
【００５１】
後述する図１１のメモリアクセス部１６０から与えられる次期命令アドレスＮＩＡＤを動作クロックＭＣＫの１サイクルの最後に、上記命令ポインタＩＰ１０２に上書きする。
【００５２】
命令フェッチ部１００は、以上の処理を動作クロックＭＣＫ毎に繰り返す。
【００５３】
図９は、命令デコード部１２０（と前後の１及び２段目のパイプラインのパイプラインレジスタＰＲ１１０及び１３０）の構成の概要図である。同図において、命令デコード部１２０は、命令分離器ＩＤ１２１と、オペランド分離器ＯＤ１２２と、一時記憶レジスタＸ１（１２３）と、同じく一時記憶レジスタＸ２（１２４）と、セレクタＳ１（１２５）とを有している。
【００５４】
１段目のパイプラインレジスタＰＲ１１０のエリアＮＡにある次期命令アドレス予測値ＮＩＥＸを、そのまま２段目のパイプラインレジスタＰＲ１３０のエリアＮＡに、次期命令アドレス予測値ＮＩＥＸとして格納する。
【００５５】
１段目のパイプラインレジスタＰＲ１１０のエリアＩＣから、現在の命令コードＲＩＣＤを読み出し、上記命令デコード部１２０の命令分離器ＩＤ１２１によって、命令種類ＩＴＹＰとオペランドデータＯＰに分離すると共に、命令種類ＩＴＹＰを２段目のパイプラインレジスタ１３０のエリアＩＴに格納する。以下、分岐命令の場合、転送命令の場合、演算命令及びＮＯＰ命令の場合に分けて動作説明をする。
【００５６】
（分岐命令の場合）
オペランドデータＯＰをオペランド分離器ＯＤ１２２に入力し、命令種類ＩＴＹＰを参照して第１オペランドポインタまたは即値Ｏ１を取り出して、２段目のパイプラインレジスタＰＲ１３０のエリアＯ１に格納すると共に、第２オペランドポインタＯＰＴ２として固定値１５を設定し、２段目のパイプラインレジスタＰＲ１３０のエリアＯ２に格納する。
【００５７】
第１オペランドポインタまたは即値Ｏ１は下位４ビットをレジスタファイル１９２に送出し、これに応じたレジスタの値Ｖ１を得て、動作クロックＭＣＫの前半のサイクルの最後（動作クロックＭＣＫのアップエッジ）のタイミングで、一時記憶レジスタＸ１（１２３）に格納する。
【００５８】
同時に第２オペランドポインタＯＰＴ２をレジスタファイル１９２に送出し、これに応じたレジスタの値Ｖ２を得て、動作クロックＭＣＫの前半のサイクルの最後（動作クロックＭＣＫのアップエッジ）のタイミングで、一時記憶レジスタＸ２（１２４）に格納する。
【００５９】
セレクタＳ１（１２５）は命令種類ＩＴＹＰのＩＭビット（分岐命令ではビット３０）を参照し、これが１の場合、第１オペランド値または即値（この場合は即値）２４ビットを、そうでない場合は、Ｖ１を２段目のパイプラインレジスタＰＲ１３０のエリアＶ１に、第１オペランド値ＯＰＶ１として格納する。
【００６０】
同時にＶ２を２段目のパイプラインレジスタＰＲ１３０のエリアＶ２に、第２オペランド値ＯＰＶ２として格納する。
【００６１】
（転送命令の場合）
オペランドデータＯＰをオペランド分離器ＯＤ１２２に入力し、命令種類ＩＴＹＰを参照して、第１オペランドポインタまたは即値Ｏ１を取り出し、２段目のパイプラインレジスタＰＲ１３０のエリアＯ１に格納すると共に、第２オペランドポインタＯＰＴ２を取り出し、２段目のパイプラインレジスタＰＲ１３０のエリアＯ２に格納する。
【００６２】
第１オペランドポインタまたは即値Ｏ１は下位４ビットをレジスタファイル１９２に送出し、これに応じたレジスタの値Ｖ１を得て、動作クロックＭＣＫの前半のサイクルの最後（動作クロックＭＣＫのアップエッジ）のタイミングで、一時記憶レジスタＸ１（１２３）に格納する。
【００６３】
同時に第２オペランドポインタＯＰＴ２をレジスタファイル１９２に送出し、これに応じたレジスタの値Ｖ２を得て、動作クロックＭＣＫの前半のサイクルの最後（動作クロックＭＣＫのアップエッジ）のタイミングで、一時記憶レジスタＸ２（１２４）に格納する。
【００６４】
セレクタＳ１（１２５）は命令種類ＩＴＹＰのＴＲＭＤ信号（ビット２８−２９）を参照し、これが０でない場合、第１オペランド値または即値（この場合は即値）２４ビットを、０の場合は、Ｖ１を、２段目のパイプラインレジスタＰＲ１３０のエリアＶ１に第１オペランド値ＯＰＶ１として格納する。
【００６５】
同時にＶ２を２段目のパイプラインレジスタＰＲ１３０のエリアＶ２に第２オペランド値ＯＰＶ２として格納する。
【００６６】
（演算命令の場合）
オペランドデータＯＰをオペランド分離器ＯＤ１２２に入力し、命令種類ＩＴＹＰを参照して、第１オペランドポインタＯ１を取り出し、２段目のパイプラインレジスタＰＲ１３０のエリアＯ１に格納すると共に、第２オペランドポインタＯＰＴ２を取り出し、２段目のパイプラインレジスタＰＲ１３０のエリアＯ２に格納する。
【００６７】
第１オペランドポインタＯ１を、レジスタファイル１９２に送出し、これに応じたレジスタの値Ｖ１を得て、動作クロックＭＣＫの前半のサイクルの最後（動作クロックＭＣＫのアップエッジ）のタイミングで、一時記憶レジスタＸ１（１２３）に格納する。
【００６８】
同時に第２オペランドポインタＯＰＴ２を、レジスタファイル１９２に送出し、これに応じたレジスタの値Ｖ２を得て、動作クロックＭＣＫの前半のサイクルの最後（動作クロックＭＣＫのアップエッジ）のタイミングで、一時記憶レジスタＸ２（１２４）に格納する。
【００６９】
セレクタＳ１（１２５）は、常時Ｖ１を２段目のパイプラインレジスタＰＲ１３０のエリアＶ１に、第１オペランド値ＯＰＶ１として格納する。
【００７０】
同時にＶ２を２段目のパイプラインレジスタＰＲ１３０のエリアＶ２に、第２オペランド値ＯＰＶ２として格納する。
【００７１】
（ＮＯＰ命令の場合）
転送命令と同様に動作するが、いずれの値も使用されない。
【００７２】
命令デコード部１２０では、以上詳述した動作を、動作クロックＭＣＫのサイクル毎に繰り返す。
【００７３】
図１０は、演算部１４０（と前後の２及び３段目のパイプラインのパイプラインレジスタＰＲ１３０及び１５０）の構成の概要図である。同図において、演算部１４０は、演算ユニットＣＵ１４１を有している。
【００７４】
２段目のパイプラインレジスタＰＲ１３０のエリアＮＡにある次期命令アドレス予測値ＮＩＥＸを、そのまま３段目のパイプラインレジスタＰＲ１５０のエリアＮＡに、次期命令アドレス予測値ＮＩＥＸとして格納する。
【００７５】
２段目のパイプラインレジスタＰＲ１３０のエリアＩＴにある命令種類ＩＴＹＰを、そのまま３段目のパイプラインレジスタＰＲ１５０のエリアＩＴに、命令種類ＩＴＹＰとして格納する。
【００７６】
２段目のパイプラインレジスタＰＲ１３０のエリアＯ１にある第１オペランドポインタＯＰＴ１を、そのまま３段目のパイプラインレジスタＰＲ１５０のエリアＯ１に、第１オペランドポインタＯＰＴ１として格納する。
【００７７】
２段目のパイプラインレジスタＰＲ１３０のエリアＯ２にある第２オペランドポインタＯＰＴ２を、そのまま３段目のパイプラインレジスタＰＲ１５０のエリアＯ２に、第２オペランドポインタＯＰＴ２として格納する。
【００７８】
２段目のパイプラインレジスタＰＲ１３０のエリアＶ２にある第２オペランド値ＯＰＶ２を、そのまま３段目のパイプラインレジスタＰＲ１５０のエリアＶ２に、第２オペランド値ＯＰＶ２として格納する。
【００７９】
２段目のパイプラインレジスタＰＲ１３０のエリアＶ１及びエリアＶ２にある第１オペランド値ＯＰＶ１及び第２オペランド値ＯＰＶ２を、演算ユニットＣＵ１４１に入力する。
【００８０】
以下、分岐命令の場合（ジャンプ命令の場合とコール／リターン命令の場合）、転送命令の場合、演算命令及びＮＯＰ命令の場合に分けて動作説明をする。
【００８１】
（分岐命令：ジャンプ命令の場合）
第１オペランド値ＯＰＶ１を、そのまま演算結果ＣＲとして出力する。
【００８２】
第２オペランド値ＯＰＶ２の上位４ビットを、そのまま演算ステータスＳＴとして出力する。
【００８３】
演算結果ＣＲを、３段目のパイプラインレジスタＰＲ１５０のエリアＣＲに演算結果ＣＲＳＬとして格納すると共に、演算ステータスＳＴを、３段目のパイプラインレジスタＰＲ１５０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【００８４】
（分岐命令：コール／リターン命令の場合）
第２オペランド値ＯＰＶ２の下位２４ビットに、−４（コール）又は＋４（リターン）を演算し、演算結果の下位２４ビットを、演算結果ＣＲとして出力する。
【００８５】
第２オペランド値ＯＰＶ２の上位４ビットを、そのまま演算ステータスＳＴとして出力する。
【００８６】
演算結果ＣＲを、３段目のパイプラインレジスタＰＲ１５０のエリアＣＲに演算結果ＣＲＳＬとして格納すると共に、演算ステータスＳＴを、３段目のパイプラインレジスタＰＲ１５０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【００８７】
（転送命令の場合）
第１オペランド値ＯＰＶ１を、そのまま演算結果ＣＲとして出力する。
【００８８】
演算ステータスＳＴ出力は、不定で構わない。
【００８９】
演算結果ＣＲを、３段目のパイプラインレジスタＰＲ１５０のエリアＣＲに演算結果ＣＲＳＬとして格納すると共に、演算ステータスＳＴを、３段目のパイプラインレジスタＰＲ１５０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【００９０】
（演算命令の場合）
第１オペランド値ＯＰＶ１と第２オペランド値ＯＰＶ２を、命令種類ＩＴＹＰに従って演算し、その演算結果をＣＲとして出力する。
【００９１】
演算に応じて変化した演算ステータスＳＴを、出力する。
【００９２】
演算結果ＣＲを、３段目のパイプラインレジスタＰＲ１５０のエリアＣＲに演算結果ＣＲＳＬとして格納すると共に、演算ステータスＳＴを、３段目のパイプラインレジスタＰＲ１５０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【００９３】
（ＮＯＰ命令の場合）
上記転送命令と同様に動作するが、値は結局使用されない。
【００９４】
演算結果ＣＲを、３段目のパイプラインレジスタＰＲ１５０のエリアＣＲに演算結果ＣＲＳＬとして格納すると共に、演算ステータスＳＴを、３段目のパイプラインレジスタＰＲ１５０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【００９５】
上記演算部１４０では、以上詳述した動作を、動作クロックＭＣＫのサイクル毎に繰り返す。
【００９６】
図１１は、メモリアクセス部１６０（と前後の３及び４段目のパイプラインのパイプラインレジスタＰＲ１５０及び１７０）の構成の概要図である。同図において、メモリアクセス部１６０は、アドレスゲートＡＧ１６１と、条件識別器ＤＭ１６２と、セレクタＳ２（１６３）と、セレクタＳ３（１６４）と、バストランシーバＴＲ１６５とを有している。
【００９７】
３段目のパイプラインレジスタＰＲ１５０のエリアＩＴにある命令種類ＩＴＹＰを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＩＴに、命令種類ＩＴＹＰとして格納する。
【００９８】
３段目のパイプラインレジスタＰＲ１５０のエリアＯ１にある第１オペランドポインタＯＰＴ１を、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＯ１に、第１オペランドポインタＯＰＴ１として格納する。
【００９９】
３段目のパイプラインレジスタＰＲ１５０のエリアＯ２にある第２オペランドポインタＯＰＴ２を、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＯ２に、第２オペランドポインタＯＰＴ２として格納する。
【０１００】
以下、分岐命令の場合（ジャンプ命令の場合とコール／リターン命令の場合）、転送命令の場合（レジスタ間転送以外の場合とレジスタ間転送の場合）、演算命令及びＮＯＰ命令の場合に分けて動作説明をする。
【０１０１】
（分岐命令：ジャンプ命令の場合）
命令種類ＩＴＹＰにより、アドレスゲートＡＧ１６１を閉鎖して、データインターナルバス７０に接続しない。
【０１０２】
条件識別器ＤＭ１６２は命令種類ＩＴＹＰと演算ステータスＣＲＳＴを参照し、分岐する場合（無条件ジャンプの場合、又は条件付ジャンプで条件が成立している場合）に１を、分岐しない場合に０を、セレクタＳ２（１６３）に出力し、該セレクタＳ２（１６３）は条件識別器ＤＭ１６２が１の出力時に演算結果ＣＲＳＬを、１の出力時に次期命令アドレス予測値ＮＩＥＸを、セレクタＳ３（１６４）に出力するが、ジャンプ命令なので、セレクタＳ２（１６３）出力が選択されて、次期命令アドレスＮＩＡＤとして、図８の命令フェッチ部１００に出力する。
【０１０３】
３段目のパイプラインレジスタＰＲ１５０のエリアＣＲにある演算結果ＣＲＳＬを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＣＲに、演算結果ＣＲＳＬとして格納する。
【０１０４】
３段目のパイプラインレジスタＰＲ１５０のエリアＳＴにある演算ステータスＣＲＳＴを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【０１０５】
命令種類ＩＴＹＰにより、バストランシーバＴＲ１６５を閉鎖して、データインターナルバス７０に接続しない。
【０１０６】
（分岐命令：コール／リターン命令の場合）
命令種類ＩＴＹＰにより、アドレスゲートＡＧ１６１を開いて、データインターナルバス７０に、第２オペランド値ＯＰＶ２を出力する。
【０１０７】
命令種類ＩＴＹＰにより、セレクタＳ３（１６４）は、トランシーバＴＲ１６５出力が選択されて、次期命令アドレスＮＩＡＤとして図８の命令フェッチ部１００に出力する。  ３段目のパイプラインレジスタＰＲ１５０のエリアＣＲにある演算結果ＣＲＳＬを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＣＲに、演算結果ＣＲＳＬとして格納する。
【０１０８】
３段目のパイプラインレジスタＰＲ１５０のエリアＳＴにある演算ステータスＣＲＳＴを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【０１０９】
命令種類ＩＴＹＰにより、バストランシーバＴＲ１６５を読取で開き、セレクタＳ３（１６４）に出力すると共に、４段目のパイプラインレジスタＰＲ１７０のエリアＬＤに、ロードデータＬＤＡＴとして格納する。
【０１１０】
（転送命令：レジスタ間転送以外の場合）
命令種類ＩＴＹＰによりアドレスゲートＡＧ１６１を開いて、データインターナルバス７０に、演算結果ＣＲＳＬを出力する。
【０１１１】
命令種類ＩＴＹＰと条件識別器ＤＭ１６２によりセレクタＳ２（１６３）／Ｓ２（１６４）は、次期命令アドレス予測値ＮＩＥＸが選択されて、次期命令アドレスＮＩＡＤとして、図８の命令フェッチ部１００に出力する。
【０１１２】
３段目のパイプラインレジスタＰＲ１５０のエリアＣＲにある演算結果ＣＲＳＬを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＣＲに、演算結果ＣＲＳＬとして格納する。
【０１１３】
３段目のパイプラインレジスタＰＲ１５０のエリアＳＴにある演算ステータスＣＲＳＴを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【０１１４】
ロードデータ（ｌｄ）命令の場合、命令種類ＩＴＹＰにより、バストランシーバＴＲ１６５を読取で開き、４段目のパイプラインレジスタＰＲ１７０のエリアＬＤにロードデータＬＤＡＴとして格納する。ロードステータス（ｓｔ）命令の場合、命令種類ＩＴＹＰにより、バストランシーバＴＲ１６５をを書込で開き、第２オペランド値ＯＰＶ２を出力する。
【０１１５】
（転送命令：レジスタ間転送の場合）
命令種類ＩＴＹＰにより、アドレスゲートＡＧ１６１を閉鎖して、データインターナルバス７０に接続しない。
【０１１６】
命令種類ＩＴＹＰと条件識別器ＤＭ１６２によりセレクタＳ２（１６３）／Ｓ３（１６４）は、次期命令アドレス予測値ＮＩＥＸが選択されて、次期命令アドレスＮＩＡＤとして、図８の命令フェッチ部１００に出力する。
【０１１７】
３段目のパイプラインレジスタＰＲ１５０のエリアＣＲにある演算結果ＣＲＳＬを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＣＲに、演算結果ＣＲＳＬとして格納する。
【０１１８】
３段目のパイプラインレジスタＰＲ１５０のエリアＳＴにある演算ステータスＣＲＳＴを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【０１１９】
命令種類ＩＴＹＰにより、バストランシーバＴＲ１６５を閉鎖して、データインターナルバス７０に接続しない。
【０１２０】
（演算命令）
命令種類ＩＴＹＰにより、アドレスゲートＡＧ１６１を閉鎖して、データインターナルバス７０に接続しない。
【０１２１】
命令種類ＩＴＹＰにより、セレクタＳ３（１６４）は、トランシーバＴＲ１６５出力が選択されて、次期命令アドレスＮＩＡＤとして、図８の命令フェッチ部１００に出力する。
【０１２２】
３段目のパイプラインレジスタＰＲ１５０のエリアＣＲにある演算結果ＣＲＳＬを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＣＲに、演算結果ＣＲＳＬとして格納する。
【０１２３】
３段目のパイプラインレジスタＰＲ１５０のエリアＳＴにある演算ステータスＣＲＳＴを、そのまま４段目のパイプラインレジスタＰＲ１７０のエリアＳＴに、演算ステータスＣＲＳＴとして格納する。
【０１２４】
命令種類ＩＴＹＰにより、バストランシーバＴＲ１６５を閉鎖して、データインターナルバス７０に接続しない。
【０１２５】
（ＮＯＰ命令）
上記演算命令と同様に動作するが、値は結局使用されない。
【０１２６】
上記メモリアクセス部１６０では、以上詳述した動作を、動作クロックＭＣＫのサイクル毎に繰り返す。
【０１２７】
図１２は、ライトバック部１８０（と前の４段目のパイプラインのパイプラインレジスタＰＲ１７０）の構成の概要図である。同図において、ライトバック部１８０は、セレクタＳ４（１８１）及びセレクタＳ５（１８２）を有している。
【０１２８】
ここで、レジスタファイル１９２へのアクセスは、動作クロックＭＣＫの後半サイクルに行うので、命令デコード部１００のアクセスとはぶつからない。
【０１２９】
以下、分岐命令の場合（ジャンプ命令の場合とコール／リターン命令の場合）、転送命令の場合［ロードデータ（ｌｄ）命令でレジスタ間転送以外の場合とロードデータ（ｌｄ）命令でレジスタ間転送の場合、及びロードステータス（ｓｔ）命令の転送命令の場合］、演算命令及びＮＯＰ命令の場合に分けて、ライトバック部１８０の動作説明をする。
【０１３０】
（分岐命令：ジャンプ命令の場合）
セレクタＳ４１８１は、レジスタファイル１９２に第１オペランドポインタＯＰＴ１／第２オペランドポインタＯＰＴ２のいずれの信号も送らず、レジスタファイル１９２のどのレジスタも選択しない。
【０１３１】
セレクタＳ５１８２は、レジストデータとして、演算結果ＣＲＳＬとロードデータＬＤＡＴのいずれを選択していても構わないが、ポインタ信号が送出されていないので、何も書き込まれない。
【０１３２】
ステータス（図７のレジスタｒｆの上位４ビット）は書き換わらない。
【０１３３】
分岐命令（コール／リターン命令）の場合
セレクタＳ４（１８１）は、レジスタファイル１９２にポインタ信号として、第１オペランドポインタＯＰＴ１（レジスタｒｆ＝スタックポインタをポイントしている）を送出する。
【０１３４】
セレクタＳ５（１８２）は、レジストデータとして、演算結果ＣＲＳＬを選択し、レジスタファイル１９２に書込データとして送出する。
【０１３５】
ステータス（図７のレジスタｒｆの上位４ビット）は書き換わらない。
【０１３６】
転送命令［ロードデータ（ｌｄ）命令でレジスタ間転送以外］の場合
セレクタＳ４（１８１）は、レジスタファイル１９２にポインタ信号として、第２オペランドポインタＯＰＴ２を送出する。
【０１３７】
セレクタＳ５（１８２）は、レジストデータとして、ロードデータＬＤＡＴを選択し、レジスタファイル１９２に書込データとして送出する。
【０１３８】
ステータス（図７のレジスタｒｆの上位４ビット）は書き換わらない。
【０１３９】
転送命令［ロードデータ（ｌｄ）命令でレジスタ間転送］の場合
セレクタＳ４（１８１）は、レジスタファイル１９２にポインタ信号として、第２オペランドポインタＯＰＴ２を送出する。
【０１４０】
セレクタＳ５（１８２）は、レジストデータとして、演算結果ＣＲＳＬを選択し、レジスタファイル１９２に書込データとして送出する。
【０１４１】
ステータス（図７のレジスタｒｆの上位４ビット）は書き換わらない。
【０１４２】
転送命令［ロードステータス（ｓｔ）命令］の場合
セレクタＳ４（１８１）は、レジスタファイル１９２に第１オペランドポインタＯＰＴ１／第２オペランドポインタＯＰＴ２のいずれの信号も送らず、レジスタファイル１９２のどのレジスタも選択しない。
【０１４３】
セレクタＳ５（１８２）は、レジストデータとして、演算結果ＣＲＳＬとロードデータＬＤＡＴのいずれを選択していても構わないが、ポインタ信号が送出されていないので、何も書き込まれない。
【０１４４】
ステータス（図７のレジスタｒｆの上位４ビット）は書き換わらない。
【０１４５】
（演算命令の場合）
セレクタＳ４（１８１）は、レジスタファイル１９２にポインタ信号として、第２オペランドポインタＯＰＴ２を送出する。
【０１４６】
セレクタＳ５（１８２）は、レジストデータとして演算結果ＣＲＳＬを選択し、レジスタファイル１９２に書込データとして送出する。
【０１４７】
ステータス（図７のレジスタｒｆの上位４ビット）のうち、演算によって変化のあったビットを、演算ステータスＣＲＳＴに応じて書換える。
【０１４８】
（ＮＯＰ命令の場合）
セレクタＳ４（１８１）は、レジスタファイル１９２に第１オペランドポインタＯＰＴ１／第２オペランドポインタＯＰＴ２のいずれの信号も送らず、レジスタファイル１９２のどのレジスタも選択しない。
【０１４９】
セレクタＳ５（１８２）は、レジストデータとして演算結果ＣＲＳＬとロードデータＬＤＡＴのいずれを選択していても構わないが、ポインタ信号が送出されていないので、何も書き込まれない。
【０１５０】
ステータス（図７のレジスタｒｆの上位４ビット）は書き換わらない。
【０１５１】
上記ライトバック部１８０では、以上詳述した動作を、動作クロックＭＣＫのサイクル毎に繰り返す。
【０１５２】
図１３は、ターゲットシステムたる電子鍵盤楽器におけるＣＰＵ１０で、ターゲットプログラムが実行された場合の、該プログラムの処理フローが実行された際のメインフローを示すフローチャートである。
【０１５３】
まず、電子鍵盤楽器全体の初期化が実行される（ステップＳ３００）。そして電子鍵盤楽器としての何かイベントがあるか（例えば押鍵イベント、パネルイベント、ＭＩＤＩイベントなど）否かがチェックされる（ステップＳ３０２）。
【０１５４】
そのようなイベントがなければ（ステップＳ３０２；Ｎ）、後述するステップＳ３０６に移行する。逆にイベントがあれば（ステップＳ３０２；Ｙ）、図１４に示すイベント処理が行われる（ステップＳ３０４）。
【０１５５】
その後図１５に示す非イベント処理がなされる（ステップＳ３０６）。
【０１５６】
図１４は、上記図１３におけるステップＳ３０４のイベント処理の処理フローを示すフローチャートである。
【０１５７】
まず、押鍵イベントがあるか否かがチェックされ（ステップＳ４００）、押鍵イベントがあれば（ステップＳ４００；Ｙ）、押鍵処理が実行される（ステップＳ４０２）。
【０１５８】
押鍵イベントがなければ（ステップＳ４００；Ｎ）、パネルイベントがあるか否かがチェックされ（ステップＳ４０４）、パネルイベントがあれば（ステップＳ４０４；Ｙ）、パネル処理が実行される（ステップＳ４０６）。
【０１５９】
パネルイベントがなければ（ステップＳ４０４；Ｎ）、ＭＩＤＩイベントがあるか否かがチェックされ（ステップＳ４０８）、ＭＩＤＩイベントがあれば（ステップＳ４０８；Ｙ）、ＭＩＤＩイベント処理が実行される（ステップＳ４１０）。
【０１６０】
ＭＩＤＩイベントがなければ（ステップＳ４１０；Ｎ）、その他のイベント処理がなされる（ステップＳ４１２）。その後メインフローに復帰する。
【０１６１】
図１５は、上記図１３におけるステップＳ３０６の非イベント処理の処理フローを示すフローチャートである。
【０１６２】
まず経過時間の取得処理がなされる（ステップＳ５００）。これは後述するインターバルタイマのＴをリセットして、後述する発信器ＬＦＯのＵｐＤａｔｅを歩進を進めるため経過時間が分かる必要があるからである。
【０１６３】
次にエンベロープＥＶフェーズ処理がなされる（ステップＳ５０２）。これはＣＰＵ１０から音源２０にエンベロープのフェーズが到達したことを知らせ、次のフェーズに進むために必要であるからである。
【０１６４】
さらに発信器ＬＦＯの歩進、すなわちＬＦＯのＵｐＤａｔｅ処理が実行される（ステップＳ５０４）。すなわち、ＬＦＯモジュールの値を更新する処理がなされる。
【０１６５】
そうして自動演奏処理がなされる（ステップＳ５０６）。この処理後再び図１３のステップＳ３０２に復帰する。
【０１６６】
図１６は、インターバルタイマ割り込み処理の処理フローを示すフローチャートである。これは、単に時間Ｔをインクリメントする（ステップＳ６００）だけである。
【０１６７】
図１７は、ＭＩＤＩやＵＳＢなどのシリアルインターフェースからの受信割り込み処理の処理フローを示すフローチャートである。
【０１６８】
これらのシリアルの受信ＲＣ割込は、先ずバッファへ格納される（ステップＳ７００）。そして、コマンドが完成したか否かがチェックされる（ステップＳ７０２）。コマンドが完成していなければ（ステップＳ７０２；Ｎ）、この処理フローは終了する。
【０１６９】
反対にコマンドが完成していれば（ステップＳ７０２；Ｙ）、イベントの発生処理がなされ（ステップＳ７０４）、その後上記バッファのクリア処理がなされる（ステップＳ７０６）。
【０１７０】
図１８は、ＣＰＵ１０と音源２０及びインターナルバス・エクスターナルバスの動作タイミングを示すタイミングチャートである。
【０１７１】
動作クロックＭＣＫを反転させて反転動作クロックＸＭＣＫを作り、また動作クロックＭＣＫを２分周してＣＫ１を作る。該ＣＫ１は、エクスターナルバスの使用状況を表すことになる。すなわちＣＫ１が真の時音源２０が、偽の時ＣＰＵ１０がエクスターナルバスへアクセスできる状態になることを示している。
【０１７２】
このＣＫ１と動作クロックＭＣＫにより、音源クロックＣＫＴＧが作成される。該音源クロックＣＫＴＧがダウンエッヂから音源２０が作動する。
【０１７３】
またＣＰＵ１０のＩ／Ｅは、ＣＰＵ１０がインターナルバス或いはエクスターナルバスのいずれでもアクセスすることを示し、同ＩＮＴ．はインターナルバスへアクセスすることを示す。他方音源２０の（ＮＣ）はＮｏｔＣｏｎｎｅｃｔで接続されないことを示し、ＡＣＴＶは音源２０から楽音波形が出力されることを示す。
【０１７４】
同図に示すように、ＣＫ１が偽であるとき、ＣＰＵ１０は、インターナルバス或いはエクスターナルバスのいずれでもアクセスするが、ＣＫ１が真であるとき、インターナルバスのみにアクセスする。一方、ＣＫ１が真であり、且つ音源クロックＣＫＴＧダウンエッヂの時に、音源２０は、アクティブになり、ＣＫ１が偽に変わるまでアクティブのままになる。ＣＫ１が偽になると同時に、音源２０は楽音波形の読み出しを止める。
【０１７５】
図１９は、上記ＣＰＵ１０がパイプライン処理を行った際の種々の動作タイミングを示すタイミングチャートである。
【０１７６】
このタイミングチャートでは、システムサイクル（図では０〜８が示されている）中に以下のような動作タイミングとなる。尚、動作クロックＭＣＫ、ＣＫ１、ＣＰＵ１０及び音源２０の動作タイミングは、図１８の場合と同じになるので、ここではその説明を省略する。
【０１７７】
システムサイクル０の時、１段目のパイプラインには、その命令フェッチ部１００に、上記プログラムフラッシュメモリ６４から、命令ＩＣ−０がフェッチ（ＩＦ）される。
【０１７８】
システムサイクル１の時、２段目のパイプラインには、その命令デコード部１２０で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ（ＲＦ）がなされる。同時に、１段目のパイプラインでは、命令フェッチ部１００に、上記プログラムフラッシュメモリ６４から、命令ＩＣ−１がフェッチ（ＩＦ）される。
【０１７９】
システムサイクル２の時、３段目のパイプラインでは、その演算部１４０で、命令実行（ＥＸ）がなされ、２段目のパイプラインでは、その命令デコード部１２０で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ（ＲＦ）がなされる。同時に、１段目のパイプラインでは、命令フェッチ部１００に、上記プログラムフラッシュメモリ６４から、命令ＩＣ−２がフェッチ（ＩＦ）される。
【０１８０】
システムサイクル３の時、４段目のパイプラインでは、そのメモリアクセス部１７０でデータインターナルバス７０へのメモリアクセス（ＭＡ）がなされ、３段目のパイプラインでは、その演算部１４０で、命令実行（ＥＸ）がなされる。２段目のパイプラインでは、その命令デコード部１２０で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ（ＲＦ）がなされる。同時に、１段目のパイプラインでは、命令フェッチ部１００に、上記プログラムフラッシュメモリ６４から、命令ＩＣ−３がフェッチ（ＩＦ）される。
【０１８１】
システムサイクル４の時、５段目のパイプラインでは、そのライトバック部１８０でレジスタファイル１９２へのライトバック処理（ＷＢ）がなされ、命令ＩＣ−０の処理が終了する。また４段目のパイプラインでは、そのメモリアクセス部１７０でデータインターナルバス７０へのメモリアクセス（ＭＡ）がなされ、３段目のパイプラインでは、その演算部１４０で、命令実行（ＥＸ）がなされる。２段目のパイプラインでは、その命令デコード部１２０で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ（ＲＦ）がなされる。同時に、１段目のパイプラインでは、命令フェッチ部１００に、上記プログラムフラッシュメモリ６４から、命令ＩＣ−４がフェッチ（ＩＦ）される。
【０１８２】
システムサイクル５の時、５段目のパイプラインでは、そのライトバック部１８０でレジスタファイル１９２へのライトバック処理（ＷＢ）がなされ、命令ＩＣ−１の処理が終了する。また４段目のパイプラインでは、そのメモリアクセス部１７０でデータインターナルバス７０又はエクスターナルバス４０へのメモリアクセス（ＭＡ）がなされ、３段目のパイプラインでは、その演算部１４０で、命令実行（ＥＸ）がなされる。２段目のパイプラインでは、その命令デコード部１２０で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ（ＲＦ）がなされる。同時に、１段目のパイプラインでは、命令フェッチ部１００に、上記プログラムフラッシュメモリ６４から、命令ＩＣ−５（記載せず）がフェッチ（ＩＦ）される。以下順次命令が実行される。
【０１８３】
同図の一番下段に示したタイミングチャートが示しているものは、ＣＰＵ１０の命令が、エクスターナルバス４０の使用をするか否かを示しており、システムサイクル０〜２までは、エクスターナルバス４０を使用をしておらず、ハイインピーダンスになって状態が不定となっている。その後システムサイクル３から以降は、ＣＰＵ１０の命令が、エクスターナルバス４０及びデータインターナルバス７０を交互に使用している。但し、エクスターナルバス４０を使用するタイミングでデータインターナルバス７０を使用するのは許可される。このため、このような動作をするアドレスと命令の組み合わせをコンパイラは別段排除しない。
【０１８４】
以上詳述した本実施例構成によれば、本発明のクロスコンパイラで生成されたオブジェクトプログラムが、ＣＰＵ１０のエクスターナルバス４０アクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでＣＰＵ１０のエクスターナルバス４０使用を休止する命令が出力されるため、ＣＰＵ１０がエクスターナルバス４０を使用しない命令が実行される場合にあっては、音源２０がエクスターナルバス４０を使用する間は、そのＣＰＵ１０は待つことなくその命令をそのまま実行でき、結果的に該ＣＰＵ１０の実行速度を上げることができるようになるという優れた効果を奏し得る。
【０１８５】
すなわち、第１検出部１の検出した、ＣＰＵ１０がエクスターナルバス４０を使用する命令が、上記音源２０がエクスターナルバス４０を使用するべきタイミングに実行されることを、上記第２検出部２により検出した場合に、該命令の前に前記ＣＰＵ１０に対して、ＣＰＵ１０がエクスターナルバス４０を使用して実行する命令の次の命令に交換可能か否かが、判定部３により判定され、その判定結果において、次の命令に交換可能であれば、オペレーション部４によってその命令に交換され、逆に次の命令に交換可能でなければ、該オペレーション部４によって、エクスターナルバス４０を該ＣＰＵ１０が次に使用するタイミングまで休止する命令が挿入されるようになるため（コンパイラで生成されたオブジェクトプログラムが、ＣＰＵ１０のエクスターナルバス４０アクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでＣＰＵ１０のエクスターナルバス４０使用を休止する命令が出力されるため）、ＣＰＵ１０がエクスターナルバス４０を使用しない命令が実行される場合にあっては、音源２０がエクスターナルバス４０を使用する間に、そのＣＰＵ１０は待つことなくその命令をそのまま実行でき、結果的に該ＣＰＵ１０の実行速度を上げることができるようになる。
【０１８６】
尚、本発明のコンパイラは、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【０１８７】
本発明のクロスコンパイラは、電子楽器に広く適用できることは言うまでもない。
【図面の簡単な説明】
【０１８８】
【図１】電子鍵盤楽器という別のターゲットシステム環境で動作することを目的に、オブジェクトプログラムを生成するクロスコンパイラが用いられるプログラム開発環境を示すワークステーションの機能ブロック図である。
【図２】クロスコンパイラの処理フローを示すフローチャートである。
【図３】電子鍵盤楽器で動作することを目的とするオブジェクトプログラムの開発作業手順を示すフローチャートである。
【図４】電子鍵盤楽器の構成概要ブロック図である。
【図５】ターゲットプログラムがＣＰＵ１０によって実行された際に、該ＣＰＵ１０上に形成されることになる構成の機能ブロック図である。
【図６】電子鍵盤楽器のＣＰＵ１０の内部構成を示す機能ブロック図である。
【図７】ＣＰＵ１０のレジスタファイル１９２のレジスタ構成を示す説明図である。
【図８】ＣＰＵ１０内部構成の命令フェッチ部１００の構成の概要図である。
【図９】命令デコード部１２０の構成の概要図である。
【図１０】演算部１４０の構成の概要図である。
【図１１】メモリアクセス部１６０の構成の概要図である。
【図１２】ライトバック部１８０の構成の概要図である。
【図１３】電子鍵盤楽器におけるＣＰＵ１０で、ターゲットプログラムが実行された場合の、該プログラムの処理フローが実行された際のメインフローを示すフローチャートである。
【図１４】図１３におけるステップＳ３０４のイベント処理の処理フローを示すフローチャートである。
【図１５】図１３におけるステップＳ３０６の非イベント処理の処理フローを示すフローチャートである。
【図１６】インターバルタイマ割り込み処理の処理フローを示すフローチャートである。
【図１７】シリアルインターフェースからの受信割り込み処理の処理フローを示すフローチャートである。
【図１８】ＣＰＵ１０と音源２０及びインターナルバス・エクスターナルバスの動作タイミングを示すタイミングチャートである。
【図１９】ＣＰＵ１０がパイプライン処理を行った際の種々の動作タイミングを示すタイミングチャートである。
【符号の説明】
【０１８９】
１      第１検出部
２      第２検出部
３      判定部
４      オペレーション部
１０      ＣＰＵ
２０      音源
２２      ＤＳＰ
２２ａ    ＤＳＰメモリ
２２ｂ    ＤＳＰバス
２４      ＤＡＣ
２６      アンプ
２８      スピーカ
３０      バスコントローラ
４０      エクスターナルバス
５０      データＲＯＭ／ＲＡＭ
５２      波形データメモリ
６０      命令インターナルバス
６２      メモリコントローラ
６４      フラッシュメモリ
６６      インターフェース
７０      データインターナルバス
７２      インターフェース
１００      命令フェッチ部
１０２      命令ポインタＩＰ
１０４      加算器
１１０、１３０、１５０、１７０  パイプラインレジスタ
１２０      命令デコード部
１２１      命令分離器ＩＤ
１２２      オペランド分離器ＯＤ
１２３      一時記憶レジスタＸ１
１２４      一時記憶レジスタＸ２
１２５      セレクタＳ１
１４０      演算部
１４１      演算ユニットＣＵ
１６０      メモリアクセス部
１６１      アドレスゲートＡＧ
１６２      条件識別器ＤＭ
１６３      セレクタＳ２
１６４      セレクタＳ３
１６５      バストランシーバＴＲ
１８０      ライトバック部
１８１      セレクタＳ４
１８２      セレクタＳ５
１９０      クロック生成部
１９２      レジスタファイル
１０００      システムバス
１００２      Ｉ／Ｏバス
１００４      ＣＰＵブロック
１００６      ＤＭＡ
１００８      インターフェース
１０１０      メモリブロック
１０１２      ディスクＩ／Ｏユニット
１０１４      ハードディスクドライブ
１０１６      ＧＰＵ
１０１８      ビデオモニタ
【図１】
0005457104.tif 000002
【図２】
0005457104.tif 000003
【図３】
0005457104.tif 000004
【図４】
0005457104.tif 000005
【図５】
0005457104.tif 000006
【図６】
0005457104.tif 000007
【図７】
0005457104.tif 000008
【図８】
0005457104.tif 000009
【図９】
0005457104.tif 000010
【図１０】
0005457104.tif 000011
【図１１】
0005457104.tif 000012
【図１２】
0005457104.tif 000013
【図１３】
0005457104.tif 000014
【図１４】
0005457104.tif 000015
【図１５】
0005457104.tif 000016
【図１６】
0005457104.tif 000017
【図１７】
0005457104.tif 000018
【図１８】
0005457104.tif 000019
【図１９】
0005457104.tif 000020