1.実施例の構成
1.1.電子楽器の全体構成
次に、本発明の一実施例の電子楽器の全体構成を図1を参照し説明する。
図において102はパネルスイッチであり、ここで電子楽器の各種パラメータが設定される。104はパネル表示器であり、電子楽器の各種状態等を表示する。114はネットワークインタフェース部であり、ローカルエリアネットワーク(図示せず)を介して、外部のパーソナルコンピュータ等との間で演奏情報や波形データ等の入出力を行う。116はMIDIインタフェースであり、ここに鍵盤あるいはシーケンサ等のMIDI機器が接続され、MIDI信号を入出力する。
118はディスクドライブであり、CD−ROM、CD−RW、MO等のディスク120に対して波形データ、演奏情報等のデータの読出しおよび書込みを行う。124はCPUであり、ROM126に格納された制御プログラムに基づいて、他の構成要素を制御する。122はタイマであり、CPU124に対してタイマ割込みを発生させる。128はRAMであり、CPU124のワークメモリとして用いられる。
次に、400は波形メモリ部であり、ROMおよびRAMの双方あるいは一方によって構成され、波形データを記憶する。200は音源部であり、CPU124の制御の下、これら波形データを読出し、所定のサンプリング周波数の楽音信号を合成する。合成された楽音信号は、DAコンバータ110を介してアナログ信号に変換され、サウンドシステム112を介して発音される。108は他の音源装置あるいはエフェクタ等の外部回路である。この外部回路108から供給される楽音信号も音源部200において合成される楽音信号に混合され、DAコンバータ110を介してサウンドシステム112に出力される。
1.2.音源部200の構成
次に、図2を参照し、所定のサンプリング周期を基本周期として動作する音源部200の詳細構成を説明する。図において300はメモリI/O部であり、波形メモリ部400内の各メモリデバイスにアクセスし、波形データの読出し/書込み等の制御を行う。202は音源制御レジスタであり、波形データ読出しのための読出しアドレスの初期値、ループ部の開始アドレス、ピッチ、エンベロープ特性、エフェクト処理の内容等、楽音信号を発生するための種々のパラメータが発音チャンネル毎に記憶される。204はXアクセス回路であり、CPU124の制御の下、メモリI/O部300を介して波形メモリ部400をアクセスすることにより、CPU124による波形データの読出し/書込み制御を行う。
ここで、Xアクセス回路204の概要を説明しておく。CPU124によって直接的に波形メモリ部400をアクセスしようとすると、しばしば音源部200自体によるアクセスと衝突し、CPU124によるアクセスに対して待ち時間が発生することがある。Xアクセス回路204は、この待ち時間を解消することによってCPU124の動作効率を高めようとするものである。そこで、Xアクセス回路204においては、読出し/書込み用のFIFOバッファが設けられている。
CPU124から波形メモリ部400に対して転送すべきデータおよびアドレスは、書込み用のFIFOバッファにおいて予めストリームとしてまとめられる。そして、各発音チャンネルの波形合成のために波形メモリ部400がアクセスされていない期間内においては、Xアクセス回路204の制御の下、これらのデータが波形メモリ部400内のメモリデバイスに連続的に書き込まれるようにした。
同様に、CPU124によって波形メモリ部400から読み出すべきデータのアドレスも予め読出し用FIFOバッファにストリームとしてまとめられ、音源部200の空き時間にこれらのデータが連続的に読み出されるようにした。この読出し用FIFOバッファに格納された情報は、必要に応じたタイミングでCPU124によって読み出される。
すなわち、発音チャンネルの波形合成のために波形メモリ部400が頻繁にアクセスされている場合には、Xアクセス回路204によるデータ転送が遅くなり、発音チャンネルが少ない場合等においては、Xアクセス回路204によるデータ転送が高速になる。かかる処理により、データの入出力が完了するまでの時間はある程度要求されるが、データの入出力に費やされる時間そのものは短縮することができ、CPU124を効率的に動作させることができる。なお、Xアクセス回路204の詳細は、上記特開平10−97258号公報に開示されている。
206はサンプリング周期毎に最大64チャンネル分の波形データを読出しないし書き込み可能な読出書込回路であり、音源制御レジスタ202に記憶されたパラメータに基づいて、メモリI/O部300を介して波形メモリ部400をアクセスする。この読出書込回路206を介して、各発音チャンネルの楽音信号の合成に必要な波形データが波形メモリ部400から読み出されるのである。そして、読み出された波形データを所定のサンプリング周波数でかつ該パラメータに応じたピッチの波形でデータに変換して出力する。208はエンベロープ付与部であり、音源制御レジスタ202に記憶されたエンベロープ特性に基づいて、読出書込回路206からサンプリング周期毎に出力される波形データにエンベロープを付与する。
212はDSP(デジタル・シグナル・プロセッサ)であり、予め設定されたマイクロプログラムと、音源制御レジスタ202に記憶されたエフェクトパラメータとに基づいて、サンプリング周期毎に入力される楽音信号に効果処理を施し、効果の付与された楽音信号を出力する。210はミキサであり、サンプリング周期毎に、エンベロープ付与部208、DSP212および外部回路108から出力された楽音信号をミキシングし、その結果を必要に応じて外部回路108、DSP212およびDAコンバータ110に供給する。
1.3.メモリI/O部300の構成
1.3.1.エリア判定部310
(1)セレクタ312,314
次に、メモリI/O部300の詳細構成を図3および図4を参照し説明する。
まず、図3において310はエリア判定部であり、読出書込回路206から供給されるアドレス信号TGAおよびXアクセス回路204から供給されるアドレス信号XAAに基づいて、対応するメモリデバイスの種類を特定する等の処理を行う。エリア判定部310の内部において312はメモリ・モード信号セレクタであり、読出書込回路206から供給されるメモリ・モード信号TGWおよびXアクセス回路204から供給されるメモリ・モード信号XAWのうち一方を選択し、メモリ・モード信号Wとして出力する。ここで、メモリ・モード信号XAW,TGW,Wは、読出し/書込みのメモリ動作を区別する二値信号である。
次に、314はアドレス信号セレクタであり、読出書込回路206から供給されるアドレス信号TGAおよびXアクセス回路204から供給されるアドレス信号XAAのうち一方を選択し、その結果をアドレス信号WA0〜31として出力する。なお、これらアドレス信号TGA,XAA,WAは、波形メモリのデータ幅が「16ビット」であると仮定した場合のアドレス信号である。このアドレス信号TGAは、各発音チャンネル毎に波形データを読み出すためのアドレスであり、各発音チャンネル毎に異なるエリアのアドレスとすることができる。
(2)上位・下位アドレス生成回路316
後述する波形メモリ部400においては、波形メモリのデータ幅として「16ビット」および「32ビット」の双方を扱うことが可能になっている。「32ビット」のデータ幅を用いる場合は、「16ビット」構成の2系統の波形メモリが同時にアクセスされることになる。これら2系統の波形メモリを「上位」および「下位」と呼ぶ。
波形メモリ部400が「32ビット」構成である時、アドレス信号WA0〜31を「1ビット」だけ右にシフトした結果が波形メモリ部400におけるアドレスになる。そして、右シフトした結果、最下位ビットからあふれた「あふれビット」が“0”であれば、下位の「16ビット」、「あふれビット」が“1”であれば上位の「16ビット」が指定されたことになる。
従って、単に「16ビット」空間のアドレス信号WA0〜31によって指定されたアドレスを「32ビット」空間のアドレスに変換するだけであれば、アドレス信号WA0〜31を単に「1ビット」右シフトすればよいことになる。しかし、本実施例においては、「16ビット」空間のアドレス信号WA0〜31によるアクセスを、「アドレス信号WAによるアドレスと、次の(WA0〜31の値+1の)アドレスとを同時にアクセスして32ビットのデータの読出し/書込みを行う動作」であること定義している。
これは、波形メモリにはサンプリングデータがアドレス順に記憶されているから、連続したアドレスに記憶されたデータは連続して読み出される場合が多いことに鑑みてである。「16ビット」空間における連続する2つのアドレスを同時にアクセスできることは、「32ビット」のデータ幅を有効に利用し、メモリのアクセス回数を削減できる。しかし、かかる動作を可能ならしめるためには、単なるシフトのみでは「上位」および「下位」の波形メモリを同時にアクセスできない場合がある。
すなわち、アドレス信号WA0〜31を右シフトした際の「あふれビット」が“0”であった場合には、そのシフト結果を共通のアドレス信号として「上位」および「下位」の波形メモリに供給すればよい。一方、「あふれビット」が“1”であった場合には、このシフト結果を「上位16ビット」のアドレスとするとともに、「下位16ビット」のアドレスはシフト結果に対してさらに「1」を加算する必要がある。
316は上位・下位アドレス生成回路であり、上述した原理に基づいて、アドレス信号WA0〜31から上位アドレス信号MAH0〜30および下位アドレス信号MAL0〜30を出力するものである。その詳細を説明する。まず、上位・下位アドレス生成回路316には、バスモード信号B32およびデータモード信号DMが供給される。ここで、バスモード信号B32は、波形メモリ部400のデータバス幅が「32ビット」であるか「16ビット」であるかを指定する信号である。
また、データモード信号DMは、各発音チャンネルにおける波形データのデータ幅を規定する二値信号であり、“0”によって「16ビット」、または“1”によって「32ビット」の何れかを指定する。換言すれば、アドレス信号セレクタ314において選択されたアドレス信号が「32ビット」あるいは「16ビット」の何れのビット数の波形データをアクセスするためのアドレス信号であるかを指定する信号である。なお、データモード信号DMは、バスモード信号B32とは独立しており、例えばデータバス幅が「16ビット」であり、波形データのデータ幅が「32ビット」であってもよいことは勿論である。
波形メモリ部400のデータバス幅が「16ビット」である場合、上位・下位アドレス生成回路316に供給されたアドレス信号WA0〜31の下位31ビットWA0〜30が、そのまま下位アドレス信号MAL0〜30として出力される。換言すれば、データバス幅が「16ビット」である場合、「下位」の波形メモリのみが波形メモリ部400に実装されることになる。
一方、データバス幅が「32ビット」であって、データモード信号DMが“0”(16ビットデータ幅)である場合、アドレス信号WA0〜31を「1ビット」右シフトした結果が上位アドレス信号MAH0〜30として出力される。そして、「あふれビット」が“1”である場合は、上位アドレス信号MAH0〜30と同一の値が下位アドレス信号MAL0〜30として出力され、「あふれビット」が“0”である場合は上位アドレス信号MAH0〜30に「1」を加算した結果が下位アドレス信号MAL0〜30として出力される。
また、データバス幅が「32ビット」であって、かつ、データモード信号DMが“1”(32ビットデータ幅)である場合も考えられる。かかる場合においては、アドレス信号WA0〜31の最上位ビットを除いたアドレス信号WA1〜31が、そのまま上位・下位アドレス信号MAH0〜30,MAL0〜30として出力される。
(3)アクセス制御レジスタ332
次に、332はアクセス制御レジスタであり、波形メモリ部400に含まれる各メモリデバイスに対して、以下のデータを格納している。
(3.1)エリア終端アドレス
まず、波形メモリ部400には最大で8エリア(第0エリア〜第7エリア)のメモリデバイスを設けることができる。1個のエリアは、「16ビット」データバスの場合、通常は1個のメモリデバイスによって構成され、「32ビット」データバスの場合は、通常は「上位」および「下位」各1個づつのメモリデバイスによって構成される。そして、これらエリア毎にチップセレクト信号が供給される。但し、メモリデバイスの種類によっては、1個のメモリデバイスで2個のエリアに割り当てられる場合もある。また、本実施例では「上位」と「下位」の波形メモリについてアクセス制御線を共用しているので、「上位」と「下位」に各1個づつメモリデバイスを設ける場合、その2つのデバイスは相互に同じアクセス速度でなければならない。
アクセス制御レジスタ332には、これら各エリアの終端アドレスが記憶される。なお、第1エリア〜第7エリアの先頭アドレスは、必ず前のエリアの終端アドレスの次のアドレスであり、第0エリアの先頭アドレスは必ず「0」であるから、これによって各エリアの先頭アドレスも特定される。なお、「エリア終端アドレス」は、「16ビット」アドレス空間におけるアドレスである。
(3.2)メモリ種別
メモリ種別は3ビットのデータであり、その値に応じて、各エリア毎のメモリデバイスを例えば以下のように特定する。ここで、SRAMは「スタティックRAM(Static Random Access Memory)」の略であり、SDRAMは「シンクロナスDRAM(Synchronous Dynamic Random Access Memory)」の略である。また、ここで「SDRAM」とは、メモリデバイスが単体のSDRAMチップである場合と、SDRAMを複数個(例えば8個あるいは16個)実装して成るDIMM(Dual Inline Memory Module)の場合との双方を含む意味である。
000:ROMまたはSRAM(16クロックアクセス)
001:ROMまたはSRAM(14クロックアクセス)
010:ROMまたはSRAM(12クロックアクセス)
011:ROMまたはSRAM(10クロックアクセス)
100:ROMまたはSRAM(8クロックアクセス)
101:SDRAM(14クロックアクセス)
110:SDRAM(12クロックアクセス)
111:SDRAM(8クロックアクセス)
なお、以後の説明においては、冗長さを避けるため、メモリ種別が「000〜100」である場合には、当該メモリデバイスはROMであると仮定し、必要な場合にSRAMについて言及することとする。
(3.3)カラムビット
「カラムビット」は、2ビットのデータであり、各エリアのメモリデバイスがSDRAMである場合に有効なデータである。「カラムビット」は、SDRAMのカラムアドレスのビット数を以下のように定義する。なお、参考までに、各「カラムビット」に対応するメモリデバイスのメモリ容量の例を括弧内に挙げておく。
00:カラムアドレスビット数 8ビット(単体SDRAM64MB,DIMM32MB〜64MB)
01:カラムアドレスビット数 9ビット(単体SDRAM128MB,DIMM64MB〜128MB)
10:カラムアドレスビット数 10ビット(単体SDRAM256MB,DIMM256MB〜512MB)
11:カラムアドレスビット数 11ビット(DIMM512MB〜)
(3.4)DQMポジション
「DQMポジション」は2ビットのデータであり、メモリデバイスが主としてSDRAM型のDIMMである場合に有効なデータである。DIMMにおいては、データバス幅は64ビット設けられているが、内部的にはDIMMのデータバスは「8ビット」毎の「8」グループに分かれており、これらグループのうち任意のものをアクティブにする8本のDQMピンが設けられている。本実施例においては、波形メモリ部400全体のデータバス幅は「16ビット」または「32ビット」の何れかであるが、各メモリデバイスは「上位」または「下位」の何れかに属するため、各メモリデバイスにおいては、必要なデータバス幅は常に「16ビット」である。
そこで、本実施例においては、「8ビット×2グループ」を一組として、上記8本のDQMピンを2本づつアクティブにすることにより、DIMMを「16ビット」データ幅のメモリとして使用することとする。このため、DIMMの2本づつのDQMピンに対して供給される選択信号として、上位マスク信号DQMH0〜3あるいは下位マスク信号DQML0〜3がメモリI/O部300から出力される(詳細は後述する)。
これらマスク信号DQMH0〜3あるいはDQML0〜3は、DIMMに直接的に与えられるアドレス信号のさらに上位にある「2ビット」をデコードすることにより生成される。「DQMポジション」は、上記「カラムビット」と合せて、これらマスク信号DQMH0〜3あるいはDQML0〜3を生成するために、何れの2ビットを使用するかを規定する情報である。具体的には、「カラムビット」および「DQMポジション」に応じて、上記2ビットは図13(a)のように設定される。この図において、選択される2ビットの下の括弧内に記載されている容量は、チップセレクトを2つ有するDIMMの場合の値であり、チップセレクトを2つ有するDIMMの場合の値であり、チップセレクトが1つのDIMMではその半分の容量になる。
(4)エリア判定部318
次に、318はエリア判定部であり、ここには発音処理中の全ての発音チャンネルについて、波形メモリ読出アドレスTGWAが供給される。エリア判定部318においては、上記アクセス制御レジスタ332に記憶されている各エリア終端アドレスと、上記各発音チャンネルの波形メモリ読出アドレスTGWAとが比較され、各発音チャンネルに対するエリアが特定される。
そして、特定された各エリアについてメモリ種別が読み出され、各発音チャンネルに対するメモリ種別が特定される。また、メモリ種別によって、当該エリアにアクセスするためのクロック数が特定される。従って、エリア判定部318においては、これらの情報に基づいて、発音処理中の全ての発音チャンネルについて、1回あたりのアクセスに必要なクロック数が判定される。
(5)期間割当部320
次に、320は期間割当部であり、発音処理中の各発音チャンネルに対して、1サンプリング周期内のアクセス期間を割り当てる。このため、期間割当部320には、これら各発音チャンネルについて、1回あたりのアクセスに必要なクロック数が上記エリア判定部318から供給され、アクセス回数が続出書込回路206から供給されるとともに、各発音チャンネルについてデータモード信号DMと、補間モード信号IMとが音源制御レジスタ202から供給される。
次に、アクセス回数指令信号IMについて説明する。まず、波形メモリ部400に記憶されている波形データは、所望のピッチにピッチシフトされるため、該ピッチシフト量に対応したアドレス速度で読み出される。このアドレス速度は小数部を含む速度であるため、波形メモリ400からは読出し時のアドレス位置の前後におけるサンプリング値が読み出され、これら読み出された値に対して補間が施され、読出し時のサンプリング値が求められる。
本実施例においては、前後の2点のサンプリング値に対して補間を施すモード(以下、2点補間モードという)と、前後の4点のサンプリング値に対して補間を施すモード(以下、4点補間モードという)とが各発音チャンネル毎に選択される。各発音チャンネルには過去に読出されたサンプリング値を4つ保存するバッファがそれぞれ設けられており、チャンネル毎に、基本的にはアドレス速度に応じたアドレス整数部の進行数に対応する数のサンプリング値が波形メモリから読み出される。従って、1サンプリング周期毎に波形メモリ部400にアクセスすべき回数は発音チャンネル毎に異なる。アクセス回数指令信号IMは、この1サンプリング周期に対するアクセス回数(要求回数)を指定する信号である。この要求回数に基づき後述する期間割当部320にて、各チャンネルのアクセス回数が確定される。
あるチャンネルについて1回あたりのアクセスに必要なクロック数(アクセスするメモリに応じて決まる)と、データモード信号DMと、アクセス回数指令信号IMとが特定されると、これによって、1サンプリング周期内において必要なクロック数が特定される。一例として、1回あたりのアクセスに必要なクロック数が「10」であり、データバス幅が「32ビット」であり、波形データのデータ幅が「16ビット」ビットであり、「4点補間」モードで波形データを読み出す場合を想定してみる。なお、音源のシステムクロックの周波数は、このクロックと同じでもよいし、それよりも高い周波数でもよい。
「4点補間」を行うためには、「4サンプル」すなわち(1ワード=16ビットとして)「4ワード」のサンプルが必要である。ここでは、その全てを1サンプリング周期毎に波形データから読み出す必要が生じる場合を想定する。そして、先に上位・下位アドレス生成回路316について説明したように、「32ビット」データバスを用いた場合には、「2ワード」のデータを1回のアクセスで読み出すことができる。従って、当該発音チャンネルについて「1サンプリング周期」内のアクセス回数は「2回」であり、合計で「10×2=20クロック」が当該発音チャンネルに割り当てられることになる。
本実施例においては、「1サンプリング周期」は「2048クロック」から構成される。そして、期間割当部320においては、発音処理中の全チャンネル、Xアクセス回路204および外部回路108に対して、アクセスに必要なクロックタイミングが割り当てられる。そして、その割当て結果に基づいて、各クロック毎に、メモリ・モード信号セレクタ312およびアドレス信号セレクタ314に対して、期間割当部320から選択信号TSELが供給される。
ここで、期間割当部320において実行されるクロックタイミングの割当方法について説明しておく。
(1) まず、各発音チャンネルの1アクセス当たりのクロック数とアクセス回数(要求回数)とを乗算し、その積を累計することにより、全チャンネルのアクセスに必要なクロック数の総計を求める。
(2) この求めたクロック数の総計がCPU124によって設定された「最大クロック数」(例えば700クロック、詳細は後述する)を超えているか否かが判定される。超えていなければ、各発音チャンネルに対して、1アクセス当たりのクロック数と要求回数との積であるクロック数が割り当てられ、割当処理は終了する。
(3) 一方、クロック数の総計が最大クロック数を超えている場合は、その超えたクロック数を「超過クロック数」とするとともに、一番若い番号の発音チャンネルを「対象チャンネル」とする。
(4) 対象チャンネルに対して、削減可能な範囲でアクセス回数を削減する。例えば、アクセス回数指令信号IMによって4点補間が要求された設定された発音チャンネルについてはアクセス回数は「0〜4」の範囲になるが、これを2点補間に変更することによって、必要なアクセス回数は「0〜2」の範囲にまで削減される。
(5) 削減されたアクセス回数に相当するクロック数を「超過クロック数」から減算する。
(6) 超過クロック数がゼロ以下になったか否かを判断し、ゼロ以下になっている場合は、変更後のクロック数が各発音チャンネルに割り当てられ、割当処理は終了する。
(7) 超過クロック数が「1」以上であって、対象チャンネルが最終チャンネルでなければ、次に若い番号のチャンネルを対象チャンネルにするとともに(4)の処理に戻る。
(8)一方、対象チャンネルが最終チャンネルなら、処理を終了する。
以上処理により、各チャンネルが実際に波形メモリをアクセスする回数(図8(c)参照)が確定される。この処理は、波形メモリアクセスの行なわれる期間に対し1/2サンプリング周期だけ前の周期に実行される。一方、エリア判定部310内の他の構成要件312、314、316、322、324、326、328、330の処理は、波形メモリアクセスの行なわれる期間に実行される。
なお、エリア判定部324内の動作は各サンプリング周期ごとに行なわれているため、何れかのチャンネルでアクセス回数が削減された(4点補間→2点補間)としても、それはそのサンプリング周期での削減であり、その次のサンプリング周期でもその削減が継続されることを意味しない。従って、アクセス回数の削減が行なわれたとしてもそれは一時的なものである場合が多く、生成される楽音への影響は小さい。
(6)エリア判定部322,324,他
次に、上位・下位アドレス生成回路316から出力された上位・下位アドレス信号MAH0〜30,MAL0〜30は、各々エリア判定部322,324に供給される。エリア判定部322においては、アクセス制御レジスタ332の内容と下位アドレス信号MAL0〜30に基づいて、下位メモリタイプ信号TYPELが出力される。すなわち、下位アドレス信号MAL0〜30と各エリア終端アドレスとが比較されることによって下位アドレス信号MAL0〜30に係るエリアが特定され、当該エリアに係るメモリ種別が該下位メモリタイプ信号TYPELとして出力される。
また、メモリ種別が決定されると、当該メモリデバイスを1回アクセスするために必要なクロック数が特定される。326はアクセスカウンタであり、下位メモリタイプ信号TYPELに基づいて、クロックをそのメモリ種別のアクセスに必要なクロック数だけカウントし、アクセスカウント値CNTとして出力する。ここで、例えば、必要なクロック数が「10」であれば、アクセスカウンタ326は「0」から「9」までのカウントを行なう。このカウント値は後述するタイミング発生回路346,362におけるタイミング発生のベースとなる。また、エリア判定部322においては、下位アドレス信号MAL0〜30に基づいて、「0〜7」の何れかのエリア番号が特定される。
本実施例において、第0エリア〜第7エリアのうち前半ないし後半の一方の「4エリア」がROMあるいはSDRMの共用エリア(簡略化のためのSDRAM用と呼ぶ)として割り当てられ、他方の「4エリア」がROMの専用エリア(同ROM用と呼ぶ)として割り当てられる。328は下位チップセレクト生成回路であり、特定されたエリア番号に基づいて、ROM用の4本のチップセレクト信号RCSL0〜3またはSDRAM用の4本のチップセレクト信号DCSL0〜3のうち1本のみを“1”に設定し、残りの7本を“0”に設定する。なお、データバス幅が「32ビット」の場合でも、上位と下位で独立にエリアを判定してチップセレクト信号を作成しているので、前後のメモリエリアのアクセスクロック数が同じであれば、その2つのエリアをまたいで記録された波形データを読み出すことができる。
同様に、エリア判定部324においては、上位アドレス信号MAH0〜30に基づいて、上位のメモリデバイスのメモリ種別を示す上位メモリタイプ信号TYPEHが出力され、上位チップセレクト生成回路330においては、上位のROMに対するチップセレクト信号RCSH0〜3と、上位のSDRAMに対するチップセレクト信号DCSH0〜3が生成される。但し、本実施例において「上位」および「下位」には同一種類の(同一アクセススピードの)メモリデバイスを実装すべきこととしているため、アクセスカウント値CNTはアクセスカウンタ326から出力されるものを「上位」および「下位」にて共用している。
1.3.2.ROMコントローラ340
(1)チップセレクト付加部344
次に、図4において340はROMコントローラであり、波形メモリ部400内のROMに供給されるアドレス信号その他各種の信号を生成する。その内部において344はチップセレクト付加部であり、チップセレクト信号RCSH0〜3,RCSL0〜3を上位・下位アドレス信号MAH0〜30,MAL0〜30に付加し、その結果を上位・下位アドレス信号HMA0〜30,LMA0〜30として、アドレスバス372,374を介して出力する。
上位・下位アドレス信号HMA0〜30,LMA0〜30は、各々「31ビット」であるが、その上位4ビットを必要に応じてチップセレクト信号として用いることができる。その詳細を図14および図15を参照し説明する。まず、図14は、ROMが「下位」のみに実装された場合におけるチップセレクト信号の付加例を示す図である。
まず、波形メモリ部400内において、全メモリ空間は「31ビット」に対応して「2Gワード」になる。ここに「2Gワード」のROMを1個実装する場合は、「31ビット」の下位アドレス信号MAL0〜30をそのまま下位アドレス信号LMA0〜30として当該ROMに供給しなければならないから、チップセレクト信号は混入されない。また、波形メモリ部400がアクセスされる時は、必ず当該ROMがアクセスされるから、ROMのチップセレクト端子には別途チップセレクト信号を供給する必要がある。
また、「1Gワード」のROMを1個実装する場合は、最上位の下位アドレス信号MAL30に代えて、チップセレクト信号RCSL0が下位アドレス信号LMA30としてROMに供給されることになる。ここで、波形メモリ部400内に割り当てられるROMのエリアは、「前半4エリア」または「後半4エリア」のうち何れかを選択することができる。「前半4エリア」にROMが割り当てられる場合は、このチップセレクト信号は第0エリアに対するチップセレクト信号であり、一方、全エリア中の「後半4エリア」にROMが割り当てられる場合は第4エリアに対するチップセレクト信号になる。図中で「CS0/4」と表記されているのはこのためである。
また、「512Mワード」のROMであれば、最大2個実装可能であるが、アドレス信号は「29ビット」あればよい。このため、下位アドレス信号中のMAL30,MAL29に代えて、チップセレクト信号RCSL0,RCSL1が下位アドレス信号LMA30,LMA29として波形メモリ部400に供給される。同様に、「256Mワード」のROMであれば、最大3個実装可能であり、上位3ビットの下位アドレス信号LMA28〜30に代えてチップセレクト信号RCSL0〜2が当該ROMに供給される。また、「128Mワード」のROMであれば、最大4個実装可能であり、上位4ビットの下位アドレス信号LMA27〜30に代えてチップセレクト信号RCSL0〜3が当該ROMに供給される。
次に、ROMが上位・下位の双方に実装された場合におけるチップセレクト信号の付加例を図15を参照し説明する。まず、「上位」および「下位」に各々「2Gワード」(1ワード=16ビット)のROMを実装する場合には、各ROMに対して「31ビット」の上位アドレス信号HMA0〜30および下位アドレス信号LMA0〜30を全て供給しなければならない。
上述したように、上位アドレス信号HMA0〜30は、アドレス信号WA0〜31を右に「1ビット」シフトした結果、すなわちアドレス信号WA1〜30であるから、図15においてはそのように表記されている。一方、下位アドレス信号LMA0〜30は、シフトの際の「あふれビット」が“0”であれば上位アドレス信号HMA0〜30に等しく、「あふれビット」が“1”であればアドレス信号WA1〜30に「1」を加算した値になる。図15においては、両者を総称して、「WA’0〜WA’30」のように表記している。
「上位」および「下位」の双方にROMを実装する場合においても、チップセレクト信号を付加する態様は図14の場合と同様である。すなわち、「1Gワード」のROMを「上位」および「下位」に各1個実装する場合は、最上位の上位アドレス信号MAH30(=WA31)および下位アドレス信号MAL30(=WA’31)に代えて、チップセレクト信号RCSH0およびRCSL0が上位アドレス信号HMA30および下位アドレス信号LMA30として出力される。
また、「512Mワード」のROMであれば、上位および下位アドレス信号中の各上位2ビットに代えて、チップセレクト信号RCSH0,RCSH1およびRCSL0,RCSL1が出力され、「256Mワード」のROMであれば、上位および下位アドレス信号中の各上位3ビットに代えて、チップセレクト信号RCSH0〜2およびRCSL0〜2が出力され、「128Mワード」のROMであれば、上位および下位アドレス信号中の各上位4ビットに代えて、チップセレクト信号RCSH0〜3およびRCSL0〜4が出力される。
(2)LHマスク発生部342およびドライブ回路348
図4に戻り、348はドライブ回路であり、上位・下位アドレス信号HMA0〜30,LMA0〜30等、波形メモリ部400に供給される信号をバッファリングして出力する。その際、以下述べるように、必要に応じてこれらの信号がマスキングされる。また、外部回路108のアクセス期間内においては、ドライブ回路348はハイインピーダンス状態に設定される。342はLHマスク発生部であり、データモード信号DM等に基づいて、上位のチップセレクト信号をマスクする上位ROMマスク信号RMHおよび下位のチップセレクト信号をマスクする下位ROMマスク信号RMLを出力する。
上位・下位ROMマスク信号RMH,RMLは、“1”であれば「チップセレクト可」、“0”であれば「チップセレクト不可」(マスク状態)を示す二値信号である。上述したように、波形メモリ部400のデータバス幅が「32ビット」であれば、「上位」および「下位」のROMを同時にアクセスする事が可能であるが、そのうち一方にのみアクセスしたい場合がある。かかる場合には、他方のチップセレクト信号をマスキングしておくことにより、消費電力や電磁波の輻射を削減することができる。
また、ROMに代えてSRAMが実装される場合には、「上位」または「下位」の一方のみに対して「書込み」が行われる場合がある。かかる場合には、他方に対する書込みは阻止しなければならないため、ROMマスク信号RMH,RMLは必須である。具体的には、上位ROMマスク信号RMHが“0”になると、上位アドレス信号HMA0〜30中のチップセレクト信号(図15参照)がマスクされる(強制的に“0”に設定される)。同様に、下位ROMマスク信号RMLが“0”になると、下位アドレス信号LMA0〜30中のチップセレクト信号がマスクされる。
但し、「2Gワード」のROMが実装される場合には、上位・下位アドレス信号HMA0〜30,LMA0〜30中にはチップセレクト信号は付加されないため、上位・下位ROMマスク信号RMH,RMLがそのまま波形メモリ部400に供給され、これらが「2Gワード」のROMに対するチップセレクト信号として用いられることになる。
(3)タイミング発生回路346
次に、346はタイミング発生回路であり、ここにはメモリ・モード信号セレクタ312からメモリ・モード信号Wが供給されるとともに、アクセスカウンタ326からアクセスカウント値CNTが供給され、エリア判定部322,324からメモリタイプ信号TYPEH,TYPELが供給される。タイミング発生回路346においては、これらの信号に基づいて、ROM用のメモリ・アウトプット・イネーブル信号MOENと、メモリ・ライト・イネーブル信号MWENとが出力される。なお、メモリ・ライト・イネーブル信号MWENは、実際はROMに代えてSRAMが用いられる場合に使用される。
さらに、タイミング発生回路346においては、ドライブ回路348を介して上位・下位アドレス信号HMA0〜30,LMA0〜30の出力タイミングが制御されるとともに、後述するデータ・コントローラ350を介して、上位・下位データ信号HMD0〜15,LMD0〜15の入出力タイミングが制御される。次に、タイミング発生回路346におけるタイミング制御の内容を図9,図10を参照し説明する。
まず、図9において、16クロックアクセスのROMまたはSRAMをアクセスする場合は、アドレス信号(HMA0〜30またはLMA0〜30)を第0〜第15クロックの「16クロック」だけ保持する必要がある。そして、読出しを行う場合には、メモリ・アウトプット・イネーブル信号MOENを第4〜第15クロックの期間“0”に保持する必要がある。かかる制御を行うと、第14〜第15クロックにおいて、データ信号(HMD0〜15またはLMD0〜15)が読み出され、第13クロックの終わりの信号MOENの立ち上がりに応じて読み出されたデータ信号がバッファアンプ356の入力ラッチに取り込まれる。
また、16クロックアクセスのSRAMに対して書込みを行う場合には、読出し時と同様にアドレス信号を「16クロック」だけ保持する必要がある。そして、メモリ・ライト・イネーブル信号MWENは、第2〜第13クロックの期間“0”に保持しておく必要がある。また、書込み用のデータ信号(HMD0〜15またはLMD0〜15)は第0〜第15クロックに渡って保持する必要がある。また、「14,12,10または8クロックアクセス」のROMまたはSRAMに対しても、図9および図10に示すように、各々のメモリ種別に応じたタイミングで各種信号が入出力される。
1.3.3.SDRAMコントローラ360
(1)タイミング発生回路362
図4に戻り、360はSDRAMコントローラであり、波形メモリ部400内のSDRAMに供給されるアドレス信号その他各種の信号を生成する。その内部において362はタイミング発生回路であり、上述したROMコントローラ340内のタイミング発生回路346と同様に、ここにはメモリ・モード信号W、アクセスカウント値CNT、メモリタイプ信号TYPEH,TYPELが供給される。
タイミング発生回路362においては、これらの信号に基づいて、SDRAM用の行アドレスストローブ信号DRAS、列アドレスストローブ信号DCASおよびライト・イネーブル信号DWENが生成される。次に、タイミング発生回路362におけるタイミング制御の内容を図11,図12を参照し説明する。
まず、SDRAMに供給される動作クロックDCLKは、ROMのタイミング制御に用いられたアクセス用のクロックCLKを2分周したクロック信号である。上述したように、SDRAMには、例えば「8,10,12クロックアクセス」のものが存在するが、これは動作クロックDCLKを基準にすれば「4,5,6クロックアクセス」になる。図11,図12におけるタイミングチャートは、この動作クロックDCLKを基準としている。
図11において、8クロックアクセスのSDRAMをアクセスする場合は、動作クロックDCLKの第1周期において上位・下位アドレス信号DMAH0〜14,DMAL0〜14がROW(行)アドレス信号に設定され、残りの3周期において、これらアドレス信号はCOL(列)アドレス信号に設定される。
そして、動作クロックDCLKの合計4周期の期間中、バンクセレクト信号BA0,BA1は常時出力される。そして、チップセレクト信号/S0〜3(=DCSH0〜3またはDCSL0〜3)は、第1および第2周期において“L”レベル(=“0”)に設定される。また、行・列アドレスストローブ信号/RAS,/CAS(=DRAS,DCAS)は、各々第1周期,第2周期において“L”レベルに設定される。
また、マスク信号DQMB0〜7(詳細は後述する)は、上記4周期の期間中、常に何れか2本が選択される。ここで、読出しを行う場合においては、ライト・イネーブル信号/WE(=DWEN)は常に“H”レベル(=“1”)に設定される。これにより、動作クロックDCLKの第4周期において、SDRAMから読み出されたデータが上位・下位データ信号HMD0〜15,LMD0〜15として出力されることになる。
SDRAMでは、4つの信号(/CS、/RAS、/CAS、/WE)の組み合わせにより1つのコマンドCMNDが決定される(図11,図12の「CMND」欄参照。)動作クロックDCLKの第1周期の信号(/CS、/RAS、/CAS、/WE)の状態(L、L、H、H)は「アクティブ命令」である。SDRAMにおいては当該「アクティブ命令」に応じてROWアドレス信号が取り込まれ、その後の読出しないし書込み動作のための準備が実行される。
第2周期の状態(L、H、L、H)は「READ命令」である。SDRAMにおいては当該「READ命令」に応じてCOLアドレスが取り込まれ、先に取り込まれたROWアドレスとこのCOLアドレスにより選択された記憶位置からのデータの読出しが開始される。
第3周期と第4周期の状態(H、H、H、H)はチップが選択されていない状態「DESL」であり、当該SDRAMにおいては命令が受け取られず、既に与えられている命令に応じた動作(この場合は読出し)が継続される。この結果、読み出されたデータREADDATAは第4周期にデータバスD0〜63に出力される。ただし、全64ビットのうちマスクされたビットには出力されない。
一方、書込みを行う場合においても、動作クロックDCLKの第1周期の状態(L、L、H、H)は「アクティブ命令」である。従って、SDRAMにおいては、当該「アクティブ命令」に応じてROWアドレス信号が取り込まれ、その後の読出しないし書込み動作のための準備が行なわれる。そして、書込みを行う場合においては、第2周期においてライト・イネーブル信号/WEが“L”レベルに設定される。そして、上位・下位データ信号HMD0〜15,LMD0〜15は、第2〜第4周期に渡って保持される。
この第2の周期の状態(L、H、L、L)は「WRITE命令」である。SDRAMにおいては当該「WRITE命令」に応じてCOLアドレス及び書込むデータWRITEDTが取り込まれ、先に取り込まれたROWアドレスとこのCOLアドレスにより選択された記憶位置に対してデータの書込みが開始される。但し、マスクされたビットからはWRITEDTは取り込まれず、同ビットに関しては書込みも行なわれない。
第3周期と第4周期の状態(H、H、H、H)はチップが選択されていない状態「DESL」であり、当該SDRAMにおいては命令が受け取られず、既に与えられている命令に応じた動作(この場合は書込み)が継続される。そして、第4周期において、当該データがSDRAM内の対応するアドレスに書き込まれることになる。また、「14または12クロックアクセス」のSDRAMに対しても、図11および図12に示すように、各々のメモリ種別に応じたタイミングで各種信号が入出力される。
(2)クロック発生部368
図4に戻り、368はクロック発生部であり、クロックCLKを分周してSDRAMの動作クロックDCLKを生成するとともに、当該動作クロックDCLKが発生中であることを示すクロックイネーブル信号DCLKEを出力する。ここで、クロック発生部368においては、CPU124により音源制御レジスタ202に設定されたクロック制御信号DCL_ONが“1”であれば、動作クロックDCLKが常時発生されるとともに、クロックイネーブル信号DCLKEも“1”(オン状態)に設定される。
一方、クロック制御信号DCL_ONが“0”であれば、これらの信号はアクセス中のメモリデバイスの種別、すなわち下位メモリタイプ信号TYPELに応じて状態が切り換えられる。すなわち、下位メモリタイプ信号TYPELが「SDRAM」を指標している場合は、動作クロックDCLKが発生されるとともに、クロックイネーブル信号DCLKEも“1”(オン状態)に設定される。
一方、クロック制御信号DCL_ONが“0”であって下位メモリタイプ信号TYPELが「ROMまたはSRAM」を指標している場合は、動作クロックDCLKが停止されるとともに、クロックイネーブル信号DCLKEも“0”(オフ状態)に設定される。ここで、かかる制御の意義について説明しておく。本発明者が知る限りにおいて、現在市販されているSDRAMは、仕様上は、動作クロックDCLKを常時供給しなければならないことになっている。
しかし、本発明者が実験をしたところによれば、書込み/読出し時に動作クロックDCLKを供給していれば、他の期間においてSDRAMに動作クロックDCLKを供給しなくても正常に動作することが判明した。そこで、SDRAMに対してアクセスしない期間すなわちROMをアクセスする期間は、動作クロックDCLKをオフ状態に設定することを可能にした。これにより、消費電力が低減されるとともに、電磁波の輻射も抑制されることになる。
但し、全てのSDRAMに対してかかる動作が可能である保証は無い。そこで、動作クロックDCLKのオンオフ制御を行うか否かをエンドユーザが指示し、それに応じてCPU124が音源制御レジスタ202にクロック制御信号DCL_ONを設定することによって自在に設定できるようにしたものであり、オンオフ制御を行った際に支障が生じる場合には、動作クロックDCLK等を常時オン状態に設定しておくとよい。なお、クロック制御信号DCL_ONを各エリアごとに独立に設定できるようにしてもよい。
また、詳細は後述するが、各サンプリング周期の先頭には、SDRAMをリフレッシュするためのリフレッシュ期間が設けられる。そして、クロック制御信号DCL_ONが“0”である場合には(“1”である場合には当然に)、当該リフレッシュ期間において動作クロックDCLKがオン状態に設定される。
(3)その他の構成
次に、364は行・列アドレス発生部であり、上位・下位アドレス信号MAH0〜30,MAL0〜30からそれぞれROW(行)アドレス信号、COL(列)アドレス信号を生成し、その結果を時分割しつつ上位・下位アドレス信号DMAH0〜14,DMAL0〜14として、アドレスバス376,378を介して出力する。なお、上位・下位アドレス信号MAH0〜30,MAL0〜30がROW(行)アドレス信号およびCOL(列)アドレス信号に分割される態様は、アクセス制御レジスタ332中の「カラムビット」データに応じて異なる。その具体例を図13(b)に示しておく。
366はマスク抽出部であり、上位・下位アドレス信号MAH0〜30,MAL0〜30から各々所定の「2ビット」を抽出し、これをデコードすることによって上位・下位マスク信号DQMH0〜3,DQML0〜3を出力する。ここで、所定の「2ビット」は、先に図13(a)において説明したように、当該SDRAMのエリアにおけるカラムビットおよびDQMポジションによって決定される。なお、先述したように、これらのマスク信号はデータバス幅が64ビットのDIMMから16ビットのデータを取り出すための信号であるため、DIMM以外では使用しなくても良い。
例えば、内部が2分割構造で2つのチップセレクトでそれぞれ指定される64MBのDIMMの場合には、マスク抽出部366の設定は以下のようになる。まず、DIMMの12ビットのアドレス端子には、8ビットのCOLアドレスと12ビットのROWアドレスの都合20ビットのアドレスMA0〜MA19が出力される。従って、「カラムビット」は、「00:8ビット」に設定される。その上の2ビットMA20、MA21はDIMMのバンクセレクトに使用されるので、マスクには更にその上の2ビットMA22、MA23が使用される。すなわち「DQMポジション」は「10:A22、A23」に設定される。以上の全24ビットによって16メガワード(=32MB)をアクセス可能であり、そのアドレス空間が2チップセレクト分設けられているため合計のアドレス空間は全64MBになる。
369はドライブ回路であり、上位・下位アドレス信号DMAH0〜14,DMAL0〜14等、波形メモリ部400に供給される信号をバッファリングして出力する。その際、図11,図12において説明したタイミングチャートが実現されるように、必要に応じてこれらの信号がマスキングされる。さらに、外部回路108のアクセス期間内においては、ドライブ回路369はハイインピーダンス状態に設定される。
1.3.4.データ・コントローラ350
次に、データ・コントローラ350の内部において352はセレクタであり、読出書込回路206から書込みデータ信号TGWDが、また、Xアクセス回路204から書込みデータ信号XAWDが、各々供給される。セレクタ352においては、期間割当部320から出力される選択信号TSELに基づいて、そのうち一方が選択される。
選択されたデータ信号のデータ幅が「32ビット」であれば、該データ信号の上位・下位各「16ビット」が各々上位・下位データ信号HMD0〜15,LMD0〜15として、ドライブ354を介して波形メモリ部400に供給される。また、選択されたデータ信号のデータ幅が「16ビット」であれば、該データ信号はそのまま下位データ信号LMD0〜15として出力される。また、外部回路108のアクセス期間内においては、ドライブ回路354はハイインピーダンス状態に設定される。
また、波形メモリ部400において読み出された上位・下位データ信号HMD0〜15,LMD0〜15は、バッファアンプ356を介して、そのまま読出書込回路206およびXアクセス回路204に対する読出しデータ信号TGRD,XARDとして供給される。なお、Xアクセス回路204および読出書込回路206においては、当該回路において読出しタイミングでは無い時にデータ信号が供給されたとしても無視される。
ところで、本実施例においては、ROM(またはSRAM)用のアドレスバス372,374と、SDRAM用のアドレスバス376,378とが完全に分離されている。かかる構成を採用した意義について説明しておく。まず、SDRAM(特にDIMM)は、ROM等と比較してアドレスバスの負荷容量が大きく、両者のアドレスバスを共用すると、大容量のドライブ回路を設ける必要がある。
本実施例においては、ROM用のアドレスバス372,374をSDRAM用のアドレスバス376,378から完全に分離したため、ドライブ回路348のドライブ能力を小さくすることができるという利点がある。なお、アドレスバス376,378をドライブするドライブ回路369には相当の負荷容量を有するものを採用する必要があるが、SDRAMはアドレスバスの本数が少ないため、全体的に見れば、ドライブ回路に要求される負荷容量のドライブ能力を小さくすることができるのである。
1.4.波形メモリ部400の構成
1.4.1.単純な構成例
波形メモリ部400としては、種々の構成を採ることが可能であるが、最初に単純な構成例を図5を参照し説明する。図において波形メモリ部400は、各々64メガビット(4メガワード)のROM402,404から構成されている。これらのROMは、共に下位側に接続されている。このため、メモリI/O部300の上位側の信号およびSDRAM用の信号は用いられていない。
ROM402,404には、下位アドレス信号LMA0〜30のうち下位22ビットである(LMA0〜21)がROM402,404のアドレス信号A0〜21として入力される。そして、下位アドレス信号LMA0〜30のうち上位2ビット(LMA30,29)が各々ROM402,404のチップセレクト信号/CSとして入力される。これは、図14,図15において説明したように、上位・下位アドレス信号HMA0〜30,LMA0〜30の一部がチップセレクト信号として用いられているためである。
また、メモリ・アウトプット・イネーブル信号MOENがこれらROMに対してアウトプット・イネーブル信号/OEとして入力される。アウトプット・イネーブル信号/OEによって出力が許可され、かつ、チップセレクト信号/CSによって何れかのROMが選択されると、アドレス信号A0〜21に基づいて当該ROMの内容が読み出され、読み出されたデータは下位データ信号LMD0〜15としてメモリI/O部300に供給される。
1.4.2.一般的構成例
(1)ROM410
次に、波形メモリ部400の一般的構成例を図6,図7を参照し説明する。ここで、図6は上位側、図7は下位側のメモリデバイスを示す。なお、繁雑を避けるため、メモリI/O部300とこれらメモリデバイスの結線は省略し、メモリデバイスの各端子に対応する信号名を付している。
図6において410は128メガビットのROMであり、メモリ・アウトプット・イネーブル信号MOENがアウトプット・イネーブル信号/OEとして供給され、上位アドレス信号HMA30がチップセレクト信号/CSとして供給される。また、上位アドレス信号HMA0〜30のうち下位23ビット(HMA0〜22)がアドレス信号A0〜22として供給される。図5におけるROM402,404と同様に、出力が許可され、チップセレクト信号/CSによって選択されると、アドレス信号A0〜22によってROM410のデータが読み出され、読み出されたデータは上位データ信号HMD0〜15として出力される。
(2)SDRAM412
次に、412は単体のSDRAMである。メモリI/O部300から出力される行・列アドレスストローブ信号DRAS,DCAS、ライト・イネーブル信号DWEN、動作クロックDCLK、およびクロックイネーブル信号DCLKEは、各々そのままSDRAM412の行・列アドレスストローブ信号/RAS,/CAS、ライト・イネーブル信号/WE、クロックCLK、およびクロックイネーブル信号CKEとして入力される。
また、SDRAM用の4本の上位チップセレクト信号DCSH0〜3のうち信号DCSH0がSDRAM412にチップセレクト信号/CSとして供給される。また、SDRAM412のデータバスは、「8ビット」のグループ毎にマスクすることが可能になっているため、マスク信号DQMBH,DQMBLが入力される。本実施例においては、(上位のみについて考えれば)データバス幅は常に「16ビット」であるから、双方のマスクが同時にオンオフされる。
そのため、上位マスク信号DQMH0〜3のうち1本(図示の例ではDQMH0)がマスク信号DQMBH,DQMBLとして同時に供給される。なお、マスク信号DQMBH、DQMBLにマスク信号を入力する代わりにその2つをアースに接続し、SDRAM16ビットを常時マスクされないようにしてもよい。SDRAM412としては、「64〜256メガビット(8〜32メガバイト)」のものが使用可能であるが、ここではSDRAM412が「64メガビット」であると仮定してアドレス制御の詳細を説明しておく。まず、SDRAM412の内部は、4個のバンクに分割されており、各バンクは「16ビット×1メガワード」の容量を有する。
このため、各バンクは、ROW(行)アドレス信号およびCOL(列)アドレス信号を合せて、「20ビット」のアドレス幅を有することになる。換言すれば、SDRAMコントローラ360内の行・列アドレス発生部364においては、上位アドレス信号MAH0〜30のうち下位「20ビット」である上位アドレス信号MAH0〜19に基づいて、ROW(行)およびCOL(列)アドレス信号が生成される。
SDRAM412のCOL(列)アドレスの幅(アクセス制御レジスタ332内の「カラムビット」データ)が「8ビット」であるならば、ROW(行)アドレスの幅は必然的に「12ビット」になる。このため、SDRAM412には、上位アドレス信号DMAH0〜14のうち下位12ビットの上位アドレス信号DMAH0〜11がアドレス信号A0〜11として供給される。
また、上述した4個のバンクを選択するために、SDRAM412には「2ビット」のバンクセレクト信号BA0,BA1が入力可能になっている。本実施例においては、ROW(行)アドレスおよびCOL(列)アドレスの指定のために用いられていた上位アドレス信号DMAH0〜11のさらに上位2ビットであるDMAH12,13がこれらバンクセレクト信号BA0,BA1として供給される。
従って、上位アドレス信号DMAH0〜11としてROW(行)またはCOL(列)アドレス信号の何れを出力中のタイミングにおいても、上位アドレス信号DMAH12,13すなわちバンクセレクト信号BA0,BA1としては、上位アドレス信号MAH20,21の値が行・列アドレス発生部364から出力されることになる。また、上位マスク信号DQMH0〜3は、そのさらに上位「2ビット」である上位アドレス信号MAH22,23に基づいて生成されることになる。従って、図13(a)によれば、DQMポジションは“10”に設定すればよい。
(3)DIMM414
次に、414はチップセレクトを1つだけ備えたSDRAM型のDIMMであり、メモリ容量が「64〜256メガバイト」のものを想定している。行・列アドレスストローブ信号DRAS,DCAS、ライト・イネーブル信号DWEN、動作クロックDCLK、クロックイネーブル信号DCLKE、上位アドレス信号DMAH0〜11は、SDRAM412の場合と同様にDIMM414にも供給される。また、チップセレクト信号としては、上記SDRAM412のDCSH0とは異なるDCSH1が供給される。
また、DIMM414においても、上位アドレス信号DMAH12,13はバンクセレクト信号BA0,BA1として供給される。なお、DIMM414は、複数のバンクに対して異なるチップセレクト信号あるいはクロック信号等を供給することが可能になっているため、上記各信号のうちの一部は複数の端子に入力される。また、DIMM414は、マスク信号DQMB0〜7が入力可能になっている。
上述したように、DIMM414のデータバス幅は64ビット設けられているが、内部的にはDIMMのデータバスは「8ビット」毎の「8」グループに分かれている。マスク信号DQMB0〜7は、これらグループのうち任意のものをアクティブにするための信号である。本実施例においては、「2グループ」を「一組」として、マスク状態が制御される。
すなわち、最下位の「16ビット」に対するマスク信号DQMB0,DQMB1としては、上位マスク信号DQMH0が供給され、その上位の「16ビット」に対するマスク信号DQMB2,DQMB3としては、上位マスク信号DQMH1が供給され、さらに上位の「16ビット」に対するマスク信号DQMB4,DQMB5としては、上位マスク信号DQMH2が供給され、最上位の「16ビット」に対するマスク信号DQMB6,DQMB7としては、上位マスク信号DQMH3が供給される。
例えば、DIMM414の容量が64メガバイトであるとする。上述したようにDIMM414には上位アドレス信号DMAH0〜11の12ビットがアドレス信号として入力されており、カラムビットが「9ビット」であるとすると、COLとROWとして入力されるアドレスは、アドレスMAH0〜20の全21ビットに相当する。さらに、バンクセレクト信号BA0、BA1として入力されるする上位アドレス信号DMAH12、13は、その上位の2ビットMAH21、22に相当する。さらに、その上位の2ビットMAH23、24に基づいて上位マスク信号DQMH0〜3を生成させるため、「DQMポジション」は"10"に設定しなければならない。
換言すれば、行・列アドレス発生部364においては、「カラムビット(ここでは「09」)」および「DQMポジション(ここでは“10”)」が供給されると、これらに基づいて上位アドレス信号MAH0〜30の中から上位マスク信号DQMH0〜3を生成するための「2ビット」が特定される。この特定された「2ビット」が「第23および第24ビット」になる。そのさらに下位「2ビット(第21および第22ビット)」がバンクセレクト信号BA0,BA1を生成するためのビットとして用いられるのである。
ここで、上位アドレス信号MAH0〜30中の特定の「2ビット」に基づいて上位マスク信号DQMH0〜3が生成されると、全64ビットのデータバスのうち何れか「16ビット」のみがアクティブ状態にされ、他の「48ビット」がマスク状態に設定される。DIMM414のデータ信号端は、上記「一組」を成す「16ビット」毎にまとめられ、異なる「組」の対応する信号端(例えばビット0,16,32,48)同士が接続されている。但し、これら信号端のうちマスク状態になっているものはハイインピーダンス状態であるため、データが衝突することはない。このように、接続の結果、「16本」になった信号端を介して、上位データ信号HMD0〜15が入出力される。この結果、DIMM414にアドレスMAH0〜24の全25ビットアドレス相当のアドレス空間を有し、このアドレス32メガワード(64メガバイト)全域をアクセスすることがでるようになる。
(4)DIMM416
次に、416はSDRAM型のDIMMであり、上記DIMM414と同様の信号が入出力される。但し、DIMM416は「2ROWS(2行)」型のDIMMであり、2個のDIMMと等価な動作を行う。従って、チップセレクト信号としては、2系統(上位チップセレクト信号DCSH2,3)が入力される。従って、DIMM416は、1個のDIMMでありながら、「2エリア」に対応することになる。
(5)下位側のメモリデバイス
次に、図7を参照し下位側のメモリデバイスの構成を説明する。図において420はROM、422はSDRAM、424,426はDIMMであり、それぞれROM410、SDRAM412、DIMM414,416と同様に構成されている。これらメモリデバイスに対して入出力される信号は、上位側に対して対称的である。すなわち、上位側の信号名中の「H」の文字を「L」に変更した信号が入出力される。
2.実施例の動作
2.1.メモリI/O部300の動作
次に、本実施例の動作を説明するが、最初にメモリI/O部300の動作を説明する。上述したように、本実施例において「1サンプリング周期」は「2048クロック」から構成される。そして、期間割当部320においては、発音処理中の全チャンネル、Xアクセス回路204および読出書込回路206に対して、アクセスに必要なクロックタイミングが割り当てられる。
ここで、「1サンプリング周期」の前半(1024クロック)における割当状態の例を図8に示す。読出書込回路206に割り当てられるアクセス期間は、図8(b)において「音源アクセス期間(TAP)」と記されている期間であり、Xアクセス回路204に割り当てられる期間は同図において「Xアクセス期間(XAP)」と記されている期間である。なお、「1サンプリング周期」の後半の割当状態も「前半」と同様である。すなわち、音源の最大発音チャンネル数「64チャンネル」のうち「前半」の期間に32チャンネルの音源アクセスが行われ、「後半」の期間に残り32チャンネルの音源アクセスが行われることになる。
図8(b)において、「1サンプリング周期」の「前半」の先頭部分(「後半」についても同様)は、SDRAMのリフレッシュ期間として確保される。次に、音源アクセス期間が設けられ、しかる後にXアクセス回路204によるアクセス期間が設けられ、残りの時間が空き時間になる。ここで、Xアクセス回路204によるアクセス期間や、CPU124による波形メモリ部400に対する直接アクセス等のために、予めある程度のクロック数を残しておく必要があるため、音源アクセス期間として割当て可能な最大クロック数を制限しておく必要がある。本実施例においては、その音源アクセス期間の「最大クロック数」をCPU124が音源制御レジスタ202に設定するようになっている。その値として、例えば「700クロック」が設定される。なお、CPU124は、ユーザー操作に応じてこのクロック数を設定してもよいし、電子楽器の動作状態に応じて自動設定してもよい。
音源アクセス期間内においては、最大「32チャンネル」の発音チャンネルのアクセス期間を確保することができる。なお、仮に外部回路108に対して全くアクセス期間を割当てていない場合には、後半の1024クロックにおいても同様に「32チャンネル」の音源アクセス期間を割り当てることができ、合計で最大「64チャンネル」の発音チャンネルを確保することができる。但し、実際に「32チャンネル」あるいは「64チャンネル」の発音チャンネルを確保できるか否かは、メモリデバイスの性能やデータバス幅等の要因に応じて決定される。
次に、上記1024クロックの先頭82クロック分の割当例を同図(c)に示す。同図において「D」の文字はSDRAM(またはSDRAM型のDIMM)、「R」の文字はROM(またはSRAM)に対するアクセス期間であり、その後に続く数字は対応するクロック数である。図において、先頭部分には、上述したSDRAMのリフレッシュ期間として16クロックが確保される。次に、第0発音チャンネルに対して、SDRAMに対する12クロックのアクセス期間が確保されている。
図示の例では、第0発音チャンネルの波形データは「12クロックアクセス」のSDRAMに記憶されており、このタイミングにおいて、期間割当部320により第0チャンネルに対し1回のアクセスが割当てられている。次に、第1発音チャンネルに対し、期間割当部320により1回のアクセス回数が割り当てられている。但し、第1発音チャンネルの波形データは「10クロックアクセス」のROMに格納されていることを想定しているため、1回のアクセスに割り当てられるクロック数は「10」である。
次に、第2発音チャンネルの波形データを記憶したROMに対して、2回のアクセスが割当てられている。第2発音チャンネルにおいてアクセスされるROMも「10クロックアクセス」であり、2回のアクセスには「20」クロックが割当てられる。
以下、同様にして、第5発音チャンネルに係るSDRAMに対して「1回×8クロック」、第7発音チャンネルに係るROMに対して「2回×12クロック」、第10発音チャンネルに係るSDRAMに対して「1回×8クロック」が割り当てられている。発音チャンネル毎に1回あたりのアクセスに割り当てられるクロック数が異なるのは、それぞれメモリ種別が異なるからである。
ここに本実施例の特徴の一つがある。すなわち、本実施例によれば、高性能な(所要クロック数が少ない)メモリデバイスを用いると、対応する発音チャンネルにより少ないクロック数を割り当てることができ、より多くの発音チャンネル数を確保することができる。また、所要発音チャンネル数が少なくても良い場合には、例えば全発音チャンネルに対して4点補間を適用すること等により、合成される楽音信号の品位を向上させることができる。
次に、図8(d)においては、クロック制御信号DCL_ONが“0”である場合における、SDRAMの動作クロックDCLKのオンオフ状態を示す。図示のように、SDRAMに対するリフレッシュ期間およびSDRAMに対するアクセス期間においては、動作クロックDCLKはオン状態にされ、ROMに対するアクセス期間においては動作クロックDCLKはオフ状態に設定される。
2.2.全体動作
2.2.1.ノートオン処理
次に、本実施例の全体動作について説明する。
まず、MIDIインタフェース116等を介してノートオンイベントが発生すると、CPU124において、図16(a)に示すノートオン処理ルーチンが起動される。図において処理がステップSP2に進むと、このノートオンイベントに対して、新たな発音チャンネルを追加したと仮定した場合に、図8(b)に示す音源アクセス期間に追加される平均のクロック数が計算される。平均のクロック数は、そのチャンネルで読み出す波形データを記憶したメモリが「下位」のみを実装されていれば、同メモリをアクセスする際の「クロック数」に、その波形データを所望の音高までピッチシフトするのに必要なアドレス速度(Fナンバと呼ばれる)を乗算した積である。また、そのメモリが「上位」と「下位」に実装されていれば、該積に更に1/2を乗算した積である。ここで、算出される平均のクロック数には小数部を含まれていてもよく、あるいは、所定の桁で四捨五入ないし切り上げて計算しても良い。
次に、処理がステップSP4に進むと、この追加クロック数と既に発音処理中の発音チャンネルに対して割り当てられているクロック数との合計が求められ、この合計クロック数が最大クロック数(図8の例においては700クロック)以下の範囲に収まるか否かが判定される。ここで、「YES」と判定されると、処理はステップSP12に進み、音源制御レジスタ202において新たな発音チャンネルが確保され、その発音チャンネルで当該ノートオンに対応した新たな楽音の生成が開始される。さらに、エリア判定部318,期間割当部320を介して、音源アクセス期間内に当該発音チャンネルのクロック数が割り当てられる。これにより、本ルーチンの処理は終了する。
一方、合計クロック数が最大クロック数を超えていた場合にはステップSP4において「NO」と判定され、処理はステップSP6に進む。ここでは、既存の発音チャンネルの中からアクセス回数を削減できるものが存在するか否かが判定される。「アクセス回数を削減できる発音チャンネル」とは、具体的には4点補間を行っている発音チャンネルであって、2点補間に変更することによってアクセス回数の削減が可能になるほどFナンバが高い(具体的にはFナンバが2より大きい)発音チャンネルである。
かかる発音チャンネルが存在すれば、ここで「YES」と判定され、処理はステップSP8に進み、「削減可能できる」と判断された発音チャンネルのうち何れかの補間モードが2点補間に変更され、それに応じて削減されたアクセス回数に対応するクロック数(メモリ種類に応じても異なる)が上記合計クロック数から減算される。なお、かかる処理により、当該発音チャンネルに係る楽音信号の品位が若干低下するが、新たなノートオンイベントに対して発音チャンネルを割り当てることの方が重要である。また、2点補間に変更される可能性があるのはFナンバの高い発音チャンネルだけであり、読み出す波形データをその録音時の音高から大きくピッチアップしていない発音チャンルは4点補間から2点補間に変更される恐れはない。そして、処理はステップSP4に戻り、合計クロック数が最大クロック数以下の範囲であれば、ステップSP12において新たな発音チャンネルが確保されることになる。
これら発音チャンネルが解放される前に次々にノートオンイベントが発生すると、その度に本ルーチンが起動され、発音チャンネルの数が増加してゆくことになる。そして、やがては全ての発音チャンネルにおいてアクセス回数の削減が不可能な状態になる。この状態において、さらにノートオンイベントが発生すると、ステップSP6において「NO」と判定され、処理はステップSP10に進む。
ステップSP10においては、リリース処理中の発音チャンネルの中で音声レベルが最低である発音チャンネルが強制的に解放される。なお、リリース処理中の発音チャンネルが存在しない場合には、それ以外の発音チャンネルの中から音声レベルが最低である発音チャンネルが強制的に解放される。この場合は、解放された発音チャンネルのアクセス回数が丸ごと削減され、そのアクセス回数に対応するクロック数が上記合計クロック数から減算される。これは、やはり新たなノートオンイベントに対して優先的に発音チャンネルを割り当てるためである。そして、この発音チャンネルの解放処理が終了すると、処理はステップSP4に戻る。
2.2.2.ノートオフ処理
また、MIDIインタフェース116等を介してノートオフイベントが発生すると、CPU124において、図16(b)に示すノートオフ処理ルーチンが起動される。図において処理がステップSP20に進むと、このノートオフイベントに係る発音チャンネル対して、リリース処理の開始が指示される。すなわち、当該発音チャンネルの音量エンベロープレベルがCPU124により設定されたリリースレートで減衰を開始し、所定時間後に音量エンベロープレベルが「0」になると当該チャンネルが解放される。
3.変形例
本発明は上述した実施例に限定されるものではなく、例えば以下のように種々の変形が可能である。
(1)上記各実施例においては、ステップSP8においてアクセス回数が削減された(2点補間に変更された)発音チャンネルは、消音されるまで常に2点補間が適用された状態になる。しかし、全発音チャンネルによって占有されているクロック数を定期的にチェックし、クロック数に余裕がある場合には、当該発音チャンネルの補間モードを4点補間に戻すようにしてもよい。
(2)上記実施例において、タイミング発生回路346,362は、供給されたメモリタイプ信号TYPEH,TYPELに基づいて、アクセスすべきメモリデバイスのクロックタイミング等を特定した。しかし、メモリタイプ信号とクロックタイミング等との関係をフラッシュメモリ等に記憶させることにより、メモリタイプ信号に応じて任意のクロックタイミング等で各種制御信号を出力できるようにしてもよい。換言すれば、メモリデバイスの進歩に応じて、フラッシュメモリに記憶されたメモリタイプ信号の値(すなわちメモリ種別)を再定義し、ほとんど使われなくなった古いメモリデバイスに代えて新たに出現したメモリデバイスを割り当てるとよい。
(3)また、上記実施例においては、クロック発生部368は動作クロックDCLKを供給するか否かを全SDRAMに対して共通に設定したが、実際にアクセスされるSDRAMチップあるいはDIMMに対してのみ動作クロックDCLKが供給されるように、メモリデバイス毎に動作クロックDCLKのオンオフ状態を設定できるようにしてもよい。
(4)また、上記実施例においては、DIMMは全体のビット幅は64ビットであり、4つのマスク信号によって16ビット単位の書込み/読出しを行ったが、メモリのビット数やマスクの単位はこの組み合わせに限らない。例えば、メモリのデータバス幅は128ビットや256ビットでもよく、マスクは24ビット単位、32ビット単位等でもよい。
(5)また、上記実施例において音源部200は、サンプリング周期ごとに楽音信号を生成するハードウェアの音源部であったが、これに代えてDSPやCPUにより実現されるソフトウェア音源を用いてもよい。また、1サンプリング周期ではなく複数サンプリング周期を単位とする動作を行ってもよい。
(6)音源部200、DAコンバータ110、波形メモリ部400等を専用のボード上に実装することにより、上記実施例における電子楽器を汎用パーソナルコンピュータによって実現することも可能である。かかる場合には、図16に示したルーチンは、該パーソナルコンピュータ上で動作するアプリケーションプログラムになる。このアプリケーションプログラムのみをCD−ROM、フレキシブルディスク等の記録媒体に格納して頒布し、あるいは伝送路を通じて頒布することもできる。
102:パネルスイッチ、104:パネル表示器、108:外部回路、110:DAコンバータ、112:サウンドシステム、114:ネットワークインタフェース部、116:MIDIインタフェース、118:ディスクドライブ、120:ディスク、122:タイマ、124:CPU、126:ROM、128:RAM、200:音源部、202:音源制御レジスタ、204:Xアクセス回路、206:読出書込回路、208:エンベロープ付与部、210:ミキサ、212:DSP、300:メモリI/O部、310:エリア判定部、312:メモリ・モード信号セレクタ、314:アドレス信号セレクタ、316:上位・下位アドレス生成回路、318:エリア判定部、320:期間割当部、322,324:エリア判定部、326:アクセスカウンタ、328:下位チップセレクト生成回路、330:上位チップセレクト生成回路、332:アクセス制御レジスタ、340:ROMコントローラ、342:LHマスク発生部、344:チップセレクト付加部、346:タイミング発生回路、348,354,369:ドライブ回路、350:データ・コントローラ、352:セレクタ、356:バッファアンプ、360:SDRAMコントローラ、362:タイミング発生回路、364:行・列アドレス発生部、366:マスク抽出部、368:クロック発生部、372,374,376,378:アドレスバス、400:波形メモリ部、402,404,410,420:ROM、412,422:SDRAM、414,416,424,426:DIMM。