(57)【特許請求の範囲】
【請求項１】
仮想アドレスを物理アドレスに変換するトランスレーション・ルックアサイド・バッファ回路（ＴＬＢ回路）において、
比較の基準となる仮想アドレス情報のベースアドレスの上位側ビット列を格納する第１の格納部と、
比較の基準となる仮想アドレス情報のベースアドレスの下位側ビット列とオフセットアドレスの下位側ビット列とを加算したときに桁あふれがある場合には、該仮想アドレス情報のオフセットアドレスの上位側ビット列に１を加えたビット列を格納し、かつ、桁あふれがない場合には、該仮想アドレス情報のオフセットアドレスの上位側ビット列を格納する第２の格納部と、
比較の基準となる仮想アドレス情報のベースアドレスの下位側ビット列とオフセットアドレスの下位側ビット列とを加算したときに桁あふれがある場合には、該仮想アドレス情報のオフセットアドレスの上位側ビット列を格納し、かつ、桁あふれがない場合には、該仮想アドレス情報のオフセットアドレスの上位側ビット列から１を引いたビット列を格納する第３の格納部と、
アクセス要求のあった仮想アドレス情報のベースアドレスの上位側ビット列と、前記第１の格納部に格納されたビット列とを比較する第１の比較器と、
アクセス要求のあった仮想アドレス情報のオフセットアドレスの上位側ビット列と前記第２の格納部に格納されたビット列とを比較する第２の比較器と、
アクセス要求のあった仮想アドレス情報のオフセットアドレスの上位側ビット列と前記第３の格納部に格納されたビット列とが一致するか否かを比較する第３の比較器と、
前記第１〜第３の比較器の比較結果に基づいて、アクセス要求のあった仮想アドレスが比較の基準となる仮想アドレスに一致するか否かを示す信号を出力する一致検出部と、を備えることを特徴とするトランスレーション・ルックアサイド・バッファ回路。
【請求項２】
前記一致検出部は、アクセス要求のあった仮想アドレス情報のベースアドレスの下位側ビット列とオフセットアドレスの下位側ビット列とを加算したときに桁あふれがない場合には、前記第１および第２の比較器でともに一致が検出された場合のみ仮想アドレスの一致信号を出力し、アクセス要求のあった仮想アドレス情報のベースアドレスの下位側ビット列とオフセットアドレスの下位側ビット列とを加算したときに桁あふれがある場合には、前記第１および第３の比較器でともに一致が検出された場合のみ仮想アドレスの一致信号を出力することを特徴とする請求項１に記載のトランスレーション・ルックアサイド・バッファ回路。
【請求項３】
一種類以上の仮想アドレスのそれぞれに対応して、前記第１〜第３の格納部と、前記第１〜第３の比較部とを有する連想メモリを備え、
前記連想メモリは、アクセス要求のあった仮想アドレスがいずれの前記一致検出部でも一致が検出されない場合には、該仮想アドレスに対応する物理アドレスとそれに付随する属性を特定の場所に記憶することを特徴とする請求項１に記載のトランスレーション・ルックアサイド・バッファ回路。
【請求項４】
最小ページサイズにおけるページ内オフセットが、仮想アドレスのn ビット目から最下位ビットまでである場合、ベースアドレスの最上位ビットから(n+1)ビットまでが上位側ビット列、n ビットから最下位ビットまでが下位側ビット列であり、オフセットアドレスの最上位ビットから(n+1)ビットまでが上位側ビット列、n ビットから最下位ビットまでが下位ビット列であることを特徴とする請求項１〜３のいずれかに記載のトランスレーション・ルックアサイド・バッファ回路。
【請求項５】
前記オフセットアドレスは、正負の符号を表すサインビットを有し、
前記ベースアドレスの上位側20ビットと、前記サインビットと、前記オフセットアドレスの上位側３ビットと、前記ベースアドレスおよび前記オフセットアドレスのそれぞれの下位側12ビットを加算したときのキャリービットとを併せた25ビットに基づいて物理アドレスへの変換を行うことを特徴とする請求項４に記載のトランスレーション・ルックアサイド・バッファ回路。
【請求項６】
前記ベースアドレスおよび前記オフセットアドレスのそれぞれの下位側12ビット同士の加算を行う場合は、前記オフセットアドレスを符号拡張して３２ビットにした状態で加算を行うことを特徴とする請求項４または５に記載のトランスレーション・ルックアサイド・バッファ回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、仮想アドレスを物理アドレスに変換するＴＬＢ回路に関し、特に、アクセス要求のあった仮想アドレスがプロセッサ内部に記憶されている仮想アドレスに一致するか否かを高速に判断する技術に関する。
【０００２】
【従来の技術】
プロセッサと主メモリとの速度差を埋めるために、両者の中間にキャッシュメモリを配置するのが一般的である。キャッシュメモリは、プロセッサに内蔵される場合と外付けされる場合がある。
【０００３】
プロセッサの要求するデータがキャッシュメモリ内に存在（キャッシュヒット）すれば、そのデータがキャッシュからプロセッサに渡されるため、プロセッサは主メモリにアクセスする必要がなく高速に処理を行うことができる。一方、プロセッサの要求するデータがキャッシュメモリ内に存在しなければ、主メモリに直接アクセスしなければならず、処理に時間がかかる。
【０００４】
最近のプロセッサは、仮想的なアドレス空間の一部を主メモリに割り当てる仮想アドレス方式を採用している。仮想アドレス方式を採用することにより、アプリケーション・プログラムは主メモリを意識することなくメモリアクセスが可能となり、プログラミングが容易になる。
【０００５】
仮想アドレスは、例えば、ベースアドレスとオフセットアドレスとを加算することにより得られる。この加算を行うために、プロセッサ内にはアダーが設けられている。また、プロセッサ内には、仮想アドレスを物理アドレスに変換するＴＬＢ回路が設けられている。ＴＬＢ回路は、外部からアクセス要求のあった仮想アドレスが、内部に記憶されている仮想アドレスと一致するか否かの情報、および一致した場合には、対応する物理アドレス情報を出力する。
【０００６】
【発明が解決しようとする課題】
最近のプロセッサは、仮想アドレスのビット数が多いため、アダーでの加算処理に時間がかかる。このため、アダーでの加算処理が終了するのを待ってからＴＬＢ回路でのアドレス変換処理を開始するようにすると、物理アドレスが出力されるまでに時間がかかる。このため、キャッシュのヒットチェックに物理アドレスの一部が使用される場合、キャッシュヒットが高速に行えない。
【０００７】
このような問題を解決すべく、USP5,606,683では、ベースアドレスとオフセットアドレスの一部のビット列の加算結果と桁あふれ情報とに基づいて、仮想アドレスの一致不一致を検出している。しかしながら、上述した公報でもアダーを用いてアドレスの計算を行っており、アダーの出力が得られるまでアドレスの変換処理を行うことができないため、キャッシュヒットチェックの高速化が図れない。
【０００８】
本発明の目的は、プロセッサがアクセスを行おうとする仮想アドレスの物理アドレスへの変換を高速化し、キャッシュヒット判定を高速化することができるマイクロプロセッサを提供することにある。
【０００９】
【課題を解決するための手段】
上記の課題を達成するため、仮想アドレスを物理アドレスに変換するトランスレーション・ルックアサイド・バッファ回路（ＴＬＢ回路）は、比較の基準となる仮想アドレス情報のベースアドレスの下位側ビット列とオフセットアドレスの下位側ビット列とを加算したときの桁あふれ情報を格納するキャリー格納部と、比較の基準となる仮想アドレス情報のベースアドレスの上位側ビット列とオフセットアドレスの上位側ビット列とを格納する上位アドレス格納部と、アクセス要求のあった仮想アドレス情報のベースアドレスの下位側ビット列とオフセットアドレスの下位側ビット列とを加算したときの桁あふれ情報と、前記キャリー格納部に格納された桁あふれ情報とを比較するキャリー比較器と、アクセス要求のあった仮想アドレス情報のベースアドレスの上位側ビット列と前記上位アドレス格納部に格納されたベースアドレスの上位側ビット列とが一致するか否かを検出するとともに、アクセス要求のあった仮想アドレス情報のオフセットアドレスの上位側ビット列と前記上位アドレス格納部に格納されたオフセットアドレスの上位側ビット列とが一致するか否かを検出する上位アドレス比較器と、前記キャリー比較器による比較結果が一致し、かつ、前記上位アドレス比較器による比較結果が一致したときのみ、仮想アドレスの一致信号を出力する一致検出部と、を備える。
【００１０】
本発明では、ベースアドレスとオフセットアドレスのそれぞれの下位側ビット列については、両アドレスの加算結果を比較する代わりに、キャリー信号同士を比較するため、仮想アドレスが一致するか否かを高速に検出することができる。
【００１１】
また、仮想アドレスを物理アドレスに変換するトランスレーション・ルックアサイド・バッファ回路（ＴＬＢ回路）は、比較の基準となる仮想アドレス情報のベースアドレスの上位側ビット列を格納する第１の格納部と、比較の基準となる仮想アドレス情報のベースアドレスの下位側ビット列とオフセットアドレスの下位側ビット列とを加算したときに桁あふれがある場合には、該仮想アドレス情報のオフセットアドレスの上位側ビット列に１を加えたビット列を格納し、かつ、桁あふれがない場合には、該仮想アドレス情報のオフセットアドレスの上位側ビット列を格納する第２の格納部と、比較の基準となる仮想アドレス情報のベースアドレスの下位側ビット列とオフセットアドレスの下位側ビット列とを加算したときに桁あふれがある場合には、該仮想アドレス情報のオフセットアドレスの上位側ビット列を格納し、かつ、桁あふれがない場合には、該仮想アドレス情報のオフセットアドレスの上位側ビット列から１を引いたビット列を格納する第３の格納部と、アクセス要求のあった仮想アドレス情報のベースアドレスの上位側ビット列と、前記第１の格納部に格納されたビット列とを比較する第１の比較器と、アクセス要求のあった仮想アドレス情報のベースアドレスの下位側ビット列と前記第２の格納部に格納されたビット列とを比較する第２の比較器と、アクセス要求のあった仮想アドレス情報のベースアドレスの下位側ビット列と前記第３の格納部に格納されたビット列とが一致するか否かを比較する第３の比較器と、前記第１〜第３の比較器の比較結果に基づいて、アクセス要求のあった仮想アドレスが比較の基準となる仮想アドレスに一致するか否かを示す信号を出力する一致検出部と、を備える。
【００１２】
前記ベースアドレスは、例えば32ビットであり、前記オフセットアドレスは、例えば16ビットであり、前記ベースアドレスの最上位ビットから12ビットまでが上位側ビット列、11ビットから最下位ビットまでが下位側ビット列であり、前記オフセットアドレスの最上位ビットから12ビットまでが上位側ビット列、11ビットから最下位ビットまでが下位側ビットである
また、本発明では、キャリー信号の値に応じてオフセットアドレスを調整した上でアドレスの比較を行うため、桁上がりのあるなしにかかわらず、正確に仮想アドレスの比較を行うことができる。
【００１３】
【発明の実施の形態】
以下、図面を参照して、本発明に係るマイクロプロセッサの一実施形態について詳述する。以下では、MIPS系のマイクロプロセッサを例にとって説明する。
【００１４】
図１は本発明に係るマイクロプロセッサの内部構成を示すブロック図である。図１のマイクロプロセッサは、外部バスB1に接続されたバス・インタフェース・ユニット１と、プロセッサにより実行される命令をフェッチするIFU(Instruction Fetch Unit)２と、仮想アドレスを物理アドレスに変換するMMU(Memory Management Unit)３と、ロード／ストアに関する命令を実行するLSU(Load/Store Unit)４と、ロード／ストア以外の命令を実行する複数の実行ユニット5a,5b,5cと、浮動小数点演算を行うFPU(Floating Point Unit)6a,6bと、プロセッサ内の各ブロックを制御する制御論理部７とを備えている。
【００１５】
IFU２は、分岐命令等の分岐先を格納するBTACを参照してPC(プログラム・カウンタ)を生成するPCパイプ21と、命令を一時的に格納するICACHE(命令キャッシュメモリ)22と、命令のタイプを識別して識別した命令を実行するための実行ユニットを選択する命令発行＆ステージング部23とを有する。
【００１６】
MMU３は、仮想アドレスを物理アドレスに変換するための３つのＴＬＢ(トランスレーション・ルックアサイド・バッファ：Translation Lookaside Buffers)を有する。プロセッサにより必要とされるアドレス変換情報、例えば、物理ページ番号やメモリ保護情報は、ＴＬＢに書き込まれる。この情報に基づいて、MMU３は、物理アドレスへの変換を行う。
【００１７】
MMU３内の３種類のＴＬＢは、JTLB(Joint Translation Lookaside Buffer)31と、ITLB(Instruction Translation Lookaside Buffer)32と、DTLB(Data Translation Lookaside Buffer)33とである。
【００１８】
ITLB32とDTLB33は、総称してマイクロTLBと呼ばれる。ITLB32は、命令の仮想アドレスのデータパスに直接接続された専用のTLBである。DTLB33は、データの仮想アドレスのデータパスに直接接続された専用のTLBである。これらＴＬＢのエントリー数は少ないが、高速度にアドレス変換を行う。JTLB31により生成された変換テーブルの一部が、必要に応じて、ITLB32やDTLB33にコピーされる。
【００１９】
JTLB31はソフトウェアにより制御されるのに対し、マイクロＴＬＢsとJTLBとの整合性(coherency)はハードウェアにより維持される。マイクロプロセッサは、JTLB31内に変換テーブルが存在しない場合には、例外を発行する。例外ハンドラは、OSのメモリ上のページテーブルから対応するページを検索し、JTLB31に書き込む。
【００２０】
LSU４は、外部メモリに対する読み書きデータを一時的に格納するDCACHE(Data Cache Memory)41と、キャッシュ以外の特定の目的に用いられるSPRAM(Scratch Pad RAM)42と、DCACHE41とSPRAM42にアクセスするのに必要な仮想アドレスを生成するアドレス生成器(仮想アドレス計算部)43とを有する。
【００２１】
制御論理部 7は、プロセッサ内の各ブロックを制御する。制御論理部 7内に制御レジスタ 71が設けられる。
【００２２】
次に、図１に示すマイクロプロセッサの動作を説明する。まず、IFU２は、PCパイプ２により生成されたPCに基づいて命令をフェッチする。なお、PCは仮想アドレスである。
【００２３】
ITLB32は、PCを仮想アドレスから物理アドレスに変換する。変換された物理アドレスと、ICACHE22内のITAGの出力との一致検出が行われる。すなわち、物理アドレスは、PCにより指示された命令がICACHE22内に存在するか否かを検出するために利用される。PCにより指示された命令がICACHE22内に存在しない場合、すなわち、キャッシュミスの場合には、物理アドレスを用いて不図示の外部メモリへのアクセスが行われる。
【００２４】
キャッシュミスが起こると、キャッシュミスが起こったことを示す情報と物理アドレス情報とがBIU１内の制御論理部に渡される。BIU１は、これらの情報に基づいて外部メモリへのアクセスを行う。外部メモリへのアクセスが終了すると、キャッシュラインの取得を知らせる信号がIFU２に供給される。IFU２は、メモリへのアクセスにより得られたデータをICACHE22に書き込む。同時に、リフィルされたキャッシュラインに含まれる命令のうち、PCにより指示された命令と、特定の場合には、PCにより指示された命令に続く数命令が命令発行＆ステージング部 23に供給される。
【００２５】
一方、PCにより指示された命令がICACHE22内に存在する場合には、ICACHE22内の対応する命令と、特定の場合には、PCにより指示された命令に続く数命令が命令発行＆ステージング部 23に供給される。
【００２６】
命令発行＆ステージング部 23は、命令の型を識別し、命令の実行を行う実行ユニット（例えば、LSU４または他の実行ユニット）を決定する。この場合、命令発行＆ステージング部 23は、各実行ユニットの空き状態に応じて、実行ユニットを動的に決定する。
【００２７】
例えば、識別された命令がロード／ストア命令の場合には、LSU４のみが命令を実行可能であるため、命令発行＆ステージング部 23は、LSU４が命令を実行できる準備が整ったときにLSU４にその命令を送る。
【００２８】
図２はMMU３の内部構成を示す図である。上述したように、MMU３の内部には３つのＴＬＢが設けられている。３つのＴＬＢのうち、JTLB31が本来のTLBである。JTLB31は、例えば、48のエントリーを有し、各ページごとに仮想アドレスをマッピングすることにより、物理アドレスへの変換用の変換テーブルを生成する。
【００２９】
JTLB31により生成された変換テーブル100は、必要に応じて、ITLB32とDTLB32にコピーされる。このように、ＴＬＢを３つに分ける理由は、JTLB31は多数のエントリーを有することから、アドレスの変換処理を行うのに時間がかかるためである。したがって、変換テーブル100の中から、実際に変換に必要な部分のみをITLB32やDTLB33にコピーして変換処理を高速化している。
【００３０】
図３はJTLB31内の変換テーブル100の一例を示す図である。同図に示すように、変換テーブル100には、仮想アドレスのページ番号と、対応する物理アドレスと、フラグ情報とが記録されている。
【００３１】
フラグ情報は、キャッシュ可能か否かを示すＣフラグと、メモリへの書き込みが可能か否かを示すＤフラグと、変換エントリーが有効か否かを示すＶフラグと、SPRAMへのアクセスを行うか否かを示すＳフラグとを有する。
【００３２】
図４は、ベースアドレス、オフセットアドレス、仮想アドレス、および物理アドレスの各データ構造を示す図である。仮想アドレスの上位側20ビットはVPN(Virtual Page Number)であり、下位側12ビットはページオフセットである。
【００３３】
VPNは、ベースアドレスの上位側20ビット[31:12]と、オフセットアドレスの上位側３ビット[14:12]と、オフセットアドレスに付加された正負を示すサインビットＳと、ベースアドレスおよびオフセットアドレスのそれぞれの下位側12ビットを加算したときのキャリービットＣとで構成される。
【００３４】
仮想アドレスのページオフセットは、ベースアドレスの下位側12ビットとオフセットアドレスの下位側12ビットとの加算結果である。
【００３５】
図１に示すDTLB33は、VPNをPFN(Physical Frame Number)に変換する。物理アドレスの上位側20ビットはPFNであり、下位側12ビットはページオフセットである。なお、物理アドレスのページオフセットは、仮想アドレスのページオフセットと同じものである。
【００３６】
図５はMMU３およびLSU４の主要部の詳細構成を示すブロック図である。同図に示すアダー34は、外部メモリに対するアクセス要求のあった仮想アドレス中のベースアドレスとオフセットアドレスとの加算を行う。このとき、オフセットアドレスは32ビットに符号拡張された後、ベースアドレスと加算される。
【００３７】
アダー34からは、加算結果を示すVPN(Virtual Page Number)と、仮想アドレスの下位側ビット列の桁あふれの有無を示すキャリー信号とが出力される。
【００３８】
DTLB33は、アクセス要求のあった仮想アドレスとDCACHE41に格納されているデータに対応する仮想アドレスとの一致検出を行うCAM(Contents Addressable Memory)35と、DCACHE41に格納されているデータの物理アドレス等を格納する物理アドレス格納部36とを有する。
【００３９】
CAM35は、アクセス要求のあったベースアドレスおよびオフセットアドレスと、アダー34から出力されたキャリー信号とに基づいて、アクセス要求のあったアドレスがDCACHE41に格納されたデータのアドレスに一致するか否かを検出し、一致不一致信号を出力する。
【００４０】
物理アドレス格納部36は、CAM35から一致信号が出力されると、その一致信号に対応する物理アドレスを出力する。また、CAM35から一致信号が出力されると、ゲート回路37からDTLB33のヒット信号が出力される。このゲート回路37の出力は、プロセッサの処理をストールさせるか否かを判断するために用いられる。
【００４１】
アダー34から出力されたVPNはJTLB31に供給される。JTLB31は、変換テーブルを参照して、VPNに対応するPFNと、上述したＣフラグおよびＤフラグとを出力する。ここで、アダー34で加算した後のVPNをJTLB31に供給する理由は、DTLB33がミスした場合のペナルティをなるべく少なくするためである。
【００４２】
また、アダー34から出力されたVPNの下位側ビット列は、インデックス・アドレスとしてDTAG44とDCACHE41に供給される。DTAG44とDCACHE41はそれぞれ、インデックス・アドレスをデコードして、エントリーを設定する。具体的には、インデックス・アドレスを下位ビット側に６ビット分シフトさせて得られるビット列をエントリーとして設定する。DTAG44は対応するエントリーの物理アドレスを出力し、DCACHE41は対応するエントリーのデータを出力する。
【００４３】
比較器45は、DTAG44から出力された物理アドレスと、CAM35で一致検出されて物理アドレス格納部36から出力された物理アドレスとを比較し、両者が一致すれば、キャッシュヒットを示す信号を出力する。
【００４４】
図６は図５の具体的な動作を示す図である。図６は、外部メモリに対するアクセス要求のあったベースアドレスが0x12344567で、オフセットアドレスが0x1111の場合を示している。
【００４５】
この場合、アダー34の出力は、0x12344567＋0x00001111＝0x12345678、キャリー信号は０、DTLB33に供給されるベースアドレスの上位側ビット列は0x12344、オフセットアドレスの上位側ビット列は0x1111になる。
【００４６】
また、図６は、DTLB33に４つのエントリーがある例を示しており、各エントリーに対応して、CAM35と物理アドレス格納部36に図示のようなデータが格納されている。図中で、CAM35およびDTAG44における「V」とは、それぞれ対応するCAMのエントリおよびTAGのエントリが有効であることを示し、「I」は無効であることを示している。
【００４７】
図６の例では、一番上のエントリーが一致し、図示の太線矢印に沿って、物理アドレス0x43215が出力される。なお、Ｃはキャッシュ可能であることを示し、Ｗはデータの読み書き可能であることを示している。また、Ｕはキャッシュ禁止であることを示し、Ｒはデータの読み出し可能で書き込み禁止であることを示している。
【００４８】
また、アダー34の出力0x12345678の下位側ビット列であるインデックス・アドレス0x678は、DTAG44とDCACHE41に供給される。DTAG44は、0x678を下位側に６ビットシフトしたビット列0x1bをエントリーとして、DTAG44に格納されている物理アドレス情報V_0x43215を出力する。
【００４９】
比較器45は、DTAG44から出力された物理アドレス0x43215とDTLB33から出力された物理アドレス0x43215とを比較し、この場合、両者が一致するため、キャッシュヒットを示す信号を出力する。
【００５０】
また、DCACHE41は、インデックス・アドレス0x678を下位側に６ビットシフトしたビット列0x1bをエントリーとして、DTAG44に格納されているデータ0x12345678_9abcef0_を出力する。
【００５１】
（DTLB33の第１の構成例）
図７はDTLB33の第１の構成例を示すブロック図である。図７のDTLB33は、16ビットのオフセットアドレスを32ビットに符号拡張する符号拡張部81と、ベースアドレスと符号拡張されたオフセットアドレスとを加算するアダー82と、ベースアドレスの上位側20ビット[31:12]がCAM35内の上位アドレス格納部83に格納されているベースアドレスに一致し、かつオフセットアドレスの上位側４ビット[15:12]がCAM35内の上位アドレス格納部83に格納されているオフセットアドレスに一致するか否かを判断する比較器（上位アドレス比較器）84と、アダー82から出力されたキャリー信号とCAM35内のキャリー格納部85に格納されているキャリー信号とが一致するか否かを判断する比較器（キャリー比較器）86と、両比較器84，85の比較結果がともに一致したときに一致信号を出力する一致検出部87とを有する。比較器84は例えばEXNORゲートで構成され、一致検出部87は例えばANDゲートで構成される。
【００５２】
次に、図７のDTLB33の動作を説明する。比較器84は、32ビットのベースアドレスの上位側20ビット[31:12]とCAM35内の上位アドレス格納部83に格納されているベースアドレスとを比較するとともに、16ビットのオフセットアドレスの上位側４ビット[15:12]とCAM35内の上位アドレス格納部83に格納されているオフセットアドレスとを比較し、両方とも一致したときに、一致信号を出力する。
【００５３】
一方、比較器86は、アダー82から出力されたキャリー信号とCAM35内に格納されているキャリー信号とが一致したときに、一致信号を出力する。このように、仮想アドレスの下位側12ビットについては、キャリー信号だけで一致不一致の判断を行うため、アダー82での加算処理が完了する前に、一致／不一致の判断を行うことができ、アドレス変換の速度が向上する。
【００５４】
（DTLB33の第２の構成例）
図７はアダー82を用いてキャリー信号を生成しているため、キャリー信号が生成されるまでに時間がかかるという問題がある。そこで、第２の構成例は、キャリー・ルックアヘッド回路を設けてキャリー信号を高速に生成するものである。
【００５５】
図８はDTLB33の第２の構成例を示すブロック図である。図８のDTLB33は、図７のアダー82をキャリー・ルックアヘッド回路 88に置き換えた以外は、図７と同様に構成されている。
【００５６】
図９はキャリー・ルックアヘッド回路 88の一例を示す回路図であり、４ビットA0〜A3，B0〜B3同士の加算を行ってキャリー信号を出力する例を示している。図９の回路は、最終的な加算結果が演算される前にキャリー信号を出力することができる。
【００５７】
図９のようなキャリー・ルックアヘッド回路 88を設けることにより、キャリー信号が一致したか否かを迅速に判断することができ、結果として、DTLB ヒットか否かの判断も高速に行うことができる。
【００５８】
（DTLB33の第３の構成例）
上述した第１および第２の構成例の場合、仮想アドレスの下位側12ビットについてはキャリー信号の一致／不一致しか検出していないため、本来はベースアドレスとオフセットアドレスとの加算結果が一致しているにもかかわらず、不一致と判断される場合がある。
【００５９】
例えば、図10aは、CAM35内に格納されているベースアドレスが'0x80000000'で、オフセットアドレスが'0x1234'の例を示している。両者の加算結果は、'0x80001234'になるため、キャリー信号は０（桁あふれなし）である。
【００６０】
一方、図10bは、アクセス要求のあったベースアドレスが'0x80000fff'で、オフセットアドレスが'0x0125'の例を示している。この場合、両者の加算結果は、'0x80001234'になるにもかかわらず、後者のオフセットアドレスの値とキャリー信号の値は前者とは異なるため、図７の比較器84，86の比較結果は一致せず、最終的に一致検出部87は、DTLBミスを示す信号を出力する。
【００６１】
図11は、第１および第２の構成例が、本来 DTLBがヒットしてもよい変換に対してミスと判断してしまう例を示す図である。図11の(1)に示すように、オフセットアドレスの上位側４ビットがＡのとき、下位側12ビットからのキャリー信号が０であれば、両者の加算結果はＡになる。また、図11の(2)に示すように、オフセットアドレスの上位側４ビットが(A-1)で、下位側12ビットからのキャリー信号が１のときも、両者の加算結果はＡになるが、第１および第２の構成例は、DTLBミスと判断してしまう。
【００６２】
同様に、図11の(3)に示すように、オフセットアドレスの上位側４ビットが(A+1)で、下位側12ビットからのキャリー信号が０であれば、両者の加算結果は(A+1)になる。また、図11の(4)に示すように、オフセットアドレスの上位側４ビットがＡで、下位側12ビットからのキャリー信号が１のときも、両者の加算結果は(A+1)になるが、この場合も、第１および第２の構成例では、キャッシュミス ヒットと判断してしまう。
【００６３】
DTLB３３がミスを起こすと、JTLB３１による変換が必要になるため、ペナルティが発生する。
【００６４】
図12は DTLB33 の第三の構成例を示すブロック図である。図12 のDTLB33は、キャリー信号の値が異なっていても、ベースアドレスとオフセットアドレスとの加算結果が同じであれば、DTLBヒットと判断するようにしたものである。
【００６５】
図12のDTLB33は、図７と同様の符号拡張部81とアダー82を有する他に、ベースアドレスの上位側20ビット[31:12]を格納する第１の格納部91と、アダー82からのキャリー信号の論理を反転するインバータIV１と、インバータIV１の出力論理を反転するインバータIV２と、インバータIV２の出力がハイレベル（キャリー信号が１）のときのみオフセットアドレスの上位側４ビット[15:12]に１を加算する加算部92と、インバータIV１の出力がハイレベル（キャリー信号が０）のときのみオフセットアドレスの上位側４ビット[15:12]から１を引く減算部93と、加算部92の出力を格納する第２の格納部94と、加算部92の出力を格納する第３の格納部95と、第１の格納部91に格納された20ビットデータと外部メモリに対するアクセス要求のあったベースアドレスの上位側20ビットデータとを比較する第１の比較器96と、第２の格納部94に格納された４ビットデータとアクセス要求のあったオフセットアドレスの上位側４ビットとを比較する第２の比較器97と、第３の格納部95に格納された４ビットデータとオフセットアドレスの上位側４ビットとを比較する第３の比較器98と、比較器96，97の比較結果がともに一致する場合に一致信号を出力するゲート回路99と、比較器96，98の比較結果がともに一致する場合に一致信号を出力するゲート回路110と、キャリー信号の論理に応じてゲート回路99，110の出力のいずれか一方を選択して出力する一致検出部111とを有する。第１〜第３の格納部91，94，95は、図５に示したCAM35内に設けられる。
【００６６】
なお、図12において、一致検出部111 のマルチプレクサに書かれた 0, 1 は、それぞれを選択する信号、すなわち図１２の横から入力されている信号 が 0, 1の時にそれぞれ選択される方を示している。
【００６７】
次に、図12の回路の動作を説明する。DTLB33にリフィルされる仮想アドレス中のオフセットアドレスの上位側４ビットがＡで、そのときのキャリー信号が０の場合には、加算部92はＡをそのまま出力し、第２の格納部94にはＡが格納される。また、減算部93は(A-1)を出力し、第３の格納部95には(A-1)が格納される。
【００６８】
その後、外部メモリに対するアクセス要求のあったオフセットアドレスの上位側４ビットがＡで、そのときのキャリー信号が０の場合には、第２の比較器97の比較結果が一致して、第３の比較器98の比較結果は不一致になる。したがって、ゲート回路99の出力はハイレベルに、ゲート回路110の出力はローレベルになる。このとき、キャリー信号は０であるため、一致検出部111は、ゲート回路99の出力を選択する。この場合、ゲート回路99の出力はハイレベルであるため、一致検出部111は一致信号を出力する。
【００６９】
また、外部メモリに対するアクセス要求のあったオフセットアドレスの上位側４ビットが(A-1)で、そのときのキャリー信号が１になると、第３の比較器98の比較結果が一致して、第２の比較器97の比較結果が不一致になる。したがって、ゲート回路110の出力はハイレベルに、ゲート回路99の出力はローレベルになる。このとき、キャリー信号は１であるため、一致検出部111は、ゲート回路110の出力を選択する。この場合、ゲート回路110の出力はハイレベルであるため、一致検出部111は一致信号を出力する。
【００７０】
一方、DTLB33にリフィルされる仮想アドレス中のオフセットアドレスの上位側４ビットがＡで、そのときのキャリー信号が１の場合には、加算部92は(A+1)を出力し、第２の格納部94には(A+1)が格納される。また、減算部93はＡをそのまま出力し、第３の格納部95にはＡが格納される。
【００７１】
その後、外部メモリに対するアクセス要求のあったオフセットアドレスの上位側４ビットがＡで、そのときのキャリー信号が１の場合には、第３の比較器98の比較結果が一致して、第２の比較器97の比較結果は不一致になる。したがって、ゲート回路110の出力はハイレベルに、ゲート回路99の出力はローレベルになる。このとき、キャリー信号は１であるため、一致検出部111は、ゲート回路110の出力である一致信号を出力する。
【００７２】
また、外部メモリに対するアクセス要求のあったベースアドレスが(A+1)で、そのときのキャリー信号が０の場合には、第２の比較器97の比較結果が一致して、第３の比較器98の比較結果は不一致になる。したがって、ゲート回路99の出力はハイレベルに、ゲート回路110の出力はローレベルになる。このとき、キャリー信号は０であるため、一致検出部111は、ゲート回路99の出力である一致信号を出力する。
【００７３】
このように、図12の回路の場合、キャリー信号の値により、CAM35内に格納するオフセットアドレスの値を調整するため、図10のように、元のオフセットアドレスが不一致であっても、オフセットアドレスとベースアドレスとの加算結果が同一であれば、仮想アドレスが一致したと判断される。したがって、誤ってDTLBミスと判断するおそれが少なくなり、プロセッサの処理速度が向上する。
【００７４】
【発明の効果】
以上詳細に説明したように、本発明によれば、ベースアドレスとオフセットアドレスのそれぞれの下位側ビット列については、両アドレスの加算結果を比較する代わりに、キャリー信号同士を比較するため、仮想アドレスが一致するか否かを高速に検出することができる。
【００７５】
また、本発明によれば、キャリー信号の値に応じてオフセットアドレスを調整した上でアドレスの比較を行うため、桁上がりのあるなしにかかわらず、正確に仮想アドレスの比較を行うことができる。
【図面の簡単な説明】
【図１】本発明に係るマイクロプロセッサの内部構成を示すブロック図。
【図２】  MMUの内部構成を示す図。
【図３】  JTLB内の変換テーブルの一例を示す図。
【図４】ベースアドレス、オフセットアドレス、仮想アドレス、および物理アドレスの各データ構造を示す図。
【図５】  MMUおよびLSUの主要部の詳細構成を示すブロック図。
【図６】図５の具体的な動作を示す図。
【図７】  DTLBの第１の構成例を示すブロック図。
【図８】  DTLBの第２の構成例を示すブロック図。
【図９】キャリー・ルックアヘッド回路の一例を示す回路図。
【図１０】ベースアドレスとオフセットアドレスとの計算の一例を示す図。
【図１１】第１および第２の構成例がキャッシュヒット検出を正しく行えない例を示す図。
【図１２】  DTLBの第３の構成例を示すブロック図。
【符号の説明】
１  バス・インタフェース・ユニット
２  ＩＦＵ(Instruction Fetch Unit)
３  MMU(Memory Management Unit)
４  LSU(Load/Store Unit)
５ａ，５ｂ，５ｃ  実行ユニット
６ａ，６ｂ  ＦＰＵ (Floating Point Unit)
７  制御論理部
２１  PCパイプ
２２  ICACHE
２３  命令発行＆ステージング部
３１  JTLB(Joint Translation Lookaside Buffer)
３２  ITLB(Instruction Translation Lookaside Buffer)
３３  DTLB(Data Translation Lookaside Buffer)
４１  DCACHE(Data Cache Memory)
４２  SPRAM(Scratch Pad RAM)
４３  アドレス生成器(仮想アドレス計算部)
１００  変換テーブル
【図１】
0003825974.tif 000002
【図２】
0003825974.tif 000003
【図３】
0003825974.tif 000004
【図４】
0003825974.tif 000005
【図５】
0003825974.tif 000006
【図６】
0003825974.tif 000007
【図７】
0003825974.tif 000008
【図８】
0003825974.tif 000009
【図９】
0003825974.tif 000010
【図１０】
0003825974.tif 000011
【図１１】
0003825974.tif 000012
【図１２】
0003825974.tif 000013