(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024160854
(43)【公開日】2024-11-15
(54)【発明の名称】メモリコントローラ、メモリコントローラの制御方法およびプログラム
(51)【国際特許分類】
G06F 12/06 20060101AFI20241108BHJP
【FI】
G06F12/06 550A
【審査請求】有
【請求項の数】13
【出願形態】OL
(21)【出願番号】P 2023076316
(22)【出願日】2023-05-02
(71)【出願人】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】110003281
【氏名又は名称】弁理士法人大塚国際特許事務所
(72)【発明者】
【氏名】落合 渉
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CD02
5B160CD04
5B160CD13
(57)【要約】
【課題】メモリのアクセス効率を向上させる技術を提供する。
【解決手段】DRAMを制御するメモリコントローラであって、前記メモリコントローラが受信した優先度及びアクセスタイプの情報を含むリクエストを格納する第一の格納部と、前記第一の格納部に格納されているリクエストの中からリクエストを選択する第一の制御部と、前記第一の制御部により選択されたリクエストを格納する第二の格納部と、前記第二の格納部に格納されているリクエストを並び替えてDRAMコマンドを生成し、前記DRAMへ前記DRAMコマンドを発行する第二の制御部と、を備え、前記第二の制御部は、何れのアクセスタイプのリクエストを優先して前記DRAMに発行するかを示す優先アクセスタイプを生成し、前記第一の制御部は、前記第一の格納部に格納されているリクエストの優先度及びアクセスタイプの情報と、前記優先アクセスタイプとに基づいて、前記リクエストを選択する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
ダイナミック・ランダム・アクセス・メモリ(DRAM)を制御するメモリコントローラであって、
前記メモリコントローラが受信した優先度及びアクセスタイプの情報を含むリクエストを格納する第一の格納部と、
前記第一の格納部に格納されているリクエストの中からリクエストを選択する第一の制御部と、
前記第一の制御部により選択されたリクエストを格納する第二の格納部と、
前記第二の格納部に格納されているリクエストを並び替えてDRAMコマンドを生成し、前記DRAMへ前記DRAMコマンドを発行する第二の制御部と、を備え、
前記第二の制御部は、何れのアクセスタイプのリクエストを優先して前記DRAMに発行するかを示す優先アクセスタイプを生成し、
前記第一の制御部は、前記第一の格納部に格納されているリクエストの優先度及びアクセスタイプの情報と、前記優先アクセスタイプとに基づいて、前記リクエストを選択することを特徴とするメモリコントローラ。
【請求項2】
前記第一の制御部は、前記第一の格納部に格納されているリクエストのうち、前記優先度が閾値以上であるリクエスト、又は、前記優先アクセスタイプとアクセスタイプが一致するリクエストを選択することを特徴とする請求項1に記載のメモリコントローラ。
【請求項3】
前記第一の制御部は、前記優先度が前記閾値以上であるリクエストが前記第一の格納部に複数存在する場合、最も優先度が高いリクエストを選択することを特徴とする請求項2に記載のメモリコントローラ。
【請求項4】
前記第一の制御部は、前記優先度が前記閾値以上であるリクエストが前記第一の格納部に存在しない場合、前記優先アクセスタイプとアクセスタイプが一致するリクエストを選択することを特徴とする請求項2に記載のメモリコントローラ。
【請求項5】
前記第一の制御部は、前記優先アクセスタイプとアクセスタイプが一致するリクエストが複数存在する場合、最も古いリクエストを選択することを特徴とする請求項4に記載のメモリコントローラ。
【請求項6】
前記アクセスタイプは、リード又はライトを示すことを特徴とする請求項1に記載のメモリコントローラ。
【請求項7】
前記第二の制御部は、最後に前記DRAMへ発行した前記DRAMコマンドのアクセスタイプを前記優先アクセスタイプとして設定することを特徴とする請求項1に記載のメモリコントローラ。
【請求項8】
前記第二の制御部は、前記優先アクセスタイプとアクセスタイプが一致するリクエストが前記第二の格納部から無くなった場合、前記優先アクセスタイプを変更することを特徴とする請求項1に記載のメモリコントローラ。
【請求項9】
前記第一の格納部は、
前記アクセスタイプがリードであるリクエストを格納するリード格納部と、
前記アクセスタイプがライトであるリクエストを格納するライト格納部と、
を備えることを特徴とする請求項1に記載のメモリコントローラ。
【請求項10】
前記第一の制御部は、前記リード格納部に格納されているリクエストと、前記ライト格納部に格納されているリクエストとから、アウトオブオーダーでリクエストを選択することを特徴とする請求項9に記載のメモリコントローラ。
【請求項11】
前記第二の格納部は、前記優先度に関わらずリクエストを受け付け可能な第一のエントリと、前記優先度が閾値以上のリクエストを受け付け可能な第二のエントリとを含み、
前記第一の制御部は、前記第一のエントリに空きがない場合、前記優先度が前記閾値未満のリクエストを前記第二の格納部に格納しないことを特徴とする請求項10に記載のメモリコントローラ。
【請求項12】
ダイナミック・ランダム・アクセス・メモリ(DRAM)を制御するメモリコントローラの制御方法であって、
何れのアクセスタイプのリクエストを優先して前記DRAMに発行するかを示す優先アクセスタイプを生成する生成工程と、
前記メモリコントローラが受信した優先度及びアクセスタイプとの情報を含むリクエストを第一の格納部に格納し、前記第一の格納部に格納されているリクエストの中から、前記優先度及びアクセスタイプの情報と、前記優先アクセスタイプとに基づいて、リクエストを選択する第一の制御工程と、
前記第一の制御工程により選択されたリクエストを第二の格納部に格納し、前記第二の格納部に格納されているリクエストを並び替えてDRAMコマンドを生成し、前記DRAMへ前記DRAMコマンドを発行する第二の制御工程と、
を有することを特徴とするメモリコントローラの制御方法。
【請求項13】
コンピュータを、請求項1乃至11の何れか1項に記載のメモリコントローラとして機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、メモリコントローラ、メモリコントローラの制御方法およびプログラムに関する。
【背景技術】
【0002】
現在、ダイナミック・ランダム・アクセス・メモリ(Dynamic Random Access Memory、以下DRAM)は、広く使用されている。一方で、コンピュータシステムの高機能化と高性能化に伴い、DRAMに対する性能要求は高まっている。DRAMを制御するメモリコントローラには、DRAMにアクセスする性能を最大限に引き出すことが求められている。
【0003】
DRAMにアクセスする性能が低下する要因は、クローズ状態のページへアクセスするページミスと、リードとライトとの切り替わりである。ページミスが発生した場合、オープン状態のページが存在するならば、プリチャージを実行してオープン状態のページをクローズ状態にした後に、アクティブを実行して必要なページをオープンしなければならず、アクセス性能に影響を及ぼす。この性能低下を抑制することを目的に、DRAMを制御するメモリコントローラには、数多くの手法が提案されている。
【0004】
提案されている手法のうち、リオーダ手法は、DRAMアクセスの際に生じるペナルティ(以下、DRAMアクセスペナルティと言う)が最も小さくなるようにDRAMアクセスのリクエスト(以下、リクエストと言う)を並び替える。この並び替えにより、DRAMアクセスペナルティを軽減し、アクセス性能の低下を抑制する。
【0005】
特許文献1は、リクエストを記憶するリクエストバッファを持ち、メモリバンクグループに属するバンクの中でビジーではないバンクの数に基づいて、メモリリクエストを発行するバンクグループを決定し、メモリリクエストを発行する技術を開示している。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特許第6237945号公報
【特許文献2】特開2022-168545号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、リオーダ手法では、DRAMアクセスペナルティの判定とリクエストの並び替えの為に、リクエストバッファ内のリクエスト群からDRAMコマンド、例えばアクティブ、プリチャージ、リード、あるいはライト、を並行して生成する。よって、リオーダ手法を実現するリオーダ論理回路は、複雑になる。したがって、特許文献1が開示している技術では、リクエストバッファ段数が増加すると、DRAMコマンド生成論理回路の面積が指数関数的に増加するという課題が存在する。
【0008】
これに対して、特許文献2は、リクエストを並び替えるリオーダ論理回路の面積を削減可能な技術を提供している。しかし、特許文献2では、ページミスしか考慮していないため、リードとライトとの切り替わりが多く発生し、メモリのアクセス効率が低下する。
【0009】
本発明は、上記の課題に鑑みてなされたものであり、メモリのアクセス効率を向上させる技術を提供することを目的とする。
【課題を解決するための手段】
【0010】
上記の目的を達成する本発明の一態様によるメモリコントローラは、
ダイナミック・ランダム・アクセス・メモリ(DRAM)を制御するメモリコントローラであって、
前記メモリコントローラが受信した優先度及びアクセスタイプの情報を含むリクエストを格納する第一の格納部と、
前記第一の格納部に格納されているリクエストの中からリクエストを選択する第一の制御部と、
前記第一の制御部により選択されたリクエストを格納する第二の格納部と、
前記第二の格納部に格納されているリクエストを並び替えてDRAMコマンドを生成し、前記DRAMへ前記DRAMコマンドを発行する第二の制御部と、を備え、
前記第二の制御部は、何れのアクセスタイプのリクエストを優先して前記DRAMに発行するかを示す優先アクセスタイプを生成し、
前記第一の制御部は、前記第一の格納部に格納されているリクエストの優先度及びアクセスタイプの情報と、前記優先アクセスタイプとに基づいて、前記リクエストを選択することを特徴とする。
【発明の効果】
【0011】
本発明によれば、メモリのアクセス効率を向上させることができる。
【図面の簡単な説明】
【0012】
【
図1】実施形態1に係るメモリコントローラの構成図を示す図である。
【
図2】実施形態1に係る第一の格納部からリクエストを選択する手順を示す流れ図である。
【
図3】実施形態1に係る第一の格納部及び第二の格納部の状態遷移を示す図である。
【
図4】実施形態1に係る第一の格納部及び第二の格納部の状態遷移を示す図である。
【
図5】実施形態2に係るメモリコントローラの構成図を示す図である。
【
図6】実施形態3に係る第一の格納部及び第二の格納部の状態遷移を示す図である。
【
図7】実施形態3に係る第一の格納部及び第二の格納部の状態遷移を示す図である。
【発明を実施するための形態】
【0013】
以下、添付図面を参照して実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る発明を限定するものでない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
【0014】
コンピュータシステムの主記憶装置は、メモリデバイスにDRAMを使用するのが一般的である。DRAMは、他のメモリデバイスと比較して、1チップ当たりの記憶容量が大きく、また同容量で比較すると、他のメモリデバイスより安価である。したがって、DRAMは、大容量のメモリシステムを安価に構築可能である。
【0015】
DRAMの内部は、メモリ・セルを二次元に配置した構成になっている。二次元に配置したメモリ・セルの各行をページと呼ぶ。あるメモリ・セルへアクセスするには、まずページを指定し、一つのページを構成する全てのメモリ・セルの情報を内部的に読み出す。次に、列を指定することでアクセス対象のメモリ・セルを特定する。その後、特定したメモリ・セルに対してアクセスを実施する。さらに、DRAMの内部は、二次元に配置したメモリ・セルを複数有しており、各二次元に配置したメモリ・セルをバンクと言う。バンクの指定は、バンクアドレスで行う。
【0016】
内部的に読み出したページの状態をオープン状態と呼び、内部的に読み出していないページの状態をクローズ状態と呼ぶ。クローズ状態のページをオープン状態にするには、ページアドレスを指定してアクティブを実行する。反対に、オープン状態のページをクローズ状態にするには、プリチャージを実行する。既にオープン状態のページが存在し、そのページとは異なるページをオープン状態にする場合、オープン状態のページをクローズ状態にするプリチャージを実行してから、目的のページをオープン状態にするアクティブを実行する。
【0017】
<メモリコントローラコントローラの構成>
図1は、実施形態1によるメモリコントローラ1の構成例を示す図である。メモリコントローラ1は、ダイナミック・ランダム・アクセス・メモリ(DRAM)を制御する。メモリコントローラ1は、第一の制御部11、第二の制御部12、第一の格納部13、および第二の格納部14を含む。メモリコントローラ1を構成する各機能部の主たる機能と特徴を以下に挙げる。
【0018】
第一の制御部11は、受信したリクエスト101を第一の格納部13に格納する。また、第一の制御部11は、第一の格納部13に格納されている全ての第一の格納部内リクエスト104の中から条件を満たすリクエストを選択し、選択したリクエスト111を第二の制御部12に送付する。
【0019】
第二の制御部12は、受信したリクエスト111を第二の格納部14に格納する。また、第二の制御部12は、DRAMアクセスのペナルティがより小さくなるように、第二の格納部14に格納されている第二の格納部内リクエスト105を対象にリオーダを実施し、DRAMコマンド102を生成する。また、第二の制御部12は、DRAMコマンド102がRDコマンドまたはWRコマンドである場合、優先アクセスタイプ112を生成し、第一の制御部11に送付する。
【0020】
第一の格納部13は、第一の制御部11が受信したリクエスト101を格納する。第一の格納部13の全エントリは、第一の制御部11が並行して読み出すことができる。
【0021】
第二の格納部14は、第二の制御部12が受信したリクエスト111を格納する。第二の格納部14に格納されたリクエスト111のエントリ番号の大小は、リクエスト111の格納順を示す。すなわち、より新しく格納したリクエスト111は、相対的に大きいエントリ番号のエントリに格納している。第二の格納部14の全エントリは、第二の制御部12が並行して読み出すことができる。
【0022】
次に、第一の制御部11の動作を説明する。第一の制御部11は、リクエスト101を受信すると、リクエスト101を第一の格納部13に格納する。ここで、実施形態1では、リクエスト101は、アクセスタイプと優先度の情報を含む。
【0023】
上述のアクセスタイプは、リクエストの種別を示す。実施形態1では、アクセスタイプは、RDとWRの二種類とする。RDのリクエストは、DRAMからデータを読み出す動作を実施する。WRのリクエストは、DRAMにデータを書き込む動作を実施する。アクセスタイプは、上記に挙げる二種類に限定するものではなく、任意に設定してよい。
【0024】
また、優先度は、リクエストの優先度を示す。優先度を示すことが可能ならば、優先度の様式は任意でよい。
【0025】
<第一の制御部の動作>
続いて、実施形態1に係る第一の制御部11が、第一の格納部13に格納されている第一の格納部内リクエスト104から条件を満たすリクエストを選択する手順を詳しく説明する。以下、第一の制御部11が第一の格納部内リクエスト104からリクエストを選択する条件(1)から条件(2)を示す。
【0026】
(1)第一の格納部13に格納されている第一の格納部内リクエスト104であって、その第一の格納部内リクエスト104の優先度が、閾値以上であるリクエスト。
【0027】
(2)第一の格納部13に格納されている第一の格納部内リクエスト104であって、その第一の格納部内リクエスト104のアクセスタイプが、優先アクセスタイプ112と一致するリクエスト。
【0028】
続いて、第一の制御部11が、第一の格納部内リクエスト104からリクエストを選択する動作を、
図2のフローチャートを使用して更に詳しく説明する。
図2は、メモリコントローラ1の制御方法の一例を示すフローチャートである。
図2中、ステップS1からS7は、リクエストの選択に当たって実行する工程を示している。
【0029】
図2中、ステップS1およびS2の各工程は、それぞれ、上記に示す条件(1)および(2)を満たすリクエストを第一の格納部13内で検索する工程である。
図2に示すように、実施形態1では、第一の制御部11は、ステップS1およびS2の各工程を並行に実行することで、条件(1)又は(2)を満たすリクエストを第一の格納部13内で並行して検索する。
【0030】
まずステップS1の工程を説明する。ステップS1では、第一の制御部11は、第一の格納部13に格納されている第一の格納部内リクエスト104から、条件(1)を満たすリクエストを選択し、抽出する。上記に記載の条件(1)の定義に依り、条件(1)を満たすリクエストは、予め設定された閾値以上の優先度のリクエストである。ここで、第一の制御部11は、条件(1)を満たす複数のリクエストを抽出してもよい。
【0031】
続けて、ステップS2の工程を説明する。ステップS2では、第一の制御部11は、第一の格納部13に格納されている第一の格納部内リクエスト104から、条件(2)を満たすリクエストを選択し、抽出する。上記に記載の条件(2)の定義に依り、条件(2)を満たすリクエストは、第二の制御部12が生成する優先アクセスタイプ112とアクセスタイプが一致するリクエストである。ここで、第一の制御部11は、条件(2)を満たす複数のリクエストを抽出してもよい。
【0032】
ステップS3では、第一の制御部11は、第一の格納部13内に条件(1)を満たすリクエストが存在するか否かを判定する。第一の格納部13内に条件(1)を満たすリクエストが存在する場合には、ステップS5へ進む。一方、第一の格納部13内に条件(1)を満たすリクエストが存在しない場合には、ステップS4へ進む。
【0033】
ステップS4では、第一の制御部11は、第一の格納部13内に条件(2)を満たすリクエストが存在するか否かを判定する。第一の格納部13内に条件(2)を満たすリクエストが存在する場合には、ステップS6へ進む。一方、第一の格納部13内に条件(2)を満たすリクエストが存在しない場合には、ステップS1~S2の各工程の実行に戻る。
【0034】
ステップS5では、第一の制御部11は、第一の格納部13内の条件(1)を満たすリクエストの中で最も優先度が高いリクエストをリクエスト111として選択する。第一の格納部13内の条件(1)を満たすリクエストの中で最も優先度が高いリクエストが複数存在する場合には、最も古いリクエストをリクエスト111として選択する。その後、ステップS7に進む。
【0035】
ステップS6では、第一の制御部11は、第一の格納部13内の条件(2)を満たすリクエストの中で最も古いリクエストをリクエスト111として選択する。その後、ステップS7に進む。
【0036】
ステップS7では、第一の制御部11は、ステップS5又はS6で選択したリクエスト111が存在し、かつ第二の格納部14に空いているエントリが存在する場合、選択したリクエスト111を第二の制御部12に送付し、ステップS1~S2の各工程に戻る。第二の制御部12は、リクエスト111を第二の格納部14の空いているエントリに格納する。また、第一の制御部11は、第二の格納部14に空いているエントリが存在しない場合、リクエスト111を送付せずに、ステップS1~S2の各工程に戻る。
【0037】
<第二の制御部の動作>
続いて、第二の制御部12の動作を説明する。第二の制御部12は、第一の制御部11が送付する、選択したリクエスト111を受信すると、リクエスト111を第二の格納部14に格納する。
【0038】
さらに、第二の制御部12は、DRAMアクセスのペナルティがより小さくなるように、第二の格納部14に格納されている第二の格納部内リクエスト105を対象にリオーダを実施し、DRAMコマンド102を生成する。そして、第二の制御部12は、DRAMに対してDRAMコマンド102を発行する。リオーダは、DRAMアクセスペナルティが最も小さくなるようにリクエストを並び替える。この並び替えにより、DRAMアクセスペナルティを軽減し、アクセス性能の低下を抑制することができる。
【0039】
<第一の格納部の動作>
続いて、第一の格納部13を説明する。第一の格納部13は、第一の制御部11が受信したリクエスト101を格納している。第一の格納部13は、いずれのエントリからも、リクエストの情報を読み出し可能であれば、キュー構造であっても、バッファ構造であってもよい。
【0040】
また、第一の格納部13を構成する素子は、速度や消費電力等、メモリコントローラ1に対する要求仕様を満たせば、任意の素子であってもよい。すなわち、第一の格納部13を構成する素子は、SRAM、あるいはフリップフロップ(Flip-Flop、F/F)のいずれを適用して構成してもよい。
【0041】
<第二の格納部の動作>
続いて、第二の格納部14を説明する。第二の格納部14は、第二の制御部12が受信したリクエスト111を格納している。第二の格納部14は、いずれのエントリからも、リクエストの情報を読み出し可能であれば、キュー構造であっても、バッファ構造であってもよい。
【0042】
また、第二の格納部14を構成する素子は、速度や消費電力等、メモリコントローラ1に対する要求仕様を満たせば、任意の素子であってもよい。すなわち、第二の格納部14を構成する素子は、SRAM、あるいはフリップフロップ(Flip-Flop、F/F)のいずれを適用して構成してもよい。
【0043】
<処理>
続いて、実施形態1に係る動作について、
図3及び
図4も参照して、第一の制御部12、第一の格納部13、および第二の格納部14の動作を中心に説明する。説明に当たり、第一の格納部13のエントリ数は4エントリであり、第二の格納部14のエントリ数は6であるものとする。
【0044】
続いて、
図3を使用して、第一の制御部11による条件(1)を満たすリクエストの選択から、第二の制御部12が選択したリクエスト111を第二の格納部14に格納するまでの動作を説明する。条件(1)の優先度の閾値は2として説明する。
【0045】
図3は、ある時刻T0と次の時刻T1とにおける第一の格納部13と第二の格納部14との各状態、および、第二の制御部12が生成する優先アクセスタイプを示している。T0では、第一の格納部13は、4エントリのうち3エントリにリクエストを格納している。また、第二の格納部14は、6エントリのうち3エントリにリクエストを格納している。
【0046】
図2に示した条件(1)を満たすリクエストを抽出するステップS1では、「(1)第一の格納部13に格納されている第一の格納部内リクエスト104であって、その第一の格納部内リクエスト104の優先度が、閾値以上であるリクエスト」を抽出する。
図3の例では、第一の制御部11は、第一の格納部内のリクエスト104から、エントリ番号0とエントリ番号1のリクエストを抽出する(例えば、閾値=2)。
【0047】
次にステップS3では、第一の制御部11は、条件(1)を満たすリクエストが存在すると判定し、ステップS5へ進む。ステップS5では、第一の制御部11は、上記の2つのリクエストの中から、最も優先度が高いリクエストであるエントリ番号1のリクエスト(優先度=3)を選択する。その後、ステップS7では、第一の制御部11は、第二の格納部14に空きエントリが存在する場合、選択したリクエストを第二の制御部12に送付する。
【0048】
第一の制御部11が送付したリクエストを第二の制御部12が受信すると、第二の制御部12は、リクエストを第二の格納部14に格納する。一連の動作が完了した後の、第一の格納部13と第二の格納部14との各状態を
図3のT1に示す。第二の格納部14は、優先度が高いリクエストからDRAMコマンド102を生成するため、エントリ番号3のリクエスト(優先度=3)からDRAMコマンド102を生成する。そして、エントリ番号3のリクエストがWRであるため、優先アクセスタイプをWRに変更する。これにより、第二の格納部14に優先度が高いリクエストを格納できる。したがって、リアルタイム処理のリクエストを早く処理することが可能である。
【0049】
次に、条件(2)が成立した場合の動作を、
図4を使用して説明する。条件(1)の優先度の閾値は2として説明する。
【0050】
図4は、ある時刻T0と次の時刻T1とにおける第一の格納部13と第二の格納部14との各状態、および、第二の制御部12が生成する優先アクセスタイプを示している。T0では、第一の格納部13は、4エントリのうち3エントリにリクエストを格納している。また、第二の格納部14は、6エントリのうち3エントリにリクエストを格納している。第二の格納部14に格納されたリクエストはRDのみであるため、優先アクセスタイプはRDとなる。
【0051】
図2中の条件(1)を満たすリクエストを抽出するステップS1では、何れの優先度も閾値(=2)未満であるため、第一の制御部11は、第一の格納部内のリクエスト104から、どのリクエストも抽出しない。条件(2)を満たすリクエストを抽出するステップS2では、第一の制御部11は、「(2)第一の格納部13に格納されている第一の格納部内リクエスト104であって、その第一の格納部内リクエスト104のアクセスタイプが、優先アクセスタイプ112と一致するリクエスト」を抽出する。
【0052】
図4の例では、第一の制御部11は、第一の格納部内のリクエスト104から、優先アクセスタイプ(RD)と一致するアクセスタイプに該当するエントリ番号1とエントリ番号2のリクエストを抽出する。
【0053】
次にステップS3では、第一の制御部11は、条件(1)を満たすリクエストが存在しないと判定し、ステップS4へ進む。ステップS4では、第一の制御部11は、条件(2)を満たすリクエストが存在すると判定し、ステップS6へ進む。ステップS6では、第一の制御部11は、上記の2つのリクエストの中から、最も古いリクエストであるエントリ番号1のリクエストを選択する。その後、ステップS7では、第一の制御部11は、第二の格納部14に空きエントリが存在する場合、選択したリクエストを第二の制御部12に送付する。
【0054】
第一の制御部11が送付したリクエストを第二の制御部12が受信すると、第二の制御部12は、リクエストを第二の格納部14に格納する。一連の動作が完了した後の、第一の格納部13と第二の格納部14の状態を
図4のT1に示す。
【0055】
第二の格納部14は優先度が高いリクエストからDRAMコマンド102を生成するため、エントリ番号1のリクエストからDRAMコマンド102を生成する。エントリ番号1のリクエストがRDであるため、優先アクセスタイプはRDのままとなる。第二の格納部14のリクエストはすべてRDであるため、リードとライトとの切り替わりが発生しない。したがって、DRAMアクセスペナルティを小さくすることが可能である。
【0056】
第二の制御部12は、最後にDRAMへ発行したDRAMコマンドのアクセスタイプを優先アクセスタイプとして設定してもよい。また、第二の制御部12は、優先アクセスタイプとアクセスタイプが一致するリクエストが第二の格納部14から無くなった場合に、優先アクセスタイプを変更してもよい。
【0057】
以上説明したように、本実施形態では、キューを第一のキュー(第一の格納部)と第二のキュー(第二の格納部)とに分割し、第二のキューのリクエストを対象にDRAMコマンドを生成する。DRAMコマンドの生成を第二のキューに限定することで、リオーダ効果を維持しつつ、リオーダ回路の面積増加を抑えることができる。また、優先度が高いリクエストを早急に処理しつつ、リードとライトの切り替わりの発生を抑制することができる。
【0058】
このように、本実施形態によれば、優先度が高いリクエストを早急に処理しつつ、リードとライトとの切り替わりが発生しにくくすることができ、従って、メモリのアクセス効率を向上させることができる。
【0059】
(実施形態2)
図5を参照しながら、実施形態2について説明する。
図5は、実施形態2によるメモリコントローラの構成例を示す図である。
図5に示すように、メモリコントローラ1は、第一の制御部11、第二の制御部12、リードリクエスト用第一の格納部(リード格納部)15、ライトリクエスト用第一の格納部(ライト格納部)16、および第二の格納部14を含む。これらの構成要素のうち、第二の制御部12および第二の格納部14は、実施形態1で説明した、第二の制御部12および第二の格納部14と同一である。リードリクエスト用第一の格納部15およびライトリクエスト用第一の格納部16は、
図1の第一の格納部13を分割したものである。リードリクエスト用第一の格納部15は、リードリクエストを格納するための格納部である。ライトリクエスト用第一の格納部16は、ライトリクエストを格納するための格納部である。
【0060】
第一の制御部11は、リクエスト101を受信すると、リードリクエスト103を、リードリクエスト用第一の格納部15に格納する。一方、第一の制御部11は、ライトリクエスト103を、ライトリクエスト用第一の格納部16に格納する。
【0061】
第一の制御部11は、リードリクエスト用第一の格納部15とライトリクエスト用第一の格納部16とに格納されている第一の格納部内リクエスト104から、条件を満たすリクエストを選択し、選択したリクエスト111を第二の制御部12に送付する。この動作は、実施形態1で説明した第一の制御部11と同様である。
【0062】
リードリクエスト用第一の格納部15とライトリクエスト用第一の格納部16とは、共に、その全エントリを第一の制御部11が並行して読み出すことができる。そして、第一の格納部内リクエスト104は、リードリクエスト用第一の格納部15とライトリクエスト用第一の格納部16との双方から読み出したリクエストを纏めている。
【0063】
以上説明したように、本実施形態では、リードリクエスト用第一の格納部15、ライトリクエスト用第一の格納部16の2つの第一の格納部を設ける。そして、第一の制御部11は、
リードリクエスト用第一の格納部15及びライトリクエスト用第一の格納部16から、アウトオブオーダーでリクエストを選択する。アウトオブオーダーとは、プログラムに記述された命令の順番に関係なく、処理に必要なデータが揃った命令から実行することである。第二の制御部12は、第一の制御部11から受信したリクエストを第一の格納部14に格納する。
【0064】
このように、本実施形態によれば、リードリクエスト及びライトリクエストを種類ごとに保持しておくことで、処理効率を向上させることができる。
【0065】
(実施形態3)
続いて、実施形態3によるメモリコントローラ1を説明する。実施形態3に係るメモリコントローラ1は、実施形態1に係るメモリコントローラ1と同様に、第一の制御部11、第二の制御部12、第一の格納部13、および第二の格納部14を含む。以下、実施形態3に係る機能を中心に説明し、実施形態1と同様の機能については説明を省略する。第二の格納部14のエントリ数は6とし、エントリ番号4及びエントリ番号5は、優先度が高いリクエスト専用のエントリとする。
【0066】
<処理>
続いて、
図6を参照して、第一の制御部11による条件(1)を満たすリクエストの選択から、第二の制御部12が選択したリクエスト111を第二の格納部14に格納するまでの動作を説明する。条件(1)の優先度の閾値は2として説明する。
【0067】
図6は、ある時刻T0と次の時刻T1における第一の格納部13と第二の格納部14との各状態、および、第二の制御部12が生成する優先アクセスタイプを示している。T0では、第一の格納部13は、4エントリのうち2エントリにリクエストを格納している。また、第二の格納部14は、6エントリのうち4エントリにリクエストを格納している。第二の格納部14に格納されたリクエストはRDのみであるため、優先アクセスタイプはRDとなる。
【0068】
図2中の条件(1)を満たすリクエストを抽出するステップS1では、第一の制御部11は、第一の格納部内のリクエスト104から、優先度が閾値(=2)以上であるエントリ番号1のリクエストを抽出する。
【0069】
次にステップS3では、第一の制御部11は、条件(1)を満たすリクエストが存在すると判定し、ステップS5へ進む。ステップS5では、第一の制御部11は、エントリ番号1のリクエストを選択する。その後、ステップS7では、第一の制御部11は、第二の格納部14に空きエントリが存在する場合、選択したリクエストを第二の制御部12に送付する。
【0070】
続いて、
図7を参照して、第一の制御部11による条件(2)を満たすリクエストを選択しても、そのリクエストが第二の格納部14に格納されない場合の動作を説明する。条件(1)の優先度の閾値は2として説明する。
【0071】
図2の条件(2)を満たすリクエストを抽出するステップS2では、第一の制御部11は、第一の格納部内のリクエスト104から、優先アクセスタイプ(RD)と一致するアクセスタイプに該当するエントリ番号0及びエントリ番号1のリクエストを抽出する。
【0072】
次にステップS3では、第一の制御部11は、条件(2)を満たすリクエストが存在すると判定し、ステップS6へ進む。ステップS6では、第一の制御部11は、最も古いエントリ番号0のリクエストを選択する。その後、ステップS7では、第一の制御部11は、第二の格納部14に空きエントリが存在するが、エントリ番号4及びエントリ番号5は、優先度が高いリクエスト専用のエントリである。優先度が高いリクエスト専用のエントリにしか空きがないため、選択したリクエストを第二の制御部12に送付しない。すなわち、優先度が高いリクエスト専用のエントリに空きがない場合、優先度が閾値未満のリクエストは第2の格納部14に格納されない。
【0073】
以上説明したように、本実施形態では、第二の格納部14に、高い優先度専用のエントリを設ける。これにより、優先度が高いリクエストのためにエントリを確保しておくことができるため、優先度が高いリクエストを処理できずに待機期間が発生してしまうことを抑制することができる。
【0074】
本明細書の開示は、以下のメモリコントローラ、メモリコントローラの制御方法及びプログラムを含む。
【0075】
(項目1)
ダイナミック・ランダム・アクセス・メモリ(DRAM)を制御するメモリコントローラであって、
前記メモリコントローラが受信した優先度及びアクセスタイプの情報を含むリクエストを格納する第一の格納部と、
前記第一の格納部に格納されているリクエストの中からリクエストを選択する第一の制御部と、
前記第一の制御部により選択されたリクエストを格納する第二の格納部と、
前記第二の格納部に格納されているリクエストを並び替えてDRAMコマンドを生成し、前記DRAMへ前記DRAMコマンドを発行する第二の制御部と、を備え、
前記第二の制御部は、何れのアクセスタイプのリクエストを優先して前記DRAMに発行するかを示す優先アクセスタイプを生成し、
前記第一の制御部は、前記第一の格納部に格納されているリクエストの優先度及びアクセスタイプの情報と、前記優先アクセスタイプとに基づいて、前記リクエストを選択することを特徴とするメモリコントローラ。
【0076】
(項目2)
前記第一の制御部は、前記第一の格納部に格納されているリクエストのうち、前記優先度が閾値以上であるリクエスト、又は、前記優先アクセスタイプとアクセスタイプが一致するリクエストを選択することを特徴とする項目1に記載のメモリコントローラ。
【0077】
(項目3)
前記第一の制御部は、前記優先度が前記閾値以上であるリクエストが前記第一の格納部に複数存在する場合、最も優先度が高いリクエストを選択することを特徴とする項目2に記載のメモリコントローラ。
【0078】
(項目4)
前記第一の制御部は、前記優先度が前記閾値以上であるリクエストが前記第一の格納部に存在しない場合、前記優先アクセスタイプとアクセスタイプが一致するリクエストを選択することを特徴とする項目2又は3に記載のメモリコントローラ。
【0079】
(項目5)
前記第一の制御部は、前記優先アクセスタイプとアクセスタイプが一致するリクエストが複数存在する場合、最も古いリクエストを選択することを特徴とする項目4に記載のメモリコントローラ。
【0080】
(項目6)
前記アクセスタイプは、リード又はライトを示すことを特徴とする項目1から5のいずれか1項目に記載のメモリコントローラ。
【0081】
(項目7)
前記第二の制御部は、最後に前記DRAMへ発行した前記DRAMコマンドのアクセスタイプを前記優先アクセスタイプとして設定することを特徴とする項目1から6のいずれか1項目に記載のメモリコントローラ。
【0082】
(項目8)
前記第二の制御部は、前記優先アクセスタイプとアクセスタイプが一致するリクエストが前記第二の格納部から無くなった場合、前記優先アクセスタイプを変更することを特徴とする項目1から7のいずれか1項目に記載のメモリコントローラ。
【0083】
(項目9)
前記第一の格納部は、
前記アクセスタイプがリードであるリクエストを格納するリード格納部と、
前記アクセスタイプがライトであるリクエストを格納するライト格納部と、
を備えることを特徴とする項目1から8のいずれか1項目に記載のメモリコントローラ。
【0084】
(項目10)
前記第一の制御部は、前記リード格納部に格納されているリクエストと、前記ライト格納部に格納されているリクエストとから、アウトオブオーダーでリクエストを選択することを特徴とする項目9に記載のメモリコントローラ。
【0085】
(項目11)
前記第二の格納部は、前記優先度に関わらずリクエストを受け付け可能な第一のエントリと、前記優先度が閾値以上のリクエストを受け付け可能な第二のエントリとを含み、
前記第一の制御部は、前記第一のエントリに空きがない場合、前記優先度が前記閾値未満のリクエストを前記第2の格納部に格納しないことを特徴とする項目10に記載のメモリコントローラ。
【0086】
(項目12)
ダイナミック・ランダム・アクセス・メモリ(DRAM)を制御するメモリコントローラの制御方法であって、
何れのアクセスタイプのリクエストを優先して前記DRAMに発行するかを示す優先アクセスタイプを生成する生成工程と、
前記メモリコントローラが受信した優先度及びアクセスタイプとの情報を含むリクエストを第一の格納部に格納し、前記第一の格納部に格納されているリクエストの中から、前記優先度及びアクセスタイプの情報と、前記優先アクセスタイプとに基づいて、リクエストを選択する第一の制御工程と、
前記第一の制御工程により選択されたリクエストを第二の格納部に格納し、前記第二の格納部に格納されているリクエストを並び替えてDRAMコマンドを生成し、前記DRAMへ前記DRAMコマンドを発行する第二の制御工程と、
を有することを特徴とするメモリコントローラの制御方法。
【0087】
(項目13)
コンピュータを、項目1乃至11の何れか1項目に記載のメモリコントローラとして機能させるためのプログラム。
【0088】
(その他の実施形態)
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【0089】
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
【符号の説明】
【0090】
1:メモリコントローラ、11:第一の制御部、12:第二の制御部、13:第一の格納部、14:第二の格納部、101:第一の制御部が受信するリクエスト、102:DRAMコマンド、104:第一の格納部内リクエスト、105:第二の格納部内リクエスト、111:第二の制御部が受信するリクエスト、112:優先アクセスタイプ