(58)【調査した分野】(Int.Cl.,DB名)
各サンプリング周期において順番に処理すべき複数のデータが離散的なアドレスの順番で記憶された第1のメモリ内から、複数サンプリング周期分のデータであって、前記第1のメモリ内の連続する複数のアドレスに記憶されている複数のデータをまとめて読み出すとともに、前記読み出された前記複数サンプリング周期分のデータを第2のメモリに書き込む第1のメモリコントローラと、
前記第2のメモリに書き込まれている前記複数サンプリング周期分のデータを、各サンプリング周期において処理すべき順番で処理する処理部と、
を備えた信号処理装置。
前記第1のメモリコントローラは、前記処理部による前記複数サンプリング周期分のデータに対する処理を開始する前に、前記複数サンプリング周期分のデータをまとめて読み出すとともに、前記読み出された前記複数サンプリング周期分のデータを第2のメモリに書き込み、
前記処理部による前記複数サンプリング周期分のデータに対する処理が終了した後に、前記第2のメモリ内の前記処理された複数サンプル周期分のデータを読み出すとともに、前記読み出されたデータを前記第1のメモリ内の元のアドレスに書き込む第2のメモリコントローラを更に備える、
請求項1に記載の信号処理装置。
前記処理部は、各サンプリング周期において、前記第1のメモリ内の離散的なアドレスの順番で記憶されている複数のデータを離散的なアドレスの順番に処理することで遅延処理を実行する、請求項1または2に記載の信号処理装置。
前記第1のメモリには、各サンプリング周期において順番に処理すべき複数のデータが離散的なアドレスの順番で記憶されており、かつ、各サンプリング周期に対応するデータが他のサンプリング周期に対応するデータに対してシフトされたアドレスに記憶されており、
前記処理部は、前記第1のメモリに記憶されたデータのアドレスを、サンプリング周期でシフトしながら、各サンプリング周期に対応して離散的に記憶されている複数のデータに対する読み込み及び書き込みを行うことで、各サンプリング周期に対応する遅延処理を実行する、請求項1乃至3のいずれか一項に記載の信号処理装置。
前記処理部は、サンプリング周期毎に、前記第2のメモリ内の前記サンプリング周期に対応するページエリアにあるデータを読み出して処理し、前記処理されたデータを前記読み出したページエリアに書き込む、請求項6に記載の信号処理装置。
【発明を実施するための形態】
【0014】
以下、図面を参照して本発明の実施形態について説明する。
[全体構成]
図1は、本発明の一実施形態である電子楽器100の全体構成を示すブロック図である。この図に示す電子楽器100は、CPU10、SRAM20、音源部30、第1のメモリ40aとしてのDDR−SDRAM40およびNAND FLASH50から構成される。CPU10は、SRAM20に格納される各種プログラムに従って音源部30を制御する。具体的には、CPU10が音源部30のUART(Universal Asynchronous Receiver Transmitter)34を介して受信した演奏情報であるノートオン・ノートオフイベント等を表わすMIDIデータに従い、音源部30のDSP31に対して楽音波形の発生やエフェクト付与を指示する。 このUARTには、例えば鍵盤などの演奏操作子60が接続される。
【0015】
音源部30は、起動時又は必要に応じて、NAND FLASHメモリ50から波形テーブルデータを読み出してDDR−SDRAM40に転送する。なお、DDR−SDRAM40とは、クロックの立ち上がり時と立ち下がり時の両方でデータの読み出し・書き込みを可能とするDDR(ダブルデータレート)モードを備えたSDRAMである。音源部30では、DDR−SDRAM40に格納された波形テーブルデータを参照して各種音色の波形データに基づく楽音波形を発生させた後、当該楽音波形に対してコーラスやリバーブ等のエフェクトを付加して出力する。
【0016】
音源部30は、DSP31、波形発生器32、I2S(IC間サウンド)33、UART34、DDR−SDRAMインタフェース部35およびNAND FLASHインタフェース部36およびを備える。波形発生器32は、公知の波形メモリ読み出し方式で構成され、DDR−SDRAM40に格納された波形テーブルデータを参照して読み出した各種音色の波形データに基づき同時発音する複数の発音チャンネル毎の楽音波形データを生成する。
【0017】
DSP31では、CPU10からの指示がスレーブポートSから供給されると共に、波形発生器32が出力する各発音チャンネル毎の楽音波形データをマスターポートMを介して受信する。また、DSP31では、受信した各発音チャンネル毎の楽音波形データの内、リバーブ等の信号遅延に係るエフェクトを付与すべき発音チャンネルの楽音波形データをマスタポートM経由でDDR−SDRAM40に送る。このDDR−SDRAM40における書き込み/読み出しで信号遅延された楽音波形データは、再びマスタポートM経由でDSP31に戻る。
【0018】
DSP31は、各発音チャンネル毎の楽音波形データをI2S(IC間サウンド)33に出力する。I2S33は、DSP31から供給された各発音チャンネル毎の楽音波形データを、I2Sフォーマットで外部出力する。具体的には、図示されていないサウンドシステムのD/A変換部に入力されてアナログ形式の楽音波形に変換される。
【0019】
[DSP31の構成]
次に、
図2を参照してDSP31の構成について説明する。
図2は、DSP31の構成を示すブロック図である。この図において、インタフェース部310は、CPUバスのスレーブポートSとしてI/O制御する。インタフェース部311は、Bridge A DRAMコントローラ315のメモリバス用のマスタポートMとしてI/O制御する。
【0020】
インタフェース部312は、Bridge B DRAMコントローラ318のメモリバス用のマスタポートMとしてI/O制御する。DMAコントローラ313は、波形発生器32(
図1参照)で発生した楽音波形データをBridge B DRAMコントローラ318側へDMA転送したり、Bridge B DRAMコントローラ318側で遅延付加した楽音波形データをI2S33(
図1参照)にDMA転送する。
【0021】
MP−RAM314は、上記インタフェース部310を介してCPU10から供給されるDSPプログラムを記憶する。このDSPプログラムに従って、後述する演算器323が波形信号処理を実行し、さらに後述のBridge A DRAMコントローラ315やBridge B DRAMコントローラ318が、波形信号処理に必要な各種パラメータおよび楽音波形データを演算器323に供給する。
【0022】
Bridge A DRAMコントローラ315は、P−RAM316に格納される波形信号処理用パラメータや、V−RAM317に格納される補間処理用パラメータを演算器323に供給する。Bridge B DRAMコントローラ318は、T−RAM319に格納される遅延信号処理用のプリフェッチサブプログラムに従い、DMAコントローラ313からDMA転送されて来る楽音波形データを、リングバッファとして機能する外部メモリ(DDR−SDRAM40)に対して書き込み/読み出しを行って遅延付加する。
【0023】
W−RAM320は、後述する演算器323のワークエリアとして用いられる。本願発明の第2のメモリ321aであるD−RAM(A系統)321およびD−RAM(B系統)322は、DDR−SDRAM40のミラーリング用バッファとして機能する。本実施形態では、4ページ×2系統のD−RAM(A系統)321およびD−RAM(B系統)322を用い、かつ複数サンプリング期間内に複数サンプリング分のプリフェッチ(先読み出し)を行ってDSPプログラム進行との衝突を避ける。具体的には、DSPプログラム用バッファとプリフェッチプログラム用バッファとのダブルバッファ(4ページ×2系統)を設け、プリフェッチプログラム用バッファから4サンプリング分をまとめてバーストアクセスすることで外部メモリにアクセスする毎に生じるレイテンシ(遅延)によるパフォーマンス劣化を回避する。
【0024】
本願発明の処理部323aとしての演算部323は、算術論理演算器ALU、乗累算器MACおよびレジスタREGを備え、W−RAM320をワークエリアとして、サンプリング周期毎の波形データについて、遅延フィードバック演算やフィルタ演算を施して楽音波形データを形成し、形成した楽音波形データに遅延信号処理を施してリバーブ等のエフェクトを付与する。演算部323でエフェクト付与された楽音波形データは、Bridge B DRAMコントローラ318からDMAコントローラ313を経由してI2S33(
図1参照)にDMA転送される。
【0025】
[DDR−SDRAM40のメモリ構成]
次に、
図3を参照してDDR−SDRAM40のメモリ構成について説明する。
図3は、リングバッファとして機能するDDR−SDRAM40のアドレス変化を概略的に示す図である。この図は、実際のリングバッファの巡回アドレス空間を1次元のアドレス空間を備えた遅延メモリ(Delay RAM)として表現し、これを時系列(サンプリングタイミング順)に並べた様子を図示している。
【0026】
こうした遅延メモリ(Delay RAM)において、Nサンプル目のデータは付与すべき遅延時間に対応した複数アドレスでライトW(書き込み)/リードR(読み出し)が行われる。この複数アドレスでのアクセスは、付与すべき遅延時間に対応するために離散的で連続しない。サンプリングタイミングN+1、N+2、N+3と見ていくと、Nサンプル目と同じアクセスパターンを繰り返すが、リングバッファの場合、各アドレスがサンプリング毎に増加する。1サンプリング単位で見れば比較的離散的なアドレスだが、複数サンプリングで見ると、シーケンシャルなアドレス変化として捉えることが出来る。そこで、本発明では、この複数サンプリングに亘ってシーケンシャルなアドレスについてまとめてバーストアクセスすることを特徴とする。
【0027】
[D−RAM(A系統)321およびD−RAM(B系統)322のメモリ構成]
次に、
図4は、D−RAM(A系統)321およびD−RAM(B系統)322におけるページとバーストアクセスの関係を示す図である。上述したバーストアクセスを具現する為、本実施形態では、
図4に図示する通り、D−RAM(A系統)321をDSPプログラム用バッファ、D−RAM(B系統)322をプリフェッチプログラム用バッファとし、プリフェッチプログラム用バッファから4サンプリング分をまとめてバーストアクセスする。具体的には、例えば
図4においてD−RAM(A系統)321のページ0〜ページ3を逐次読み出ししている最中に、D−RAM(B系統)322のページ4〜ページ7を一括読み出し(プリフェッチ4バーストアクセス)するようになっている。
【0028】
次に、
図5を参照してDSPプログラム進行とプリフェッチプログラム進行との関係を説明する。上述したように、DSPプログラム進行では、D−RAM(A系統)321から4サンプルデータを逐次読み出す。これが
図5中のプログラム進行時間「1」〜「4」に該当する。そして、このプログラム進行時間「1」〜「4」が進行中に、プリフェッチプログラム進行AによりD−RAM(B系統)322から次の4サンプリング分「5」〜「8」をプリフェッチ4バーストアクセスする。そして、DSPプログラム進行が「5」〜「8」になると、次のプリフェッチプログラム進行Bがプリフェッチ4バーストアクセスする。以後、これを繰り返すことにより外部メモリにアクセスする毎に生じるレイテンシ(遅延)を回避してパフォーマンスの低下を防止する。
【0029】
次に、
図6を参照してプリフェッチプログラム進行を規定するプリフェッチサブプログラムコマンドについて説明する。前述したように、プリフェッチサブプログラムコマンドは、Bridge B DRAMコントローラ318内部のT−RAM319(
図2参照)に格納され、順次実行される。プリフェッチサブプログラムコマンドは、コマンドフィールドおよびアドレスフィールドから構成される。
【0030】
コマンドフィールドには、「リードインクリメントアドレッシング」、「リードインクリメントアドレッシング+修飾アドレス」、「ライトインクリメントアドレッシング」、「リード直接アドレス」、「ライト直接アドレス」および「NOP(no operation)」の何れかがセットされる。アドレスフィールドには、遅延する時間に関連したアドレス値がセットされる。
【0031】
[Bridge B DRAMコントローラ318の構成]
次に、
図7を参照してBridge B DRAMコントローラ318の構成について説明する。Bridge B DRAMコントローラ318は、外部メモリインタフェース部324およびアービタ325から構成される。外部メモリインタフェース部324は、DSPスレーブポートコントロール信号およびアクセスカウンタインクリメントイネーブルACCEに応じて、外部バスマスタインタフェースを介して外部メモリ(E−RAM:DDR−SDRAM40)にリード/ライトを指示したり、アービタ325に対してリード/ライトを指示したりする。
【0032】
アービタ325は、外部メモリインタフェース部324からのアクセス要求(リード/ライト)に応じて、D−RAM(A系統)321およびD−RAM(B系統)322が互いに干渉を起こすことなく独立してリード/ライト動作するよう調停する。具体的には、DSPスレーブポートを介したD−RAMへのアクセス要求を最優先させ、空タイミングで外部メモリ(E−RAM:DDR−SDRAM40)からプリフェッチデータを読み出したり、D−RAMから読み出したデータを外部メモリ(DDR−SDRAM40)に書き込む。
【0033】
[外部メモリインタフェース部324の構成]
次に、
図8を参照して外部メモリインタフェース部324の構成について説明する。
図8において、カウンタTCは、T−RAM319のアドレス値を指定する。カウンタBCは、バーストアクセス回数を計数するカウンタであり、カウンタTCの下位を形成する。カウンタBCがバーストカウントする毎にカウンタTCがインクリメントされる。
【0034】
レジスタREG1には、D−RAM(A系統)321又はD−RAM(B系統)322のアドレス(以下、D−RAMアドレスと記す)がフェッチされる。すなわち、T−RAM319(カウンタTCのアドレス値)で指定されるプリフェッチサブプログラムコマンド中のアドレスがレジスタREG1にストアされる。
【0035】
セレクタSEL5は、レジスタREG1のD−RAMアドレス又は「pagesize」の何れかを選択して出力する。セレクタSEL4は、加算器ADD5の出力又は「0」の何れかを選択して出力する。加算器ADD5は、上記セレクタSEL4,SEL5の各出力を加算して得たD−RAMアドレスを発生する。つまり、レジスタREG1のD−RAMアドレスに対して「0」あるいは「pagesize」を加算し、逐次アクセスするアドレス又はバーストアクセスするアドレスを算出する。レジスタD Rd adr Aは、加算器ADD5の出力をフェッチする。
【0036】
なお、レジスタD Rd adr Aに設けられたMSB Buffer SELは、前述したD−RAM(A系統)321又はD−RAM(B系統)322を選択する。D−RAM(A系統)321を選択した場合には、逐次アクセスするアドレスが用いられ、一方、D−RAM(B系統)322を選択した場合には、バーストアクセスするアドレスが用いられる。
【0037】
レジスタREG2は、コントローラCTLから供給される信号D Rdy Aを保持する。レジスタD Rd adr Aのアドレスに応じて読み出されるデータD Rd Data Aは、レジスタE Wr Dataを介してデータE Wr Dataとして外部メモリ(DDR−SDRAM40)に書き込まれる。
【0038】
コマンドレジスタCOM REGは、T−RAM319のプリフェッチサブプログラムコマンドをフェッチする。レジスタREG3は、T−RAM319のプリフェッチサブプログラムコマンド中のアドレスをフェッチする。デコーダDECは、コマンドレジスタCOM REGにフェッチされたプリフェッチサブプログラムコマンドをデコードし、これにより得られたアクセスコマンドをレジスタTRANS1〜TRANS3に保持する。
【0039】
サンプリングカウンタSCは、サンプリング数を計数して出力する。レジスタMODRは、アドレスモジュレーション値を保持する。セレクタSEL0は、「0」又はサンプリング数の何れかを選択して出力する。加算器ADD1は、レジスタREG3のプリフェッチサブプログラムコマンド中のアドレスに、セレクタSEL0の出力を加算する。セレクタSEL1は、「0」又はアドレスモジュレーション値の何れかを選択して出力する。加算器ADD2は、加算器ADD1の出力又はセレクタSEL1の出力の何れかを選択して出力する。
【0040】
このように、サンプリングカウンタSC乃至加算器ADD2では、コントローラCTLのセレクタ制御に従い、レジスタREG3のプリフェッチサブプログラムコマンド中のアドレスにサンプリング数を加算して歩進させるか、あるいはアドレスモジュレーション値を更に加算して歩進させるようになっている。歩進されたプリフェッチサブプログラムコマンド中のアドレスは、レジスタREG4に保持される。
【0041】
セレクタSEL3は、「1」又は「0」の何れかを選択して出力する。セレクタSEL2は、レジスタE Adrの出力又はレジスタREG4のアドレスの何れかを選択して出力する。加算器ADD4は、上記セレクタSEL2,SEL3の各出力を加算したアドレスを発生する。レジスタE Adrは、加算器ADD4が算出するアドレスをインクリメントして外部メモリ(DDR−SDRAM40)のアドレスE Adrを発生する。
【0042】
アドレスE Adrに応じて外部メモリから読み出されるデータE Rd Dataは、レジスタD Wr Data Bを介してデータD Wr Data BとしてD−RAMに書き込まれる。その書き込みアドレスは、コントローラCTRからレジスタD Adr Bにセットされる。
【0043】
1/4回路は、アクセスカウンタインクリメントイネーブルACCEのアクセス回数を1/4に減らし、4回のサンプリングアクセス巡回毎に1回のアクセスイネーブルを発生する。アクセスカウンタACCは、1/4回路が発生するアクセスイネーブルに応じてアクセス回数をインクリメントする一方、コントローラCTL側から供給されるデクリメントイネーブルDECEに応じてアクセス回数をデクリメントする。
【0044】
[外部メモリインタフェース部324の動作]
次に、
図9に図示する外部メモリインタフェース部324のタイミングチャートを参照して動作説明する。以下では、クロックCLKのフェーズに対応して外部メモリインタフェース部324の動作を説明する。外部メモリインタフェース部324では、アクセスカウンタACCが「0」でないこと、レジスタCOM REGにコマンドが無いことを起点としてアクセス動作を開始する。
【0045】
先ず、クロック「1」フェーズでは、アクセスカウンタACCが「0」でないことに対応して、カウンタBCがインクリメントを開始すると、T−RAM319の先頭コマンドRD0がパイプラインに流れる。その後、カウンタBCのインクリメントに従い、T−RAM319のコマンドRD1、RD2、RD3がバースト用として発行される。
【0046】
一方、D−RAMアドレスパイプラインの方は、カウンタTCのアドレス値Nがコピーされ、続いてページアドレス+pageが加算されたアドレスが発行されてレジスタD Rd ADR Aに保持される。
【0047】
T−RAMアドレスフィールドは、レジスタREG3からパイプラインで+SC+MODRが加算され、これにより外部メモリ(DDR−SDRAM40)のアドレスが算出される。外部メモリに対しては、レジスタTRANS2でアクセスリクエストがアサートされるが、外部から信号E Rdyがディアサートされる。この為、クロック「5」〜「9」ではウェイト(待ち)が発生している。
【0048】
そして、信号E Rdyがアサートされて再び実行を開始すると、外部メモリ(DDR−SDRAM40:E−RAM)からのリードデータE Rd Data(RD DATA0,RD DATA1,RD DATA2およびRD DATA3)がレジスタD Wr Data Bに格納され、D−RAMに書き込むデータ(RD DATA0,RD DATA1,RD DATA2およびRD DATA3)となる。
【0049】
次に、クロック「10」フェーズからはD−RAMから外部メモリへの書き込みが行われる。外部メモリへの書き込みを行う場合には、書き込むべきデータをD−RAM側から読み出す必要が生じる。この為、クロック「12」において信号D Req Aがアサートされるが、このタイミング(クロック「12」の立ち上がり)では、先ほどのD−RAMへの書き込みとコンフリクトするので、信号D Rdy Aがディアサートされてクロック「12」、「13」でウェイト(待ち)が発生する。
【0050】
そして、信号D Rdy Aがアサートされ次第、D−RAMからのリードデータD RD Data(WR DATA0,WR DATA1,WR DATA2およびWR DATA3)がレジスタE Wr Dataに格納され、順次外部メモリ(E−RAM:DDR−SDRAM40)に書き込まれる。
【0051】
ところで、この外部メモリへの書き込みの過程で、クロック「15」〜「18」では、信号E Rdyがディアサートされている為にウェイト状態が発生している。こうした書き込み過程でのウェイトがDSPプログラム進行において発生した場合には、そのまま処理低下の原因になるが、前述したプリフェッチプログラム進行ではプリフェッチ4バーストアクセスするので、その影響を回避出来る。
【0052】
図8におけるSEL4、SEL5、ADD5、D Rd adr A、及びD Wr Data Bにより本願発明の第1のメモリコントローラ330aを構成し、REG4、SEL2、SEL3、ADD4、E Adr、及びE Wr Dataにより第2のメモリコントローラ330bを構成する。
【0053】
以上説明したように、本実施形態では、DSPプログラム用バッファとプリフェッチプログラム用バッファとのダブルバッファ(4ページ×2系統)を設け、プリフェッチプログラム用バッファから4サンプリング分をまとめてバーストアクセスすることで外部メモリにアクセスする毎に生じるレイテンシ(遅延)によるパフォーマンス劣化を回避することが出来る。また、外部メモリにアクセスする毎に生じるレイテンシ(遅延)の影響を除去することでDSP自体の処理能力が向上し、同時に処理できるエフェクトの数を増やすことも可能になる。加えて、DSPの処理能力の向上によりバス占有率が下がる結果、楽器システム全体の処理能力の向上も期待できる。
【0054】
また、本願発明に係る信号処理装置の機能を、ソフトウエアプログラムによりコンピュータの処理に実現することも可能である。
【0055】
以上、本発明の実施形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【0056】
以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
(付記)
[請求項1]
第1のメモリ内の連続する複数のアドレスに記憶されている複数サンプリング周期分のデータを読み出すとともに、当該読み出された複数サンプリング周期分のデータを第2のメモリに書き込む第1のメモリコントローラと、
前記第2のメモリに書き込まれている複数サンプリング周期分のデータを、これら各サンプリング周期に対応するデータ毎に読み出して処理し、当該処理されたデータを前記第2のメモリに書き込む処理部と、
前記第2のメモリに書き込まれている複数サンプル周期分のデータを読み出すとともに、当該読み出されたデータを前記第1のメモリの連続するアドレスに書き込む第2のメモリコントローラと、
を備えた信号処理装置。
【0057】
[請求項2]
前記第1のメモリは、リングバッファ形状に構成され、前記第1のメモリに記憶されたデータのアドレスを、サンプリング周期でシフトすることにより、遅延処理を実行する遅延処理部をさらに有する請求項1に記載の信号処理装置。
【0058】
[請求項3]
前記第2のメモリは、前記複数サンプリング周期分のデータを、サンプリング周期毎に分割して記憶する複数のページエリアを備えた請求項1または請求項2に記載の信号処理装置。
【0059】
[請求項4]
前記処理装置は、サンプリング周期毎に、当該サンプリング周期に対応するページエリアにあるデータを読み出して処理し、当該処理されたデータを前記読み出しページエリアに書き込む処理部と、請求項1乃至請求項3のいずれかに記載の信号処理装置。
【0060】
[請求項5]
前記信号処理装置は、前記第のメモリを外付けとし、前記第2のメモリを内蔵した請求項1乃至4に記載の信号処理装置。
【0061】
[請求項6]
信号処理装置に用いられる信号処理方法であって、前記信号処理装置は、
第1のメモリ内の連続する複数のアドレスに記憶されている複数サンプリング周期分のデータを読み出すとともに、当該読み出された複数サンプリング周期分のデータを第2のメモリに書き込み、
前記第2のメモリに書き込まれている複数サンプリング周期分のデータを、これら各サンプリング周期に対応するデータ毎に読み出して処理し、当該処理されたデータを前記第2のメモリに書き込み、
前記第2のメモリに書き込まれている複数サンプル周期分のデータを読み出すとともに、当該読み出されたデータを前記第1のメモリの連続するアドレスに書き込む、信号処理方法。
【0062】
[請求項7]
信号処理装置として用いられるコンピュータに、
第1のメモリ内の連続する複数のアドレスに記憶されている複数サンプリング周期分のデータを読み出すとともに、当該読み出された複数サンプリング周期分のデータを第2のメモリに書き込むステップと、
前記第2のメモリに書き込まれている複数サンプリング周期分のデータを、これら各サンプリング周期に対応するデータ毎に読み出して処理し、当該処理されたデータを前記第2のメモリに書き込むステップと、
前記第2のメモリに書き込まれている複数サンプル周期分のデータを読み出すとともに、当該読み出されたデータを前記第1のメモリの連続するアドレスに書き込むステップと、
を実行させるプログラム。
【0063】
[請求項8]
演奏データを入力する演奏操作子と、
第1および第2のメモリと、
前記演奏データに応じて楽音を形成する、前記請求項1乃至3のいずれかに記載の信号処理装置と、
を備える電子楽器。