(57)【要約】【課題】メモリの記憶容量を効率的に使用する。【解決手段】メモリが提供するアドレス空間にあって、置換元データが格納される第１の設定領域と、当該置換元データの置換対象とする置換先データが格納される第２の設定領域と、を設定しておいた上で、プロセッサがアクセス先を指定した前記メモリの指定アドレスが、前記第１の設定領域の第１の先頭アドレス及び終端アドレスの間に含まれる場合、前記指定アドレスを、前記第２の設定領域の第２の先頭アドレスに対して、前記指定アドレスと前記第１の先頭アドレスとの差分を加算した置換先アドレスへと変更するアドレス変換回路を有するメモリアドレス生成装置。【選択図】  図３
2006293663.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサに設けられ、当該プロセッサがアクセス可能なメモリに対しアクセス先のアドレスを生成するメモリアドレス生成装置において、
前記メモリが提供するアドレス空間にあって、置換元データが格納される第１の設定領域と、当該置換元データの置換対象とする置換先データが格納される第２の設定領域と、を設定しておいた上で、前記プロセッサがアクセス先を指定した前記メモリの指定アドレスが、前記第１の設定領域の第１の先頭アドレス及び終端アドレスの間に含まれる場合、前記指定アドレスを、前記第２の設定領域の第２の先頭アドレスに対して、前記指定アドレスと前記第１の先頭アドレスとの差分を加算した置換先アドレスへと変更するアドレス変換回路を有しており、
前記指定アドレスが前記第１の先頭アドレス及び前記終端アドレスの間に含まれる場合、前記指定アドレスに応じた前記第１の設定領域の前記置換元データは、前記置換先アドレスに応じた前記第２の設定領域の前記置換先データへと置換されること、
を特徴とするメモリアドレス生成装置。
【請求項２】
前記第１の設定領域と前記第２の設定領域とを同容量としたこと、を特徴とする請求項１に記載のメモリアドレス生成装置。
【請求項３】
前記アドレス変換回路は、
前記第１の先頭アドレスを設定する第１のアドレスレジスタと、
前記終端アドレスを設定する第２のアドレスレジスタと、
前記第２の先頭アドレスを設定する第３のアドレスレジスタと、
を有することを特徴とする請求項１又は２に記載のメモリアドレス生成装置。
【請求項４】
前記アドレス変換回路は、
前記指定アドレスと前記第１の先頭アドレスとの第１の差分を演算する第１の減算器と、
前記終端アドレスと前記指定アドレスとの第２の差分を演算する第２の減算器と、
前記第２の先頭アドレスと前記第１の差分との加算を行い前記置換先アドレスを生成する加算器と、
前記指定アドレス又は前記置換先アドレスを選択する選択回路と、
前記第１の差分と前記第２の差分夫々における正又は負の符号ビットに基づいて、前記指定アドレスが、前記第１の先頭アドレスと前記終端アドレスとの間に含まれる旨を判別した場合には前記置換先アドレスを選択し、前記第１の先頭アドレスと前記終端アドレスとの間に含まれない旨を判別した場合には前記指定アドレスを選択すべく、前記選択回路を制御する選択制御回路と、
を有することを特徴とする請求項１乃至３のいずれかに記載のメモリアドレス生成装置。
【請求項５】
前記アドレス変換回路は、
前記指定アドレスのＭＳＢとして１ビットの「０」を追加する第１のＭＳＢ拡張部と、
前記第１の先頭アドレスのＭＳＢとして１ビットの「０」を追加する第２のＭＳＢ拡張部と、
前記終端アドレスのＭＳＢとして１ビットの「０」を追加する第３のＭＳＢ拡張部と、を有しており、
前記第１の減算器は、前記１ビットの「０」を追加した前記指定アドレスと、前記１ビットの「０」を追加した前記第１の先頭アドレスとの前記第１の差分を演算し、
前記第２の減算器は、前記１ビットの「０」を追加した前記終端アドレスと、前記１ビットの「０」を追加した前記指定アドレスとの前記第２の差分を演算すること、
を特徴とする請求項４に記載のメモリアドレス生成装置。
【請求項６】
前記アドレス変換回路は、
前記置換元データから前記置換先データへの置換を行うか否か設定するイネーブルフラグを格納するイネーブルフラグレジスタを有しており、
前記選択制御回路は、
前記イネーブルフラグレジスタに格納されたイネーブルフラグに基づき、当該イネーブルフラグが前記置換を行う旨を示す場合には前記選択回路における前記指定アドレス又は前記置換先アドレスの選択を有効とし、当該イネーブルフラグが前記置換を行わない旨を示す場合には前記選択回路において前記指定アドレスのみの選択を有効とするよう、制御すること、
を特徴とする請求項４又は５に記載のメモリアドレス生成装置。
【請求項７】
前記メモリが提供するアドレス空間は、ＲＯＭのアドレス空間のみで構成され、
前記第１の設定領域及び前記第２の設定領域は、前記ＲＯＭのアドレス空間内に設定されることとし、
複数の処理において夫々共通の内容となる静的データ及び夫々異なる内容となる動的データが用いられる場合、前記第１の設定領域に格納される前記置換元データは前記複数の動的データのうちの代表データであり、
前記第２の設定領域に格納される前記置換先データは、前記代表データ以外の動的データであること、
を特徴とする請求項１乃至６のいずれかに記載のメモリアドレス生成装置。
【請求項８】
前記メモリが提供するアドレス空間は、ＲＯＭのアドレス空間及びＲＡＭのアドレス空間を合成して構成され、
前記第１の設定領域は前記ＲＯＭのアドレス空間内に設定されるとともに、前記第２の設定領域は前記ＲＡＭのアドレス空間内に設定されることとし、
前記第１の設定領域に格納される前記置換元データは、バグが生じた箇所のバグデータであり、
前記第２の設定領域に格納される前記置換先データは、前記バグを修正したバグ修正データであること、
を特徴とする請求項１乃至６のいずれかに記載のメモリアドレス生成装置。
【請求項９】
請求項１乃至８のいずれかに記載のメモリアドレス生成装置を有したプロセッサ。
【請求項１０】
前記プロセッサはＤＳＰ（Digital Signal Processor）であり、前記メモリはプログラムメモリ若しくはデータメモリであることを特徴とする請求項９に記載のプロセッサ。
【請求項１１】
プロセッサがアクセス可能なメモリに対しアクセス先のアドレスを生成するメモリアドレス生成方法において、
前記メモリが提供するアドレス空間にあって、置換元データが格納される第１の設定領域と、当該置換元データを置換する置換先データが格納される第２の設定領域と、を設定しておき、
前記プロセッサがアクセス先を指定した前記メモリの指定アドレスが、前記第１の設定領域の第１の先頭アドレス及び終端アドレスの間に含まれる場合、前記指定アドレスを、前記第２の設定領域の第２の先頭アドレスに対して、前記指定アドレスと前記第１の先頭アドレスとの差分を加算した置換先アドレスへと変更することとし、
前記置換先アドレスに基づくアクセスによって、前記指定アドレスに応じた前記第１の設定領域の前記置換元データは、前記置換先アドレスに応じた前記第２の設定領域の前記置換先データへと置換されること、を特徴とするメモリアドレス生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリアドレス生成装置及びそれを有したプロセッサ、メモリアドレス生成方法に関する。
【背景技術】
【０００２】
マイクロコンピュータやＤＳＰ等の信号処理を行うプロセッサは、プログラムメモリやデータメモリ等のアクセス可能なメモリを内蔵若しくは外付けしてある。プロセッサが、このようなメモリへのアクセスを行うアドレスを指定する方式としては、直接アドレス指定方式、間接アドレス指定方式、相対アドレス指定方式、基底アドレス指定方式等がある。よって、プロセッサは、これらのアドレス指定方式を実現すべく、メモリに対してアクセスを行うアドレスを生成するメモリアドレス生成装置（例えば、以下に示す特許文献１を参照）を具備する。
【特許文献１】特開平６−３３７８１２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、プロセッサに要求される処理の高度化や複雑化に伴って、メモリに対して要求される格納すべきデータ容量も年々増加の一途をたどっている。かかる状況下で、例えば、プロセッサの一つであるＤＳＰ（Digital Signal Processor）は、乗算ならびに累積加算等を伴うデジタルフィルタ演算（ＦＩＲ（Finite Impulse Response）、ＩＩＲ（Infinite Impulse Response）等）を実施するにあたり、同一の乗算器ならびに加算器を用いつつも、そのデジタルフィルタ演算のフィルタ係数を動的に切り替えて、複数の処理を実施している。この場合、フィルタ係数の中には、複数の処理において共通の内容となる静的データや、複数の処理において異なった内容となる動的データが混在する。よって、プロセッサは、複数の処理毎の静的データ及び動的データをメモリに格納していたが、その際、静的データは各処理で共通の内容であるにも関わらずメモリに複数格納されることになるため冗長であり、メモリの使用容量の増加の一因となっていた。
【０００４】
さらに、例えば、メモリがマスクＲＯＭの場合、そのマスクＲＯＭに格納されたプログラムとしては、マスクＲＯＭ製造後においても、バグが発見される場合や、システムの仕様変更に伴いプログラム内容の変更がなされる場合がある。この場合、マスクＲＯＭである以上、デバッグやプログラム変更のためのマスクＲＯＭの書き換えは困難であるため、バグや変更前のプログラムがそのままの状態でマスクＲＯＭに格納されることとなる。このこともまた同様に、メモリの使用容量の増加の一因となっていた。
【課題を解決するための手段】
【０００５】
前述した課題を解決するための主たる本発明は、プロセッサに設けられ、当該プロセッサがアクセス可能なメモリに対しアクセス先のアドレスを生成するメモリアドレス生成装置において、前記メモリが提供するアドレス空間にあって、置換元データが格納される第１の設定領域と、当該置換元データの置換対象とする置換先データが格納される第２の設定領域と、を設定しておいた上で、前記プロセッサがアクセス先を指定した前記メモリの指定アドレスが、前記第１の設定領域の第１の先頭アドレス及び終端アドレスの間に含まれる場合、前記指定アドレスを、前記第２の設定領域の第２の先頭アドレスに対して、前記指定アドレスと前記第１の先頭アドレスとの差分を加算した置換先アドレスへと変更するアドレス変換回路を有しており、前記指定アドレスが前記第１の先頭アドレス及び前記終端アドレスの間に含まれる場合、前記指定アドレスに応じた前記第１の設定領域の前記置換元データは、前記置換先アドレスに応じた前記第２の設定領域の前記置換先データへと置換されること、とする。
【発明の効果】
【０００６】
本発明によれば、メモリの記憶容量を効率的に使用可能なメモリアドレス生成装置及びそれを有したプロセッサ、メモリアドレス生成方法を提供することができる。
【発明を実施するための最良の形態】
【０００７】
＜プロセッサの全体構成＞
図１は、本発明に係る『プロセッサ』の全体構成例を示す図である。なお、以下では、プロセッサはＤＳＰであるものとして説明するが、その他のマイクロコンピュータやＡＳＩＣ（Application Specific IC）等としてもよい。なお、ＤＳＰは、デジタル信号処理に特化したマイクロプロセッサであり、音声、通信、計測、画像、音響等の幅広い分野におけるデジタル信号処理に用いられている。ＤＳＰは、デジタル信号処理で多用される積和演算を高速に行うためのハードウェア積和演算器（ＭＡＣ）を搭載しており、１命令で複数の処理を実行させる並列処理や、プログラムメモリとデータメモリを分離させるハーバードアーキテクチャ等が特徴である。また、ＤＳＰは、高速動作が基本であるので、高速アクセスが可能なプログラムメモリやデータメモリを一般的には外付けではなく内蔵している。
【０００８】
図１に示すプロセッサは、プログラムカウンタ１０、プログラムメモリ２０、インストラクションレジスタ３０、インストラクションデコーダ４０、メモリアドレス生成装置２００、データメモリ７０、演算器１００、によって主に構成される他に、Ｉ／Ｏポートや各種レジスタ等（いずれも不図示）を有する。
【０００９】
プログラムカウンタ１０は、実行すべきプログラムの格納先を指定するプログラムアドレスを順次設定するカウンタである。プログラムメモリ２０は、一般的にはＲＯＭ（ＥＥＰＲＯＭ等）で構成され、プログラムの命令コードが格納されるメモリである。インストラクションレジスタ３０は、プログラムメモリ２０からフェッチされた命令コードを一時的に格納するレジスタである。インストラクションデコーダ４０は、インストラクションレジスタ３０に格納されている命令コードを解読するデコーダである。
【００１０】
メモリアドレス生成装置２００は、本発明に係る『メモリアドレス生成装置』の一実施形態である。メモリアドレス生成装置２００は、アドレス生成回路５０と、アドレス変換回路６０と、を有して、基本的には、データメモリ７０へのアクセス先を示すアドレスを生成するものである。なお、データメモリ７０が提供するアドレス空間において、通常のアクセスが行われる通常アクセス領域７０１と、置換元データが格納される置換元領域７０２（『第１の設定領域』）と、置換元データの置換対象とする置換先データが格納される置換先領域７０３（『第２の設定領域』）と、が設定されるものとする（図４を参照）。
【００１１】
アドレス生成回路５０は、インストラクションデコーダ４０における命令コードの解読結果に基づき、データメモリ７０に対してアクセス先のアドレス（以下、指定アドレスと称する。）を生成するものである。このアドレス指定方式としては、直接アドレス指定方式、間接アドレス指定方式、相対アドレス指定方式、基底アドレス指定方式等を採用することができる。なお、本実施形態では、相対アドレス指定方式を採用しており、アドレス生成回路５０は、アドレスレジスタ５１にデータメモリ７０のアクセス開始先を示すループ開始アドレスを格納しておき、アドレス演算器５２において、アドレスレジスタ５１に格納しておいたループ開始アドレスから所定のステップ値をループ演算にて増減することで、指定アドレスを順次生成する場合とするが、これに限定されるものではない。
【００１２】
アドレス変換回路６０は、本発明に係る『アドレス変換回路』の一実施形態である。アドレス変換回路６０は、アドレス生成回路５０において生成された指定アドレスが、置換元領域７０２の先頭位置に付与されるＯＬＢ（Overlay Begin）アドレス（『第１の先頭アドレス』）及び置換元領域７０２の終端位置に付与されるＯＬＥ(Overlay End)アドレス（『終端アドレス』）の間に含まれる場合には、指定アドレスを、置換先領域７０３の先頭位置に付与されるOＬＣ（Overlay Convert begin）アドレス（『第２の先頭アドレス』）に対して、指定アドレスとＯＬＢアドレスとの差分を加算した置換先アドレスへと変更するものである。そして、プロセッサがこの置換先アドレスに基づきデータメモリ７０の置換先領域７０３から指定された置換先データを読み出すことで、指定アドレスに応じた置換元領域７０２の置換元データは、結果として、置換先アドレスに応じた置換先領域７０３の置換先データへと置換されることになる。一方、指定アドレスが、置換元領域７０２に付与される第１の先頭アドレス及び終端アドレスの間に含まれない場合には、指定アドレスから置換先アドレスへの変換がなされず、プロセッサより指定された指定アドレスのままでデータメモリ７０の通常アクセス領域７０１へのアクセスが行われることになる。このようにして、データメモリ７０が提供する記憶容量を効率的に使用することが可能となる。また、例えば、データメモリ７０がブロック単位やページ単位等の所定容量のデータ固まりでアクセスがなされる場合、置換元データに該当するデータ固まりを、一斉に且つ効率良く置換することが可能となる。
【００１３】
データメモリ７０は、インストラクションデコーダ４０において解読された命令コードに基づく演算を行うためのデータが格納されるメモリである。データメモリ７０は、ＲＯＭ、ＲＡＭ若しくはそれらの組み合わせで構成されるものである。前述したように、データメモリ７０が提供するアドレス空間としては、通常アクセス領域７０１、置換元領域７０２、置換先領域７０３が設定される。
【００１４】
演算器１００は、インストラクションデコーダ４０において解読された命令コードに基づく演算（乗算、累積加算等）を、データメモリ７０から読み出されたデータを用いて行うものである。ここで、演算器１００の内部構成としては、例えば、図２に示すようなデジタルフィルタの基本的な演算である畳み込み演算を実現するハードウェアとなる。なお、畳み込み演算は、「ｙ（ｎ）＝Σｈ（ｋ）ｘ（ｎ−ｋ）；但し、ｋ＝０〜Ｎ−１」に示されるものである。
【００１５】
図２において、入力信号ｘ（ｎ−ｋ）がレジスタ１０１ａ、１０１ｂ、・・・、１０１ｃへと順次入力される毎に、レジスタ１０１ａ、１０１ｂ、・・・、１０１ｃのタップ出力を最も遅延させたｘ（ｎ−Ｎ＋１）からｘ（ｎ）まで順に切り替えて、乗算器１０２の一方の入力端子へと供給する。それと同期して、データメモリ７０に予め格納しておいたフィルタ係数をｈ（Ｎ−１）から順にｈ（０）までを乗算器１０２の他方の入力端子へと供給する。そして、乗算器１０２の乗算結果が、加算器１０３の一方の入力端子へと順次供給される。なお、加算器１０３の他方の入力端子には、ＡＣＣ（Accumulator）１０４に格納しておいた前回の加算器１０３の累積加算結果が順次供給される。この結果、加算器１０３の新たな累積加算結果がＡＣＣ１０４へと順次格納される。このような動作をＮ回実行されることで、畳み込み演算が完了する。
【００１６】
＜メモリアドレス生成装置の構成＞
図３は、メモリアドレス生成装置２００の構成を示す図である。  
まず、データメモリ７０のアドレス空間は、先頭位置を示すＯＬＢアドレスと終端位置を示すＯＬＥアドレスで特定される置換元領域７０２と、置換元領域７０２と同一容量であり且つその先頭位置を示すＯＬＣアドレスで特定される置換先領域７０３とが設定される。なお、置換元領域７０２と置換先領域７０３を同一容量としたことで、置換先領域７０３は、その先頭位置を示すＯＬＣアドレスのみで特定される。このため、置換先領域７０３の終端位置を示すアドレスは、本発明に係るアドレス変換の仕組みにおいて不要となり、アドレス変換回路６０の構成が簡素化される。
【００１７】
また、データメモリ７０のアドレス空間としては、置換元領域７０２の先頭位置を示すＯＬＢアドレスより前のアドレスが付与される通常アクセス領域７０１ａと、置換元領域７０２の終端位置を示すＯＬＥアドレスから置換先領域７０３の先頭位置を示すＯＬＣアドレスまでの間のアドレスが付与される通常アクセス領域７０１ｂと、置換先領域７０３の終端位置を示すアドレスよりも後のアドレスが付与される通常アクセス領域７０１ｃとが、設定される場合とする。なお、後述するよう、置換元領域７０２と置換先領域７０３は重なり合ってもよく、この場合、通常アクセス領域７０１ｂは設定されない。
【００１８】
アドレス生成回路５０は、前述したように、データメモリ７０のアクセス先を指定する指定アドレスを生成するものである。  
アドレス変換回路６０は、前述したように、アドレス生成回路５０において生成された指定アドレスを置換先アドレスに変換して出力するか、若しくは、アドレス生成回路５０において生成された指定アドレスをそのまま出力するかを設定するものである。
【００１９】
ＯＬＣレジスタ６０１（『第３のアドレスレジスタ』）は、ＯＬＣアドレスを格納するアドレスレジスタであり、ＯＬＢレジスタ６０２（『第１のアドレスレジスタ』）はＯＬＢアドレスを格納するアドレスレジスタであり、ＯＬＥレジスタ６０３（『第２のアドレスレジスタ』）はＯＬＥアドレスを格納するアドレスレジスタである。ここで、ＯＬＣレジスタ６０１、ＯＬＢレジスタ６０２、ＯＬＥレジスタ６０３の各内容、すなわちＯＬＣアドレス、ＯＬＢアドレス並びにＯＬＥアドレスは、ＤＳＰと通信可能に接続された外部のマイクロコンピュータ等によって適宜なタイミング（例えば、ＤＳＰのイニシャライズ時や、プログラム実行中等）で自由に書き換え可能とする。すなわち、データメモリ７０のアドレス空間おいて、置換元領域７０２ならびに置換先領域７０３の設定位置ならびにその容量が自由に設定可能となる。この結果、本発明に係るアドレス変換の自由度が向上する。
【００２０】
ＯＬＥＮ（Overlay Enable）フラグレジスタ６０４（『イネーブルフラグレジスタ』）は、本発明に係るアドレス変換、すなわち、置換元データから置換先データへの置換を行うか否か設定するイネーブルフラグ（１：enable，０：disable）を格納する制御レジスタである。ＯＬＥＮフラグレジスタ６０４の内容、すなわちイネーブルフラグもまた同様に、ＤＳＰと通信可能に接続された外部のマイクロコンピュータ等によって適宜なタイミングで自由に書き換え可能とする。この結果、プログラム実行中の係数切り替え時やバグ修正時等の必要に応じたタイミングで、本発明に係るアドレス変換を実施することができる。
【００２１】
減算器６０５（『第１の減算器』）は、アドレス生成回路５０において生成された指定アドレスとＯＬＢレジスタ６０２に格納されたＯＬＢアドレスとの差分（『第１の差分』）である「指定アドレス−ＯＬＢアドレス」を演算するものである。すなわち、この差分「指定アドレス−ＯＬＢアドレス」に基づく正又は負を示す符号ビットは、指定アドレスがＯＬＢアドレスよりも前か後ろを判定する材料となる。さらに、この差分「指定アドレス−ＯＬＢアドレス」は、置換先アドレスを生成するための材料にもなる。
【００２２】
減算器６０６（『第２の減算器』）は、ＯＬＥレジスタ６０３に格納されたＯＬＥアドレスとアドレス生成回路５０において生成された指定アドレスとの差分（『第２の差分』）である「ＯＬＥアドレス−指定アドレス」を演算するものである。すなわち、この差分「ＯＬＥアドレス−指定アドレス」に基づく正又は負を示す符号ビットは、指定アドレスがＯＬＥアドレスよりも前か後ろを判定する材料となる。
【００２３】
加算器６０７は、ＯＬＣレジスタ６０１に格納されたＯＬＣアドレスと、減算器６０５の差分「指定アドレス−ＯＬＢアドレス」との加算を行い、その加算結果「ＯＬＣアドレス＋指定アドレス−ＯＬＢアドレス」を置換先アドレスとして生成するものである。
【００２４】
選択回路６０９は、アドレス生成回路５０において生成された指定アドレス、又は、加算器６０７において生成された置換先アドレスのいずれか一方を、ＡＮＤ素子６０８の出力に基づいて選択するものである。そして、選択回路６０９において選択された指定アドレス又は置換先アドレスは、アドレスレジスタ６１０に一時的に格納された後、データメモリ７０へと供給される。この結果、データメモリ７０は、選択回路６０９において選択された指定アドレス又は置換先アドレスに基づきアクセスがなされる。
【００２５】
ＡＮＤ素子６０８は、本発明に係る『選択制御回路』の一実施形態である。ＡＮＤ素子６０８は、減算器６０５の差分「指定アドレス−ＯＬＢアドレス」の符号ビットと、減算器６０６の差分「ＯＬＥアドレス−指定アドレス」の符号ビットに基づいて、アドレス生成回路５０において生成された指定アドレスが、ＯＬＢアドレスとＯＬＥアドレスとの間に含まれるか否かを判別する。詳述すると、以下の３とおりの組み合わせのうち、いずれか一つが判別される。  
１．指定アドレスがＯＬＢアドレスより前の場合
減算器６０５の差分「指定アドレス−ＯＬＢアドレス」の符号ビットが負。  
減算器６０６の差分「ＯＬＥアドレス−指定アドレス」の符号ビットが正。  
２．指定アドレスがＯＬＢアドレスとＯＬＥアドレスの間の場合
減算器６０５の差分「指定アドレス−ＯＬＢアドレス」の符号ビットが正。  
減算器６０６の差分「ＯＬＥアドレス−指定アドレス」の符号ビットが正。  
３．指定アドレスがＯＬＥアドレスより後ろの場合
減算器６０５の差分「指定アドレス−ＯＬＢアドレス」の符号ビットが正。  
減算器６０６の差分「ＯＬＥアドレス−指定アドレス」の符号ビットが負。
【００２６】
よって、ＡＮＤ素子６０８は、減算器６０５、６０６の各差分の符号ビットがともに正（ともに０）である場合、指定アドレスがＯＬＢアドレスとＯＬＥアドレスの間に含まれる旨を判別し、選択回路６０９に対して、加算器６０７の加算結果である置換先アドレスを選択させるべく制御する。一方、ＡＮＤ素子６０８は、減算器６０５、６０６の各差分の符号ビットがともに正でない場合、指定アドレスがＯＬＢアドレスとＯＬＥアドレスとの間に含まれない旨を判別し、選択回路６０９に対して、アドレス生成回路５０において生成された指定アドレスを選択させるべく制御する。
【００２７】
さらに、ＡＮＤ素子６０８は、ＯＬＥＮフラグレジスタ６０４に格納されたイネーブルフラグに基づき、このイネーブルフラグが、本発明に係るアドレス変換、すなわち置換元データから置換先データへの置換を行う旨（１：enable）を示す場合には選択回路６０９における指定アドレス又は置換先アドレスの選択を有効とさせる。一方、イネーブルフラグが、本発明に係るアドレス変換、すなわち置換元データから置換先データへの置換を行わない旨（０：disable）を示す場合には選択回路６０９において指定アドレスのみの選択を有効とさせる。
【００２８】
メモリアドレス生成装置２００は、まず、前述した構成により、図４に示すようなアクセスを実施することになる。なお、図４の紙面左側は、アドレス生成回路５０において生成される指定アドレスの位置（見かけ上のアクセス点）を示すものである。また、図４の紙面右側は、選択回路６０９において選択された指定アドレス若しくは置換先アドレスの位置（実際のアクセス点）を示すものである。
【００２９】
すなわち、図４に示すように、ＯＬＢアドレスよりも前となる指定アドレスＡの場合、その指定アドレスＡのままで通常アクセス領域７０１ａがアクセスされる。また、ＯＬＢアドレスとＯＬＥアドレスとの間に含まれる指定アドレスＢの場合、指定アドレスＢとＯＬＢアドレスとの差分にＯＬＣアドレスを加算した置換先アドレスで置換先領域７０３がアクセスされる。また、ＯＬＥアドレスとＯＬＣアドレスとの間に含まれる指定アドレスＣの場合、その指定アドレスＣのままで通常アクセス領域７０１ｃがアクセスされる。また、ＯＬＣアドレスと（ＯＬＣアドレス＋ＯＬＥアドレス−ＯＬＢアドレス）との間に含まれる指定アドレスＤの場合、その指定アドレスＤのままで置換先領域７０３がアクセスされる。また、（ＯＬＣアドレス＋ＯＬＥアドレス−ＯＬＢアドレス）の後ろとなる指定アドレスＥの場合、その指定アドレスＥのままで通常アクセス領域７０１ｃがアクセスされる。このようなメモリアドレス生成装置２００の仕組みによって、データメモリ７０が提供する記憶容量を効率良く使用することが可能となる。
【００３０】
前述したメモリアドレス生成装置２００の仕組みは、例えば、図５に示すような動的データの置換の場合に利用できる。ここで、例えば、ＤＳＰが実施する複数のデジタルフィルタ処理において、夫々の処理を切り替える際に共通の内容であるため変更を行う必要が無い静的なフィルタ係数（以下、静的フィルタ係数）と、夫々の処理を切り替える際に異なる内容であるため変更を行う必要がある動的なフィルタ係数（以下、動的フィルタ係数）と、が用いられることとする。
【００３１】
この場合、データメモリ７０が提供するアドレス空間は、ＲＯＭのアドレス空間のみで構成されることとし、この結果、置換元領域７０２及び置換先領域７０３、ひいては通常アクセス領域７０１が全てＲＯＭのアドレス空間内に設定されることとする。そして、通常アクセス領域７０１ａには静的フィルタ係数を格納し、置換元領域７０２には複数の動的フィルタ係数のうち代表的な動的フィルタ係数Ａを格納し、ＯＬＣアドレスＢやＯＬＣアドレスＣで設定される置換先領域７０３ａ、７０３ｂには複数の動的フィルタ係数のうち代表的なもの以外となる動的フィルタ係数Ｂ、Ｃが夫々格納されることとする。
【００３２】
この場合、ＤＳＰは、デジタルフィルタ処理を切り替えに伴って処理に使用する動的フィルタ係数を切り替える際には、指定アドレスが置換元領域７０２の先頭位置を示すＯＬＢアドレスと終端位置を示すＯＬＥアドレスとの間に含まれる場合、指定アドレスに応じた置換元領域７０２に格納された動的フィルタ係数Ａを、置換先アドレスに応じた置換先領域７０３ａ、７０３ｂに格納された動的フィルタ係数Ｂ、Ｃへと置換する。このようにして、複数のデジタルフィルタ処理毎に静的フィルタ係数を格納する必要がなく、データメモリ７０が提供する記憶容量を効率的に使用することが可能となる。
【００３３】
さらに、前述したメモリアドレス生成装置２００の仕組み、特にアドレス変換回路６０の仕組みは、データメモリ７０へのアクセスに限らず、プログラムメモリ２０へのアクセスにも適用することができる。なお、この場合、図１に示したプログラムカウンタ１０とプログラムメモリ２０との間にアドレス変換回路６０と同様な仕組みを設けることで実施可能となる。
【００３４】
例えば、図６に示すように、プログラムメモリ２０が提供するアドレス空間は、ＲＯＭが提供するアドレス空間及びＲＡＭが提供するアドレス空間を合成して構成される場合とする。また、置換元領域２０２はＲＯＭのアドレス空間内に設定されるとともに、置換先領域２０３はＲＡＭのアドレス空間内に設定される場合とする。さらに、置換元領域２０２に格納される置換元データは、バグが生じた領域のバグデータであり、置換先領域２０３に格納される置換先データは、バグを修正したバグ修正データである場合とする。
【００３５】
この場合、ＤＳＰは、指定アドレスが、バグデータを格納する置換元領域２０２の先頭位置を示すＯＬＢアドレスと終端位置を示すＯＬＥアドレスとの間に含まれる場合、その指定アドレスを置換先領域２０３の置換先アドレスに変更する。ＤＳＰは、この置換先アドレスに基づいて置換先領域２０３をアクセスすることで、結果的には、置換元領域２０２のバグデータを、置換先アドレスに応じた置換先領域２０３のバグ修正データへと置換することになる。このように、ＲＯＭのプログラムの内容を書き換える必要が生じたがＲＯＭの書き換えが困難な場合であっても、マスク変更やＤＳＰのシステムプログラムの修正を伴わず、プログラムメモリ２０が提供する記憶容量を効率良く使用することが可能となる。
【００３６】
＜ＭＳＢ拡張＞
＜＜ＭＳＢ拡張しなくても問題が生じない場合＞＞
図７は、データメモリ７０の全アドレス空間が“００００ｈ”から“ＦＦＦＦｈ”までの範囲で定義されている場合であり、さらに、ＯＬＢアドレスを“１０００ｈ”、ＯＬＥアドレスを“２ＦＦＦｈ”、ＯＬＣアドレスを“８０００ｈ”と設定した場合において、各アドレスに“１’ｂ０”のＭＳＢを拡張しないときと、“１’ｂ０”のＭＳＢ拡張をするときの、データメモリ７０へのアクセス点のアドレス変換の様子を示すものである。
【００３７】
なお、図７の紙面左側は、アドレス生成回路５０において生成される指定アドレスの位置（見かけ上のアクセス点）を示すものである。また、図７の紙面中央は、各アドレスに“１’ｂ０”のＭＳＢ拡張を行わずに減算器６０５、６０６において演算が行われた場合の置換先アドレスの位置（実際のアクセス点）を示すものである。さらに、図７の紙面右側は、各アドレスに“１’ｂ０”のＭＳＢ拡張を行った上で減算器６０５、６０６において演算が行われた場合の置換先アドレスの位置（実際のアクセス点）を示すものである。
【００３８】
また、ＯＬＢアドレスが“１０００ｈ”でありＯＬＥアドレスが“２ＦＦＦｈ”であるため、置換元領域７０２は“２０００ｈ”の範囲である。また、置換先領域７０３は、ＯＬＣアドレスの“８０００ｈ”から、それに置換元領域７０２の範囲“２０００ｈ”を加算した“９ＦＦＦｈ”までの範囲である。よって、図７に示す例は、置換元領域７０２ならびに置換先領域７０３は、データメモリ７０の全範囲“ＦＦＦＦｈ”の半分以下に相当する場合である。
【００３９】
＝＝＝指定アドレスＡ（０８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“０８００ｈ”（指定アドレスＡ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “０８００ｈ”−“１０００ｈ”＝“Ｆ８００ｈ”
（ＭＳＢ拡張有り）：  “００８００ｈ”−“０１０００ｈ”＝“１Ｆ８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “２ＦＦＦｈ”−“０８００ｈ”＝“２７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０２ＦＦＦｈ”−“００８００ｈ”＝“０２７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“１（負）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともクローズとなり、選択回路６０９に対して指定アドレスＡ（０８００ｈ）を選択させる。
【００４０】
＝＝＝指定アドレスＢ（１８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“１８００ｈ”（指定アドレスＢ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “１８００ｈ”−“１０００ｈ”＝“０８００ｈ”
（ＭＳＢ拡張有り）：  “０１８００ｈ”−“０１０００ｈ”＝“００８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “２ＦＦＦｈ”−“１８００ｈ”＝“１７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０２ＦＦＦｈ”−“０１８００ｈ”＝“０１７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともオープンとなり、選択回路６０９に対して加算器６０７の加算結果である置換先アドレスＢを選択させる。なお、置換先アドレスＢは、つぎのとおり“８８００ｈ”となる。  
・加算器６０７の加算結果「ＯＬＣアドレス＋指定アドレス−ＯＬＢアドレス」
“８０００ｈ”＋“０８００ｈ”＝“８８００ｈ”
【００４１】
＝＝＝指定アドレスＣ（５０００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“５０００ｈ”（指定アドレスＣ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “５０００ｈ”−“１０００ｈ”＝“４０００ｈ”
（ＭＳＢ拡張有り）：  “０５０００ｈ”−“０１０００ｈ”＝“０４０００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “２ＦＦＦｈ”−“５０００ｈ”＝“ＤＦＦＦｈ”
（ＭＳＢ拡張有り）：  “０２ＦＦＦｈ”−“０５０００ｈ”＝“１ＤＦＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“１（負）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともクローズとなり、選択回路６０９に対して指定アドレスＣ（５０００ｈ）を選択させる。
【００４２】
＝＝＝指定アドレスＤ（９８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“９８００ｈ”（指定アドレスＤ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “９８００ｈ”−“１０００ｈ”＝“８８００ｈ”
（ＭＳＢ拡張有り）：  “０９８００ｈ”−“０１０００ｈ”＝“０８８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “２ＦＦＦｈ”−“９８００ｈ”＝“９７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０２ＦＦＦｈ”−“０９８００ｈ”＝“１９７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“１（正）”となり、ＭＳＢ拡張有りの場合には“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“１（負）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともクローズとなり、選択回路６０９に対して指定アドレスＤ（９８００ｈ）を選択させる。
【００４３】
＝＝＝指定アドレスＥ（Ｃ０００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“Ｃ０００ｈ”（指定アドレスＥ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “Ｃ０００ｈ”−“１０００ｈ”＝“Ｂ８００ｈ”
（ＭＳＢ拡張有り）：  “０Ｃ０００ｈ”−“０１０００ｈ”＝“０Ｂ８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “２ＦＦＦｈ”−“Ｃ０００ｈ”＝“６ＦＦＦｈ”
（ＭＳＢ拡張有り）：  “０２ＦＦＦｈ”−“０Ｃ０００ｈ”＝“１６ＦＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“１（正）”となり、ＭＳＢ拡張有りの場合には“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“０（負）”となり、ＭＳＢ拡張有りの場合には“１（負）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともクローズとなり、選択回路６０９に対して指定アドレスＥ（Ｃ０００ｈ）を選択させる。
【００４４】
このように、置換元領域７０２ならびに置換先領域７０３が、データメモリ７０の全範囲“ＦＦＦＦｈ”の半分以下に相当する場合には、指定アドレスＡ〜Ｅのいずれの場合であっても、ＯＬＢアドレス、ＯＬＥアドレスならびに指定アドレスの各アドレスにＭＳＢを拡張してもしなくても問題が生じず、本発明で意図したアドレス変換が実施されることになる。
【００４５】
＜＜ＭＳＢ拡張しないと問題が生じる場合＞＞
図８は、データメモリ７０の全アドレス空間が“００００ｈ”から“ＦＦＦＦｈ”までの範囲で定義されている場合であり、さらに、ＯＬＢアドレスを“１０００ｈ”、ＯＬＥアドレスを“９ＦＦＦｈ”、ＯＬＣアドレスを“６０００ｈ”と設定した場合において、各アドレスに“１’ｂ０”のＭＳＢを拡張しないときと、“１’ｂ０”のＭＳＢ拡張をするときの、データメモリ７０へのアクセス点のアドレス変換の様子を示すものである。
【００４６】
なお、図８の紙面左側は、アドレス生成回路５０において生成される指定アドレスの位置（見かけ上のアクセス点）を示すものである。また、図８の紙面中央は、各アドレスに“１’ｂ０”のＭＳＢ拡張を行わずに減算器６０５、６０６において演算が行われた場合の置換先アドレスの位置（実際のアクセス点）を示すものである。さらに、図８の紙面右側は、各アドレスに“１’ｂ０”のＭＳＢ拡張を行った上で減算器６０５、６０６において演算が行われた場合の置換先アドレスの位置（実際のアクセス点）を示すものである。
【００４７】
また、ＯＬＢアドレスが“１０００ｈ”でありＯＬＥアドレスが“９ＦＦＦｈ”であるため、置換元領域７０２は“９０００ｈ”の範囲である。また、置換先領域７０３は、ＯＬＣアドレスの“６０００ｈ”から、それに置換元領域７０２の範囲“９０００ｈ”を加算した“ＥＦＦＦｈ”までの範囲である。よって、図７に示す例は、置換元領域７０２ならびに置換先領域７０３は、データメモリ７０の全範囲“ＦＦＦＦｈ”の半分を超える場合である。
【００４８】
＝＝＝指定アドレスＦ（０８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“０８００ｈ”（指定アドレスＦ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “０８００ｈ”−“１０００ｈ”＝“Ｆ８００ｈ”
（ＭＳＢ拡張有り）：  “００８００ｈ”−“０１０００ｈ”＝“１Ｆ８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“０８００ｈ”＝“９７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“００８００ｈ”＝“０９７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“１（負）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“１（正）”となり、ＭＳＢ拡張有りの場合には“０（正）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともクローズとなり、選択回路６０９に対して指定アドレスＡ（０８００ｈ）を選択させる。
【００４９】
＝＝＝指定アドレスＧ（１８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“１８００ｈ”（指定アドレスＧ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “１８００ｈ”−“１０００ｈ”＝“０８００ｈ”
（ＭＳＢ拡張有り）：  “０１８００ｈ”−“０１０００ｈ”＝“００８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“１８００ｈ”＝“８７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“０１８００ｈ”＝“０８７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“１（正）”となり、ＭＳＢ拡張有りの場合には“０（正）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合にはクローズとなり、選択回路６０９に対して、本発明で意図するものとは異なる指定アドレスＧ（１８００ｈ）を選択させる。また、ＡＮＤ素子６０８は、ＭＳＢ拡張有りの場合にはオープンとなり、選択回路６０９に対して、加算器６０７の加算結果であり本発明で意図する置換先アドレスＧを選択させる。なお、置換先アドレスＧは、つぎのとおり“６８００ｈ”となる。  
・加算器６０７の加算結果「ＯＬＣアドレス＋指定アドレス−ＯＬＢアドレス」
“６０００ｈ”＋“０８００ｈ”＝“６８００ｈ”
【００５０】
＝＝＝指定アドレスＨ（３８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“３８００ｈ”（指定アドレスＨ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “３８００ｈ”−“１０００ｈ”＝“２８００ｈ”
（ＭＳＢ拡張有り）：  “０３８００ｈ”−“０１０００ｈ”＝“０２８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“３８００ｈ”＝“６７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“０３８００ｈ”＝“０６７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともオープンとなり、選択回路６０９に対して、加算器６０７の加算結果である置換先アドレスＨを選択させる。なお、置換先アドレスＨは、つぎのとおり“８８００ｈ”となる。  
・加算器６０７の加算結果「ＯＬＣアドレス＋指定アドレス−ＯＬＢアドレス」
“６０００ｈ”＋“２８００ｈ”＝“８８００ｈ”
【００５１】
＝＝＝指定アドレスＩ（６８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“６８００ｈ”（指定アドレスＩ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “６８００ｈ”−“１０００ｈ”＝“５８００ｈ”
（ＭＳＢ拡張有り）：  “０６８００ｈ”−“０１０００ｈ”＝“０５８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“６８００ｈ”＝“３７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“０６８００ｈ”＝“０３７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともオープンとなり、選択回路６０９に対して、加算器６０７の加算結果である置換先アドレスＩを選択させる。なお、置換先アドレスＩは、つぎのとおり“Ｂ８００ｈ”となる。  
・加算器６０７の加算結果「ＯＬＣアドレス＋指定アドレス−ＯＬＢアドレス」
“６０００ｈ”＋“５８００ｈ”＝“Ｂ８００ｈ”
【００５２】
＝＝＝指定アドレスＪ（７８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“７８００ｈ”（指定アドレスＩ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “７８００ｈ”−“１０００ｈ”＝“６８００ｈ”
（ＭＳＢ拡張有り）：  “０７８００ｈ”−“０１０００ｈ”＝“０６８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“７８００ｈ”＝“２７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“０７８００ｈ”＝“０２７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともオープンとなり、選択回路６０９に対して、加算器６０７の加算結果である置換先アドレスＪを選択させる。なお、置換先アドレスＪは、つぎのとおり“Ｃ８００ｈ”となる。  
・加算器６０７の加算結果「ＯＬＣアドレス＋指定アドレス−ＯＬＢアドレス」
“６０００ｈ”＋“６８００ｈ”＝“Ｃ８００ｈ”
【００５３】
＝＝＝指定アドレスＫ（９８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“９８００ｈ”（指定アドレスＫ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “９８００ｈ”−“１０００ｈ”＝“８８００ｈ”
（ＭＳＢ拡張有り）：  “０９８００ｈ”−“０１０００ｈ”＝“０８８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“９８００ｈ”＝“０７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“０９８００ｈ”＝“００７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“１”となり、ＭＳＢ拡張有りの場合には“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“０（正）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合にはクローズとなり、選択回路６０９に対して、本発明で意図するものとは異なる指定アドレスＫ（９８００ｈ）を選択させる。また、ＡＮＤ素子６０８は、ＭＳＢ拡張有りの場合にはオープンとなり、選択回路６０９に対して、加算器６０７の加算結果であり本発明で意図する置換先アドレスＫを選択させる。なお、置換先アドレスＫは、つぎのとおり“Ｅ８００ｈ”となる。  
・加算器６０７の加算結果「ＯＬＣアドレス＋指定アドレス−ＯＬＢアドレス」
“６０００ｈ”＋“８８００ｈ”＝“Ｅ８００ｈ”
【００５４】
＝＝＝指定アドレスＬ（Ａ８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“Ａ８００ｈ”（指定アドレスＬ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “Ａ８００ｈ”−“１０００ｈ”＝“９８００ｈ”
（ＭＳＢ拡張有り）：  “０Ａ８００ｈ”−“０１０００ｈ”＝“０９８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“Ａ８００ｈ”＝“Ｆ７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“０Ａ８００ｈ”＝“１Ｆ７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“１（正）”となり、ＭＳＢ拡張有りの場合には“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“１（負）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともクローズとなり、選択回路６０９に対して指定アドレスＬ（Ａ８００ｈ）を選択させる。
【００５５】
＝＝＝指定アドレスＭ（Ｅ８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“Ｅ８００ｈ”（指定アドレスＮ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “Ｅ８００ｈ”−“１０００ｈ”＝“Ｄ８００ｈ”
（ＭＳＢ拡張有り）：  “０Ｅ８００ｈ”−“０１０００ｈ”＝“０Ｄ８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“Ｅ８００ｈ”＝“Ｂ７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“０Ｅ８００ｈ”＝“１Ｂ７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“１（正）”となり、ＭＳＢ拡張有りの場合には“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“１（負）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともクローズとなり、選択回路６０９に対して指定アドレスＭ（Ｅ８００ｈ）を選択させる。
【００５６】
＝＝＝指定アドレスＮ（Ｆ８００ｈ）の場合＝＝＝
アドレス生成回路５０において生成される指定アドレスが“Ｅ８００ｈ”（指定アドレスＮ）の場合、減算器６０５、６０６の各差分は、ＭＳＢ拡張無しのときとＭＳＢ拡張有りのときでは夫々つぎのようになる。  
・減算器６０５の差分「指定アドレス−ＯＬＢアドレス」
（ＭＳＢ拡張無し）：  “Ｆ８００ｈ”−“１０００ｈ”＝“Ｅ８００ｈ”
（ＭＳＢ拡張有り）：  “０Ｆ８００ｈ”−“０１０００ｈ”＝“０Ｅ８００ｈ”
・減算器６０６の差分「ＯＬＥアドレス−指定アドレス」
（ＭＳＢ拡張無し）：  “９ＦＦＦｈ”−“Ｆ８００ｈ”＝“Ａ７ＦＦｈ”
（ＭＳＢ拡張有り）：  “０９ＦＦＦｈ”−“０Ｆ８００ｈ”＝“０Ａ７ＦＦｈ”
よって、減算器６０５の差分のＭＳＢは、ＭＳＢ拡張無しの場合には“１（正）”となり、ＭＳＢ拡張有りの場合には“０（正）”となる。また、減算器６０６の差分のＭＳＢは、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方とも“１（負）”となる。この結果、ＡＮＤ素子６０８は、ＭＳＢ拡張無しの場合とＭＳＢ拡張有りの場合の双方ともクローズとなり、選択回路６０９に対して指定アドレスＭ（Ｆ８００ｈ）を選択させる。
【００５７】
このように、置換元領域７０２ならびに置換先領域７０３が、データメモリ７０の全範囲“ＦＦＦＦｈ”の半分を超える場合には、ＯＬＢアドレス、ＯＬＥアドレスならびに指定アドレスの各アドレスにＭＳＢを拡張しなければ、本発明で意図したアドレス変換が実施されない場合がある。例えば、前述したように、指定アドレスＧ（１８００ｈ）や指定アドレスＫ（９８００ｈ）の場合、置換先アドレスＧ（６８００ｈ）や置換先アドレスＫ（Ｅ８００ｈ）に変換されるべきところ、そのような変換が行われず、指定アドレスＧ（１８００ｈ）や指定アドレスＫ（９８００ｈ）のままでデータメモリ７０へのアクセスが行われるという問題が生じることになる。ゆえに、ＯＬＢアドレス、ＯＬＥアドレスならびに指定アドレスの各アドレスには、１’ｂ０のＭＳＢを拡張する必要がある。
【００５８】
＜＜アドレス変換回路のＭＳＢ拡張部＞＞
前述したように、ＯＬＢアドレスとＯＬＥアドレスの間として設定される置換元領域７０２が、データメモリ７０が提供する全領域の半分よりも大きい場合、本発明で意図したアドレス変換が実施されない。このため、図３に示すアドレス変換回路６０には拡張ビットレジスタ６１１ａ〜６１１ｃと、ＭＳＢ拡張部６１２ａ〜６１２ｃと、を設けてある。
【００５９】
拡張ビットレジスタ６１１ａ〜６１１ｃは、１’ｂ０（１ビットの「０」）を格納しておくレジスタである。
【００６０】
ＭＳＢ拡張部６１２ａ（『第１のＭＳＢ拡張部』）は、アドレス生成回路５０において生成されたＮビットの指定アドレスのＭＳＢ（最上位ビット）に、拡張ビットレジスタ６１１ａに格納しておいた１’ｂ０を追加するものである。すなわち、指定アドレスは、Ｎビットから“Ｎ＋１”ビットへと拡張される。
【００６１】
ＭＳＢ拡張部６１２ｂ（『第２のＭＳＢ拡張部）は、ＯＬＢレジスタ６０２に格納されたＮビットのＯＬＢアドレスのＭＳＢ（最上位ビット）に、拡張ビットレジスタ６１１ｂに格納しておいた１’ｂ０を追加するものである。すなわち、ＯＬＢアドレスは、Ｎビットから“Ｎ＋１”ビットへと拡張される。
【００６２】
ＭＳＢ拡張部６１２ｃ（『第３のＭＳＢ拡張部』）は、ＯＬＥレジスタ６０３に格納されたＮビットのＯＬＥアドレスのＭＳＢ（最上位ビット）に、拡張ビットレジスタ６１１ｃに格納しておいた１’ｂ０を追加するものである。すなわち、ＯＬＥアドレスは、Ｎビットから“Ｎ＋１”ビットへと拡張される。
【００６３】
このように、指定アドレス、ＯＬＢアドレス、ＯＬＥアドレスを夫々Ｎビットから“Ｎ＋１”ビットへと拡張しておいた上で、減算器６０５は、ともに“Ｎ＋１”ビットに拡張された指定アドレスとＯＬＢアドレスとの差分「指定アドレス−ＯＬＢアドレス」を演算し、減算器６０５は、ともに“Ｎ＋１”ビットに拡張されたＯＬＥアドレスと指定アドレスとの差分「ＯＬＥアドレス−指定アドレス」を演算する。よって、減算器６０５の差分「指定アドレス−ＯＬＢアドレス」と、減算器６０６の差分「ＯＬＥアドレス−指定アドレス」はともに“Ｎ＋１”ビットである。
【００６４】
なお、加算器６０７は、ＯＬＣレジスタ６０１に格納されたＮビットのＯＬＣアドレスと、減算器６０５の“Ｎ＋１ビット”の差分「指定アドレス−ＯＬＢアドレス」から、ＭＳＢを除外したＮビットと、を加算する。よって、選択回路６０９は、ビット拡張前のＮビットの指定アドレス、又は、加算器６０７の加算結果であるＮビットの置換先アドレスを、選択することとなる。さらに、ＡＮＤ素子６０８は、減算器６０５、６０６のともに“Ｎ＋１”ビットの差分におけるＭＳＢが入力されて、各ＭＳＢに基づいて指定アドレスがＯＬＢアドレスとＯＬＥアドレスとの間に含まれるか否かを判別することとなる。
【００６５】
このような仕組みを設けることによって、本発明で意図したアドレス変換が、確実に実施されることになる。
【００６６】
以上、本発明の例示的なそして現時点で好適とされる実施例を詳細に説明したが、本発明の概念は、種々変更して実施し適用することができ、また付属の請求の範囲は、先行技術によって限定されることは別として、種々の変形例を含むものである。
【図面の簡単な説明】
【００６７】
【図１】本発明の一実施形態に係るプロセッサの全体構成を示す図である。
【図２】本発明の一実施形態に係る演算器の構成を示す図である。
【図３】本発明の一実施形態に係るメモリアドレス生成装置の構成を示す図である。
【図４】本発明の一実施形態に係るアドレス変換を説明するための図である。
【図５】本発明の一実施形態に係るアドレス変換の具体例を説明するための図である。
【図６】本発明の一実施形態に係るアドレス変換の具体例を説明するための図である。
【図７】本発明の一実施形態に係るＭＳＢ拡張の目的を説明するための図である。
【図８】本発明の一実施形態に係るＭＳＢ拡張の目的を説明するための図である。
【符号の説明】
【００６８】
１０  プログラムカウンタ
２０  プログラムメモリ
３０  インストラクションレジスタ
４０  インストラクションデコーダ
５０  アドレス生成回路
５１  アドレスレジスタ
５２  アドレス演算器
６０  アドレス変換回路
６０１  ＯＬＣレジスタ
６０２  ＯＬＢレジスタ
６０３  ＯＬＥレジスタ
６０４  ＯＬＥＮフラグレジスタ
６０５、６０６  減算器
６０７  加算器
６０８  ＡＮＤ素子
６０９  選択回路
６１０  アドレスレジスタ
６１１ａ、６１１ｂ、６１１ｃ  拡張ビットレジスタ
６１２ａ、６１２ｂ、６１２ｃ  ＭＳＢ拡張部
７０  データメモリ
７０１、７０１ａ、７０１ｂ、７０１ｃ  通常アクセス領域
２０２、７０２  置換元領域
２０３、７０３、７０３ａ、７０３ｂ  置換先領域
１００  演算器
１０１ａ、１０１ｂ、１０１ｃ  レジスタ
１０２  乗算器
１０３  加算器
１０４  ＡＣＣ
２００  メモリアドレス生成装置
【図１】
2006293663.tif 000003
【図２】
2006293663.tif 000004
【図３】
2006293663.tif 000005
【図４】
2006293663.tif 000006
【図５】
2006293663.tif 000007
【図６】
2006293663.tif 000008
【図７】
2006293663.tif 000009
【図８】
2006293663.tif 000010