(57)【要約】      （修正有）【課題】メモリアクセスリクエストの発行スループットを向上する演算処理装置を提供する。【解決手段】プロセッサ１０は、演算処理部１１と、演算処理部からのメモリアクセスに応答して、リクエストをエンキューするリクエストキューと、リクエストキュー内にエンキューされたリクエストの中からリクエストを選択して発行するリクエスト選択部と、リクエスト選択部が選択して発行したリクエストをメモリに発行するリクエスト発行部とを有するメモリアクセスコントローラとを有する。リクエスト選択部は、リクエストキュー内のリクエストの発行後、発行された先行リクエストに対応する発行禁止期間、発行禁止期間に対応する後続のリクエストの発行を禁止し、リクエストキュー内のリクエストが第１の状態の場合、リクエストキュー内のリードリクエストとライトリクエストのうち第１のリクエストに優先して第１のリクエストと異なる第２のリクエストを発行する。【選択図】図５
2019109726.tif 000002
【特許請求の範囲】
【請求項１】
演算処理部と、
前記演算処理部からのメモリアクセスに応答して、キャッシュメモリにアクセス先のデータが格納されていない場合、前記メモリアクセスを要求するリクエストを発行するキャッシュ制御部と、
前記リクエストをエンキューするリクエストキューと、前記リクエストキュー内にエンキューされたリクエストの中からリクエストを選択して発行するリクエスト選択部と、前記リクエスト選択部が選択して発行したリクエストをメモリに発行するリクエスト発行部とを有するメモリアクセスコントローラとを有し、
前記リクエスト選択部は、
前記リクエストキュー内の前記リクエストの発行後、前記発行された先行リクエストに対応する発行禁止期間、前記発行禁止期間に対応する後続のリクエストの発行を禁止し、
前記リクエストキュー内のリクエストが第１の状態の場合、前記リクエストキュー内のリードリクエストとライトリクエストのうち第１のリクエストに優先して前記第１のリクエストと異なる第２のリクエストを発行する、演算処理装置。
【請求項２】
前記第１の状態は、前記第１のリクエストのメモリへの発行頻度が基準頻度未満であり、前記リクエストキュー内の前記第２のリクエストの数が基準数以上である状態である、請求項１に記載の演算処理装置。
【請求項３】
前記メモリアクセスコントローラは、更に、
前記リクエスト選択部が選択して発行する前記リクエストを監視し、前記発行禁止期間、前記リクエストの選択を禁止するビジー信号を生成するビジー信号生成部と、
前記リクエストキューにエンキューされる前記リクエストと、前記リクエスト選択部が選択して発行する前記リクエストとを監視し、前記第１の状態の場合、前記第１のリクエストに優先して発行する優先オペコードを前記第２のリクエストに設定する優先オペコード生成部とを有し、
前記リクエスト選択部は、前記ビジー信号に基づいて、前記発行禁止期間中前記リクエストキュー内のリクエストの発行を禁止し、さらに、前記リクエストキュー内の前記優先オペコードと異なるオペコードのリクエストの発行を禁止する、請求項２に記載の演算処理装置。
【請求項４】
前記優先オペコード生成部は、前記第１の状態が解消された場合、前記優先オペコードの設定を解除する、請求項３に記載の演算処理装置。
【請求項５】
前記第１の状態は、前記リクエストキュー内の前記第１のリクエストの数が下限値より少なく、前記第２のリクエストの数が上限値より多く、前記第２のリクエストの発行間隔が発行間隔閾値以上である場合である、請求項２に記載の演算処理装置。
【請求項６】
前記第１の状態は、前記リクエストキューの先頭エントリにリクエストがセットされてから所定時間を超えて前記先頭エントリに滞留している状態である、請求項１に記載の演算処理装置。
【請求項７】
前記メモリアクセスコントローラは、更に、
前記リクエスト選択部が選択する前記リクエストを監視し、前記発行禁止期間、前記リクエストの発行を禁止するビジー信号を生成するビジー信号生成部と、
前記リクエストキューの先頭エントリにセットされた前記リクエストと、前記リクエスト選択部が選択して発行する前記リクエストとを監視し、前記第１の状態の場合、前記先頭エントリ以外の全エントリのリクエストの発行を禁止する先頭エントリ優先信号を生成する先頭エントリタイマ部とを有し、
前記リクエスト選択部は、前記ビジー信号に基づいて前記発行禁止期間中前記リクエストキュー内のリクエストの発行を禁止し、前記先頭エントリ優先信号に基づいて、前記リクエストキュー内の前記先頭エントリ以外の全エントリのリクエストの発行を禁止する、請求項６に記載の演算処理装置。
【請求項８】
前記先頭エントリタイマ部は、前記先頭エントリのリクエストが発行されると、前記先頭エントリ優先信号をリセットする、請求項７に記載の演算処理装置。
【請求項９】
演算処理部からのメモリアクセスがキャッシュミスの場合、キャッシュ制御部から前記メモリアクセスを要求するリクエストを発行されるメモリアクセスコントローラであって、
前記リクエストをエンキューするリクエストキューと、
前記リクエストキュー内にエンキューされたリクエストの中からリクエストを選択して発行するリクエスト選択部と、
前記リクエスト選択部が選択して発行したリクエストをメモリに発行するリクエスト発行部とを有するメモリアクセスコントローラとを有し、
前記リクエスト選択部は、
前記リクエストキュー内の前記リクエストの発行後、前記発行された先行リクエストに対応する発行禁止期間、前記発行禁止期間に対応する後続のリクエストの発行を禁止し、
前記リクエストキュー内のリクエストが第１の状態の場合、前記リクエストキュー内のリードリクエストとライトリクエストのうち第１のリクエストに優先して前記第１のリクエストと異なる第２のリクエストを発行する、メモリアクセスコントローラ。
【請求項１０】
演算処理部と、
前記演算処理部からのメモリアクセスに応答して、キャッシュメモリにアクセス先のデータが格納されていない場合、前記メモリアクセスを要求するリクエストを発行するキャッシュ制御部と、
前記リクエストをエンキューするリクエストキューと、前記リクエストキュー内にエンキューされたリクエストの中からリクエストを選択して発行するリクエスト選択部と、前記リクエスト選択部が選択して発行したリクエストをメモリに発行するリクエスト発行部とを有するメモリアクセスコントローラとを有する演算処理装置の制御方法であって、
前記リクエスト選択部が、
前記リクエストキュー内の前記リクエストの発行後、前記発行された先行リクエストに対応する発行禁止期間、前記発行禁止期間に対応する後続のリクエストの発行を禁止し、
前記リクエストキュー内のリクエストが第１の状態の場合、前記リクエストキュー内のリードリクエストとライトリクエストのうち第１のリクエストに優先して前記第１のリクエストと異なる第２のリクエストを発行する、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置、メモリアクセスコントローラおよび演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置は、ＣＰＵ（Central Processor Unit）またはプロセッサ（チップ）である。プロセッサは、命令を実行する演算処理部（CPUコア、Core）と、キャッシュユニットと、メモリアクセスコントローラとを有する。
【０００３】
キャッシュユニットは、キャッシュメモリと、CPUコアが発行するメモリアクセスリクエスト（第１のメモリアクセス要求）に応答して、キャッシュメモリにアクセス先アドレスのデータが格納されているか否かのキャッシュヒット判定し、キャッシュヒットならキャッシュメモリ内のデータで応答するキャッシュ制御部とを有する。
【０００４】
キャッシュ制御部は、キャッシュミスの場合に、メモリアクセスコントローラに更にメモリアクセスリクエスト（第２のメモリアクセスリクエスト）を発行する。メモリアクセスコントローラは、キャッシュ制御部からのメモリアクセスリクエストに応答して、メモリにリードコマンドまたはライトコマンドを発行してメモリ内のアクセス先アドレスのデータにアクセスする。メモリアクセスコントローラは、プロセッサチップ内に内蔵される。または、メモリアクセスコントローラは、プロセッサチップとは別のチップで構成されることもある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１３−２０６４７４号公報
【特許文献２】特開２００３−２４８６２２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
メモリアクセスコントローラ（以下MAC：Memory Access Controllerと称する）は、キャッシュ制御部からのメモリアクセスリクエストを格納するリクエストキューと呼ばれるバッファを有する。MACは、メモリの仕様に定められている先行リクエストと後続リクエストとの間に設けるべき後続リクエストの発行禁止期間であるリクエスト発行ペナルティ（以下、単にペナルティ）に基づいて、リクエストキューにエンキューされたメモリアクセスリクエストの中から１つを選択し、選択リクエストに対応するコマンドをメモリに発行する。コマンドは、メモリアクセスリクエストをメモリの仕様に対応したプロトコルでメモリに伝える信号の組み合わせである。したがって、コマンドとメモリアクセスリクエストは実質的には同等である。
【０００７】
上記のペナルティは、メモリの仕様に基づいて定められるが、通常、後続リクエストが先行リクエストと同じリードまたはライトの場合は短く、異なる場合は長い。また、後続リクエストが先行リクエストと異なるアドレスの場合は短く、同じ場合は長い。そのようなペナルティの仕様の下では、MACは、先行リクエストを発行した後、先行リクエストと異なる種類の後続リクエストの長いペナルティ期間中に、先行リクエストと同じ種類のリクエストがエンキューされると、その同じ種類のリクエストを選択する場合がある。
【０００８】
しかしながら、MACが、上記のペナルティに基づいてリクエストキュー内のメモリアクセスリクエストを選択しそのコマンドをメモリに発行すると、リードとライトのうち同じ種類のメモリアクセスリクエストが連続して発行される場合がある。そして、同じ種類のメモリアクセスリクエストの発行頻度が低下した場合でも、ペナルティの制約により異なる種類のメモリアクセスリクエストが発行されず、リクエスト発行のスループットが低下するという課題がある。
【０００９】
そこで，本発明の目的は，リクエスト発行のスループットを高くしたMACを有する演算処理装置（プロセッサ）、MAC及び演算処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【００１０】
実施の形態の第１の側面は，
演算処理部と、
前記演算処理部からのメモリアクセスに応答して、キャッシュメモリにアクセス先のデータが格納されていない場合、前記メモリアクセスを要求するリクエストを発行するキャッシュ制御部と、
前記リクエストをエンキューするリクエストキューと、前記リクエストキュー内にエンキューされたリクエストの中からリクエストを選択して発行するリクエスト選択部と、前記リクエスト選択部が選択して発行したリクエストを前記メモリに発行するリクエスト発行部とを有するメモリアクセスコントローラとを有し、
前記リクエスト選択部は、
前記リクエストキュー内の前記リクエストの発行後、前記発行された先行リクエストに対応する発行禁止期間、前記発行禁止期間に対応する後続のリクエストの発行を禁止し、
前記リクエストキュー内のリクエストが第１の状態の場合、前記リクエストキュー内のリードリクエストとライトリクエストのうち第１のリクエストに優先して前記第１のリクエストと異なる第２のリクエストを発行する、演算処理装置、である。
【発明の効果】
【００１１】
第１の側面によれば，リクエスト発行のスループットを高くしたMACを提供できる。
【図面の簡単な説明】
【００１２】
【図１】プロセッサの構成を示す図である。
【図２】メモリに対するペナルティの概略を説明する図である。
【図３】メモリアクセスコントローラが発行するメモリアクセスリクエストの発行頻度が低下する例を説明する図である。
【図４】図３で説明したメモリアクセスリクエストの発行頻度が低下する例を示すタイミングチャート図である。
【図５】第１の実施の形態におけるプロセッサの構成を示す図である。
【図６】ビジー情報生成回路BSY_INF_GENの構成を示す図である。
【図７】優先オペコード生成回路PR_OPCD_GENの具体例を示す図である。
【図８】リード、ライトリクエストカウンタRD_RQ_CNTR、WR_RQ_CNTRの動作論理を示すフローチャート図である。
【図９】ライトリクエスト発行間隔カウンタWR_ISS_INT_CNTRとリードリクエスト発行間隔カウンタRD_ISS_INT_CNTRの動作論理を示すフローチャート図である。
【図１０】優先オペコード決定部PR_OPCD_DETの動作論理を示すフローチャート図である。
【図１１】優先オペコードPR_OPCDにより制御されるリクエスト選択回路の例を示す図である。
【図１２】ビジー情報生成回路BSY_INF_GEN内のビジー情報信号生成部BSY_GENの構成例を示す図である。
【図１３】リクエスト選択回路のエントリ判定部20_#とビジー信号選択回路３５を示す図である。
【図１４】エントリ判定部20_#の各論理回路の論理値表を示す図である。
【図１５】エントリ判定部20_#の動作を示すタイミングチャートを示す図である
【図１６】エントリ判定部20_#の動作を示すタイミングチャートを示す図である
【図１７】第２の実施の形態におけるプロセッサの構成を示す図である。
【図１８】先頭エントリタイマ回路E0_TIMERの動作を示すフローチャートを示す図である。
【図１９】第２の実施の形態における先頭エントリ優先信号により制御されるリクエスト選択回路の例を示す図である。
【発明を実施するための形態】
【００１３】
図１は、プロセッサの構成を示す図である。CPUチップであるプロセッサ１０は、演算命令を実行する演算処理部であるコア１１と、キャッシュメモリ１３とキャッシュメモリ１３を制御するキャッシュ制御部（回路）１２を有するキャッシュユニットと、外部のメモリMEMにメモリアクセスコマンドCMDを出力するメモリアクセスコントローラMACとを有する。
【００１４】
キャッシュ制御部１２は、コアが発行する第１のメモリアクセスリクエストMA_REQ1を受信すると、アクセス先のデータがキャッシュメモリ１３内に格納されているか否かのキャッシュヒット判定を行う。キャッシュ制御部は、キャッシュヒットの場合キャッシュメモリ１３内のデータをコアに応答し、キャッシュミスの場合メモリアクセスコントローラMACに第２のメモリアクセスリクエストMA_REQ2を出力する。
【００１５】
メモリアクセスコントローラMACは、キャッシュ制御部から出力される第２のメモリアクセスリクエストMA_REQ2をエンキューして蓄積するリクエストキューREQ_QUEと、リクエストキュー内で待機している第２のメモリアクセスリクエストのうち一つを選択するリクエスト選択回路REQ_SELと、選択されたメモリアクセスリクエストをメモリに対するコマンドに変換して発行するコマンド発行部CMD_ISSUEとを有する。
【００１６】
コマンド発行部CMD_ISSUEは、リクエスト選択回路REQ_SELにより選択されそして発行された第２のメモリアクセスリクエストMA_REQ2を一時的に蓄積し、メモリMEMに発行するコマンドを生成するコマンドバッファCMD_BUFを有する。さらに、コマンド発行部CMD_ISSUEは、リクエスト選択回路が発行するメモリアクセスリクエストMA_REQ2またはコマンドバッファCMD_BUFが発行するコマンドCMDを監視し、メモリMEMのリクエスト発行ペナルティに基づいて、後述する発行禁止期間、発行を禁止する制御を行うためのビジー情報BSY_INFを生成するビジー情報生成回路BSY_INF_GENを有する。
【００１７】
リクエスト選択回路REQ_SELは、ビジー情報BSY_INFに基づいて、リクエストキュー内に蓄積されたリクエストのうち、ペナルティ期間を過ぎたリクエストで最も古くエンキューされたメモリアクセスリクエストMA_REQ2を選択する。これがリクエスト選択回路の選択基準である。
【００１８】
メモリアクセスリクエストは、大別すると、リードリクエストとライトリクエストに分けられる。リードリクエストは、メモリMEMからアクセス先アドレスのデータを読み出す要求であり、ライトリクエストは、メモリMEM内のアクセス先アドレスにデータを書き込む要求である。したがって、メモリMEMはリードとライトについて異なる処理を実行する。
【００１９】
また、メモリMEMに発行されるコマンドCMDは、例えば、メモリMEMがDRAM(Dynamic Random Access Memory)の場合、リードはアクティブコマンドとリードコマンドの組み合わせ、ライトはアクティブコマンドとライトコマンド＋ライトデータの組み合わせで構成される。この場合、メモリアクセスリクエストのうちリードリクエストは、アクティブコマンドとリードコマンドの組み合わせがメモリに発行される。一方、ライトリクエストは、アクティブコマンドとライトコマンドの組み合わせがメモリに発行される。
【００２０】
リクエスト選択回路REQ_SELがリクエストキュー内のリード又はライトリクエストを選択してコマンド発行部CMD_ISSUEに発行すると、コマンド発行部が発行されたリクエストに対応するリード又はライトコマンドを発行する。以下の説明では、リクエスト選択回路がリクエストを選択して発行することを、簡略化して、リクエスト選択回路がリクエストを発行すると称する。また、リクエスト選択回路によるリクエストの発行と、コマンド発行部によるそのリクエストに対応するコマンドのメモリへの発行とは、タイミングのわずかなずれを除くと、実質的に同時に発生する。
【００２１】
図２は、メモリに対するペナルティの概略を説明する図である。メモリMEMは、メモリアクセスリクエストを発行するシステム側に、先行するリクエスト発行後に後続のリクエストの発行を禁止する発行禁止期間（ペナルティ）を設けることを要求する。
【００２２】
図２には、先行するライトリクエストWRの発行後に後続するライトリクエストWRを発行する場合の発行禁止期間tWWと、先行するリードリクエストRDの後に後続するリードリクエストRDを発行する場合の発行禁止期間tRRと、先行するライトリクエストWRの後に後続するリードリクエストRDを発行する場合の発行禁止期間tWRと、先行するリードリクエストREの後に後続するライトリクエストWRを発行する場合の発行禁止期間tRWとが示される。また、それぞれの発行禁止期間は、後続リクエストのアドレスが先行リクエストと異なる場合の発行禁止期間tWW-d、tRR-d、tWR-d、tRW-dと、同じ場合の発行禁止期間tWW-s、tRR-s、tWR-s、tRW-sをそれぞれ有する。
【００２３】
図２に示した発行禁止期間の長さは一例である。一般に、異なるリクエストに対する発行禁止期間tWR-d,tWR-s,tRW-d,tRW-sは、同一リクエストに対する発行禁止期間tRR-d,tRR-s,tWW-d,tWW-sより短い。また、同一リクエストに対する発行禁止期間において、異なるアドレスに対する発行禁止期間tWW-d,tRR-dは、同じアドレスに対する発行禁止期間tWW-s,tRR-sより短い。同様に、異なるリクエストに対する発行禁止期間においても、異なるアドレスに対する発行禁止期間tWR-d,tRW-dは、同一アドレスに対する発行禁止期間tWR-s,tRW-sより短い。したがって、一般に以下のような期間の長さの関係になる。
tWW < tWR
tRR < tRW
tWW-d < tWW-s
tRR-d < tRR-s
tWR-d < tWR-s
tRW-d < tRW-s
【００２４】
図２の例によれば、リクエスト選択回路による後続リクエストの発行には次のような制約が課せられる。
（PAT1）先行リクエストがライトリクエストの場合、先行リクエスト発行から発行禁止期間ｔWW-dまでの間異なるアドレスのライトリクエストを後続リクエストとして発行できない。
（PAT2）先行リクエストがリードリクエストの場合、先行リクエスト発行から発行禁止期間tRR-dまでの間異なるアドレスのリードリクエストを後続リクエストとして発行できない。
（PAT3）先行リクエストがライトリクエストの場合、先行リクエスト発行から発行禁止期間ｔWW-sまでの間同じアドレスのライトリクエストを後続リクエストとして発行できない。
（PAT4）先行リクエストがリードリクエストの場合、先行リクエスト発行から発行禁止期間tRR-sまでの間同じアドレスのリードリクエストを後続リクエストとして発行できない。
（PTA5）先行リクエストがライトリクエストの場合、先行リクエスト発行から発行禁止期間tWR-dまでの間異なるアドレスのリードリクエストを発行できない。
（PTA6）先行リクエストがリードリクエストの場合、先行リクエスト発行から発行禁止期間tRW-dまでの間異なるアドレスのライトリクエストを発行できない。
（PTA7）先行リクエストがライトリクエストの場合、先行リクエスト発行から発行禁止期間tWR-sまでの間同じアドレスのリードリクエストを発行できない。
（PTA8）先行リクエストがリードリクエストの場合、先行リクエスト発行から発行禁止期間tRW-sまでの間同じアドレスのライトリクエストを発行できない。
【００２５】
上記の８つのパターンは、先行リクエストがリードRDかライトWRか、後続リクエストがリードRDかライトWRか、そして、先行リクエストと後続リクエストのアドレスが同じか、異なるかに応じて、２の３乗＝８パターンに分けられ、それぞれ発行禁止期間が存在する。
【００２６】
図１に戻り、コマンド発行部CMD_ISSUEは、リクエスト選択回路REQ_SELが発行するメモリアクセスリクエストMA_REQ2またはコマンドバッファCMD_BUFが発行するコマンドCMDのいずれかを監視し、ビジー情報BYS_INFをリクエスト選択回路REQ_SELに出力するビジー情報生成回路BSY_INF_GENを有する。ビジー情報は、例えば、上記の発行禁止期間の間Lレベルになるビジータイマー信号である。ビジー情報生成回路は、８種類のビジータイマー信号の中から、先行リクエストのオペコード（種類、リードまたはライト）に基づいて４種類のビジータイマー信号を選択し、ビジー情報として出力する。リクエスト選択回路は、ビジー情報に基づいて、各リクエストキュー内のリクエストに対してそれぞれの発行禁止期間の間その選択を抑止する。そして、リクエスト選択回路は、選択が抑止されていないリクエストのうち、最も古くエンキューされたリクエストを選択し、発行する。
【００２７】
図３は、メモリアクセスコントローラが発行するメモリアクセスリクエストの発行頻度が低下する例を説明する図である。図３での動作は以下のとおりである。
【００２８】
まず、リクエスト選択回路REQ_SELがリードリクエストRDを選択し、コマンド発行部CMD_ISSUEがリードコマンドを発行する（S41）。そして、選択または発行されたリードリクエストに基づいてビジー情報生成回路がビジー情報BSY_ONFを出力する（S42）。
【００２９】
次に、ペナルティtRW-sの経過直前に、キャッシュ制御部CACHE_CNが、第２のメモリアクセスリクエストとしてリードリクエストRDを発行し、リクエストキューREQ_QUEにエンキューする（S43）。それに応答して、リクエスト選択回路REQ_SELが、ペナルティに基づいて、リクエストキューREQ_QUE内のライトリクエストWRよりリクエストキューREQ_QUEにエンキューしてきたリードリクエストRDを優先して選択する（S43）。そして、コマンド発行部CMD_ISSUEが選択されたリードリクエストに対するリードコマンドRD_CMDを発行する（S44）。
【００３０】
その結果、リクエストキューREQ_QUE内には、発行されていない複数のライトリクエストWRが未選択のまま滞留する。
【００３１】
図４は、図３で説明したメモリアクセスリクエストの発行頻度が低下する例を示すタイミングチャート図である。図４のパターンPT11がリクエストの発行頻度が低下する例である。
【００３２】
パターンPT11では、クロックCK0でリードリクエストRDが発行され、ペナルティである発行禁止期間tRW-sの経過直前にリードリクエストRDがリクエストキューにエンキューされ、発行禁止期間tRW-sの経過直前のクロックCK7で後続リードリクエストRDが発行される。同様の動作が再度繰り返され、クロックCK14で後続リードリクエストRDが再度発行されている。
【００３３】
上記の動作が繰りえされる結果、ペナルティにより、散発的にエンキューされるリードリクエストが、リクエストキューREQ_QUE内に滞留しているライトリクエストWRに優先して発行され続け、リクエスト発行についてスループットの低下が生じている。
【００３４】
図３に示すとおり、リクエストキューREQ_QUE内に多数のライトリクエストWRが存在していても、先行リクエストと同じアドレスの後続リクエストに対するペナルティのためにリードリクエストRDが優先して発行され、ライトリクエストWRが発行されない状況が長期にわたり継続する。これが、リクエストの発行頻度が低下する一つの状態である。
【００３５】
ここで、リクエストの発行頻度とは、単位時間当たりのメモリコントローラが発行するリクエスト（コマンド）の数である。
【００３６】
図４に示したパターンPT11の発行頻度の低下は、リードリクエストRDとライトリクエストWRとが逆になっても同様に発生する。
【００３７】
［第１の実施の形態］
図５は、第１の実施の形態におけるプロセッサの構成を示す図である。図５のプロセッサ１０内のメモリアクセスコントローラMACは、図１の構成に加えて、優先オペコード生成回路PR_OPCD_GENを有する。優先オペコード生成回路PR_OPCD_GENは、優先オペコードPR_OPCDを生成する。更に、図５のメモリアクセスコントローラMACは、リクエスト選択回路REQ_SELが、ビジー情報BSY_INFに基づくリクエスト選択論理に加えて、優先オペコードPR_OPCDに基づくリクエスト選択論理で、リクエストキュー内のリクエストを選択して発行する。
【００３８】
［優先オペコード生成回路PR_OPCD_GEN］
優先オペコード生成回路PR_OPCD_GENは、リクエストキューREQ_QUEにエンキューするリクエストをリクエスト情報W/R_ENQにより監視し、リクエストキュー内に存在するリードリクエストとライトリクエストのうち一方の数が所定条件を満たしたか否かを監視する。所定条件とは、例えば、リクエストキュー内に存在するリードリクエストとライトリクエストのうち一方の数が基準数を超えたか否か、または、リクエストキュー内に存在するリードリクエストとライトリクエストの数の差分が閾値を超えたか否か、または、リクエストキューに存在するリードリクエストとライトリクエストのうち第１のリクエストが上限値を超えて且つ第１のリクエストと異なる第２のリクエストの数が下限値未満になったか否か、などである。
【００３９】
更に、優先オペコード生成回路PR_OPCD_GENは、リクエスト選択回路が選択して発行する第２のメモリアクセスリクエストMA_REQ2またはコマンドバッファCMD_BUFが発行するコマンドCMDを監視し、リードまたはライトの発行頻度が基準頻度未満になったか否か、または、発行間隔が基準間隔以上になったか否か、を監視する。
【００４０】
そして、優先オペコード生成回路PR_OPCD_GENは、上記の監視に基づいて図４に示したパターンPT11のような状況を検出すると、発行が抑制されているライトリクエストWRを優先する優先オペコードPR_OPCDを出力する。そして、リクエスト選択回路REQ_SELは、優先オペコードPR_OPCDに設定されたライトリクエストWRとは異なるリードリクエストRDの発行を禁止する。その結果、リクエスト選択回路は、ペナルティ期間を含む優先期間の間、優先オペコード（WR）以外のリクエスト（RD）の発行を抑止し、ペナルティ期間経過後に、ペナルティにより発行抑止されていた優先オペコードのリクエスト（WR）のうち最もエンキューが古いリクエスト（WR）を発行する。これにより、リードとライトの一方のリクエストが継続して発行されることで他方のリクエストが継続して発行を抑止されることが回避され、リクエスト発行のスループットの低下を抑制できる。
【００４１】
図４のパターンPT11とは異なり、優先オペコードPR_OPCDにリードリクエスト（RD）が設定されている場合、リクエスト選択回路REQ_SELは、ペナルティ期間を含む優先期間の間ライトリクエスト（WR）の発行を禁止する。その結果、リクエスト選択回路は、ペナルティ期間経過後に優先オペコードのリードリクエスト（RD）のうち最もエンキューが古いリクエスト（RD）を発行する。
【００４２】
［ビジー情報生成回路BSY_INF_GEN］
図６は、ビジー情報生成回路BSY_INF_GENの構成を示す図である。ビジー情報生成回路は、図５に示したとおり、リクエスト選択回路REQ_SELが選択して発行する第２のメモリアクセスリクエストMA_REQ2を入力する。そして、ビジー情報生成回路は、第２のメモリアクセスリクエストMA_REQ2に含まれるリクエストタイプ、リードまたはライト、を判定するリクエストタイプ判定部RQ_TYP_ANLYと、アドレスを抽出するアドレス抽出部ADD_ANLYと、リクエストタイプとアドレスからビジー情報BSY_INFを生成するビジー情報信号生成部BSY_GENとを有する。
【００４３】
ビジー情報信号生成部BSY_GENは、例えば次のビジー情報BSY_INFを生成する。
（Ａ１）先行リクエストオペコードPREV_OPCDに対応する４つのビジー信号T_s_w, T_s_r, T_d_w, T_d_r
（Ａ２）先行リクエストの先行アドレスPREV_ADD
（Ａ３）先行リクエストのオペコードPREV_OPCD
【００４４】
上記のビジー信号とビジー情報信号生成部については図１２で詳述する。
【００４５】
［優先オペコード生成回路PR_OPCD_GENの具体例］
図７は、優先オペコード生成回路PR_OPCD_GENの具体例を示す図である。優先オペコード生成回路PR_OPCD_GENは、優先的に発行される、つまり発行を禁止されない、優先オペコードPR_OPCDを生成する。ここでのオペコードOPCDはリードとライトのいずれかである。
【００４６】
優先オペコード生成回路PR_OPCD_GENは、リクエストキューREQ_QUEが出力するライトのエンキューWR_ENQ、リードエンキューRD_ENQと、リクエスト選択回路が発行する第２メモリアクセスリクエストMA_REQ2とに基づいて、リクエストキューREQ_QUE内のリードリクエストの数をカウントするリードリクエストカウンタRD_RQ_CNTRと、ライトリクエストの数をカウントするライトリクエストカウンタWR_RQ_CNTRを有する。
【００４７】
さらに、優先オペコード生成回路PR_OPCD_GENは、リクエスト選択回路が発行するリクエストMA_REQ2のリクエストタイプを判別するリクエスト種別決定部REQ_TYP_DTRと、ライトリクエストの発行間隔をカウントするライトリクエスト発行間隔カウンタWR_ISS_INT_CNTRと、リードリクエストの発行間隔をカウントするリードリクエスト発行間隔カウンタRD_ISS_INT_CNTRとを有する。
【００４８】
そして、優先オペコード生成回路PR_OPCD_GENは、上記のカウント値に基づいて、優先オペコードPR_OPCDを決定する優先オペコード決定部PR_OPCD_DETを有する。
【００４９】
図８は、リード、ライトリクエストカウンタRD_RQ_CNTR、WR_RQ_CNTRの動作論理を示すフローチャート図である。まず、リード、ライトリクエストカウンタは、ライト・リードリクエストの閾値を決定する（S1）。この閾値は、リクエストキュー内のライトリクエストの上限閾値と下限閾値、及びリクエストキュー内のリードリクエストの上限閾値と下限閾値である。これらの閾値は、後述する優先オペコード決定部PR_OPCD_DETで参照される。
【００５０】
次に、リード、ライトリクエストカウンタは、リクエストエンキューが発生すると（S2のYES）、ライトリクエストであれば（S3のYES）、ライトリクエスト数カウンタをカウントアップし（S5）、リードリクエストであれば（S3のNO）、リードリクエストカウンタをカウントアップする（S4）。一方、リード、ライトリクエストカウンタは、リクエスト選択回路がリクエストを発行すると（S6のYES）、ライトリクエストであれば（S7のYES）、ライトリクエスト数カウンタをカウントダウンし（S8）、リードリクエストであれば（S7のNO）、リードリクエストカウンタをカウントダウンする（S9）。
【００５１】
これにより、リード、ライトリクエストカウンタは、リクエストキュー内に存在するリードリクエストの数とライトリクエストの数を出力する。
【００５２】
図９は、ライトリクエスト発行間隔カウンタWR_ISS_INT_CNTRとリードリクエスト発行間隔カウンタRD_ISS_INT_CNTRの動作論理を示すフローチャート図である。まず、ライト、リードリクエスト発行間隔カウンタは、リクエスト発行間隔閾値を決定する（S11）。この閾値は、後述する優先オペコード決定部PR_OPCD_DETで参照される。
【００５３】
次に、ライト、リードリクエスト発行間隔カウンタは、カウンタにクロックが印加されるたびに（S12のYES）、以下の処理を実行する。即ち、ライト、リードリクエスト発行間隔カウンタは、リクエストが発行されると（S13のYES）、ライトリクエストかリードリクエストかに応じて（S14）、対応するライト、リードリクエスト発行カウンタをリセットしてカウント値を０にする（S15,S16）。
【００５４】
そして、ライト、リードリクエスト発行間隔カウンタは、次にリクエストの発行があるまで、クロックが印加のたびに（S12のYES）、ライト、リードリクエスト発行間隔カウンタをカウントアップする（S17,S18）。次にリクエストが発行されるまでカウントアップが繰り返されるので、次にリクエストが発行されるまでの間、ライト、リードリクエスト発行間隔カウンタは、ライトリクエスト及びリードリクエストの発行間隔に対応するクロック数を保持する。
【００５５】
図１０は、優先オペコード決定部PR_OPCD_DETの動作論理を示すフローチャート図である。優先オペコード決定部PR_OPCD_DETは、リクエストキュー内のライトリクエスト数がライトリクエスト数上限閾値を超えることと（S21のYES）、リクエストキュー内のリードリクエスト数がリードリクエスト数下限閾値以下であること（S22のYES）、そして、リードリクエストのリクエスト選択回路による発行間隔がリードリクエスト発行間隔閾値以上であること（S23のYES）が満たされると、ライトリクエストを優先オペコードに設定する（S24）。優先オペコードが設定されると優先フラグPR_FLAGがＨレベルに設定される。
【００５６】
逆に、優先オペコード決定部PR_OPCD_DETは、リクエストキュー内のリードリクエスト数がリードリクエスト数上限閾値を超えることと（S25のYES）、リクエストキュー内のライトリクエスト数がライトリクエスト数下限値以下であること（S26のYES）、そして、ライトリクエスト発行間隔がライトリクエスト発行間隔閾値以上であること（S27のYES）が満たされると、リードリクエストを優先オペコードに設定する（S28）。この場合も、優先オペコードが設定されると優先フラグPR_FLAGがＨレベルに設定される。
【００５７】
さらに、上記のＳ２１，Ｓ２２，Ｓ２３のいずれかがNOに判定されると、優先オペコードの設定が解除され、優先フラグPR_FLAGがＬレベルに変更される。同様に、上記のＳ２５，Ｓ２６，Ｓ２７のいずれかがNOに判定されると、優先オペコードの設定が解除され、優先フラグPR_FLGがLレベルに変更される。つまり、優先フラグPR_FLAGがＨレベルの間、優先オペコードに設定されたリードまたはライトリクエストは、リクエスト選択回路により、ペナルティ期間を除いて、他のオペコードに優先して選択候補に選ばれ、優先オペコード以外の他のオペコードの選択はペナルティ期間も含めて抑止される。そして、リクエスト選択回路は、選択候補の内、最もエンキューが古いリクエストを選択し、コマンド発行部に発行する。
【００５８】
上記の条件の意味を説明すると以下のとおりである。仮に、図４のパターンPT11に示したように、先行してリードリクエストが発行された場合、ペナルティによりその発行禁止期間が経過するまで後続のライトリクエストを発行できない。そのため、発行禁止期間直前までに次のリードリクエストがリクエストキューにエンキューされると、リクエスト選択回路はエンキューされたリードリクエストを選択し発行する。その結果、リードリクエストの発行が繰り返され、多くのライトリクエストがリクエストキューに滞留する。この場合、リードリクエストの発行間隔が長いと、リードリクエストの発行頻度が低く且つその間にライトリクエストが発行されず、リクエスト発行頻度が低下し、リクエストの発行スループットが低下する。
【００５９】
この状況（第１の状態）を検出するために、優先オペコード決定部PR_OPCD_DETは、上記S21、S22、S23の条件が満たされるか否かを判定する。ただし、S23のリードリクエストの発行間隔が長い場合は、ペナルティの制約を考慮すると、同時にS22のリードリクエスト数が下限閾値以下である蓋然性が高い。したがって、S22の条件を省略してもよい。
【００６０】
上記の条件の意味の説明において、リードとライトを入れ替えれば、S25,S26,S27の条件の意味が説明できる。よって、S25,S26,S27の条件の説明は省略する。
【００６１】
優先オペコード決定部は、S21,S22,S23の条件が満たされると、図４のパターンPT11の状況を示しているので、優先的に発行される優先オペコードにライトリクエストを設定する。これにより、リクエストキュー内のリードリクエストは、優先オペコードのライトリクエストと異なるため発行候補から除かれる。同時に、ペナルティの発行禁止期間ではライトリクエストの発行も禁止されているので、結局、発行禁止期間ではリードリクエストとライトリクエストの両方の発行が禁止される。発行禁止期間経過後、リクエストキュー内のライトリクエストが優先オペコードとしてリードリクエストに優先して連続して発行される。これによりリクエストキュー内のライトリクエスト数が減少し、上記の条件（例えばS21）は解消され、優先オペコードの選択状態は解除される。
【００６２】
逆に、S25,S26,S27の条件が満たされると、優先オペコードにリードリクエストが選択される。これにより、リクエストキュー内のライトリクエストは、発行候補から除外される。そのため、上記と同様にして、ペナルティの発行禁止期間でライトリクエストとリードリクエストの両方の発行が禁止され、発行期間経過後、リクエストキュー内のリードリクエストがライトリクエストに優先して選択され発行される。
【００６３】
［リクエスト選択回路］
図１１は、優先オペコードPR_OPCDにより制御されるリクエスト選択回路の例を示す図である。リクエストキューの各エントリQUE_EN#には、エンキューしたリクエストのバリッドビットVALID_E#とオペコードOPCD_E#とアドレスADD_E#（#=0, 1 - n）が記憶される。リクエスト選択回路REQ_SELは、各エントリのリクエストのオペコードOPCD_E#とアドレスADD_E#について選択の可否を判定するエントリ判定部20_0,20_1〜20_nと、エントリ判定部で選択候補となったリクエストの内最先（最古のエンキュー）のエントリを選択する最先エントリ選択回路２１とを有する。
【００６４】
各エントリ判定部20_0,20_1〜20_nのうち、#=nのエントリ判定部20_nは、優先フラグが有効（PR_FLAG=H）の場合にエントリnのリクエストのオペコードOPCD_Enが優先オペコードPR_OPCDと一致するか否かの判定結果を出力し、優先フラグが無効（PR_FLAG=L）の場合に非選択（Lレベル）を出力する一致判定回路３０を有する。
【００６５】
また、エントリ判定部20_nは、エントリnのリクエストのアドレスADD_Enが先行リクエストのアドレスPREV_ADDと一致する場合に同一アドレスのビジー信号T_sを出力し、不一致の場合に非選択（Lレベル）を出力する第１のタイマー信号生成回路３１を有する。
【００６６】
同様に、エントリ判定部20_nは、エントリnのリクエストのアドレスADD_Enが先行リクエストのアドレスPREV_ADDと異なる場合に異なるアドレスのビジー信号T_dを出力し、異ならない（同一）場合に非選択（Lレベル）を出力する第２のビジー信号生成回路３２を有する。
【００６７】
ビジー信号T_s、T_dは、タイマー信号選択回路３５により、図２に示したペナルティに対応する８種類のタイマー信号から、先行リクエストのオペコードPREV_OPCDと、エントリ内のオペコードOPCD_E#とに基づいて選択される。具体的には、図１２，１３を参照。
【００６８】
そして、エントリ判定部20_nは、第１及び第２のタイマー信号生成回路３１、３２の出力の論理和を出力する論理和ゲート３３を有する。
【００６９】
さらに、エントリ判定部20_nは、エントリのバリッド信号VALID_Enと、優先オペコード一致判定回路３０の出力と、論理和ゲート３３の出力とを入力し、優先オペコード一致判定回路３０と論理和ゲート３３の出力が共にＨレベル（選択）の場合に、バリッド信号VALID_Enを出力する論理積ゲート３４を有する。そして、論理積ゲート３４を通過したバリッド信号VALID_Enに基づいて、エントリのオペコードOPCD_EnとアドレスADD_Enが、論理積ゲート３６，３７を通過し、最先有効エントリ選択回路２１に入力される。
【００７０】
エントリ判定部20_0,20_1の構成も、エントリ判定部20_nと同じである。
【００７１】
最先有効エントリ選択回路２１は、各エントリ判定部で選択候補に選ばれたリクエストのうち、エンキューが最も古いリクエストを選択し、コマンド発行部に出力する（発行する）。
【００７２】
次に、タイマー信号選択回路３５について説明する。ビジー情報生成回路BSY_INF_GENの構成を説明した後、タイマー信号選択回路を説明する。そして、リクエスト選択回路のエントリ判定部20_#を詳述する。
【００７３】
図１２は、ビジー情報生成回路BSY_INF_GEN内のビジー情報信号生成部BSY_GENの構成例を示す図である。ビジー情報信号生成部BSY_GENは、８つのタイマーTMRと、４つのセレクタ５１−５４を有する。タイマーTMRは、リクエスト（またはコマンド）発行時に生成されるリクエスト発行信号ISSに応答して８種類の発行禁止期間の間Lレベルになる８種類のビジー信号T_s_w_w, T_s_w_r, T_s_r_w, T_s_r_r, T_d_w_w, T_d_w_r, T_d_r_w, T_d_r_rを生成する。そして、セレクタ５１，５２，５３，５４が、先行リクエストの種類を示す先行オペコードPREV_OPCDに基づいて、８種類のビジー信号のうち、先行リクエストがリードかライトかに基づいて選択された４種類のビジー信号T_s_w, T_s_r, T_d_w, T_d_rを生成する。具体的には、一致判定回路５０は先行オペコードPRV_OPCDがライトWRと等しいときHレベルを出力し、各セレクタ５１−５４が上側の入力を選択し、ライトWRと等しくないときLレベルを出力し、各セレクタ５１−５４が下側の入力を選択する。
【００７４】
図１３は、リクエスト選択回路のエントリ判定部20_#とビジー信号選択回路３５を示す図である。エントリ判定部20_#は、図１１に示したとおりである。そして、エントリ判定部20_#内に設けられるビジー信号選択回路３５は、エントリに格納されているリクエストの種類（リードまたはライトのオペコード）OPCD_EnがライトWRと一致するか否かを判定する一致判定回路４０と、一致判定回路の出力に基づいてWR用タイマーのビジー信号かRD用タイマーのビジー信号のいずれかを選択するセレクタ４１，４２を有する。セレクタ４１，４２は、ビジー情報生成回路が生成した４種類のビジー信号T_s_w, T_s_r, T_d_w, T_d_rのうち、一致判定回路４０の出力（OPCD_En=WRでHレベル、OPCD_En≠WRでLレベル）に基づいて、ライトWR用またはリードRD用のいずれかの同一アドレス用のビジー信号T_s及び異なるアドレス用のビジー信号T_dを選択する。
【００７５】
図１４は、エントリ判定部20_#の各論理回路の論理値表を示す図である。また、図１５、図１６は、エントリ判定部20_#の動作を示すタイミングチャートを示す図である。
【００７６】
図１４に示されるとおり、優先オペコード一致判定回路３０は、優先フラグ信号PR_FLAGがHレベル（PR_FLAG=H）の場合、エントリのオペコードOPCD_Enが優先オペコードPR_OPCDと一致すれば選択（Hレベル）、不一致なら非選択（Lレベル）を出力する。また、優先オペコード一致判定回路３０は、優先フラグ信号がLレベル（PR_FLAG=L）の場合、優先オペコードの制約が解除されているので、選択（Hレベル）を出力する。
【００７７】
第１及び第２のタイマー信号生成回路３１、３２と論理和ゲート３３については、第１のタイマー信号生成回路３１は、エントリのアドレスADD_Enが先行リクエストのアドレスPREV_ADDと一致する場合ビジー信号T_sを出力し、不一致の場合強制的に非選択（Lレベル）を出力する。逆に、第２のタイマー信号生成回路３２は、エントリのアドレスADD_Enが先行リクエストのアドレスPREV_ADDと不一致の場合ビジー信号T_dを出力し、一致の場合強制的に非選択（Lレベル）を出力する。
【００７８】
図１５には、エントリのアドレスADD_Enと先行リクエストのアドレスPREV_ADDとが一致する場合（アドレスが共にＡ）と、不一致の場合（アドレスがＡ，Ｂ）の３１，３２，３３の出力の信号波形が示される。まず、ビジー信号T_s、T_dは、図１２の８つのタイマー回路TMRが、リクエストまたはコマンドの発行信号ISSに応答して、HレベルからLレベルにされている。そして、先行オペコードとエントリのリクエストのオペコードとの組み合わせに基づいて、２つのビジー信号T_s,T_dに絞り込まれているので、ビジー信号T_sとT_dのLレベルの期間は、先行オペコードとエントリのオペコードとの組み合わせに対応する期間になっている。
【００７９】
図１５に示されるとおり、アドレスがADD_En=A, PREV_ADD=Aで一致する場合は、論理和ゲート３３の出力はビジー信号T_sとなる。逆に、アドレスがADD_En=A, PREV_ADD=Bで異なる場合は、論理和ゲート３３の出力はビジー信号T_dとなる。したがって、第１、第２のタイマー信号生成回路３１、３２と論理和ゲート３３は、エントリのアドレスADD_Enが先行アドレスPREV_ADDと一致する場合はビジー信号T_dを選択し、不一致の場合はビジー信号T_sを選択する。
【００８０】
図１３の一致判定回路３１、不一致判定回路３２及び論理和ゲート３３は、図１３のビジー信号選択回路３５の回路図の左側に示したとおり、先行リクエストのアドレスPREV_ADDとアドレスADD_Enとの一致判定回路３１と、その一致判定結果に応じてT_s,T_dのいずれかを選択するセレクタ４３で構成されてもよい。セレクタ４３の出力は、論理和ゲート３３の出力と一致する。
【００８１】
図１４には、タイマー信号選択回路３５内の一致判定回路４０とセレクタ４１，４２の論理値表が示される。さらに、図１４には、オペコード一致判定回路３０と論理和ゲート３３と論理積ゲート３４の論理値表が示される。
【００８２】
図１６には、オペコード一致判定回路３０と論理和ゲート３３と論理積ゲート３４の動作を示す信号波形が示される。図１６では、優先オペコードPR_OPCDがリードRDに設定されている例である。また、図１６では、先行オペコードPREV_OPCDとエントリのオペコードOPCD_Enとが不一致のエントリEn(PREV_OPCD=RD, OPCD_En=WR)と、一致の場合(PREV_OPCD=RD, OPCD_En+1=RD)のエントリEn+1の信号波形が示される。但し、ビジー信号T_s,T_dはアドレスが一致、不一致の場合で異なるが、図１６ではアドレスの一致、不一致を区別せずビジー信号T_s/T_d_En, T_s/T_d_En+1と示している。
【００８３】
エントリEnのエントリ判定部20_nでは、先行オペコードPREV_OPCD=RD、エントリのオペコードOPCD_En=WRと異なるので、発行禁止期間が長いビジー信号T_S/d_Enが選択されている。そして、エントリのオペコードOPCD_Enと優先オペコードPR_OPCDとが一致しているので（OPCD_En=PR_OPCD=WR）、一致判定回路３０の出力が選択（Hレベル）であり、ビジー信号T_s/d_Enが発行禁止期間後にHレベルになると、論理積３４が選択（Hレベル）を出力する。
【００８４】
上記の動作により、エントリに滞留していたライトリクエストWRは、優先オペコードにライトWRが設定されたことで、ペナルティによる発行禁止期間後に選択候補にされる。
【００８５】
一方、エントリEn+1のエントリ判定部20_n+1では、先行オペコードPREV_OPCD=RD、エントリのオペコードOPCD_En+1=RDと一致するので、発行禁止期間が短いビジー信号T_S/d_En+1が選択されている。そして、エントリのオペコードOPCD_Enと優先オペコードPR_OPCDとが不一致であるので（OPCD_En+1≠PR_OPCD）、一致判定回路３０の出力が非選択（Lレベル）であり、ビジー信号T_s/d_Enが発行禁止期間後にHレベルになった後も、論理積３４が非選択（Lレベル）を出力する。
【００８６】
上記の動作により、エントリ内のリードリクエストは、優先オペコードのライトWRと不一致であるため、ビジー信号がLレベルの間もHレベルになった後も非選択状態にされる。
【００８７】
［第２の実施の形態］
図１７は、第２の実施の形態におけるプロセッサの構成を示す図である。図１７のプロセッサは、図５のプロセッサ内の優先オペコード生成回路PR_OPCD_GENに代えて、先頭エントリ優先信号を生成する先頭エントリタイマ回路E0_TIMERを有する。
【００８８】
今、図３と同様に、図１７のリクエストキュー内には先頭エントリから所定数のエントリまでライトリクエストWRがセットされ、リードリクエストRDは低頻度でエンキューされては発行され続けていると仮定する。
【００８９】
先頭エントリタイマ回路E0_TIMERは、リクエストキューREQ_QUEからの先頭のエントリにリクエストがエントリされたときクロックをカウント開始するタイマーを有し、タイマーが所定の閾値に達して発火すると、先頭エントリを優先的に発行させるための先頭エントリ優先信号E0_PR（＝Hレベル）を生成する。先頭エントリ優先信号E0_PRは、先頭エントリのリクエストがリクエスト選択回路により発行されるとリセットされてLレベルになる。また、タイマーは、先頭エントリにリクエストがエントリされるとリセットされてカウントを開始する。
【００９０】
先頭エントリ優先信号E0_PRは、リクエストキューの先頭エントリ以外の全エントリのエントリ判定回路20_#に供給され、先頭エントリ優先信号E0_PRがHレベルに設定されると、先頭エントリ以外の全エントリのリクエストの発行が抑止される。その結果、リクエスト選択回路は、先頭エントリのリクエストを優先して発行する。例えば、図３や図４のパターンPT11のような状況になると、先頭エントリE0のライトリクエストWRが長時間発行されずにリクエストキュー内に滞留する。そのような場合、先頭エントリタイマ回路E0_TIMERが、先頭エントリE0内のライトリクエストWRが長時間滞留していることを検出して、先頭エントリ優先信号E0_PRをHレベルにする。その結果、先頭エントリのライトリクエストWRが発行され、その後、リクエストキュー内に長時間滞留していた複数のライトリクエストが連続して発行され、リクエスト発行スループットが悪化した状態が解消される。
【００９１】
図１８は、先頭エントリタイマ回路E0_TIMERの動作を示すフローチャートを示す図である。まず、先頭エントリタイマ回路は、リクエストキューREQ_QUE内の先頭エントリQUE_ENにリクエストがセットされたことを、先頭エントリのバリッド信号VALID_E0により検出すると（S31のYES）、タイマーを初期化し（S32）、その後タイマーはクロックをカウントする。そして、先頭エントリタイマ回路は、タイマーのカウント値が発火値に達するまで（S33のNO）、タイマーがカウントアップする（S35）。
【００９２】
一方、タイマーのカウント値が発火値に達すると（S33のYES）、先頭エントリ優先信号E0_PRをHレベル（E0_PR=1）にする（S34）。その後、先頭エントリタイマ回路は、先頭エントリが発行されたことをリクエスト選択回路REQ_SELが発行するメモリアクセスリクエストMA_REQ2により検出すると（S36のYES）、先頭エントリ優先信号E0_PRをリセットしてLレベル（E0_PR=0）にする（S37）。さらに、新たに先頭エントリにリクエストがセットされると（S31のYES）、タイマーを初期化する(S32)。
【００９３】
図１９は、第２の実施の形態における先頭エントリ優先信号により制御されるリクエスト選択回路の例を示す図である。図１１と異なる構成は、優先オペコードと一致するか否かを判定する優先オペコード一致判定回路３０の代わりに、先頭エントリ優先信号E0_PRをインバータ３８で反転した先頭エントリビジー信号BSY2を論理積ゲート３４に入力する構成である。それ以外の構成は、図１１と同じである。
【００９４】
リクエストキューの先頭エントリにリクエストがセットされてから発火値に対応する閾値時間経過すると、先頭エントリタイマ回路が先頭エントリ優先信号E0_PRをHレベル（E0_PR=H）にする。その結果、先頭エントリビジー信号BSY2（Lレベル）が先頭エントリ以外の全エントリの論理積ゲート３４に入力され、強制的に先頭エントリ以外の全エントリのリクエストの発行が抑止される。それにより、長時間滞留していた先頭エントリのリクエストが発行される。先頭エントリのリクエストが発行されると、その後続のエントリの同じ種別のリクエストも、ペナルティによる発行禁止期間後に、異なる種別のリクエストよりも先に選択され発行され、リクエスト発行のスループットが低下した状況が解消される。
【００９５】
以上説明したとおり、本実施の形態によれば、メモリアクセスコントローラは、先行リクエストに対するペナルティの発行禁止期間中に発行を抑制されたリクエストがリクエストキュー内に滞留して、リクエスト発行のスループットが低下する状況を解消することができる。
【００９６】
以上の実施の形態をまとめると，次の付記のとおりである。
【００９７】
（付記１）
演算処理部と、
前記演算処理部からのメモリアクセスに応答して、キャッシュメモリにアクセス先のデータが格納されていない場合、前記メモリアクセスを要求するリクエストを発行するキャッシュ制御部と、
前記リクエストをエンキューするリクエストキューと、前記リクエストキュー内にエンキューされたリクエストの中からリクエストを選択して発行するリクエスト選択部と、前記リクエスト選択部が選択して発行したリクエストをメモリに発行するリクエスト発行部とを有するメモリアクセスコントローラとを有し、
前記リクエスト選択部は、
前記リクエストキュー内の前記リクエストの発行後、前記発行された先行リクエストに対応する発行禁止期間、前記発行禁止期間に対応する後続のリクエストの発行を禁止し、
前記リクエストキュー内のリクエストが第１の状態の場合、前記リクエストキュー内のリードリクエストとライトリクエストのうち第１のリクエストに優先して前記第１のリクエストと異なる第２のリクエストを発行する、演算処理装置。
【００９８】
（付記２）
前記第１の状態は、前記第１のリクエストのメモリへの発行頻度が基準頻度未満であり、前記リクエストキュー内の前記第２のリクエストの数が基準数以上である状態である、付記１に記載の演算処理装置。
【００９９】
（付記３）
前記メモリアクセスコントローラは、更に、
前記リクエスト選択部が選択して発行する前記リクエストを監視し、前記発行禁止期間、前記リクエストの選択を禁止するビジー信号を生成するビジー信号生成部と、
前記リクエストキューにエンキューされる前記リクエストと、前記リクエスト選択部が選択して発行する前記リクエストとを監視し、前記第１の状態の場合、前記第１のリクエストに優先して発行する優先オペコードを前記第２のリクエストに設定する優先オペコード生成部とを有し、
前記リクエスト選択部は、前記ビジー信号に基づいて、前記発行禁止期間中前記リクエストキュー内のリクエストの発行を禁止し、さらに、前記リクエストキュー内の前記優先オペコードと異なるオペコードのリクエストの発行を禁止する、付記２に記載の演算処理装置。
【０１００】
（付記４）
前記優先オペコード生成部は、前記第１の状態が解消された場合、前記優先オペコードの設定を解除する、付記３に記載の演算処理装置。
【０１０１】
（付記５）
前記第１の状態は、前記リクエストキュー内の前記第１のリクエストの数が下限値より少なく、前記第２のリクエストの数が上限値より多く、前記第２のリクエストの発行間隔が発行間隔閾値以上である場合である、付記２に記載の演算処理装置。
【０１０２】
（付記６）
前記第１の状態は、前記リクエストキューの先頭エントリにリクエストがセットされてから所定時間を超えて前記先頭エントリに滞留している状態である、付記１に記載の演算処理装置。
【０１０３】
（付記７）
前記メモリアクセスコントローラは、更に、
前記リクエスト選択部が選択する前記リクエストを監視し、前記発行禁止期間、前記リクエストの発行を禁止するビジー信号を生成するビジー信号生成部と、
前記リクエストキューの先頭エントリにセットされた前記リクエストと、前記リクエスト選択部が選択して発行する前記リクエストとを監視し、前記第１の状態の場合、前記先頭エントリ以外の全エントリのリクエストの発行を禁止する先頭エントリ優先信号を生成する先頭エントリタイマ部とを有し、
前記リクエスト選択部は、前記ビジー信号に基づいて前記発行禁止期間中前記リクエストキュー内のリクエストの発行を禁止し、前記先頭エントリ優先信号に基づいて、前記リクエストキュー内の前記先頭エントリ以外の全エントリのリクエストの発行を禁止する、付記６に記載の演算処理装置。
【０１０４】
（付記８）
前記先頭エントリタイマ部は、前記先頭エントリのリクエストが発行されると、前記先頭エントリ優先信号をリセットする、付記７に記載の演算処理装置。
【０１０５】
（付記９）
前記先頭エントリタイマ部は、前記先頭エントリにリクエストがセットされると、リセットされるタイマーを有し、前記タイマーが前記所定時間を超えた場合、前記先頭エントリ優先信号を生成する、付記８に記載の演算処理装置。
【０１０６】
（付記１０）
前記リクエスト選択部は、前記リクエストキュー内に蓄積されたリクエストのうち、前記発行禁止期間中は、前記発行禁止期間に対応する後続のリクエストの発行を禁止すると共に前記第１のリクエストに優先して前記第２のリクエストを発行し、前記発行禁止期間経過後は、前記発行禁止期間を過ぎたリクエストで最も古くエンキューされた前記第２のリクエストを前記第１のリクエストに優先して発行する、付記１に記載の演算処理装置。
【０１０７】
(付記１１)
演算処理部からのメモリアクセスがキャッシュミスの場合、キャッシュ制御部から前記メモリアクセスを要求するリクエストを発行されるメモリアクセスコントローラであって、
前記リクエストをエンキューするリクエストキューと、
前記リクエストキュー内にエンキューされたリクエストの中からリクエストを選択して発行するリクエスト選択部と、
前記リクエスト選択部が選択して発行したリクエストをメモリに発行するリクエスト発行部とを有するメモリアクセスコントローラとを有し、
前記リクエスト選択部は、
前記リクエストキュー内の前記リクエストの発行後、前記発行された先行リクエストに対応する発行禁止期間、前記発行禁止期間に対応する後続のリクエストの発行を禁止し、
前記リクエストキュー内のリクエストが第１の状態の場合、前記リクエストキュー内のリードリクエストとライトリクエストのうち第１のリクエストに優先して前記第１のリクエストと異なる第２のリクエストを発行する、メモリアクセスコントローラ。
【０１０８】
（付記１２）
演算処理部と、
前記演算処理部からのメモリアクセスに応答して、キャッシュメモリにアクセス先のデータが格納されていない場合、前記メモリアクセスを要求するリクエストを発行するキャッシュ制御部と、
前記リクエストをエンキューするリクエストキューと、前記リクエストキュー内にエンキューされたリクエストの中からリクエストを選択して発行するリクエスト選択部と、前記リクエスト選択部が選択して発行したリクエストをメモリに発行するリクエスト発行部とを有するメモリアクセスコントローラとを有する演算処理装置の制御方法であって、
前記リクエスト選択部が、
前記リクエストキュー内の前記リクエストの発行後、前記発行された先行リクエストに対応する発行禁止期間、前記発行禁止期間に対応する後続のリクエストの発行を禁止し、
前記リクエストキュー内のリクエストが第１の状態の場合、前記リクエストキュー内のリードリクエストとライトリクエストのうち第１のリクエストに優先して前記第１のリクエストと異なる第２のリクエストを発行する、演算処理装置の制御方法。
【符号の説明】
【０１０９】
tRR, tWW, tWR, tRW：発行禁止期間、リクエスト発行ペナルティ
tRR_d, tWW_d, tWR_d, tRW_d：発行禁止期間、異なるアドレスのペナルティ
tRR_s, tWW_s, tWR_s, tRW_s：発行禁止期間、同一アドレスのペナルティ
CORE：コア、演算処理部
CACHE_CN：キャッシュ制御回路
CACHE_MEM：キャッシュメモリ
MAC：メモリアクセスコントローラ
REQ_QUE：リクエストキュー
QUE_EN：エントリ
REQ_SEL：リクエスト選択回路
MA_REQ1：第１のメモリアクセスリクエスト
MA_REQ2：第２のメモリアクセスリクエスト
CMD_ISSUE：コマンド発行部
CMD_BUF：コマンドバッファ
BSY_INF_GEN：ビジー情報生成部
BSY_INF：ビジー情報
PR_OPCD_GEN：優先オペコード生成部
PR_OPCD：優先オペコード
PREV_OPCD：先行オペコード
BREV_ADD：先行リクエストのアドレス
T_s_w_w, T_s_w_r, T_s_r_w, T_s_r_r, T_d_w_w, T_d_w_r, T_d_r_w, T_d_r_r：ビジー信号
T_s：同一アドレスのビジー信号
T_d：異なるアドレスのビジー信号
PR_FLAG：優先フラグ
【図１】
2019109726.tif 000003
【図２】
2019109726.tif 000004
【図３】
2019109726.tif 000005
【図４】
2019109726.tif 000006
【図５】
2019109726.tif 000007
【図６】
2019109726.tif 000008
【図７】
2019109726.tif 000009
【図８】
2019109726.tif 000010
【図９】
2019109726.tif 000011
【図１０】
2019109726.tif 000012
【図１１】
2019109726.tif 000013
【図１２】
2019109726.tif 000014
【図１３】
2019109726.tif 000015
【図１４】
2019109726.tif 000016
【図１５】
2019109726.tif 000017
【図１６】
2019109726.tif 000018
【図１７】
2019109726.tif 000019
【図１８】
2019109726.tif 000020
【図１９】
2019109726.tif 000021