例えば電子楽器、音源装置(楽音信号生成)、エフェクタ(音特性制御)、あるいはオーディオミキサなど、音響信号を処理する音響信号処理装置において、音響信号処理装置の機能に応じた各種信号処理を実行する集積回路(LSI:「Large Scale Integrated circuit」の略語)を備える構成の装置が従来からある。周知の通り、LSIは、動作クロックを発振器で発生し、該発生した動作クロックを動作カウンタでカウントして、そのカウント値に基づいて各種処理を実行する。また、LSIは、その動作クロックのカウント値に基づいて「ワードクロック」を生成する。ワードクロックは、波形データのサンプリング周期を示すクロックである。LSIは、動作クロックのカウント値に基づき、ワードクロックに同期した波形データの音響信号処理を実行する。つまり、ワードクロックの1クロック毎に、1又は複数の波形データについて、各1サンプル分の音響信号処理を行う。例えば、楽音生成用LSIは、ワードクロックに同期して、波形データのサンプルを生成し、該生成した波形データのサンプルを出力する。また、信号処理用LSIは、ワードクロックに同期して、入力された波形データのサンプルに対する信号処理を施し、該処理した波形データのサンプルを出力する。
複数のLSIをシリアル接続し、波形データのサンプルを1つのLSIから別のLSIへシリアル伝送することで、シリアル接続された複数のLSI全体で能力を拡張し、1つのLSIでは実現困難であるところの複雑な処理や高度な処理を行うことが可能になる。周知の通り、シリアル伝送は、複数ビットのデータを、シリアル伝送クロックの1クロックあたり1ビットずつ順次伝送する方法である。例えば、2つの楽音発生用LSIをシリアル接続して、その2つのLSIで生成される波形データを混合するようにすれば、シリアル接続された2つのLSI全体で、個々のLSIの能力に対して2倍の発音数の楽音発生回路となる。また、例えば、2つの信号処理用LSIをシリアル接続して、入力する波形データにその2つのLSIで信号処理を施すようにすれば、シリアル接続された2つのLSI全体で、個々のLSIの能力に対して2倍の処理能力の信号処理回路となる。
シリアル接続された複数のLSIの間で、波形データのサンプルをシリアル伝送するには、該複数のLSIの相互で、波形データを処理するサンプリング周期を、ワードクロックを使って同期させる。複数のLSIにおいてサンプリング周期を同期化する場合、該複数のLSIのうちのいずれか1つのLSIをワードクロックのマスタとし、残りのLSIをスレーブとして、マスタLSIから各スレーブLSIにワードクロックを供給することで、マスタLSIとスレーブLSIのワードクロック同期を行う。
マスタLSIでは、他のLSIからのワードクロックに同期することなく、動作クロックを生成し、該生成した動作クロックのカウント値に基づきワードクロックを生成する。つまり、単独で動作している場合と同じように動作する。そして、生成したワードクロックをスレーブLSIに供給する。一方、スレーブLSIの動作は、ワードクロックの同期方法によって「リセット型」と「逓倍型」の2タイプに分類される。「リセット型」の場合、スレーブLSIは、マスタLSIからのワードクロックの1クロックが供給される毎に、発振器で発生する動作クロックをカウントする動作カウンタをリセットすることで、自身の動作カウンタがオーバーフローするタイミングを補正(リセット)する。これにより、スレーブLSIとマスタLSIのワードクロック同期(ワードクロックと動作カウンタのカウント周期の同期)を行う。
ここで、従来のLSIには、1ワードクロックに対する動作クロックのカウント数が固定値で設計されているLSIと、1ワードクロックに対する動作クロックのカウント数が可変で設計されているLSIとがあった。1ワードクロックに対する動作クロックのカウント数が固定値に設計されたLSIでは、外部から供給されたワードクロックに応じて動作カウンタがリセットされたときに、波形データにノイズが入るという問題があった。
一方、1ワードクロックに対する動作クロックのカウント数が可変のLSIをスレーブLSIに適用した場合は、ワードクロックの入力に応じて動作カウンタがリセットされるタイミングが動作クロックのカウント数の可変範囲内であれば、ワードクロックに応じて動作カウンタがリセットされた場合でも正常な動作を継続できるので、波形データにノイズが入ることはない。ただし、この場合、スレーブLSIは、カウント数の可変範囲については、マージンとして動作クロックに応じた信号処理を行うことができない。更に、マスタLSIとスレーブLSIの動作クロックは相互に独立しているので、LSI間のシリアル伝送のためには、受信側のLSI(マスタかスレーブかを問わない)に、シリアル伝送クロックを再生するためのPLL回路が必要となる。
これに対して、ワードクロックの同期方法が「逓倍型」の場合、スレーブLSIは、マスタLSIから供給されたワードクロックを逓倍して自身の動作クロックを生成する。この場合、自身の動作クロックが、マスタLSIから供給されたワードクロックに追従するので、マスタLSIから供給されるワードクロックの1クロックに対する動作クロックのカウント数を一定として動作できた。この「逓倍型」の方法は、1ワードクロックに対する動作クロックのカウント数が固定値のLSIに適用される方法である。この場合、マスタLSIとスレーブLSIの動作クロックがほぼ同じになるため、受信側のLSI(マスタかスレーブかを問わない)は、その動作クロックからシリアル伝送クロックを生成できる。しかしながら、近年はLSIの動作クロックの周波数がワードクロックに比べて非常に高くなっているため(1000倍以上)、ワードクロックを逓倍して動作クロックを生成することは、技術的に困難になってきている。
各LSIの動作クロックのカウント数が固定値で設計されている場合、受信側のLSIにおいて動作クロックから直接シリアル伝送クロックを生成する簡単な方法は、送信側のLSIと受信側のLSIとに同じ動作クロックを供給することである。その場合、マスタLSIとスレーブLSIの双方における1ワードクロックあたりの動作クロックのカウント数を同数、或いは整数倍の関係にするとともに、マスタLSIとスレーブLSIに同じ動作クロックを供給することにより、マスタLSIとスレーブLSIを同じ動作クロックで動作させるよう設計する。
このように設計すれば、動作の開始時にマスタLSIとスレーブLSIでワードクロックを同期させれば、その後は、マスタLSIから供給されるワードクロックは、スレーブLSIの動作カウンタがオーバーフローするタイミングと同じタイミングにスレーブLSIに入力され、ワードクロックを同期させるための「リセット」等の仕掛けは不要である。
しかしながら、近年のLSIの動作クロックは周波数が非常に高いため、同じ動作クロックを複数のLSIに供給するのは現実的には極めて困難である。更に、複数のLSIに同じ動作クロックを供給するために、プリント基板上にその高い周波数の動作クロックを流すこと自体が、ノイズの発生源となる危険性がある。
上記の動作クロック周波数の早さに起因する問題に対して、複数のLSIに同じ動作クロックを直接供給するのではなく、その動作クロックより周波数の低い同期クロックを複数のLSIに供給し、各LSIの内部で該同期クロックを逓倍して、各LSIで独自の動作クロックを生成することで、複数のLSIをほぼ同じ動作クロックで動作させる技術が従来からある。
この従来技術を複数のLSIで相互のワードクロックを同期させる場合に適用すれば、マスタLSIとスレーブLSIとに同期クロックを供給し、それぞれ同期クロックに同期した動作クロックを生成して動作させることにより、マスタLSIとスレーブLSIとを、ほぼ同じ動作クロックで動作させることができる。しかし、この方法では、複数のLSIに供給された同期クロックを、各LSIで逓倍して動作クロックを作成することから、各LSIで作成された動作クロックの間にわずかながら周波数のずれが生じる、という不都合があった。よって、複数のLSIで相互のワードクロックを同期させる場合に上記従来技術を適用したとしても、マスタLSIとスレーブLSIとの動作クロックに「わずかな周波数のずれ」が生じてしまうことから、スレーブLSIにおいては、ワードクロックの入力に応じた動作カウンタのリセットが行われることを抑制することが困難であった。したがって、従来技術では、複数のLSIの間で波形データをシリアル伝送する場合に、波形データに対するノイズ発生、そして該ノイズ発生による波形データの品質劣化が生じてしまうという不都合があった。
なお、シリアル接続された複数LSI間でのワードクロックの同期に関連する従来技術は、例えば下記特許文献1や特許文献2などに記載されている。
特開2004−109541号公報
特開2004−102136号公報
以下、添付図面を参照して、この発明の一実施形態について詳細に説明する。
図1は、この発明に係る音響信号処理装置の電子的ハードウェア構成例を示すブロック図である。音響信号処理装置は、電子楽器、音源装置、エフェクタ、あるいはオーディオミキサなど、符号化された楽音信号又は音響信号を処理する装置である。なお、この明細書では所定のサンプリング周期で標本化され符号化された楽音信号又は音響信号を「波形データ」という。
図1において、音響信号処理装置は、CPU1、フラッシュメモリ2、RAM3、音響信号処理部4、操作子5、表示器6、および通信インターフェース(通信I/F)7を含んで構成され、各部がデータおよびアドレスバス1Bを介して接続される。CPU1、フラッシュメモリ2、およびRAM3は音響信号処理装置の動作を制御する制御部である。フラッシュメモリ2にはCPU1が実行する各種プログラムを記憶されている。CPU1は、フラッシュメモリ2に記憶されたプログラムをRAM3に読み出し、該読み出したプログラムを実行する。
操作子5は、各種パラメータの値や各種指示を入力するためのパネル操作子などである。音響信号処理装置が電子楽器の場合には、操作子5には、ユーザが演奏情報を入力するため演奏操作子(鍵盤など)も含まれる。表示器6は、例えば液晶ディスプレイによって構成され、CPU1の制御に基づき各種情報を表示する。また、音響信号処理装置は、通信I/O7を介して外部の装置とデータ通信可能に接続される。通信I/O7は、例えばMIDI規格の信号を送受信するためのMIDI I/Fや、あるいはEthernet(登録商標)規格の通信I/Fなど、従来から知られる適宜の規格の通信I/Fにより構成される。
音響信号処理部4は、波形データを入力する入力部8と、波形データを出力する出力部9とに接続されており、例えば楽音信号生成処理や、波形データに対する信号処理(音特性制御処理やミキシング処理)など、CPU1から与えられた指示に応じた処理を実行する。例えば、音響信号処理部4で楽音信号生成処理を行うときには、音響信号処理部4は、所定のサンプリング周期毎に波形データのサンプルを生成して、生成した波形データのサンプルを出力部9から出力する処理を行う。また、音響信号処理部4で音特性制御処理など波形データに対する信号処理を行うときには、所定のサンプリング周期毎に、入力部8から入力される波形データのサンプルを処理して、該処理結果の波形データのサンプルを出力部9から出力する処理を行う。音響信号処理部4において、波形データのサンプルを処理するサンプリング周期は“ワードクロック”によって与えられる。“ワードクロック”は、波形データのサンプルを処理するサンプリング周期を示す信号である。音響信号処理部4は、ワードクロックに同期した波形データのサンプルを処理する。ワードクロックを生成する構成など、ワードクロックの詳細については、後述する。
音響信号処理部4は、互いにシリアル接続された複数の集積回路(LSI:「Large Scale Integrated circuit」の略語)により構成されている。互いにシリアル接続された複数のLSIの間では、波形データのサンプルを双方向にシリアル伝送することができる。なお、波形データのシリアル伝送は、波形データの各サンプルを構成するビットデータ列を、シリアル伝送クロックの1クロックあたり1ビットずつ順次伝送する方法である。周知の通り、複数LSIで波形データのサンプルをシリアル伝送する場合には、各LSIを、ワードクロックを使ってサンプリング周期を同期させなければならない。この発明は、後述する通り、複数LSIでワードクロック同期するときに従来発生していた波形データの品質の劣化という問題を防止する点に特徴がある。
図2(a)〜(c)は、音響信号処理部4を構成する複数のLSIの接続例、および波形データの処理内容の具体例を説明する図である。(a)には、2つの音特性制御用のLSI1とLSI2とをシリアル接続した例を示す。図に示す文字列「TCC」は「Tone Characteristic Controller」の略、すなわち「音特性制御部」である。音特性制御部は、例えばイコライザ、コンプレッサ、あるいはリバーブなど、波形データに対してエフェクトを付与する処理を実行する。入力部8から入力された波形データはLSI1に入力され、該LSI1による信号処理結果がLSI2に出力される。該LSI1において、入力された波形データは、音特性制御部(TCC)に入り、その処理結果と音特性制御を施さない波形データとが合算されて、LSI2に出力される。LSI2おいても同様に、LSI1からシリアル伝送された波形データは、音特性制御部(TCC)に入り、その処理結果と音特性制御を施さない波形データとが合算されて、出力部9へ出力される。このように、音特性制御用の2つのLSIがシリアル接続されることで、音響信号処理部4は、音特性制御用のLSIを1つしか備えない構成に比較して、2倍の処理能力を持つ音特性制御回路となる。
また、(b)には、2つの楽音信号生成用のLSI1とLSI2と、1つの音特性制御用のLSI3との3つのLSIをシリアル接続した例を示す。図において「TG」は「Tone Generator」の略、すなわち「楽音信号生成部(音源)」を意味する。楽音信号生成部には、例えば、PCM音源、FM音源、あるいはアナログモデリング音源など、従来から知られる適宜の音源方式を適用してよい。LSI1とLSI2とは、それぞれサンプリング周期毎に複数時分割チャンネル動作を行い、CPU1の制御の下で、複数チャンネルの波形データのサンプルを同時に生成する。LSI1で生成した複数発音チャンネルの波形データは合算され、該合算結果の波形データはLSI2にシリアル伝送され、該LSI2において当該LSI2で生成された複数発音チャンネルの波形データと合算され、該合算結果の波形データが音特性制御用のLSI3にシリアル伝送される。ここで、LSI1とLSI2とはそれぞれ、LSI3の音特性制御部(TCC)を通る信号処理チャンネルと、該音特性制御をスルーする信号処理チャンネルとの2系統の信号処理チャンネルが用意されており、発音チャンネル毎に、生成された波形データを音特性制御部(TCC)に送るか、又は送らないかを制御することができる。このように、楽音信号生成用の2つのLSIと、音特性制御用の1つのLSIをシリアル接続することで、音響信号処理部4は、LSIを1つしか備えない構成に比較して2倍の発音数を持つ楽音発生回路として機能し、且つ、楽音発生回路で生成した波形データに対する音特性制御回路として機能する。ここでは、波形データの合算を1系統で行うようになっていたが、混合レベルを変えて複数系統で個別に合算し、LSI3で系統毎に異なる音特性制御をおこなうようにしてもよい。なお、(b)の構成の場合、図1の入力部8は不要である。
また、(c)は、音量レベル制御部(Vol)と音特性制御部(TCC)との2つの機能を担うLSI1と、楽音信号生成部(TG)と音特性制御部(TCC)との2つの機能を担うLSI2をシリアル接続した例を示す。図の例では、入力部8からLSI1に入力された波形データは音量レベル制御部に入力され、音量レベル制御部は制御結果を3系統の系統毎に個別にレベル制御を行い出力する。音量レベル制御部の3系統の出力のうちの1つは音特性制御部に入力され、音量レベル制御部の3つの出力のうちの別の1つはそのままLSI2に出力される。音量レベル制御部のさらに別の1つの出力は、音特性制御部の出力と合算されて、LSI2に出力される。また、LSI2の楽音信号生成部は、生成した複数チャンネルの波形データをそれぞれ3系統の系統別にレベル制御して合算し、3系統の合算結果をパラレルで出力する。LSI2の楽音信号生成部の3系統の出力のうちの1つは、LSI1の音特性制御部へ供給される。また、別の1つは、LSI1の音量レベル制御部の出力と合算され、LSI2の音特性制御部へ供給される。また、さらに別の1つは、LSI1の音量レベル制御部の出力とLSI1の音特性制御部の出力との合算結果に合算され、その合算結果がLSI2の音特性制御部と合算され、音響信号処理部4の最終的な出力として、出力部8へ供給されるよう結線されている。このような構成によれば、LSI1およびLSI2の各ステージを自由に結線することができ、例えば、LSI2の楽音信号生成部が生成した波形データをLSI1の音特性制御部で処理する等の、自由度の高い音響信号処理を行うことができる。
図2(a)〜(c)に例示したように、複数のLSIをシリアル接続することで、音響信号処理部4の能力が拡張される。音響信号処理部4を構成するLSIの数は限定されない。全体として所望の性能の音響処理部4になるよう、複数のLSIを順次シリアル接続することができる。
図3は、音響信号処理部4のハードウェア構成の詳細を示すブロック図である。図3に示す音響信号処理部4において、第1LSI(「LSI1」)10と第2LSI(「LSI2」)20との2つのLSIがシリアル接続される。図3の例では、符号10の「LSI1」がワードクロックのマスタLSIであり、符号20の「LSI2」がワードクロックのスレーブLSIである。すなわち、マスタLSI10からスレーブLSI20にワードクロック(図3において「Wクロック」)を供給することで、該供給されたワードクロックにスレーブLSIのワードクロック(波形データを処理するサンプリング周期)を同期させる。
なお、この発明に係る実施例において、LSI10、およびLSI20は、それぞれ、ワードクロックの1クロックに対する動作クロックのクロック数が固定値で設計されたLSIとする。この実施例においては、一例としてワードクロックの1クロックに対する動作クロックのクロック数が「4096」クロックに固定されているものとする。また、サンプリング周期は、48kHzとする。
マスタLSI(「LSI1」)10は、処理回路11、第1シリアルインターフェース(シリアルI/O)12、第2シリアルI/O13、動作クロック発生器(O_CLK発生器:「O_CLK」はOperation Clockの略)14、動作カウンタ15、および制御レジスタ16を備える。また、スレーブLSI(「LSI2」)20は、処理回路21、第1シリアルI/O22、第2シリアルI/O23、動作クロック発生器24、動作カウンタ25、制御レジスタ26、およびリセットタイミング補正部(RT補正:「RT」は「Reset Timing」の略)27を備える。図3の例では、マスタLSI10とスレーブLSI20の構成上の違いは、スレーブLSI20が、RT補正部27を備える点である。
LSI10,20に備わる制御レジスタ16,26は、バス1Bを介してCPU1に接続されており、該CPU1から与えられるLSI10,20の各部の制御パラメータの値や、処理回路11,21が実行するマイクロプログラム等を格納するレジスタである。処理回路11,21は、音特性制御用のLSIであれば、CPU1によりレジスタに設定されたマイクロプログラムを実行して、レジスタに設定されたアドレスや係数のパラメータを用いて、デジタル信号(波形データ)に対する信号処理を行う回路(DSP:digital signal processorの略)であって、波形データに対する音特性制御等の信号処理(エフェクタ機能)を実行する。また、楽音信号生成用のLSIであれば、各発音チャンネル毎に、CPU1からの発音指示に応じて、レジスタに設定された当該発音チャンネルの楽音制御パラメータに応じた波形データの生成処理を行う回路であって、該楽音制御パラメータに応じた楽音特性を有する波形データを生成する楽音信号生成処理(音源機能)を実行する。
LSI10のシリアルI/O12、13、およびLSI20のシリアルI/O22、23は、シリアル伝送方式により波形データを入出力するためのインターフェースである。図3に示す構成では、マスタLSI10が第1シリアルI/O12を介して波形データの入力部8(図1参照)に接続されており、該入力部8から入力された波形データはマスタLSI10にシリアル伝送され、処理回路11に供給される。また、マスタLSI10の第2シリアルI/O13とスレーブLSI20の第1シリアルI/O22とを介して、マスタLSI10とスレーブLSI20とがシリアル接続されており、該マスタLSI10とスレーブLSI20との間で波形データが双方向にシリアル伝送される。そして、スレーブLSI20が第2シリアルI/O23を介して波形データの出力部9(図1参照)に接続されており、該スレーブLSI20の処理回路21から出力された波形データは該出力部9へシリアル伝送され出力される。ここで、マスタLSIとスレーブLSIの間のシリアル伝送では、シリアル伝送クロックとして、後述する動作クロックから(分周により)直接生成されたクロックが使用される。
マスタLSI10の動作クロック発生器14、およびスレーブLSI20の動作クロック発生器24は、それぞれ、同期クロック発生器(S_CLK発生器:「S_CLK」はSynchronization Clockの略)30に接続されている。同期クロック発生器30は、マスタLSI10およびスレーブLSI20のそれぞれの動作クロックよりも周波数の低い、例えば約6MHzの、同期クロックを発生し、マスタLSI10とスレーブLSI20とのそれぞれに、同じ同期クロックを供給する。同期クロック発生器30が発生する同期クロックとは、マスタLSI10の動作クロック発生器14、およびスレーブLSI20の動作クロック発生器24のそれぞれで同期した動作クロックを発生するために利用されるクロックである。
マスタLSI10の動作クロック発生器14、およびスレーブLSI20の動作クロック発生器24は、同期クロック発生器30から供給された同期クロックを、例えば32逓倍することにより、該同期クロックよりも周波数の高い、例えば、200MHzの、動作クロックを発生する。動作クロック発生器14,24の詳細な構成例を、図4に示す。図4に示す通り、動作クロック発生器は、同期クロック発生器30から供給された同期クロックとフィードバック信号との位相差を検出する周波数補正部(F補正:「F」はfrequencyの略)31と、該周波数補正部31の出力信号により発振周波数が制御される発振器31と、発振器31の出力と周波数補正部31の入力の間に挿入された分周器32とから構成される。周波数補正部31は、同期クロック発生器30から供給された同期クロックと分周器32を介してフィードバックされた発振器32の出力信号との位相差を検出し、該位相差に応じた出力信号を発振器32に出力することで、同期クロックの位相に対して発振器32の出力信号の位相が一定の関係を保つように、発振器32の発振周波数を制御(補正)する。ここで分周器32を介してフィードバックされる発振器32の出力信号は、発振器32の出力周波数を所定の分周比N(Nは任意の整数)で分周したものである。したがって、発振器32は、同期クロックに同期した動作クロックであって、該同期クロックをN倍逓倍した周波数の動作クロックを出力する。すなわち、動作クロック発生器は、PLL(Phase Locked Loop:「位相ロックループ」の略)による周波数逓倍器である。
マスタLSI10の動作クロック発生器14で生成された動作クロックは、自身の処理回路11と、第1及び第2シリアルI/O12,13に供給されるとともに、動作カウンタ15に供給される。処理回路11と、第1及び第2シリアルI/O12,13は、動作クロック発生器14で生成された動作クロックに基づき動作する。
マスタLSI10の動作カウンタ15は、動作クロック発生器14から供給された動作クロックをカウントし、所定カウント値ごとに1クロックのレートでワードクロックを生成する。ワードクロックは波形データのサンプリング周期を示す。この実施例では、動作カウンタ15は、例えば12ビットのカウンタであり、その下限値「0」から上限値「4095」までのカウント期間が、ワードクロックの1クロックの期間に相当する。すなわち、カウント値の最上位ビットに現れる信号が動作カウンタ15で生成されるワードクロックである。サンプリング周期毎にカウントされる総クロック数「4096」は、ワードクロックの1クロックに対応する所定カウント数である。動作カウンタ15は、フリーランで、下限値「0」から上限値「4095」までカウントすることを繰り返すものである。そして、ワードクロックのタイミングは、ワードクロックの値が「1」から「0」に変化するタイミング、つまり、カウント値が「4095」から「0」に戻るタイミングを言う。マスタLSI10の動作カウンタ15が生成したワードクロックは、ワードクロックとしてスレーブLSI20に供給されるとともに、自身の処理回路11と、第1及び第2シリアルI/O12,13とに供給される。
処理回路11と、第1及び第2シリアルI/O12,13は、動作カウンタ15のカウント値に基づき、前記ワードクロックに同期した波形データのサンプルを処理する。第1及び第2シリアルI/O12,13は、動作クロックを例えば80分周することにより、約2.5MHzのシリアル伝送クロックを生成し、生成したシリアル伝送クロックの1クロック毎に、波形データのサンプルを構成するビット列を1ビットずつ順次伝送することで、動作カウンタ15で生成されたワードクロックに同期して、波形データのサンプルの入出力を行う。なお、シリアル伝送クロックは、動作クロック発生器14で発生した動作クロックに基づき生成されるものである。また、処理回路11は、該カウント値により実行すべき処理内容(例えば、マイクロプログラムのステップ番号)が決定され、動作カウンタ15で生成されたワードクロックに同期して、波形データのサンプル毎の処理(楽音生成や、音特性制御など)を行う。
スレーブLSI20の動作クロック発生器24で生成された動作クロックは、自身の処理回路21と、第1及び第2シリアルI/O22,23に供給されるとともに、動作カウンタ25に供給される。スレーブLSI20の動作カウンタ25は、動作クロック発生器14から供給された動作クロックをカウントする。動作カウンタ25のカウント上限値は、ワードクロックの1クロックの周期に相当する値(この実施例では一例として「4095」)である。動作カウンタ25は、動作クロックのクロック数を、下限値「0」から上限値「4095」までカウントすることを繰り返すものである。動作カウンタ25のカウント値は、自身の処理回路21、第1及び第2シアルI/O22,23、およびRT補正部27に供給される。スレーブLSI20内の各部に対する動作クロックおよび動作カウンタ25のカウント値の働きは、マスタLSI10のそれと同様である。つまりスレーブLSI20内の各部で波形データを処理するサンプリング周期は、動作カウンタ25のカウント値によって与えられる。スレーブLSI20は、動作カウンタ25のカウント開始タイミング(下限値「0」のタイミング)が、マスタLSI10から供給されるワードクロックのタイミングから大きくずれないように制御されている点がマスタLSI10と異なる。動作カウンタ25のカウント開始タイミングを、マスタLSI10の動作カウンタ15のカウント開始タイミングとほぼ同じにすることにより、スレーブLSI20においてマスタLSI10のシリアル伝送クロックとほぼ同じタイミングのシリアル伝送クロックを生成して、スレーブLSI20とマスタLSI10の間でシリアル伝送が行えるようになる。
スレーブLSI20の動作カウンタ25のカウントタイミングとマスタLSI10の動作カウンタ15のカウントタイミングとがずれたときに、その両カウンタのカウントタイミングを同期化させる手法は、基本的には、ワードクロックがスレーブLSI20に入力されたタイミングで、動作カウンタ25のカウント値をリセットする、従来技術の「リセット型」相当の手法である。この発明は、RT補正部27により、多少カウントタイミングがずれても動作カウンタ25のリセットを行わず、特定の条件が満たされた場合のみ動作カウンタ25のリセットを行うようにした点に特徴がある。
RT補正部27は、マスタLSI10からのワードクロックのタイミングで動作カウンタ25のカウント値を見ることにより、動作カウンタ25のカウントタイミングと動作カウンタ15のカウントタイミングのずれを検出して、そのずれが所定の閾値以上となったときにだけ、動作カウンタ25のカウント値をリセットするものである。動作カウンタのリセットを行う点こそ従来技術の「リセット型」と同じだが、ここでのリセットの目的は、動作カウンタ25のカウント周期をマスタLSI10に合わせることではなく、そのカウントタイミングをマスタLSI10に合わせることにある。「ワードクロックのタイミングにおける動作カウンタ25のカウント値」は、その最上位ビット(第12ビット)を符号ビットと解釈すれば、最小値「−2048」から最大値「+2047」までの、動作カウンタ15に対する動作カウンタ25のカウントタイミングずれを示す「ずれカウント値」となる。該ずれカウント値は、動作カウンタ25のカウントタイミング(カウント値の位相)が動作カウンタ15より早い場合は正となり、遅い場合は負となる。また、該ずれカウント値の絶対値は、カウントタイミング(カウント値の位相)のずれの大きさに対応する。
この実施例では、RT補正部27は、制御レジスタ26に設定された動作モードパラメータの値に応じた動作モードで動作するものとする。RT補正部27の動作モードには、動作カウンタ25の動作をマスタLSI10から供給されるワードクロックに常時同期させる「モード1」と、マスタLSI10からのワードクロックのタイミングにおける動作カウンタ25のカウント値(位相のずれに位相)が、所定の閾値以上となったときに同期をかける「モード2」と、動作カウンタ25の動作をマスタLSI10から供給されるワードクロックに同期させない「モード0」との三通りのモードがある。「モード2」の動作が、RT補正部27に特徴的な動作である。
「モード2」の場合、RT補正部27には制御レジスタ26に格納された所定の閾値が設定される。そして、RT補正部27は、マスタLSI10からのワードクロックのタイミングにおける動作カウンタ25のカウント値(位相のずれに位相)が、所定の閾値以上となったときに、そのタイミングで動作カウンタ25のカウント値をリセットする。ここで、RT補正部27に設定される閾値は、マスタLSI10とスレーブLSI20の間のデータのシリアル伝送で許容できる各ビットデータの時間ずれに応じて予め設定された値であって、その具体的な値はシリアル伝送の仕様に応じて適宜の値に設定される。
したがって、RT補正部27が「モード2」で動作しているときには、マスタLSI10からのワードクロックのタイミングにおける動作カウンタ25のカウント値(位相のずれに相当)が、前記閾値に達するまでは、該マスタLSI10から供給されたワードクロックに応じた動作カウンタ25のカウント値のリセットが行われない。すなわち、ワードクロックの入力タイミングに対する第2動作クロックカウンタ部のリセットタイミングに閾値分だけマージンを確保して、該閾値分のずれの範囲ならば、動作カウンタ25のカウント周期とマスタLSI10から供給されるワードクロックとの同期がとれているものと見なす。
また、「モード1」の場合、マスタLSI10からRT補正部27にワードクロックが入力される毎に、RT補正部27は動作カウンタ25のカウント値をリセットする。よって、RT補正部27が「モード1」で動作しているときには、マスタLSI10から供給されるワードクロックの1クロックが入る毎に、動作カウンタ25のカウント値がリセットされる。したがって、動作カウンタ25のリセットタイミングは、マスタLSI10から供給されるワードクロックに常時同期する。これは従来のスレーブLSIの「リセット型」ワードクロック同期方法と同じ動作である。
また、「モード0」は、マスタLSI10からRT補正部27にワードクロックが入力されても、動作カウンタ25にリセットをかけない動作モードである。つまり、動作カウンタ25のカウント周期とマスタLSI10から供給されるワードクロックの同期をとらない。これは、LSI20を単独又はワードクロックマスタとして使うときの動作カウンタの使い方であるから、スレーブLSIではRT補正部27に「モード0」を設定することはない。
図3の例では、音響信号処理部4を構成するマスタLSI10とスレーブLSI20とがそれぞれ異なる構成(スレーブLSI20にのみRT補正部27が備わる構成)を示したが、2つのLSI10,20は、それぞれ、マスタLSIとスレーブLSIとのいずれの働きも可能な同一構成のLSIで構成されてもよい。図5は、マスタLSIとスレーブLSIとのいずれの働きも可能なLSIの構成例を示す。図5に示す通り、LSI40は、処理回路41、第1シリアルI/O42、第2シリアルI/O43、動作クロック発生器44、動作カウンタ45、制御レジスタ46、およびRT補正部47を備える。LSI40を、マスタLSIとして機能させるときには、RT補正部47に動作モードパラメータとして「モード0」を設定することで、動作カウンタ45の動作を外部のクロックに同期させない。また、動作カウンタ45でカウントした動作クロックのカウント値に基づくワードクロックをスレーブLSIに出力する。一方、LSI40を、スレーブLSIとして機能させるときには、RT補正部47に動作モードパラメータとして「モード1」又は「モード2」を設定して、外部(マスタLSI)から供給されたワードクロックに動作カウンタ45のカウント周期を同期させる。
図6は、図1の音響信号処理装置を制御するためにCPU1が実行するメイン処理の手順の一例を示すフローチャートである。音響信号処理装置の起動時に、CPU1は、音響信号処理部4の初期設定処理を行い(ステップS1)、また、音響信号処理部4以外のその他の各部の初期設定を行う(ステップS2)。図7は、前記ステップS1においてCPU1が実行する音響信号処理部4の初期設定処理の手順の一例を示すフローチャートである。図7のステップS6において、CPU1は、スレーブLSI20の制御レジスタ26にRT補正部27の動作モードパラメータの値として「モード1」をセットする処理を行う。なお、マスタLSIがRT補正部を備える構成(図5の構成)の場合には、当該ステップS6においてマスタLSIの制御レジスタ(図5において符号46)にRT補正部の動作モードパラメータの値として「モード0」をセットする。マスタLSIが図3に示すようにRT補正部を備えない構成であれば、当該ステップS6でのマスタLSIに関するモード設定は不要である。
上記ステップS6によりスレーブLSI20のRT補正部27は「モード1」で動作するよう設定される。したがって、音響信号処理装置の起動時には、スレーブLSI20の動作カウンタ25のカウント周期はマスタLSI10から供給されるワードクロックに常時同期する状態になる。一方、マスタLSI10は、外部からのクロックに同期することなく、動作カウンタ(図3において符号15)で動作クロックを自身のカウントし、そのカウント値に基づくワードクロックをスレーブLSI20に供給可能な状態になる。
ステップS7において、CPU1は、マスタLSI10からスレーブLSI20にワードクロックが供給されるのを待つ。前記ステップS6によりスレーブLSI20のRT補正部27の動作モードに「モード1」が設定されているので、マスタLSI10からスレーブLSI20にワードクロックが供給されると、スレーブLSI20のRT補正部27は、マスタLSI10からワードクロックが入力されたタイミングで動作カウンタ25のカウント値をリセットする。これにより、スレーブLSI20とマスタLSI10のワードクロック位相の同期(動作カウンタ15と動作カウンタ25のカウントタイミングの同期)が行われる。ワードクロックは、サンプリング周期で入力(変化)するので、ステップS7では、最低1サンプリング周期相当の期間だけ待てばよい。
ステップS8において、CPU1は、スレーブLSI20の制御レジスタ26に、RT補正部27の動作モードのパラメータの値として「モード2」をセットするとともに、RT補正部27に設定される閾値をセットする。これにより、スレーブLSI20は、マスタLSI10からワードクロックが供給されたタイミングにおける動作カウンタ25のカウント値と、ワードクロックの1クロックに対応する動作クロックのクロック数との差が前記閾値に達するまでは、該マスタLSI10から供給されたワードクロックに応じた動作カウンタ25のリセットが行われないよう設定される。そして、ステップS9において、CPU1は、マスタLSI10の制御レジスタ16とスレーブLSI20の制御レジスタ26とのそれぞれに所定の初期データを設定する。ここで設定される初期データは、例えばLSIが楽音生成部(音源)であれば、全ての発音チャンネルに対する発音オフを指示するデータなどであり、また、例えばLSIが音特性制御部(エフェクタ)であれば、波形データの出力ミュートを指示するデータなどである。
図6に戻ると、CPU1は、上記ステップS1およびステップS2において初期設定を行った後、音響信号処理装置のメイン動作を行う。すなわち、CPU1は、操作子5の操作に応じた操作データの入力や入力部8からの波形データの入力など、何らかのイベントを検出し(ステップS3)、イベントを検出したら(ステップS4のYES)、該検出したイベントに応じた処理を実行する(ステップS5)。前記ステップS5において実行される処理は、具体的には、例えば、音響信号処理部4(マスタLSI10,スレーブLSI20)が1ないし複数の楽音信号生成部(TG)を含む場合には、発音を支持するイベント(ノートオン)に応じて、何れかの発音チャンネルを割り当て、レジスタに割り当てた発音チャンネルの楽音制御パラメータを設定し、同発音チャンネルに波形データの生成を開始させる処理や、音量を指示するイベント(エクスプレッション)に応じて、波形データを生成している発音チャンネルの音量パラメータの値を変更し、該波形データの音量を変化させる処理などである。また、音響信号処理部4が音特性制御部(TCC)を含む場合には、エフェクトを選択するイベントに応じて、レジスタにその選択されたエフェクトのマイクロプログラム、アドレス、係数などを設定することにより、選択されたエフェクトの信号処理を実行させる処理や、該エフェクトのパラメータを変更するイベントに応じて、レジスタのアドレスないし係数の値を変更する処理などである。
音響信号処理装置のメイン動作における、マスタLSI10とスレーブLSI20とのワードクロック同期(マスタLSI10のワードクロックと動作カウンタ25のカウント周期の同期)の動作について説明する。マスタLSI10とスレーブLSI20には、それぞれ、S_CLK発生器30から出力された同期クロックが供給される。マスタLSI10の動作クロック発生器14と、スレーブLSI20の動作クロック発生器24は、それぞれ、その同期クロックに同期した動作クロックを発生する。マスタLSI10は、動作カウンタ15において動作クロック発生器14で発生した動作クロックをカウントし、該動作カウンタ15のカウント値に同期したタイミングで該ワードクロックに同期した波形データのサンプルを処理する一方で、そのカウント値の最上位ビットであるワードクロックをスレーブLSI20に供給する。
スレーブLSI20の動作カウンタ25は、動作クロック発生器24発生した動作クロックをカウントする。スレーブLSI20のRT補正部27は、前記ステップS8により「モード2」で動作するよう設定されているので、マスタLSI10からのワードクロックのタイミングにおける動作カウンタ25のカウント値(位相ずれに相当)が、前記閾値に達するまでは、該マスタLSI10から供給されたワードクロックに応じた動作カウンタ25のカウント値のリセットが行われない。そして、マスタLSI10からのワードクロックのタイミングにおける動作カウンタ25のカウント値(位相ずれに相当)が、前記閾値を越えたときに、RT補正部27は動作カウンタ25をリセットして、スレーブLSI20の動作カウンタ25のカウントタイミングをマスタLSI10の動作カウンタ15のカウントタイミングに一致させる。
図8は、RT補正部27の閾値、すなわち、マスタLSI10からワードクロックが供給されたタイミングにおける動作カウンタ25のカウント値と、ワードクロックの1クロックに対応する動作クロックのクロック数とのずれとして許容する範囲を説明するためのタイミングチャートである。閾値は、LSI10,20の間のデータのシリアル伝送の仕様、具体的にはワードクロックに対する各ビットデータの時間ずれの許容限度に基づき決定される。図8において(a)は1クロック(1周期)のワードクロックである。例えば、シリアル伝送の仕様の一例として、上述したように、マスタLSI10およびスレーブLSI20の動作クロックを200MHz程度、LSI間のシリアル伝送クロックを約2.5MHzであり、シリアル伝送クロックの1クロックに対する動作クロックのクロック数が80であるとする。(b)はワードクロックの1クロックで波形データのサンプルがシリアル伝送される様子を示す。上記仕様のシリアル伝送では、LチャンネルおよびRチャンネルの2チャンネルステレオ波形データ(ステレオ信号)のサンプルをそれぞれ20ビットずつシリアル伝送する(最大26ビットずつ伝送可能)。また(b)に示す通り、ワードクロックの半周期以内にステレオ信号の1チャンネル分のデータが伝送されるようになっており、ワードクロックの立ち上がり及び立ち下がりのタイミングが各チャンネルのデータの先頭を示している。
シリアル伝送の仕様の一例として、シリアル伝送における各ビットデータの時間ずれの許容限度を25%とすると、図8(c)に示すマスタLSI10のシリアル伝送クロックに対して、スレーブLSI10のデータ伝送タイミングに25%進んだ時間ずれがある場合、(d)に示すように、スレーブLSI20では、波形データのサンプルの伝送開始タイミングはワードクロックの立ち上がりと立下りに対して25%分早くなる。反対に、25%遅れた時間ずれがある場合、(e)に示すように、スレーブLSI20では、波形データのサンプルの伝送開始タイミングはワードクロックの立ち上がりと立下りに対して25%分遅くなる。いずれにせよ、許容限度の範囲内ならば、マスタLSI10とスレーブLSI20との間で波形データのシリアル伝送は行うことができる。シリアル伝送における各ビットデータの時間ずれを動作クロックで表現すると、ここで述べている例ではシリアル伝送クロックの1クロックに対する動作クロックのクロック数を80としているので、シリアル伝送における各ビットデータの25%の時間ずれは、動作クロックの20クロック分に相当する。従って、(d)及び(c)に示された時間ずれは、それぞれワードクロックのタイミングに対するスレーブLSIの動作クロックの20クロック分の進み又は遅れに相当する。なお、図8(c)、(d)及び(e)の時間軸は、(a)及び(b)の時間軸を約50倍に拡大したものとなっている。
よって、シリアル伝送における各ビットデータの時間ずれ許容限度(25%)に対応する動作クロックのクロック数「20クロック」を、RT補正部27の閾値に設定することことにより、この実施例のようにワードクロックの1クロックに対する動作クロックのクロック数を「4096」とする場合には、ずれカウント値の上限値は「+20」(カウント値の「20」に相当)、下限値は「−20」(カウント値の「4076」に相当)となる。動作カウンタ25のカウント値の位相と動作カウンタ15のカウント値の位相ずれを閾値分だけ許容し、該閾値分のずれの範囲ならば、動作カウンタ25のカウント周期とマスタLSI10から供給されるワードクロックとの同期がとれているものと見なす。これにより、マスタLSI10からのワードクロックのタイミングにおける動作カウンタ25のカウント値が「4076」〜「4095」又は「0」〜「20」の範囲(ずれカウント値の「−20」〜「+20」の範囲に相当)内であれば、ワードクロックのタイミングに応じた動作カウンタ25のリセットを行わないようになり、動作カウンタ25のリセットによって生じる波形データの品質劣化を防止することができる。そして、RT補正部27は、マスタLSI10からのワードクロックのタイミングにおける動作カウンタ25のカウント値が、「21」〜「4075」の範囲(ずれカウント値の「−21」以下又は「+21」以上の範囲に相当)であれば、マスタLSI10からのワードクロックのタイミングで動作カウンタ25のカウント値をリセットすることで、動作カウンタ25のカウント値の位相をマスタLSI10の動作カウンタ15のカウント値の位相に合わせる。
このように本実施例によれば、スレーブLSI20にRT補正部27を設けることにより、マスタLSI10からのワードクロックのタイミングにおける動作カウンタ25のカウント値(位相ずれに相当)が、閾値に応じた範囲から外れるときだけ、ワードクロックのタイミングに動作カウンタ25をリセットする、つまり、スレーブLSI20の動作カウンタ25のカウント値の位相と、マスタLSI10の動作カウンタ15のカウント値の位相との差が、閾値を越えない限り動作カウンタ25をリセットしないよう構成することで、LSI間のシリアル伝送の信頼性を確保しつつ、動作カウンタ25のリセットによって生じる波形データの品質が劣化することを防止することができる。
マスタLSI10の動作クロックもスレーブLSI20の動作クロックも、互いに同じ同期クロックに同期しているクロックであるから、理想的には、マスタLSI10とスレーブLSI20とは同じ動作クロックで動作する。しかし、実際には、動作クロック発生器14、24において同期クロックを逓倍してそれぞれの動作クロックを生成していることから、マスタLSI10とスレーブLSI20との動作クロックの間には「わずかな周波数ずれ」が生じる。そして、このスタLSI10とスレーブLSI20との動作クロックの間の「わずかな周波数ずれ」のために、動作カウンタ15のカウント値と動作カウンタ25のカウント値の間には位相差が生じる。しかし、マスタLSI10の動作クロックもスレーブLSI20の動作クロックも、同じ同期クロックに同期しているクロックであるから、それだけの要因であれば、その位相差は、それ程大きくなることはなく、RT補正部27による動作カウンタ25のリセットは起こらない。より大きな位相差が生じるそれ以外の要因としては、例えば突発的なノイズ、信号の飛びつき、電磁波などが考えられる。これら要因により、動作カウンタ15のカウント値と動作カウンタ25のカウント値の間に閾値以上の位相差が生じた場合は、RT補正部27が、ワードクロックのタイミングで動作カウンタ25をリセットし、その位相差を解消する。しかしながら、このような要因が生じることは極めて希である。よって、本発明の音響信号処理装置によれば、動作カウンタ25のリセットによって波形データが品質劣化することを、実質的になくすることができる。
なお、前記図3の音響信号処理部4は、シリアル接続された2つのLSI10,20のうちで、波形データの入力部8に接続されたLSI10をワードクロックのマスタLSIとし、出力部9に接続されたLSI20をワードクロックのスレーブLSIとする接続例を示したが、図9(a)のように、シリアル接続された2つのLSI48,49のうちで、波形データの入力部8に接続されたLSI48をワードクロックのスレーブLSIとし、波形データの出力部9に接続されたLSI49をワードクロックのマスタLSIとすることもできる。つまり、マスタLSIは、図3のように波形データの経路の上流にあってもよいし、図9(a)のように波形データの経路の下流にあってもよい。
また、3つ以上のLSIをシリアル接続した場合は、複数のLSIのいずれか1つがマスタLSIとなり、残りがスレーブLSIとなる。図9(b)に3つ以上のLSIをシリアル接続した場合の接続例を示す。図9(b)においては、シリアルに接続された4つのLSI50、51、52、および53のうち、LSI51がマスタLSIとなり、スレーブLSI50、52、および53にワードクロックを供給する。この場合、スレーブLSI50、及び52とマスタLSI51とのシリアル伝送は、前述の2つのLSIをシリアル接続する接続例と同様にマスタLSIとスレーブLSIとの間のシリアル伝送であるが、スレーブLSI52とスレーブLSI53との間では、スレーブLSI同士で波形データのシリアル伝送を行う。このようにスレーブLSI同士で波形データをシリアル伝送する場合には、マスタLSIと直接波形データをシリアル伝送する場合よりも、ワードクロックに対する各ビットデータの時間ずれの許容限度が狭くなるので、RT補正部に設定する閾値をマスタLSIとスレーブLSIとでシリアル伝送する場合の閾値の半分に設定する。すなわち、ワードクロックの1クロックに対する動作クロックのクロック数を4096、シリアル伝送における各ビットデータの時間ずれ許容限度が25%とすると、スレーブLSI同士で波形データをシリアル伝送する場合には、RT補正部に設定する閾値は動作クロックのクロック数「10クロック」である。その場合、マスタLSIからのワードクロックのタイミングにおける動作カウンタ25のカウント地位が、「4086」〜「4095」又は「0」〜「10」の範囲(ずれカウント値「−10」〜「+10」の範囲に相当)内にあれば、動作カウンタ25のリセットを行わない。このように、スレーブLSI同士で波形データをシリアル伝送する場合には、RT補正部に小さな閾値(1/2の閾値)を設定して、小さなずれで動作カウンタ25のリセットがかかるようにする。
なお、上記実施例では、音響信号処理部4の初期設定処理として、図7のステップS6でRT補正部27の動作モードとして「モード1」をセットし、ワードクロックのタイミングと動作カウンタ25のカウント動作を同期させてから(ステップS7)、ステップS8においてRT補正部27の動作モードとして「モード2」モード2をセットするものとした。しかかし、この処理は、RT補正部27の動作モードを切り替える処理によって実現する方法に限らず、ステップS6においてRT補正部27の閾値として「0」をセットすることで実質的にモード1と同じ動作(常時同期)を行ってから、ステップS8で実質的な閾値、すなわちシリアル伝送における各ビットデータの時間ずれの許容限度に対応する値をセットするよう構成することもできる。また、この信号処理部4の初期設定のための制御は、上記実施例のようにCPU1の制御によって実行されるのではなく、スレーブLSIの起動時にRT補正部の閾値切り替え処理を含む初期設定用のマイクロプログラムをスレーブLSIに実行させることで、スレーブLSIで自動的に行ってもよい。
また、上記実施例では、各ワードクロックのタイミングで、カウントタイミングのずれを閾値と比較し、比較結果に応じてリセットを行うようになっていたが、比較とリセ宇ットとを異なるワードクロックのタイミグで行うようにしてもよい。例えば、あるワードクロックで、カウントタイミングのずれを閾値と比較し、その比較結果に応じて、次のワードクロックのタイミングでリセットを行うようにしてもよい。
また、上記実施例におけるサンプリング周波数、同期クロック、動作クロック、シリアル伝送クロックの各周波数、動作クロック発生器14、24の逓倍数、およびシリアル伝送クロックを生成する際の分周比は、一例に過ぎず、それぞれ異なる値で設計できる。また、シリアル伝送における各ビットデータの時間ずれの許容限度も一例であり、シリアル伝送回路や動作条件によって異なる。
1 CPU、2 フラッシュメモリ、3 RAM、4 音響信号処理部、5 操作子、6 表示器、7 通信I/O、8 入力部、9 出力部、10 マスタLSI、11 処理回路、12,13 シリアルI/O、14 動作クロック発生器、15 動作カウンタ、16 制御レジスタ、20 スレーブLSI、21 処理回路、22,23 シリアルI/O、24 動作クロック発生器、25 動作カウンタ、26 制御レジスタ、27 リセットタイミング補正部、30 同期クロック発生器