説明

クロスコンパイラ

【課題】 CPUと音源がバスを共有する環境下で動作し、その環境下に含まれるCPUの実行速度を上げることができるクロスコンパイラを提供する。
【解決手段】 コンパイラで生成されたオブジェクトプログラムが、CPU10のエクスターナルバス40アクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでCPU10のエクスターナルバス40使用を休止する命令が出力される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、特定のターゲットシステム環境で動作することを目的とするオブジェクトプログラムを生成するクロスコンパイラに関する。
【背景技術】
【0002】
従来、記憶手段に記憶された波形データをアクセスする音源と、該記憶手段に記憶されたプログラム/データをアクセスするCPUとが共有し、且つ時分割交互に使用される共有バスを備えた電子学音発生器では、上記CPUのプログラム開発は、プログラム言語を単純に機械語命令に変換するように実施されていた。
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかし、上記のようなプログラム開発がなされると、音源とCPUのアクセスタイミングを、プログラム実行時に分離する必要が生じ、該CPUがバスを使用しない命令が実行される場合でも、音源がバスを使用する間は、そのCPUの実行を待たねばならなくなるという問題があり、処理スピードが落ちる問題を生じていた。特にパイプライン処理が実行される場合は、その問題が顕著に反映される。
【0004】
本発明は、以上のような問題に鑑み創案されたもので、上記電子学音発生器環境で動作することを目的とするオブジェクトプログラムを生成するクロスコンパイラであって、上記環境下で動作し、そこに含まれるCPUの実行速度を上げることができる、クロスコンパイラを提供せんとするものである。
【課題を解決するための手段】
【0005】
本発明の構成は、
少なくともプログラム及びデータを記憶する記憶手段と、該記憶手段に記憶された波形データをアクセスする音源と、該記憶手段に記憶されたプログラム及びデータをアクセスするCPUと、上記記憶手段が繋げられた共有バスと、該共有バスに対し上記音源とCPUが時分割交互にアクセスさせる制御を行うバスコントローラとを備えたターゲットシステム環境で動作することを目的とするオブジェクトプログラムを生成するクロスコンパイラであって、
前記CPUが共有バスを使用する命令を検出する第1の検出手段と、
該第1の検出手段が検出した命令が実行されるタイミングが、前記共有バスをCPUが使用するべきタイミングであるかどうかを検出する第2の検出手段と、
前記第1の検出手段の検出した、CPUが共有バスを使用する命令が、前記音源が共有バスを使用するべきタイミングに実行されることを、前記第2の検出手段により検出した場合に、該命令の前に前記CPUに対して、CPUが共有バスを使用して実行する命令の次の命令に交換可能か否かを判定する判定手段と、
その判定結果に基づき、次の命令に交換可能であれば、その命令に交換し、逆に次の命令に交換可能でなければ、共有バスを該CPUが次に使用するタイミングまで休止する命令を挿入するオペレーション手段とを備え、
上記共有バスを上記音源が使用するタイミングに、上記CPUが共有バス以外をアクセスするように動作するオブジェクトプログラムを生成することを基本的特徴としている。
【0006】
上記構成によれば、前記第1の検出手段の検出した、CPUが共有バスを使用する命令が、前記音源が共有バスを使用するべきタイミングに実行されることを、前記第2の検出手段により検出した場合に、該命令の前に前記CPUに対して、CPUが共有バスを使用して実行する命令の次の命令に交換可能か否かが、判定手段により判定され、その判定結果において、次の命令に交換可能であれば、オペレーション手段によってその命令に交換され、逆に次の命令に交換可能でなければ、該オペレーション手段によって共有バスを該CPUが次に使用するタイミングまで休止する命令が挿入されるようになるため(コンパイラで生成されたオブジェクトプログラムが、CPUの共有バスアクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでCPUのバス使用を休止する命令が出力されるため)、CPUがバスを使用しない命令が実行される場合にあっては、音源がバスを使用する間に、そのCPUは待つことなくその命令をそのまま実行でき、結果的に該CPUの実行速度を上げることができるようになる。
【発明の効果】
【0007】
以上のような本発明の構成によれば、コンパイラで生成されたオブジェクトプログラムが、CPUの共有バスアクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでCPUのバス使用を休止する命令が出力されるため、CPUがバスを使用しない命令が実行される場合にあっては、音源がバスを使用する間は、そのCPUは待つことなくその命令をそのまま実行でき、結果的に該CPUの実行速度を上げることができるようになるという優れた効果を奏し得る。
【発明を実施するための最良の形態】
【0008】
以下、本発明の実施の形態を、図1〜図19の図面を用いて説明する。
【実施例】
【0009】
本実施例のクロスコンパイラは、電子鍵盤楽器という別のターゲットシステム環境で動作することを目的に、図1のようなプログラム開発環境で開発される、オブジェクトプログラムを生成するクロスコンパイラである。
【0010】
まず、図1は、本発明のコンパイラを作成する別システムのワークステーションの機能ブロック図を示している。
【0011】
本ワークステーションは、システムバス1000を介して、CPUブロック1004、ダイレクトメモリアクセスコントローラ1006、外部機器との接続を行うインターフェース1008、メモリブロック1010、ディスクI/Oユニット1012、ハードディスクドライブ1014が接続されており、また、上記インターフェース1008を介してI/Oバス1002にもつながっている。該I/Oバス1002は、さらにGPU1016の他、タイピングキーボードやマウス、外部デバイスにも接続されている。該GPU1016は、外部ディスプレイに当たるビデオモニタ1018の画面制御を行う。
【0012】
ここでは、後述する電子鍵盤楽器で構成されるターゲットシステムのCPU10上に、後に述べる各機能部で構築される構成が生成されることになる、本クロスコンパイラにより生成されるオブジェクトプログラムの開発環境が提供されることになる。
【0013】
図2は、上記コンパイラの処理フローを示すフローチャートである。まず、全ソースコードにわたって前処理がなされる(ステップS100)。前処理とは、実際のコンパイルに先立って行われる処理であり、例えばマクロを通常の命令に展開する、等のことをいう。
【0014】
そして全てのジャンプ命令(分岐)やサブルーチン呼出し命令などのラベルの抽出処理がなされる(ステップS102)。
【0015】
これらの命令のコード化処理が行われ(ステップS104)、命令カウンタiを0とし(ステップS106)、以後ステップS122まで1命令ずつ処理が実行される。
【0016】
すなわち、CPU40が処理すべきi(0から全命令数−1までの順に)番目の命令が取得され(ステップS108)、それが後述する図5の第1検出部1により、同じく図4のエクスターナルバス40アクセスを要求しているか否かがチェックされる(ステップS110)。該命令がエクスターナルバス40アクセス要求をしていない場合(ステップS110;N)、後述するステップS120に移行する。
【0017】
反対にその命令がエクスターナルバス40アクセス要求をしていることが、第1検出部1により検出された場合(ステップS110;Y)、そのアドレスは8の倍数[8n(n=0、1、…)]か否かが、同じく後述する第2検出部2によって、チェックされる(ステップS112)。これは、CPU10は全体として1クロックで1命令を実行するが、8の倍数アドレスに置かれた命令が偶数クロックでCPU10にフェッチされ、その3クロック後(即ち奇数クロック)に、必要ならエクスターナルバス40をアクセスしようとするからであり、一方で該音源20は奇数クロックに、エクスターナルバス40をアクセスするからである。この2つのチェックによって、CPU10がアクセス違反しているか否かのチェックが行われているわけである。
【0018】
8の倍数でない(命令長は4バイト固定長であるので、即ち8の倍数+4の)アドレスの場合(ステップS112;N)、後述するステップS120に移行する。
【0019】
反対に8の倍数のアドレスの場合(ステップS112;Y)、同じく後述する判定部3によって、次に続く命令と交換可能か否かがチェックされる(ステップS114)。
【0020】
次に続く命令と交換可能な場合(ステップS114;Y)、同じく後述するオペレーション部4によって、命令が交換される(ステップS116)。反対に次に続く命令と交換ができない場合(ステップS114;N)、後述するオペレーション部4によって、NOP命令(休止命令)がそのタイミングに挿入される(ステップS118)。
【0021】
いずれのステップS116又はS118の後も、命令カウンタiをインクリースする(ステップS120)。
【0022】
命令カウンタiが全コード数に達したか否かがチェックされ(ステップS122)、達していない場合(ステップS122;N)は、前記ステップS106に復帰し、全ソースコードにわたって、以上の処理を繰り返す。
【0023】
命令カウンタiが全コード数に達した場合(ステップS122;Y)、ラベル位置補正が行われる(ステップS124)。すなわち、該ラベル位置補正では、全てのジャンプ(分岐)命令及びサブルーチン呼出し命令の飛び先に当たるラベル(アドレス)を8の倍数に、飛び元にある命令のアドレスを8の倍数+4にする処理が行われることになる。飛び元にある命令のアドレスが8の倍数である場合はNOPを挿入して8の倍数+4になる様にする。この結果、コンパイラはターゲットに接続しないでも、全ての命令をアクセス違反が無いように配置することができるようになる。
【0024】
以上でコンパイラの処理フローが終了する。
【0025】
図3は、上記ワークステーションを使用しながら、そこでクロスコンパイラを用いることで、ターゲットシステム環境である電子鍵盤楽器で動作することを目的とするオブジェクトプログラムの開発作業手順を示すフローチャートである。
【0026】
まず、ワークステーションに備えられたエディタを起動して、上記図2で示したフローのソースコードが作成される(ステップS200)。又は、ステップS200では、既存のソースコードを修正してもいい。また同じくワークステーションに備えられたコンパイラを起動して、該コンパイラにより、作成されたソースコードがマシン語のターゲットプログラムに変換される(ステップS202)。
【0027】
そして該プログラムにエラーがあるか否かがチェックされ(ステップS204)、エラーがあれば(ステップS204;Y)、上記ステップS200に復帰し、ソースコードの修正がなされる。
【0028】
反対にエラーがなければ(ステップS204;N)、ワークステーションのI/Oバス1002につながっている外部デバイス端子から、インターフェース1008及び後述する図4に示すターゲットシステムである電子鍵盤楽器に対して、同じくインターフェース66を通じて、作成されたターゲットプログラムが転送される(ステップS206)。上記電子鍵盤楽器で動作確認が行われ(ステップS208)、異常があるか無いかがチェックされる(ステップS210)。異常があれば(ステップS210;N)、上記ステップS200に復帰し、以上の処理を繰り返す。反対に異常がなければ(ステップS210;Y)、両インターフェース1008と66の接続を切り、ワークステーションをターゲットシステムの電子鍵盤楽器から切り離し、該電子鍵盤楽器を完成させる。
【0029】
図4は、上記ターゲットシステムの電子鍵盤楽器の構成概要ブロック図である。該電子鍵盤楽器は、1つのLSI中に組み込まれたデータインターナルバス70を介して、CPU10(データの出入はこのバスを介して行われる)と、音源(ToneGenerator)20と、バスコントローラ30とがつながっており、さらに、命令インターナルバス60を介して、上記CPU10(命令の出入はこのバスを介して行われる)と、メモリコントローラ62とがつながっている。該メモリコントローラ62は、プログラムを記憶したフラッシュメモリ64に繋げられており、さらに、該フラッシュメモリ64は、上述のようにしてインターフェース66及びメモリコントローラ62を介してターゲットプログラムが記憶されている。上記CPU10は、電源ONと同時に、指示を出し、命令インターナルバス60及びメモリコントローラ62を介して、フラッシュメモリ64から、そこに記憶されたターゲットプログラムを読み出し、以後該ターゲットプログラムに従って、CPU10の処理がなされることになる。
【0030】
このCPU10は、例えば24bitsのアドレス空間及び32bitsのデータバス幅を有しており、後述するように、5段のパイプライン処理が行われるRISC型CPUである。また上記メモリコントローラ62は、ターゲットシステムである電子鍵盤楽器からターゲットプログラムを転送する間、フラッシュメモリ64を上記ワークステーションに接続し、転送終了後はフラッシュメモリ64を、上記CPU10に接続する。
【0031】
他方、CPU10と音源20とは、バスコントローラ30を介して、上記LSIの外部にあるエクスターナルバス40につながっており、そのバスに繋げられている、データを記憶しているROM(ここでは音色データや様々なデータや係数などのテーブルが記憶されている)及びRAM(CPU10の演算結果が書き込まれる)50と、波形データを記憶しているメモリ52との間で、CPU10はプログラムやデータを、また音源20は、波形データを、時分割交互にアクセスする構成となっている。そのためこのエクスターナルバス40は、上記CPU10と音源20との共有バスとなっている。
【0032】
波形データの読み出しを行った音源20は、そこで楽音波形を生成し、上記のデータインターナルバス70につながったDSP22で主にディレイを中心とした音響効果が付加されて、LSI外部の後述する音響システムに出力される。該DSP22は、CPU10からの指示と、係数の出力により、音源20からの楽音波形に種々の音響効果を付加するが、ディレイ効果を付す場合は、LSI外部にあるDSPバス22bを介してつながっているディレイメモリ22aを使用しながら、該音響効果を楽音波形に付加することになる。
【0033】
該DSP22から出力された楽音波形は、デジタルアナログコンバータ(DAC)24でアナログ信号に変換され、アンプ26で増幅されて、スピーカ28を介して外部に放音することになる。
【0034】
さらに、LSIのデータインターナルバス70には、インターフェース72を介して、外部から例えばMIDIなどの演奏情報が取り込まれることになる。
【0035】
上述のように、ターゲットシステムである電子鍵盤楽器では、各種データ(計算結果を含む)を記憶する記憶手段たるROM/RAM50及び波形データメモリ52と、該波形データメモリ52に記憶された波形データをアクセスする音源20と、該ROM/RAM50に記憶されたデータをアクセスするCPU10と、上記記憶手段が繋げられた共有バスたるエクスターナルバス40と、該エクスターナルバス40に対し上記音源20とCPU10が時分割交互にアクセスさせる制御を行うバスコントローラ30とが備えられている。
【0036】
図5は、上記フラッシュメモリ64から読み出されたターゲットプログラムがCPU10によって実行された際に、該CPU10上に形成されることになる構成の機能ブロック図である。
【0037】
該図面に示すように、ターゲットシステム環境である電子鍵盤楽器で動作することを目的として、上記ワークステーションにおいて、そこで使用されるクロスコンパイラによって、ソースプログラムが変換されて生成されるオブジェクトプログラムが、CPU10に読み出されて実行されることで、該CPU10が、全ての命令を入力してそのうちエクスターナルバス40を使用する命令を検出する第1検出部1(命令コードで検出が可能)と、該第1検出部1が検出した命令が実行されるタイミングが、該エクスターナルバス40をCPU10が使用するべきタイミングである(CPU10のバスアクセスタイミングが上述のステップS112のように奇数クロック)かどうかを検出する第2検出部2と、第1検出部1の検出した、CPU10がエクスターナルバス40を使用する命令が、前記音源20がエクスターナルバス40を使用するべきタイミング(音源20は奇数クロックの際にエクスターナルバス40をアクセスする)に実行されることを、第2検出部2により検出した場合に、該命令の前にCPU10に対して、CPU10がエクスターナルバス40を使用して実行する命令の次の命令に交換可能か否かを判定する判定部3と、その判定結果に基づき、次の命令に交換可能であれば、その命令に交換し、逆に次の命令に交換可能でなければ、エクスターナルバス40を該CPU10が次に使用するタイミングまで休止する命令を挿入するオペレーション部4とを上記電子鍵盤楽器のCPU10上に構築することになる。
【0038】
上述のように、CPU10と音源20とは、バスコントローラ30を介して、上記LSIの外部にあるエクスターナルバス40につながっており、そのバスに繋げられている、データを記憶しているROM及びRAM50と、波形データを記憶しているメモリ52との間で、CPU10は上記データなどを、また音源20は、波形データを、時分割交互にアクセスする(上述のように、CPU10は本来奇数アドレスタイミングの際にエクスターナルバス40をアクセスし、音源20は偶数アドレスタイミングの際にエクスターナルバス40をアクセスする)構成となっており、そのためこのエクスターナルバス40は、上記CPU10と音源20との共有バスとなっている。
【0039】
音源20がエクスターナルバス40を使用するべきタイミングは、上述のように、奇数クロックの時であり、図2のフローチャートのステップS110〜ステップS118に示すと同様に、もしその際に、第1検出部1によって、CPU10がエクスターナルバス40を使用する命令が検出された場合、第2検出部2により、そのバスアクセスタイミングが奇数クロックか否か、即ち命令アドレスが8の倍数か否かが検出される。バスアクセスタイミングが奇数クロックの場合は、判定部3により、CPU10がエクスターナルバス40を使用しないで実行する命令の次の命令に交換可能か否かが判定される。そして、次の命令がエクスターナルバス40を使用せず、交換可能であれば、オペレーション部4により、次の命令に交換されてCPU10上でその命令の実行が行われる。反対に次の命令に交換可能でなければ、同じくオペレーション部4により、エクスターナルバス40を該CPU10が次に使用するタイミングまで休止するNOP命令が挿入される。
【0040】
図6は、上記電子鍵盤楽器のCPU10の内部構成を示す機能ブロック図である。該CPU10は、上述のように、パイプライン処理が行われるRISC型のCPUであり、図5に示すような内部構成となっている。すなわち、本CPU10には、まずクロック生成部190があって、LSI上で用いられた動作クロック(MCK)を入力し、反転動作クロック(XMCK)を生成して、該反転動作クロック(XMCK)と上記動作クロック(MCK)をCPU10内部で用いる。
【0041】
また図中PRはパイプラインレジスタ、p1〜p4は対応するパイプラインの段数であり、各段の処理結果を格納する。パイプラインの最終段(5段目)は処理が終了していて処理結果を格納する必要がないため、パイプラインレジスタを備えない。内部各部はパイプラインの各段を形成している。夫々は前段のパイプラインレジスタからデータを読み取り、動作クロック(MCK)の1サイクルの間に後述するような各部の動作を行って、対応するパイプラインレジスタPRにデータを記憶する。
【0042】
詳述すると、該CPU10内には、ターゲットプログラムを入力する命令インターナルバス60につながる命令フェッチ部100があり、プログラムの命令フェッチ(InstructionFetch)が行われる。そして、パイプライン1のパイプラインレジスタ(PRp1)110にフェッチされた命令(Instruction)が一時的に記憶される。次のステージでその命令(Instruction)は、命令デコード部120に移行し、該命令デコード部120により、レジスタファイル192(後述する図7参照)が参照されて、該命令(Instruction)のデコードがなされる。そのデコード結果は、パイプライン2のパイプラインレジスタ(PRp2)130に一時的に記憶される。さらに次のステージでそのデコード結果は、演算部140に移行して、そこで演算がなされ、その演算結果は、パイプライン3のパイプラインレジスタ(PRp3)150に一時的に記憶される。
【0043】
そして、バスコントローラ30につながっているデータインターナルバス70に接続されたメモリアクセス部160に、次のステージで、バスコントローラ30を介し、エクスターナルバス40につながっているデータROM/RAM50にアクセスして、必要なデータをそこからロードしたり、或いは上記演算結果が出力(ライト)される。またその演算結果は、パイプライン3のパイプラインレジスタ(PRp3)170に一時的に記憶される。
【0044】
さらに次のステージで、ライトバック部180により、レジスタファイル192(後述する図7のr0〜rfのレジスタ群を参照)に必要な参照データが書き込まれる。
【0045】
以上の命令フェッチ、命令デコード、演算、メモリアクセス、ライトバックの各部は、並列的に動作することになる。
【0046】
図7は、上記CPU10のレジスタファイル192のレジスタ構成を示している。r0〜reまで32ビット長構成の汎用レジスタであり、レジスタrfのみ、8ビットがステータスレジスタ、24ビットがデータを記憶するROM/RAM50中のデータRAMのスタックポインタである。
【0047】
図8は、上記CPU10内部構成の命令フェッチ部100(と1段目のパイプラインのパイプラインレジスタPR110)の構成の概要図である。同図において、命令フェッチ部100は、命令ポインタIPと加算器104を有している。
【0048】
24ビット幅のレジスタである命令ポインタIP102の値が、アドレスとして、命令インターナルバス60へ出力される。
【0049】
同時に命令ポインタIP102の値は、加算器104によって固定値4と加算され、1段目のパイプラインレジスタPR110のエリアNAに次期命令アドレス予測値NIEXとして格納される。命令アドレスは必ず4の倍数になるので、命令ポインタIP102は最下位2ビットを省略して22ビット幅としても良い。
【0050】
命令インターナルバス60のデータバスから現在の命令コードRICDを読み込み、1段目のパイプラインレジスタPR110のエリアICに格納する。
【0051】
後述する図11のメモリアクセス部160から与えられる次期命令アドレスNIADを動作クロックMCKの1サイクルの最後に、上記命令ポインタIP102に上書きする。
【0052】
命令フェッチ部100は、以上の処理を動作クロックMCK毎に繰り返す。
【0053】
図9は、命令デコード部120(と前後の1及び2段目のパイプラインのパイプラインレジスタPR110及び130)の構成の概要図である。同図において、命令デコード部120は、命令分離器ID121と、オペランド分離器OD122と、一時記憶レジスタX1(123)と、同じく一時記憶レジスタX2(124)と、セレクタS1(125)とを有している。
【0054】
1段目のパイプラインレジスタPR110のエリアNAにある次期命令アドレス予測値NIEXを、そのまま2段目のパイプラインレジスタPR130のエリアNAに、次期命令アドレス予測値NIEXとして格納する。
【0055】
1段目のパイプラインレジスタPR110のエリアICから、現在の命令コードRICDを読み出し、上記命令デコード部120の命令分離器ID121によって、命令種類ITYPとオペランドデータOPに分離すると共に、命令種類ITYPを2段目のパイプラインレジスタ130のエリアITに格納する。以下、分岐命令の場合、転送命令の場合、演算命令及びNOP命令の場合に分けて動作説明をする。
【0056】
(分岐命令の場合)
オペランドデータOPをオペランド分離器OD122に入力し、命令種類ITYPを参照して第1オペランドポインタまたは即値O1を取り出して、2段目のパイプラインレジスタPR130のエリアO1に格納すると共に、第2オペランドポインタOPT2として固定値15を設定し、2段目のパイプラインレジスタPR130のエリアO2に格納する。
【0057】
第1オペランドポインタまたは即値O1は下位4ビットをレジスタファイル192に送出し、これに応じたレジスタの値V1を得て、動作クロックMCKの前半のサイクルの最後(動作クロックMCKのアップエッジ)のタイミングで、一時記憶レジスタX1(123)に格納する。
【0058】
同時に第2オペランドポインタOPT2をレジスタファイル192に送出し、これに応じたレジスタの値V2を得て、動作クロックMCKの前半のサイクルの最後(動作クロックMCKのアップエッジ)のタイミングで、一時記憶レジスタX2(124)に格納する。
【0059】
セレクタS1(125)は命令種類ITYPのIMビット(分岐命令ではビット30)を参照し、これが1の場合、第1オペランド値または即値(この場合は即値)24ビットを、そうでない場合は、V1を2段目のパイプラインレジスタPR130のエリアV1に、第1オペランド値OPV1として格納する。
【0060】
同時にV2を2段目のパイプラインレジスタPR130のエリアV2に、第2オペランド値OPV2として格納する。
【0061】
(転送命令の場合)
オペランドデータOPをオペランド分離器OD122に入力し、命令種類ITYPを参照して、第1オペランドポインタまたは即値O1を取り出し、2段目のパイプラインレジスタPR130のエリアO1に格納すると共に、第2オペランドポインタOPT2を取り出し、2段目のパイプラインレジスタPR130のエリアO2に格納する。
【0062】
第1オペランドポインタまたは即値O1は下位4ビットをレジスタファイル192に送出し、これに応じたレジスタの値V1を得て、動作クロックMCKの前半のサイクルの最後(動作クロックMCKのアップエッジ)のタイミングで、一時記憶レジスタX1(123)に格納する。
【0063】
同時に第2オペランドポインタOPT2をレジスタファイル192に送出し、これに応じたレジスタの値V2を得て、動作クロックMCKの前半のサイクルの最後(動作クロックMCKのアップエッジ)のタイミングで、一時記憶レジスタX2(124)に格納する。
【0064】
セレクタS1(125)は命令種類ITYPのTRMD信号(ビット28−29)を参照し、これが0でない場合、第1オペランド値または即値(この場合は即値)24ビットを、0の場合は、V1を、2段目のパイプラインレジスタPR130のエリアV1に第1オペランド値OPV1として格納する。
【0065】
同時にV2を2段目のパイプラインレジスタPR130のエリアV2に第2オペランド値OPV2として格納する。
【0066】
(演算命令の場合)
オペランドデータOPをオペランド分離器OD122に入力し、命令種類ITYPを参照して、第1オペランドポインタO1を取り出し、2段目のパイプラインレジスタPR130のエリアO1に格納すると共に、第2オペランドポインタOPT2を取り出し、2段目のパイプラインレジスタPR130のエリアO2に格納する。
【0067】
第1オペランドポインタO1を、レジスタファイル192に送出し、これに応じたレジスタの値V1を得て、動作クロックMCKの前半のサイクルの最後(動作クロックMCKのアップエッジ)のタイミングで、一時記憶レジスタX1(123)に格納する。
【0068】
同時に第2オペランドポインタOPT2を、レジスタファイル192に送出し、これに応じたレジスタの値V2を得て、動作クロックMCKの前半のサイクルの最後(動作クロックMCKのアップエッジ)のタイミングで、一時記憶レジスタX2(124)に格納する。
【0069】
セレクタS1(125)は、常時V1を2段目のパイプラインレジスタPR130のエリアV1に、第1オペランド値OPV1として格納する。
【0070】
同時にV2を2段目のパイプラインレジスタPR130のエリアV2に、第2オペランド値OPV2として格納する。
【0071】
(NOP命令の場合)
転送命令と同様に動作するが、いずれの値も使用されない。
【0072】
命令デコード部120では、以上詳述した動作を、動作クロックMCKのサイクル毎に繰り返す。
【0073】
図10は、演算部140(と前後の2及び3段目のパイプラインのパイプラインレジスタPR130及び150)の構成の概要図である。同図において、演算部140は、演算ユニットCU141を有している。
【0074】
2段目のパイプラインレジスタPR130のエリアNAにある次期命令アドレス予測値NIEXを、そのまま3段目のパイプラインレジスタPR150のエリアNAに、次期命令アドレス予測値NIEXとして格納する。
【0075】
2段目のパイプラインレジスタPR130のエリアITにある命令種類ITYPを、そのまま3段目のパイプラインレジスタPR150のエリアITに、命令種類ITYPとして格納する。
【0076】
2段目のパイプラインレジスタPR130のエリアO1にある第1オペランドポインタOPT1を、そのまま3段目のパイプラインレジスタPR150のエリアO1に、第1オペランドポインタOPT1として格納する。
【0077】
2段目のパイプラインレジスタPR130のエリアO2にある第2オペランドポインタOPT2を、そのまま3段目のパイプラインレジスタPR150のエリアO2に、第2オペランドポインタOPT2として格納する。
【0078】
2段目のパイプラインレジスタPR130のエリアV2にある第2オペランド値OPV2を、そのまま3段目のパイプラインレジスタPR150のエリアV2に、第2オペランド値OPV2として格納する。
【0079】
2段目のパイプラインレジスタPR130のエリアV1及びエリアV2にある第1オペランド値OPV1及び第2オペランド値OPV2を、演算ユニットCU141に入力する。
【0080】
以下、分岐命令の場合(ジャンプ命令の場合とコール/リターン命令の場合)、転送命令の場合、演算命令及びNOP命令の場合に分けて動作説明をする。
【0081】
(分岐命令:ジャンプ命令の場合)
第1オペランド値OPV1を、そのまま演算結果CRとして出力する。
【0082】
第2オペランド値OPV2の上位4ビットを、そのまま演算ステータスSTとして出力する。
【0083】
演算結果CRを、3段目のパイプラインレジスタPR150のエリアCRに演算結果CRSLとして格納すると共に、演算ステータスSTを、3段目のパイプラインレジスタPR150のエリアSTに、演算ステータスCRSTとして格納する。
【0084】
(分岐命令:コール/リターン命令の場合)
第2オペランド値OPV2の下位24ビットに、−4(コール)又は+4(リターン)を演算し、演算結果の下位24ビットを、演算結果CRとして出力する。
【0085】
第2オペランド値OPV2の上位4ビットを、そのまま演算ステータスSTとして出力する。
【0086】
演算結果CRを、3段目のパイプラインレジスタPR150のエリアCRに演算結果CRSLとして格納すると共に、演算ステータスSTを、3段目のパイプラインレジスタPR150のエリアSTに、演算ステータスCRSTとして格納する。
【0087】
(転送命令の場合)
第1オペランド値OPV1を、そのまま演算結果CRとして出力する。
【0088】
演算ステータスST出力は、不定で構わない。
【0089】
演算結果CRを、3段目のパイプラインレジスタPR150のエリアCRに演算結果CRSLとして格納すると共に、演算ステータスSTを、3段目のパイプラインレジスタPR150のエリアSTに、演算ステータスCRSTとして格納する。
【0090】
(演算命令の場合)
第1オペランド値OPV1と第2オペランド値OPV2を、命令種類ITYPに従って演算し、その演算結果をCRとして出力する。
【0091】
演算に応じて変化した演算ステータスSTを、出力する。
【0092】
演算結果CRを、3段目のパイプラインレジスタPR150のエリアCRに演算結果CRSLとして格納すると共に、演算ステータスSTを、3段目のパイプラインレジスタPR150のエリアSTに、演算ステータスCRSTとして格納する。
【0093】
(NOP命令の場合)
上記転送命令と同様に動作するが、値は結局使用されない。
【0094】
演算結果CRを、3段目のパイプラインレジスタPR150のエリアCRに演算結果CRSLとして格納すると共に、演算ステータスSTを、3段目のパイプラインレジスタPR150のエリアSTに、演算ステータスCRSTとして格納する。
【0095】
上記演算部140では、以上詳述した動作を、動作クロックMCKのサイクル毎に繰り返す。
【0096】
図11は、メモリアクセス部160(と前後の3及び4段目のパイプラインのパイプラインレジスタPR150及び170)の構成の概要図である。同図において、メモリアクセス部160は、アドレスゲートAG161と、条件識別器DM162と、セレクタS2(163)と、セレクタS3(164)と、バストランシーバTR165とを有している。
【0097】
3段目のパイプラインレジスタPR150のエリアITにある命令種類ITYPを、そのまま4段目のパイプラインレジスタPR170のエリアITに、命令種類ITYPとして格納する。
【0098】
3段目のパイプラインレジスタPR150のエリアO1にある第1オペランドポインタOPT1を、そのまま4段目のパイプラインレジスタPR170のエリアO1に、第1オペランドポインタOPT1として格納する。
【0099】
3段目のパイプラインレジスタPR150のエリアO2にある第2オペランドポインタOPT2を、そのまま4段目のパイプラインレジスタPR170のエリアO2に、第2オペランドポインタOPT2として格納する。
【0100】
以下、分岐命令の場合(ジャンプ命令の場合とコール/リターン命令の場合)、転送命令の場合(レジスタ間転送以外の場合とレジスタ間転送の場合)、演算命令及びNOP命令の場合に分けて動作説明をする。
【0101】
(分岐命令:ジャンプ命令の場合)
命令種類ITYPにより、アドレスゲートAG161を閉鎖して、データインターナルバス70に接続しない。
【0102】
条件識別器DM162は命令種類ITYPと演算ステータスCRSTを参照し、分岐する場合(無条件ジャンプの場合、又は条件付ジャンプで条件が成立している場合)に1を、分岐しない場合に0を、セレクタS2(163)に出力し、該セレクタS2(163)は条件識別器DM162が1の出力時に演算結果CRSLを、1の出力時に次期命令アドレス予測値NIEXを、セレクタS3(164)に出力するが、ジャンプ命令なので、セレクタS2(163)出力が選択されて、次期命令アドレスNIADとして、図8の命令フェッチ部100に出力する。
【0103】
3段目のパイプラインレジスタPR150のエリアCRにある演算結果CRSLを、そのまま4段目のパイプラインレジスタPR170のエリアCRに、演算結果CRSLとして格納する。
【0104】
3段目のパイプラインレジスタPR150のエリアSTにある演算ステータスCRSTを、そのまま4段目のパイプラインレジスタPR170のエリアSTに、演算ステータスCRSTとして格納する。
【0105】
命令種類ITYPにより、バストランシーバTR165を閉鎖して、データインターナルバス70に接続しない。
【0106】
(分岐命令:コール/リターン命令の場合)
命令種類ITYPにより、アドレスゲートAG161を開いて、データインターナルバス70に、第2オペランド値OPV2を出力する。
【0107】
命令種類ITYPにより、セレクタS3(164)は、トランシーバTR165出力が選択されて、次期命令アドレスNIADとして図8の命令フェッチ部100に出力する。 3段目のパイプラインレジスタPR150のエリアCRにある演算結果CRSLを、そのまま4段目のパイプラインレジスタPR170のエリアCRに、演算結果CRSLとして格納する。
【0108】
3段目のパイプラインレジスタPR150のエリアSTにある演算ステータスCRSTを、そのまま4段目のパイプラインレジスタPR170のエリアSTに、演算ステータスCRSTとして格納する。
【0109】
命令種類ITYPにより、バストランシーバTR165を読取で開き、セレクタS3(164)に出力すると共に、4段目のパイプラインレジスタPR170のエリアLDに、ロードデータLDATとして格納する。
【0110】
(転送命令:レジスタ間転送以外の場合)
命令種類ITYPによりアドレスゲートAG161を開いて、データインターナルバス70に、演算結果CRSLを出力する。
【0111】
命令種類ITYPと条件識別器DM162によりセレクタS2(163)/S2(164)は、次期命令アドレス予測値NIEXが選択されて、次期命令アドレスNIADとして、図8の命令フェッチ部100に出力する。
【0112】
3段目のパイプラインレジスタPR150のエリアCRにある演算結果CRSLを、そのまま4段目のパイプラインレジスタPR170のエリアCRに、演算結果CRSLとして格納する。
【0113】
3段目のパイプラインレジスタPR150のエリアSTにある演算ステータスCRSTを、そのまま4段目のパイプラインレジスタPR170のエリアSTに、演算ステータスCRSTとして格納する。
【0114】
ロードデータ(ld)命令の場合、命令種類ITYPにより、バストランシーバTR165を読取で開き、4段目のパイプラインレジスタPR170のエリアLDにロードデータLDATとして格納する。ロードステータス(st)命令の場合、命令種類ITYPにより、バストランシーバTR165をを書込で開き、第2オペランド値OPV2を出力する。
【0115】
(転送命令:レジスタ間転送の場合)
命令種類ITYPにより、アドレスゲートAG161を閉鎖して、データインターナルバス70に接続しない。
【0116】
命令種類ITYPと条件識別器DM162によりセレクタS2(163)/S3(164)は、次期命令アドレス予測値NIEXが選択されて、次期命令アドレスNIADとして、図8の命令フェッチ部100に出力する。
【0117】
3段目のパイプラインレジスタPR150のエリアCRにある演算結果CRSLを、そのまま4段目のパイプラインレジスタPR170のエリアCRに、演算結果CRSLとして格納する。
【0118】
3段目のパイプラインレジスタPR150のエリアSTにある演算ステータスCRSTを、そのまま4段目のパイプラインレジスタPR170のエリアSTに、演算ステータスCRSTとして格納する。
【0119】
命令種類ITYPにより、バストランシーバTR165を閉鎖して、データインターナルバス70に接続しない。
【0120】
(演算命令)
命令種類ITYPにより、アドレスゲートAG161を閉鎖して、データインターナルバス70に接続しない。
【0121】
命令種類ITYPにより、セレクタS3(164)は、トランシーバTR165出力が選択されて、次期命令アドレスNIADとして、図8の命令フェッチ部100に出力する。
【0122】
3段目のパイプラインレジスタPR150のエリアCRにある演算結果CRSLを、そのまま4段目のパイプラインレジスタPR170のエリアCRに、演算結果CRSLとして格納する。
【0123】
3段目のパイプラインレジスタPR150のエリアSTにある演算ステータスCRSTを、そのまま4段目のパイプラインレジスタPR170のエリアSTに、演算ステータスCRSTとして格納する。
【0124】
命令種類ITYPにより、バストランシーバTR165を閉鎖して、データインターナルバス70に接続しない。
【0125】
(NOP命令)
上記演算命令と同様に動作するが、値は結局使用されない。
【0126】
上記メモリアクセス部160では、以上詳述した動作を、動作クロックMCKのサイクル毎に繰り返す。
【0127】
図12は、ライトバック部180(と前の4段目のパイプラインのパイプラインレジスタPR170)の構成の概要図である。同図において、ライトバック部180は、セレクタS4(181)及びセレクタS5(182)を有している。
【0128】
ここで、レジスタファイル192へのアクセスは、動作クロックMCKの後半サイクルに行うので、命令デコード部100のアクセスとはぶつからない。
【0129】
以下、分岐命令の場合(ジャンプ命令の場合とコール/リターン命令の場合)、転送命令の場合[ロードデータ(ld)命令でレジスタ間転送以外の場合とロードデータ(ld)命令でレジスタ間転送の場合、及びロードステータス(st)命令の転送命令の場合]、演算命令及びNOP命令の場合に分けて、ライトバック部180の動作説明をする。
【0130】
(分岐命令:ジャンプ命令の場合)
セレクタS4181は、レジスタファイル192に第1オペランドポインタOPT1/第2オペランドポインタOPT2のいずれの信号も送らず、レジスタファイル192のどのレジスタも選択しない。
【0131】
セレクタS5182は、レジストデータとして、演算結果CRSLとロードデータLDATのいずれを選択していても構わないが、ポインタ信号が送出されていないので、何も書き込まれない。
【0132】
ステータス(図7のレジスタrfの上位4ビット)は書き換わらない。
【0133】
分岐命令(コール/リターン命令)の場合
セレクタS4(181)は、レジスタファイル192にポインタ信号として、第1オペランドポインタOPT1(レジスタrf=スタックポインタをポイントしている)を送出する。
【0134】
セレクタS5(182)は、レジストデータとして、演算結果CRSLを選択し、レジスタファイル192に書込データとして送出する。
【0135】
ステータス(図7のレジスタrfの上位4ビット)は書き換わらない。
【0136】
転送命令[ロードデータ(ld)命令でレジスタ間転送以外]の場合
セレクタS4(181)は、レジスタファイル192にポインタ信号として、第2オペランドポインタOPT2を送出する。
【0137】
セレクタS5(182)は、レジストデータとして、ロードデータLDATを選択し、レジスタファイル192に書込データとして送出する。
【0138】
ステータス(図7のレジスタrfの上位4ビット)は書き換わらない。
【0139】
転送命令[ロードデータ(ld)命令でレジスタ間転送]の場合
セレクタS4(181)は、レジスタファイル192にポインタ信号として、第2オペランドポインタOPT2を送出する。
【0140】
セレクタS5(182)は、レジストデータとして、演算結果CRSLを選択し、レジスタファイル192に書込データとして送出する。
【0141】
ステータス(図7のレジスタrfの上位4ビット)は書き換わらない。
【0142】
転送命令[ロードステータス(st)命令]の場合
セレクタS4(181)は、レジスタファイル192に第1オペランドポインタOPT1/第2オペランドポインタOPT2のいずれの信号も送らず、レジスタファイル192のどのレジスタも選択しない。
【0143】
セレクタS5(182)は、レジストデータとして、演算結果CRSLとロードデータLDATのいずれを選択していても構わないが、ポインタ信号が送出されていないので、何も書き込まれない。
【0144】
ステータス(図7のレジスタrfの上位4ビット)は書き換わらない。
【0145】
(演算命令の場合)
セレクタS4(181)は、レジスタファイル192にポインタ信号として、第2オペランドポインタOPT2を送出する。
【0146】
セレクタS5(182)は、レジストデータとして演算結果CRSLを選択し、レジスタファイル192に書込データとして送出する。
【0147】
ステータス(図7のレジスタrfの上位4ビット)のうち、演算によって変化のあったビットを、演算ステータスCRSTに応じて書換える。
【0148】
(NOP命令の場合)
セレクタS4(181)は、レジスタファイル192に第1オペランドポインタOPT1/第2オペランドポインタOPT2のいずれの信号も送らず、レジスタファイル192のどのレジスタも選択しない。
【0149】
セレクタS5(182)は、レジストデータとして演算結果CRSLとロードデータLDATのいずれを選択していても構わないが、ポインタ信号が送出されていないので、何も書き込まれない。
【0150】
ステータス(図7のレジスタrfの上位4ビット)は書き換わらない。
【0151】
上記ライトバック部180では、以上詳述した動作を、動作クロックMCKのサイクル毎に繰り返す。
【0152】
図13は、ターゲットシステムたる電子鍵盤楽器におけるCPU10で、ターゲットプログラムが実行された場合の、該プログラムの処理フローが実行された際のメインフローを示すフローチャートである。
【0153】
まず、電子鍵盤楽器全体の初期化が実行される(ステップS300)。そして電子鍵盤楽器としての何かイベントがあるか(例えば押鍵イベント、パネルイベント、MIDIイベントなど)否かがチェックされる(ステップS302)。
【0154】
そのようなイベントがなければ(ステップS302;N)、後述するステップS306に移行する。逆にイベントがあれば(ステップS302;Y)、図14に示すイベント処理が行われる(ステップS304)。
【0155】
その後図15に示す非イベント処理がなされる(ステップS306)。
【0156】
図14は、上記図13におけるステップS304のイベント処理の処理フローを示すフローチャートである。
【0157】
まず、押鍵イベントがあるか否かがチェックされ(ステップS400)、押鍵イベントがあれば(ステップS400;Y)、押鍵処理が実行される(ステップS402)。
【0158】
押鍵イベントがなければ(ステップS400;N)、パネルイベントがあるか否かがチェックされ(ステップS404)、パネルイベントがあれば(ステップS404;Y)、パネル処理が実行される(ステップS406)。
【0159】
パネルイベントがなければ(ステップS404;N)、MIDIイベントがあるか否かがチェックされ(ステップS408)、MIDIイベントがあれば(ステップS408;Y)、MIDIイベント処理が実行される(ステップS410)。
【0160】
MIDIイベントがなければ(ステップS410;N)、その他のイベント処理がなされる(ステップS412)。その後メインフローに復帰する。
【0161】
図15は、上記図13におけるステップS306の非イベント処理の処理フローを示すフローチャートである。
【0162】
まず経過時間の取得処理がなされる(ステップS500)。これは後述するインターバルタイマのTをリセットして、後述する発信器LFOのUpDateを歩進を進めるため経過時間が分かる必要があるからである。
【0163】
次にエンベロープEVフェーズ処理がなされる(ステップS502)。これはCPU10から音源20にエンベロープのフェーズが到達したことを知らせ、次のフェーズに進むために必要であるからである。
【0164】
さらに発信器LFOの歩進、すなわちLFOのUpDate処理が実行される(ステップS504)。すなわち、LFOモジュールの値を更新する処理がなされる。
【0165】
そうして自動演奏処理がなされる(ステップS506)。この処理後再び図13のステップS302に復帰する。
【0166】
図16は、インターバルタイマ割り込み処理の処理フローを示すフローチャートである。これは、単に時間Tをインクリメントする(ステップS600)だけである。
【0167】
図17は、MIDIやUSBなどのシリアルインターフェースからの受信割り込み処理の処理フローを示すフローチャートである。
【0168】
これらのシリアルの受信RC割込は、先ずバッファへ格納される(ステップS700)。そして、コマンドが完成したか否かがチェックされる(ステップS702)。コマンドが完成していなければ(ステップS702;N)、この処理フローは終了する。
【0169】
反対にコマンドが完成していれば(ステップS702;Y)、イベントの発生処理がなされ(ステップS704)、その後上記バッファのクリア処理がなされる(ステップS706)。
【0170】
図18は、CPU10と音源20及びインターナルバス・エクスターナルバスの動作タイミングを示すタイミングチャートである。
【0171】
動作クロックMCKを反転させて反転動作クロックXMCKを作り、また動作クロックMCKを2分周してCK1を作る。該CK1は、エクスターナルバスの使用状況を表すことになる。すなわちCK1が真の時音源20が、偽の時CPU10がエクスターナルバスへアクセスできる状態になることを示している。
【0172】
このCK1と動作クロックMCKにより、音源クロックCKTGが作成される。該音源クロックCKTGがダウンエッヂから音源20が作動する。
【0173】
またCPU10のI/Eは、CPU10がインターナルバス或いはエクスターナルバスのいずれでもアクセスすることを示し、同INT.はインターナルバスへアクセスすることを示す。他方音源20の(NC)はNotConnectで接続されないことを示し、ACTVは音源20から楽音波形が出力されることを示す。
【0174】
同図に示すように、CK1が偽であるとき、CPU10は、インターナルバス或いはエクスターナルバスのいずれでもアクセスするが、CK1が真であるとき、インターナルバスのみにアクセスする。一方、CK1が真であり、且つ音源クロックCKTGダウンエッヂの時に、音源20は、アクティブになり、CK1が偽に変わるまでアクティブのままになる。CK1が偽になると同時に、音源20は楽音波形の読み出しを止める。
【0175】
図19は、上記CPU10がパイプライン処理を行った際の種々の動作タイミングを示すタイミングチャートである。
【0176】
このタイミングチャートでは、システムサイクル(図では0〜8が示されている)中に以下のような動作タイミングとなる。尚、動作クロックMCK、CK1、CPU10及び音源20の動作タイミングは、図18の場合と同じになるので、ここではその説明を省略する。
【0177】
システムサイクル0の時、1段目のパイプラインには、その命令フェッチ部100に、上記プログラムフラッシュメモリ64から、命令IC−0がフェッチ(IF)される。
【0178】
システムサイクル1の時、2段目のパイプラインには、その命令デコード部120で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ(RF)がなされる。同時に、1段目のパイプラインでは、命令フェッチ部100に、上記プログラムフラッシュメモリ64から、命令IC−1がフェッチ(IF)される。
【0179】
システムサイクル2の時、3段目のパイプラインでは、その演算部140で、命令実行(EX)がなされ、2段目のパイプラインでは、その命令デコード部120で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ(RF)がなされる。同時に、1段目のパイプラインでは、命令フェッチ部100に、上記プログラムフラッシュメモリ64から、命令IC−2がフェッチ(IF)される。
【0180】
システムサイクル3の時、4段目のパイプラインでは、そのメモリアクセス部170でデータインターナルバス70へのメモリアクセス(MA)がなされ、3段目のパイプラインでは、その演算部140で、命令実行(EX)がなされる。2段目のパイプラインでは、その命令デコード部120で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ(RF)がなされる。同時に、1段目のパイプラインでは、命令フェッチ部100に、上記プログラムフラッシュメモリ64から、命令IC−3がフェッチ(IF)される。
【0181】
システムサイクル4の時、5段目のパイプラインでは、そのライトバック部180でレジスタファイル192へのライトバック処理(WB)がなされ、命令IC−0の処理が終了する。また4段目のパイプラインでは、そのメモリアクセス部170でデータインターナルバス70へのメモリアクセス(MA)がなされ、3段目のパイプラインでは、その演算部140で、命令実行(EX)がなされる。2段目のパイプラインでは、その命令デコード部120で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ(RF)がなされる。同時に、1段目のパイプラインでは、命令フェッチ部100に、上記プログラムフラッシュメモリ64から、命令IC−4がフェッチ(IF)される。
【0182】
システムサイクル5の時、5段目のパイプラインでは、そのライトバック部180でレジスタファイル192へのライトバック処理(WB)がなされ、命令IC−1の処理が終了する。また4段目のパイプラインでは、そのメモリアクセス部170でデータインターナルバス70又はエクスターナルバス40へのメモリアクセス(MA)がなされ、3段目のパイプラインでは、その演算部140で、命令実行(EX)がなされる。2段目のパイプラインでは、その命令デコード部120で、先にフェッチされた命令のデコード処理とレジスタオペランドフェッチ(RF)がなされる。同時に、1段目のパイプラインでは、命令フェッチ部100に、上記プログラムフラッシュメモリ64から、命令IC−5(記載せず)がフェッチ(IF)される。以下順次命令が実行される。
【0183】
同図の一番下段に示したタイミングチャートが示しているものは、CPU10の命令が、エクスターナルバス40の使用をするか否かを示しており、システムサイクル0〜2までは、エクスターナルバス40を使用をしておらず、ハイインピーダンスになって状態が不定となっている。その後システムサイクル3から以降は、CPU10の命令が、エクスターナルバス40及びデータインターナルバス70を交互に使用している。但し、エクスターナルバス40を使用するタイミングでデータインターナルバス70を使用するのは許可される。このため、このような動作をするアドレスと命令の組み合わせをコンパイラは別段排除しない。
【0184】
以上詳述した本実施例構成によれば、本発明のクロスコンパイラで生成されたオブジェクトプログラムが、CPU10のエクスターナルバス40アクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでCPU10のエクスターナルバス40使用を休止する命令が出力されるため、CPU10がエクスターナルバス40を使用しない命令が実行される場合にあっては、音源20がエクスターナルバス40を使用する間は、そのCPU10は待つことなくその命令をそのまま実行でき、結果的に該CPU10の実行速度を上げることができるようになるという優れた効果を奏し得る。
【0185】
すなわち、第1検出部1の検出した、CPU10がエクスターナルバス40を使用する命令が、上記音源20がエクスターナルバス40を使用するべきタイミングに実行されることを、上記第2検出部2により検出した場合に、該命令の前に前記CPU10に対して、CPU10がエクスターナルバス40を使用して実行する命令の次の命令に交換可能か否かが、判定部3により判定され、その判定結果において、次の命令に交換可能であれば、オペレーション部4によってその命令に交換され、逆に次の命令に交換可能でなければ、該オペレーション部4によって、エクスターナルバス40を該CPU10が次に使用するタイミングまで休止する命令が挿入されるようになるため(コンパイラで生成されたオブジェクトプログラムが、CPU10のエクスターナルバス40アクセス命令と音源タイミングとがぶつかるサイクルを検出して交換可能な次の命令に交換され、或いは次の使用タイミングまでCPU10のエクスターナルバス40使用を休止する命令が出力されるため)、CPU10がエクスターナルバス40を使用しない命令が実行される場合にあっては、音源20がエクスターナルバス40を使用する間に、そのCPU10は待つことなくその命令をそのまま実行でき、結果的に該CPU10の実行速度を上げることができるようになる。
【0186】
尚、本発明のコンパイラは、上述の図示例にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加え得ることは勿論である。
【産業上の利用可能性】
【0187】
本発明のクロスコンパイラは、電子楽器に広く適用できることは言うまでもない。
【図面の簡単な説明】
【0188】
【図1】電子鍵盤楽器という別のターゲットシステム環境で動作することを目的に、オブジェクトプログラムを生成するクロスコンパイラが用いられるプログラム開発環境を示すワークステーションの機能ブロック図である。
【図2】クロスコンパイラの処理フローを示すフローチャートである。
【図3】電子鍵盤楽器で動作することを目的とするオブジェクトプログラムの開発作業手順を示すフローチャートである。
【図4】電子鍵盤楽器の構成概要ブロック図である。
【図5】ターゲットプログラムがCPU10によって実行された際に、該CPU10上に形成されることになる構成の機能ブロック図である。
【図6】電子鍵盤楽器のCPU10の内部構成を示す機能ブロック図である。
【図7】CPU10のレジスタファイル192のレジスタ構成を示す説明図である。
【図8】CPU10内部構成の命令フェッチ部100の構成の概要図である。
【図9】命令デコード部120の構成の概要図である。
【図10】演算部140の構成の概要図である。
【図11】メモリアクセス部160の構成の概要図である。
【図12】ライトバック部180の構成の概要図である。
【図13】電子鍵盤楽器におけるCPU10で、ターゲットプログラムが実行された場合の、該プログラムの処理フローが実行された際のメインフローを示すフローチャートである。
【図14】図13におけるステップS304のイベント処理の処理フローを示すフローチャートである。
【図15】図13におけるステップS306の非イベント処理の処理フローを示すフローチャートである。
【図16】インターバルタイマ割り込み処理の処理フローを示すフローチャートである。
【図17】シリアルインターフェースからの受信割り込み処理の処理フローを示すフローチャートである。
【図18】CPU10と音源20及びインターナルバス・エクスターナルバスの動作タイミングを示すタイミングチャートである。
【図19】CPU10がパイプライン処理を行った際の種々の動作タイミングを示すタイミングチャートである。
【符号の説明】
【0189】
1 第1検出部
2 第2検出部
3 判定部
4 オペレーション部
10 CPU
20 音源
22 DSP
22a DSPメモリ
22b DSPバス
24 DAC
26 アンプ
28 スピーカ
30 バスコントローラ
40 エクスターナルバス
50 データROM/RAM
52 波形データメモリ
60 命令インターナルバス
62 メモリコントローラ
64 フラッシュメモリ
66 インターフェース
70 データインターナルバス
72 インターフェース
100 命令フェッチ部
102 命令ポインタIP
104 加算器
110、130、150、170 パイプラインレジスタ
120 命令デコード部
121 命令分離器ID
122 オペランド分離器OD
123 一時記憶レジスタX1
124 一時記憶レジスタX2
125 セレクタS1
140 演算部
141 演算ユニットCU
160 メモリアクセス部
161 アドレスゲートAG
162 条件識別器DM
163 セレクタS2
164 セレクタS3
165 バストランシーバTR
180 ライトバック部
181 セレクタS4
182 セレクタS5
190 クロック生成部
192 レジスタファイル
1000 システムバス
1002 I/Oバス
1004 CPUブロック
1006 DMA
1008 インターフェース
1010 メモリブロック
1012 ディスクI/Oユニット
1014 ハードディスクドライブ
1016 GPU
1018 ビデオモニタ

【特許請求の範囲】
【請求項1】
少なくともプログラム及びデータを記憶する記憶手段と、該記憶手段に記憶された波形データをアクセスする音源と、該記憶手段に記憶されたプログラム及びデータをアクセスするCPUと、上記記憶手段が繋げられた共有バスと、該共有バスに対し上記音源とCPUが時分割交互にアクセスさせる制御を行うバスコントローラとを備えたターゲットシステム環境で動作することを目的とするオブジェクトプログラムを生成するクロスコンパイラであって、
前記CPUが共有バスを使用する命令を検出する第1の検出手段と、
該第1の検出手段が検出した命令が実行されるタイミングが、前記共有バスをCPUが使用するべきタイミングであるかどうかを検出する第2の検出手段と、
前記第1の検出手段の検出した、CPUが共有バスを使用する命令が、前記音源が共有バスを使用するべきタイミングに実行されることを、前記第2の検出手段により検出した場合に、該命令の前に前記CPUに対して、CPUが共有バスを使用して実行する命令の次の命令に交換可能か否かを判定する判定手段と、
その判定結果に基づき、次の命令に交換可能であれば、その命令に交換し、逆に次の命令に交換可能でなければ、共有バスを該CPUが次に使用するタイミングまで休止する命令を挿入するオペレーション手段とを備え、
上記共有バスを上記音源が使用するタイミングに、上記CPUが共有バス以外をアクセスするように動作するオブジェクトプログラムを生成することを特徴とするクロスコンパイラ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate


【公開番号】特開2011−39376(P2011−39376A)
【公開日】平成23年2月24日(2011.2.24)
【国際特許分類】
【出願番号】特願2009−188328(P2009−188328)
【出願日】平成21年8月17日(2009.8.17)
【出願人】(000001410)株式会社河合楽器製作所 (563)
【Fターム(参考)】