(57)【要約】【課題】バスマスタの処理内容に応じて優先度を切り替え、優先度の切り替え粒度が細かい場合であっても、ジョブに同期した優先度の切り替えを行うことで、効率的にデータ処理を行うためのメモリアクセスを実現する。【解決手段】アクセスキュー１０１４は、受信した複数のアクセスを保持し、ディスクリプタ領域へのアクセスであった場合、アクセスされたディスクリプタをデコードし、そのディスクリプタが示すデータ領域を保持する。また、ディスクリプタへのアクセスからディスクリプタが示す領域へのアクセスの優先度を決定し、決定した優先度をデータ領域と対で保持する。また、データ領域判別回路１０１３は、バスマスタからのアクセスが保持しているデータ領域に該当するかを判別し、前記アクセスがデータ領域に該当した場合には、アクセスキュー１０１４は、データ領域と対の優先度に応じて保持しているアクセスの順序を変更する。【選択図】  図１
2010128604.tif 000002
【特許請求の範囲】
【請求項１】
データフェッチを行うバスマスタと、メモリコントローラと、メモリコントローラに接続されるメモリデバイスとにより構成され、メモリ空間上にバスマスタが使用するデータと、メモリ空間上のデータ領域を指定するディスクリプタとを保持するメモリシステムにおいて、
受信した複数のアクセスを保持する手段と、
バスマスタからのディスクリプタ領域へのアクセスを判別する手段と、
ディスクリプタ領域へのアクセスであった場合、アクセスされたディスクリプタをデコードし、そのディスクリプタが示すデータ領域を保持する手段と、
ディスクリプタへのアクセスからディスクリプタが示す領域へのアクセスの優先度を決定する手段と、
決定した優先度をデータ領域と対で保持する手段と、
バスマスタからのアクセスが、保持しているデータ領域に該当するかを判別する手段と、
前記アクセスがデータ領域に該当した場合には、前記データ領域と対の優先度に応じて保持しているアクセスの順序を変更する手段とを有することを特徴とするメモリシステム。
【請求項２】
前記メモリコントローラにおいて、ディスクリプタへのアクセスからディスクリプタの指し示す領域へのアクセスの優先度を決定する手段として、ディスクリプタに優先度が設定されており、ディスクリプタをデコードし、ディスクリプタの指し示すデータ領域へのアクセスの優先度を決定することを特徴とする請求項１に記載のメモリシステム。
【請求項３】
前記メモリコントローラにおいて、ディスクリプタへのアクセスからディスクリプタの指し示す領域へのアクセスの優先度を決定する手段として、ディスクリプタのアドレスごとに優先度が設定されており、ディスクリプタへのアクセスのアドレスにてディスクリプタの指し示すデータ領域へのアクセスの優先度を決定することを特徴とする請求項１に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリシステムに関する。
【背景技術】
【０００２】
従来、メモリシステムでは、メモリコントローラを介してメモリアクセスを行うバスマスタ、バスインタフェース、アドレス領域によって優先度が決定されている。
【０００３】
以下、バスマスタによって優先度を決定する例を示す。
メモリコントローラは各バスマスタに対する優先度情報を保持し、バスマスタからのアクセスにはマスタ識別子が付加される。バスマスタがメモリコントローラにアクセスした際、メモリコントローラはアクセスに付加されたマスタ識別子よりバスマスタを特定し、前記アクセスの優先度を決定し、前記アクセスをアクセスキューに登録する。メモリコントローラはアクセスの優先度に応じてアクセスキュー内のアクセスの順番を入れ替え、メモリデバイスへのアクセス発行順序を変更する。
【０００４】
次に、バスインタフェースによって優先度が決定する例を示す。
メモリコントローラは各バスインタフェースの優先度情報を保持し、バスインタフェースからのアクセスの際、メモリコントローラはどのバスインタフェースからのアクセスかにより前記アクセスの優先度を決定し、前記アクセスをアクセスキューに登録する。メモリコントローラはアクセスの優先度に応じてアクセスキュー内のアクセスの順番を入れ替え、メモリデバイスへのアクセス発行順序を変更する。
【０００５】
次に、アドレス領域によって優先度が決定する例を示す。
メモリコントローラは指定されたアドレス領域ごとにそのアドレス領域に対するアクセスの優先度情報を保持する。バスマスタまたはバスインタフェースからのアクセスの際、アクセスされたアドレス領域より前記アクセスの優先度を決定し、前記アクセスをアクセスキューに登録する。メモリコントローラはアクセスの優先度に応じてアクセスキュー内のアクセスの順番を入れ替え、メモリデバイスへのアクセス発行順序を変更する。
【０００６】
【特許文献１】特開平０７−１２９５００号公報
【特許文献２】特開２０００−２０４５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、バスマスタごとに優先度を持たせる場合、１つのバスマスタが複数のジョブを処理することもある。そのバスマスタが優先度の高いジョブと優先度の低いジョブを処理する場合、そのバスマスタの優先度を高くすると優先度の低いジョブも優先的に処理されてしまう。
【０００８】
また、そのバスマスタの優先度を低くすると優先度の高いジョブが優先的に処理されないといった問題がある。バスインタフェースごとに優先度を持たせる場合、１つのバスインタフェースに複数のバスマスタからのアクセスがあり、そのアクセスの優先度が異なることもある。そのバスインタフェースの優先度を高くすると、そのバスインタフェースにアクセスする優先度の低いジョブも優先的に処理されてしまう。そのバスインタフェースの優先度を低くすると、そのバスインタフェースにアクセスする優先度の高いジョブが優先的に処理されないといった問題がある。
【０００９】
また、アドレス領域ごとに優先度を持たせる場合、優先度の異なるジョブが同じアドレス領域を参照することもある。そのアドレス領域の優先度を高くすると優先度の低いジョブも優先的に処理されてしまい、そのアドレス領域の優先度を低くすると優先度の高いジョブが優先的に処理されないといった問題がある。
【００１０】
また、ソフトウェアでジョブごとに優先度を変更することは可能であるが、優先度の切り替えの粒度が細かい場合には、設定時のオーバーヘッドが生じる。そのため、ジョブに同期した優先度の切り替えが困難であり、効率的にデータ処理を行うためのメモリアクセスを実現できないといった問題がある。
【課題を解決するための手段】
【００１１】
本発明のメモリシステムは、データフェッチを行うバスマスタと、メモリコントローラと、メモリコントローラに接続されるメモリデバイスとにより構成され、メモリ空間上にバスマスタが使用するデータと、メモリ空間上のデータ領域を指定するディスクリプタとを保持するメモリシステムにおいて、受信した複数のアクセスを保持する手段と、バスマスタからのディスクリプタ領域へのアクセスを判別する手段と、ディスクリプタ領域へのアクセスであった場合、アクセスされたディスクリプタをデコードし、そのディスクリプタが示すデータ領域を保持する手段と、ディスクリプタへのアクセスからディスクリプタが示す領域へのアクセスの優先度を決定する手段と、決定した優先度をデータ領域と対で保持する手段と、バスマスタからのアクセスが、保持しているデータ領域に該当するかを判別する手段と、前記アクセスがデータ領域に該当した場合には、前記データ領域と対の優先度に応じて保持しているアクセスの順序を変更する手段とを有することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、バスマスタの処理内容に応じて優先度を切り替えることが可能となり、優先度の切り替え粒度が細かい場合であっても、ジョブに同期した優先度の切り替えを行うことで、効率的にデータ処理を行うためのメモリアクセスを実現することができる。
【発明を実施するための最良の形態】
【００１３】
＜第１の実施の形態＞
図１は、本発明のメモリシステムにおける第１の実施形態を表した構成図である。図１において、１０１はメモリコントローラである。１０２はメモリデバイスである。１０３はバスである。バス１０３は複数バスマスタからのアクセスを調停し、メモリコントローラ１０１へアクセスを制御する。
【００１４】
１０４、１０５はバスマスタである。バスマスタ１０４、１０５はバス１０３に接続され、メモリデバイス１０２へのアクセスを発行する。バスマスタ１０４、１０５はディスクリプタを参照することでアクセスするメモリ空間上のデータ領域を特定し、データフェッチを行う。
【００１５】
１０１１はディスクリプタ領域リストである。ディスクリプタ領域リスト１０１１はメモリデバイス１０２の複数ディスクリプタのアドレス、またはアドレス領域を保持する。
【００１６】
１０１２はアドレス判別回路である。アドレス判別回路１０１２はバスマスタ１０４、１０５からのアクセスを受信した際、アクセスのアドレスがディスクリプタ領域であるか否かを判別する。ディスクリプタ領域である場合、前記アクセスがディスクリプタ領域に対するものであることを示すフラグを付加してアクセスキュー１０１４に登録する。ディスクリプタ領域でない場合、前記アクセスをデータ領域判別回路１０１３へ送信する。
【００１７】
１０１３はデータ領域判別回路である。データ領域判別回路１０１３はバスマスタ１０４、１０５から受信したアクセスのアドレスがディスクリプタ情報登録リスト１０１７に登録されているアドレスであるか否かを判別する。登録されているアドレスである場合、該当アドレス領域の優先度を前記アクセスに付加し、アクセスキュー１０１４に登録する。登録されていないアドレスである場合、前記アクセスに情報を付加しないで、アクセスキュー１０１４に登録する。
【００１８】
１０１４はアクセスキューである。アクセスキュー１０１４はバスマスタ１０４、１０５からのアクセスを複数保持することができるキューである。また、アクセスの優先度に応じてコマンド制御回路１０１５へ送信するアクセスの順序を変更する。
【００１９】
１０１５はコマンド制御回路である。コマンド制御回路１０１５はアクセスキュー１０１４からのアクセスを受信し、メモリアクセスのコマンドに変換し、メモリデバイス１０２へコマンドを発行する。また、コマンド制御回路１０１５はアクセスキュー１０１４からのアクセスにディスクリプタ領域へのアクセスであるフラグが付加されているか否かを判別する。フラグが付加されている場合は、メモリデバイス１０２から読み出したディスクリプタをディスクリプタデコード回路１０１６へ送信する。
【００２０】
１０１６はディスクリプタデコード回路である。ディスクリプタデコード回路１０１６はディスクリプタをデコードし、ディスクリプタの指し示すデータ領域と優先度を読み出し、ディスクリプタ情報登録リストに送信する。
【００２１】
１０１７はディスクリプタ情報登録リストである。ディスクリプタ情報登録リスト１０１７はデコードされたディスクリプタのデータ領域と優先度を対で保持する。１０１８はリターンキューである。リターンキュー１０１８はリードデータを保持しバス１０３にリードデータを送信できるタイミングで送信する。
【００２２】
１０２１はディスクリプタである。ディスクリプタ１０２１はデータ領域１０２３を指し示す（指定する）情報と優先度の情報が設定されている。１０２２はディスクリプタである。ディスクリプタ１０２２はデータ領域１０２４を指し示す情報と優先度の情報が設定されている。１０２３はデータ領域である。データ領域１０２３にはディスクリプタ１０２１にアクセスしたバスマスタが処理すべきジョブに必要な、換言すれば使用するデータが書かれている。１０２４はデータ領域である。データ領域１０２４にはディスクリプタ１０２２にアクセスしたバスマスタが処理すべきジョブに必要な、換言すれば使用するデータが書かれている。
【００２３】
次に、本発明の第１の実施形態におけるメモリシステムの動作を以下に説明する。図２に示すように、ディスクリプタ１０２１のアドレスは「0x0000010」、ディスクリプタ１０２２のアドレスは「0x0000014」であるものとする。また、ディスクリプタ１０２１の指し示すアドレス領域１０２３は「0x00000100」から「0x00000200」、ディスクリプタ１０２２の指し示すアドレス領域１０２４は「0x00000200」から「0x00000300」であるものとする。さらに、ディスクリプタ１０２１に設定されている優先度は"Ｌ"、ディスクリプタ１０２２に設定されている優先度は"Ｈ"であるとする。優先度は"Ｈ"が"Ｌ"よりも高いものとする。ここでは、すべてのアクセスはワード単位で行われるものとする。
【００２４】
メモリコントローラ１０１のディスクリプタ領域リスト１０１１には、ディスクリプタのアドレスリストとして「0x00000010」、「0x00000014」が登録されている。ディスクリプタ領域リスト１０１１には、「0ｘ00000010」〜「0ｘ00000014」というアドレス領域が登録されていても構わない。
【００２５】
バスマスタ１０４はディスクリプタ１０２１をリードし、ディスクリプタ１０２１の指し示すデータ領域１０２３からデータフェッチを行う。バスマスタ１０５はディスクリプタ１０２２をリードし、ディスクリプタ１０２２の指し示すデータ領域１０２４からデータフェッチを行うように設定されているものとする。
【００２６】
まず、バスマスタ１０４がディスクリプタ１０２１をリードするアクセス（アドレス「0x00000010」をリード）を発行する。アドレス判別回路１０１２は受信した前記アクセスのアドレスがディスクリプタ領域リスト１０１１に登録されたものか否かを判別する。アドレス「0x00000010」はディスクリプタ領域リスト１０１１に登録されているので、アドレス判別回路１０１２は前記アクセスがディスクリプタ領域に対するアクセスであることを示すフラグを付加し、アクセスキュー１０１４に登録する。
【００２７】
アクセスキュー１０１４の中は図３（Ａ）のようになる。コマンド制御回路１０１５はアクセスキュー１０１４から前記アクセスを受信し、メモリデバイス１０２へアドレス「0x00000010」に対するリードコマンドを発行し、ディスクリプタ１０２１をリードする。前記アクセスにはディスクリプタ領域へのアクセスであるフラグが付加されていたので、コマンド制御回路１０１５はリードデータをリターンキュー１０１８に登録すると同時に、ディスクリプタデコード回路１０１６に送信する。
【００２８】
ディスクリプタデコード回路１０１６はディスクリプタ１０２１をデコードし、ディスクリプタ１０２１が指し示すデータ領域（0x00000100〜0x00000200）と優先度（"Ｌ"）を読出し、ディスクリプタ情報登録リスト１０１７に登録する。ディスクリプタ情報登録リスト１０１７の中は図４（Ａ）のようになる。
【００２９】
リターンキュー１０１８はバスマスタ１０４にリードデータ（ディスクリプタ１０２１）を送信する。バスマスタ１０４はディスクリプタ１０２１からアクセスするデータ領域（0x00000100〜0x00000200）を読み出し、前記データ領域からデータをリードするためのアクセスを順に発行する。データ領域内のデータアクセス順は任意であるが、本実施形態でバスマスタ１０４は、0x00000100、0x00000104、0x00000108、・・・、0x000001FCの順に発行するものとする。
【００３０】
バスマスタ１０４から前記データ領域からデータをリードするためのアクセスが発行されると、アドレス判別回路１０１２は前記アクセスのアドレスがディスクリプタ領域リスト１０１１に登録されていない。よって、前記アクセスをデータ領域判別回路１０１３に送信する。
【００３１】
データ領域判別回路１０１３は前記アクセスがディスクリプタ情報登録リスト１０１７に登録されているデータ領域に対するものか否かを判別する。ディスクリプタ情報登録リスト１０１７には前記アクセスのアドレスが該当するアドレス領域が登録されているので、前記アドレス領域と対で登録されている優先度を前記アクセスに付加してアクセスキュー１０１４に登録する。
【００３２】
アクセスキュー１０１４の中は図３（Ｂ）のようになる。バスマスタ１０４が前記データ領域へ複数回アクセスするとアクセスキュー１０１４は図３（Ｃ）のようになる。図３（Ｃ）では、最初に登録された数回のアクセスはすでに処理されている。
【００３３】
次に、バスマスタ１０５がディスクリプタ１０２２をリードするアクセス（アドレス「0x00000014」をリード）を発行する。アドレス判別回路１０１２は受信した前記アクセスのアドレスがディスクリプタ領域リスト１０１１に登録されたものか否かを判別する。アドレス「0x00000014」はディスクリプタ領域リスト１０１１に登録されているので、アドレス判別回路１０１２は前記アクセスがディスクリプタ領域に対するアクセスであることを示すフラグを付加し、アクセスキュー１０１４に登録する。アクセスキュー１０１４の中は図３（Ｄ）のようになる。
【００３４】
コマンド制御回路１０１５はアクセスキュー１０１４から前記アクセスを受信し、メモリデバイス１０２へアドレス「0x00000014」に対するリードコマンドを発行し、ディスクリプタ１０２２をリードする。前記アクセスにはディスクリプタ領域へのアクセスであるフラグが付加されていたので、コマンド制御回路１０１５はリードデータをリターンキュー１０１８に登録すると同時に、ディスクリプタデコード回路１０１６に送信する。
【００３５】
ディスクリプタデコード回路１０１６はディスクリプタ１０２２をデコードし、ディスクリプタ１０２２が指し示すデータ領域（0x00000200〜0x00000300）と優先度（"Ｈ"）を読出し、ディスクリプタ情報登録リスト１０１７に登録する。ディスクリプタ情報登録リスト１０１７の中は図４（Ｂ）のようになる。
【００３６】
リターンキュー１０１８はバスマスタ１０５にリードデータ（ディスクリプタ１０２２）を送信する。バスマスタ１０５はディスクリプタ１０２２からアクセスするデータ領域（0x00000200〜0x00000300）を読み出し、前記データ領域からデータをリードするためのアクセスを順に発行する。本実施形態でバスマスタ１０５は、0x00000200、0x00000204、0x00000208、・・・、0x000002FCの順に発行するものとする。
【００３７】
バスマスタ１０５から前記データ領域からデータをリードするためのアクセスが発行されると、アドレス判別回路１０１２は前記アクセスのアドレスがディスクリプタ領域リスト１０１１に登録されていない。よって、前記アクセスをデータ領域判別回路１０１３に送信する。
【００３８】
データ領域判別回路１０１３は前記アクセスがディスクリプタ情報登録リスト１０１７に登録されているデータ領域に対するものか否かを判別する。ディスクリプタ情報登録リスト１０１７には前記アクセスのアドレスが該当するアドレス領域が登録されているので、前記アドレス領域と対で登録されている優先度を前記アクセスに付加してアクセスキュー１０１４に登録する。アクセスキュー１０１４の中は図３（Ｅ）のようになる。
【００３９】
このとき、前記アクセスは先に登録されているアクセスよりも優先度が高いので、優先的にコマンド制御回路１０１５に発行されるように先に登録されているアクセスを追い越すように並び替えられる。
【００４０】
バスマスタ１０５が前記データ領域へ複数回アクセスすると、バスマスタ１０５の発行するアクセスがバスマスタ１０４の発行するアクセスよりも優先的にコマンド制御回路１０１５に発行されるので、アクセスキュー１０１４は図３（Ｆ）のようになる。
【００４１】
以上のように、ディスクリプタに優先度が設定されていることで、ディスクリプタへのアクセス時に、そのディスクリプタの指し示す領域へのアクセスの優先度を決定することができ、優先度の高い処理を優先度の低い処理よりも優先的に処理することができる。
【００４２】
また、同じバスマスタが異なるディスクリプタへアクセスし、前記異なるディスクリプタに異なる優先度が設定されていれば、同じバスマスタであっても処理の優先度を切り替えることが可能である。例えば、バスマスタ１０４がディスクリプタ１０２１をリードし、ディスクリプタ１０２１の指し示すデータ領域１０２３からデータをリードしてジョブを実行する。
【００４３】
次にディスクリプタ１０２２をリードし、ディスクリプタ１０２２の指し示すデータ領域１０２４からデータをリードしてジョブを実行する。ディスクリプタ１０２１とディスクリプタ１０２２のデコード結果から優先度が決定し、ディスクリプタ１０２１ディスクリプタ１０２２に設定されている優先度が異なれば、同じバスマスタであっても処理ごとに優先度が切り替えられる。
【００４４】
また、本実施形態のように同じバスインタフェースであっても処理ごとに優先度が切り替えられる。さらに、アクセスが同じデータ領域であっても異なるディスクリプタに異なる優先度が設定されており、前記異なるディスクリプタが同じデータ領域を指し示していれば、処理の優先度を切り替えることが可能である。
【００４５】
例えば、ディスクリプタ１０２１とディスクリプタ１０２２が同じデータ領域１０２３を指し示していたとすると、バスマスタ１０４とバスマスタ１０５は同じデータ領域１０２３からデータをリードしてジョブを実行する。ディスクリプタ１０２１とディスクリプタ１０２２に設定されている優先度が異なれば、同じデータ領域へのアクセスであっても処理ごとに優先度が切り替えられる。
【００４６】
＜第２の実施の形態＞
図５は、本発明のメモリシステムにおける第２の実施形態を表した構成図である。図５において、１０１はメモリコントローラである。１０２はメモリデバイスである。１０３はバスである。バス１０３は複数バスマスタからのアクセスを調停し、メモリコントローラ１０１へアクセスを制御する。
【００４７】
１０４、１０５はバスマスタである。バスマスタ１０４、１０５はバス１０３に接続され、メモリデバイス１０２へのアクセスを発行する。バスマスタ１０４、１０５はディスクリプタを参照することでアクセスするデータ領域を特定し、データフェッチを行う。
【００４８】
１０１１はディスクリプタアドレスリストである。ディスクリプタアドレスリスト１１０１はメモリデバイス１０２の複数ディスクリプタのアドレス、またはアドレス領域を保持する。
【００４９】
１１０２はディスクリプタ優先度リストである。ディスクリプタ優先度リスト１２０１はディスクリプタアドレスリスト１１０１の各アドレスに対して優先度を保持する。
【００５０】
１０１２はアドレス判別回路である。アドレス判別回路１０１２はバスマスタ１０４、１０５からのアクセスを受信した際、アクセスのアドレスがディスクリプタ領域であるか否かを判別する。
【００５１】
ディスクリプタ領域である場合、前記アクセスがディスクリプタ領域に対するものであることを示すフラグを付加してアクセスキュー１０１４に登録する。ディスクリプタ領域でない場合、前記アクセスをデータ領域判別回路１０１３へ送信する。
【００５２】
１０１３はデータ領域判別回路である。データ領域判別回路１０１３はバスマスタ１０４、１０５から受信したアクセスのアドレスがディスクリプタ情報登録リスト１０１７に登録されているアドレスであるか否かを判別する。登録されているアドレスである場合、該当アドレス領域の優先度を前記アクセスに付加し、アクセスキュー１０１４に登録する。登録されていないアドレスである場合、前記アクセスに情報を付加しないで、アクセスキュー１０１４に登録する。
【００５３】
１０１４はアクセスキューである。アクセスキュー１０１４はバスマスタ１０４、１０５からのアクセスを複数保持することができるキューである。また、アクセスの優先度に応じてコマンド制御回路１０１５へ送信するアクセスの順序を変更する。
【００５４】
１０１５はコマンド制御回路である。コマンド制御回路１０１５はアクセスキュー１０１４からのアクセスを受信し、メモリアクセスのコマンドに変換し、メモリデバイス１０２へコマンドを発行する。また、コマンド制御回路１０１５はアクセスキュー１０１４からのアクセスにディスクリプタ領域へのアクセスであるフラグが付加されているか否かを判別する。フラグが付加されている場合は、メモリデバイス１０２から読み出したディスクリプタをディスクリプタデコード回路１０１６へ送信する。
【００５５】
１０１６はディスクリプタデコード回路である。ディスクリプタデコード回路１０１６はディスクリプタをデコードし、ディスクリプタの指し示すデータ領域と優先度を読み出し、ディスクリプタ情報登録リストに送信する。
【００５６】
１０１７はディスクリプタ情報登録リストである。ディスクリプタ情報登録リストはデコードされたディスクリプタのデータ領域と優先度を対で保持する。１０１８はリターンキューである。リターンキュー１０１８はリードデータを保持しバス１０３にリードデータを送信できるタイミングで送信する。
【００５７】
１１２１はディスクリプタである。ディスクリプタ１１２１はデータ領域１０２３を指し示す情報が設定されている。１１２２はディスクリプタである。ディスクリプタ１１２２はデータ領域１０２４を指し示す情報が設定されている。１０２３はデータ領域である。データ領域１０２３にはディスクリプタ１１２１にアクセスしたバスマスタが処理すべきジョブに必要なデータが書かれている。１０２４はデータ領域である。データ領域１０２４にはディスクリプタ１１２２にアクセスしたバスマスタが処理すべきジョブに必要なデータが書かれている。
【００５８】
次に、本発明の第２の実施形態におけるメモリシステムの動作を以下に説明する。図２に示すように、ディスクリプタ１１２１のアドレスは「0x0000010」、ディスクリプタ１１２２のアドレスは「0x0000014」であるものとする。また、ディスクリプタ１１２１の指し示すアドレス領域１０２３は「0x00000100」から「0x00000200」、ディスクリプタ１１２２の指し示すアドレス領域１０２４は「0x00000200」から「0x00000300」であるものとする。ここでは、すべてのアクセスはワード単位で行われるものとする。
【００５９】
メモリコントローラ１０１のディスクリプタアドレスリスト１１０１には、ディスクリプタのアドレスリストとして0x00000010、0x00000020が登録されている。ディスクリプタアドレスリスト１１０１には、0x00000010〜0x0000001Cと0x00000020〜0x0000002Cというアドレス領域が登録されていても構わない。また、ディスクリプタ優先度リスト１２０１にはアドレス「0x00000010」に対しては優先度"Ｌ"、アドレス「0x00000020」に対しては優先度"Ｈ"が登録されている。
【００６０】
バスマスタ１０４はディスクリプタ１１２１をリードし、ディスクリプタ１１２１の指し示すデータ領域１０２３からデータフェッチを行う。バスマスタ１０５はディスクリプタ１１２２をリードし、ディスクリプタ１１２２の指し示すデータ領域１０２４からデータフェッチを行うように設定されているものとする。
【００６１】
まず、バスマスタ１０４がディスクリプタ１１２１をリードするアクセス（アドレス「0x00000010」をリード）を発行する。アドレス判別回路１０１２は受信した前記アクセスのアドレスがディスクリプタアドレスリスト１１０１に登録されたものか否かを判別する。アドレス「0x00000010」はディスクリプタアドレスリスト１１０１に登録されているので、アドレス判別回路１０１２は前記アクセスがディスクリプタに対するアクセスであることを示すフラグを付加し、アクセスキュー１０１４に登録する。
【００６２】
アクセスキュー１０１４の中は図３（Ａ）のようになる。このとき、ディスクリプタ優先度リスト１２０１からアドレス「0ｘ00000010」に該当する優先度"Ｌ"がディスクリプタ情報登録リスト１０１７に登録される。
【００６３】
コマンド制御回路１０１５はアクセスキュー１０１４から前記アクセスを受信し、メモリデバイス１０２へアドレス「0x00000010」に対するリードコマンドを発行し、ディスクリプタ１１２１をリードする。前記アクセスにはディスクリプタ領域へのアクセスであるフラグが付加されていたので、コマンド制御回路１０１５はリードデータをリターンキュー１０１８に登録すると同時に、ディスクリプタデコード回路１０１６に送信する。
【００６４】
ディスクリプタデコード回路１０１６はディスクリプタ１１２１をデコードし、ディスクリプタ１１２１が指し示すデータ領域（0x00000100〜0x00000200）を読出し、ディスクリプタ情報登録リスト１０１７に登録する。ディスクリプタ情報登録リスト１０１７の中は図４（Ａ）のようになる。
【００６５】
リターンキュー１０１８はバスマスタ１０４にリードデータ（ディスクリプタ１１２１）を送信する。バスマスタ１０４はディスクリプタ１１２１からアクセスするデータ領域（0x00000100〜0x00000200）を読み出し、前記データ領域からデータをリードするためのアクセスを順に発行する。データ領域内のデータアクセス順は任意であるが、本実施形態でバスマスタ１０４は、0x00000100、0x00000104、0x00000108、・・・、0x000001FCの順に発行するものとする。
【００６６】
バスマスタ１０４から前記データ領域からデータをリードするためのアクセスが発行されると、アドレス判別回路１０１２は前記アクセスのアドレスがディスクリプタアドレスリスト１１０１に登録されていない。よって、前記アクセスをデータ領域判別回路１０１３に送信する。
【００６７】
データ領域判別回路１０１３は前記アクセスがディスクリプタ情報登録リスト１０１７に登録されているデータ領域に対するものか否かを判別する。ディスクリプタ情報登録リスト１０１７には前記アクセスのアドレスが該当するアドレス領域が登録されているので、前記アドレス領域と対で登録されている優先度を前記アクセスに付加してアクセスキュー１０１４に登録する。
【００６８】
アクセスキュー１０１４の中は図３（Ｂ）のようになる。バスマスタ１０４が前記データ領域へ複数回アクセスするとアクセスキュー１０１４は図３（Ｃ）のようになる。図３（Ｃ）では、最初に登録された数回のアクセスはすでに処理されている。
【００６９】
次に、バスマスタ１０５がディスクリプタ１１２２をリードするアクセス（アドレス「0x00000020」をリード）を発行する。アドレス判別回路１０１２は受信した前記アクセスのアドレスがディスクリプタアドレスリスト１１０１に登録されたものか否かを判別する。アドレス「0x00000020」はディスクリプタアドレスリスト１１０１に登録されているので、アドレス判別回路１０１２は前記アクセスがディスクリプタ領域に対するアクセスであることを示すフラグを付加し、アクセスキュー１０１４に登録する。
【００７０】
アクセスキュー１０１４の中は図３（Ｄ）のようになる。このとき、ディスクリプタ優先度リスト１２０１からアドレス「0ｘ00000020」に該当する優先度"Ｈ"がディスクリプタ情報登録リスト１０１７に登録される。
【００７１】
コマンド制御回路１０１５はアクセスキュー１０１４から前記アクセスを受信し、メモリデバイス１０２へアドレス「0x00000020」に対するリードコマンドを発行し、ディスクリプタ１１２２をリードする。前記アクセスにはディスクリプタ領域へのアクセスであるフラグが付加されていたので、コマンド制御回路１０１５はリードデータをリターンキュー１０１８に登録すると同時に、ディスクリプタデコード回路１０１６に送信する。
【００７２】
ディスクリプタデコード回路１０１６はディスクリプタ１１２２をデコードし、ディスクリプタ１１２２が指し示すデータ領域（0x00000200〜0x00000300）を読出し、ディスクリプタ情報登録リスト１０１７に登録する。ディスクリプタ情報登録リスト１０１７の中は図４（Ｂ）のようになる。
【００７３】
リターンキュー１０１８はバスマスタ１０５にリードデータ（ディスクリプタ１１２２）を送信する。バスマスタ１０５はディスクリプタ１０２２からアクセスするデータ領域（0x00000200〜0x00000300）を読み出し、前記データ領域からデータをリードするためのアクセスを順に発行する。本実施形態でバスマスタ１０５は、0x00000200、0x00000204、0x00000208、・・・、0x000002FCの順に発行するものとする。
【００７４】
バスマスタ１０５から前記データ領域からデータをリードするためのアクセスが発行されると、アドレス判別回路１０１２は前記アクセスのアドレスがディスクリプタ領域リスト１０１１に登録されていない。よって、前記アクセスをデータ領域判別回路１０１３に送信する。
【００７５】
データ領域判別回路１０１３は前記アクセスがディスクリプタ情報登録リスト１０１７に登録されているデータ領域に対するものか否かを判別する。ディスクリプタ情報登録リスト１０１７には前記アクセスのアドレスが該当するアドレス領域が登録されているので、前記アドレス領域と対で登録されている優先度を前記アクセスに付加してアクセスキュー１０１４に登録する。アクセスキュー１０１４の中は図３（Ｅ）のようになる。このとき、前記アクセスは先に登録されているアクセスよりも優先度が高いので、優先的にコマンド制御回路１０１５に発行されるように先に登録されているアクセスを追い越すように並び替えられる。
【００７６】
バスマスタ１０５が前記データ領域へ複数回アクセスすると、バスマスタ１０５の発行するアクセスがバスマスタ１０４の発行するアクセスよりも優先的にコマンド制御回路１０１５に発行されるので、アクセスキュー１０１４は図３（Ｆ）のようになる。
【００７７】
以上のように、ディスクリプタへのアクセス時に、そのディスクリプタの指し示す領域へのアクセスの優先度を決定することができ、優先度の高い処理を優先度の低い処理よりも優先的に処理することができる。同じバスマスタが異なるディスクリプタへアクセスし、前記異なるディスクリプタのアドレスに対して異なる優先度が設定されていれば、同じバスマスタであっても処理の優先度を切り替えることが可能である。
【００７８】
例えば、バスマスタ１０４がディスクリプタ１１２１をリードし、ディスクリプタ１１２１の指し示すデータ領域１０２３からデータをリードしてジョブを実行する。
【００７９】
次にディスクリプタ１１２２をリードし、ディスクリプタ１１２２の指し示すデータ領域１０２４からデータをリードしてジョブを実行する。ディスクリプタ１１２１とディスクリプタ１１２２のアドレスから優先度が決定し、ディスクリプタ１１２１のアドレスとディスクリプタ１１２２のアドレスに対して設定されている優先度が異なれば、同じバスマスタであっても処理ごとに優先度が切り替えられる。
【００８０】
また、本実施形態のように同じバスインタフェースであっても処理ごとに優先度が切り替えられる。さらに、アクセスが同じデータ領域であっても異なるディスクリプタのアドレスに対して異なる優先度が設定されており、前記異なるディスクリプタが同じデータ領域を指し示していれば、処理の優先度を切り替えることが可能である。
【００８１】
例えば、ディスクリプタ１１２１とディスクリプタ１１２２が同じデータ領域１０２３を指し示していたとすると、バスマスタ１０４とバスマスタ１０５は同じデータ領域１０２３からデータをリードしてジョブを実行する。しかし、ディスクリプタ１１２１のアドレスとディスクリプタ１１２２のアドレスに対して設定されている優先度が異なれば、同じデータ領域へのアクセスであっても処理ごとに優先度が切り替えられる。
【図面の簡単な説明】
【００８２】
【図１】本発明のメモリシステムの第１の実施形態を表した構成図である。
【図２】本発明のメモリシステムの第１、第２の実施形態におけるメモリデバイスのアドレスを表した図である。
【図３】本発明のメモリシステムの第１、第２の実施形態におけるアクセスキューの内容を表した図である。
【図４】本発明のメモリシステムの第１、第２の実施形態におけるディスクリプタ情報登録内容を表した図である。
【図５】本発明のメモリシステムの第２の実施形態を表した構成図である。
【符号の説明】
【００８３】
１０１  メモリコントローラ
１０２  メモリデバイス
１０３  バス
１０４，１０５  バスマスタ
１０１１  ディスクリプタ領域リスト
１０１２  アドレス判別回路
１０１３  データ領域判別回路
１０１４  アクセスキュー
１０１５  コマンド制御回路
１０１６  ディスクリプタデコード回路
１０１７  ディスクリプタ情報登録回路
１０１８  リターンキュー
１０２１，１０２２，１１２１，１１２２  ディスクリプタ
１０２３，１０２４  データ領域
１１０１  ディスクリプタアドレスリスト
１２０１  ディスクリプタ優先度リスト
【図１】
2010128604.tif 000003
【図２】
2010128604.tif 000004
【図３】
2010128604.tif 000005
【図４】
2010128604.tif 000006
【図５】
2010128604.tif 000007