(57)【要約】【課題】バスマスタがアクセスするアドレスがアクセスごとに変化してもアクセス順序が保証できるようにする。【解決手段】メモリコントローラ９００は、バスマスタからのアクセスの最終アドレスを設定するレジスタを備える。またメモリコントローラ９００は、最終アドレスへのアクセスを受けとり、アクセスがメモリへ発行される順番が確定すると通知信号を出力し、通知信号に応じて第２のバスマスタからのアクセスを開始する。【選択図】図１
2011013812.tif 000002
【特許請求の範囲】
【請求項１】
複数のバスマスタと前記複数のバスマスタからアクセスされるメモリコントローラと前記メモリコントローラがアクセスするメモリとから構成されるシステムにおいて、
前記メモリコントローラは、
バスマスタからのアクセスの最終アドレスを設定するレジスタと、
前記最終アドレスへのアクセスを受けとり、前記アクセスがメモリへ発行される順番が確定すると通知信号を出力し、前記通知信号に応じて他のバスマスタからのアクセスを開始する制御手段とを備えたことを特徴とするメモリシステム。
【請求項２】
複数の最終アドレスレジスタを備えることを特徴とする請求項１に記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数バスマスタがメモリアクセスを行うメモリシステムに関し、特に複数バスマスタのメモリアクセス順序保証を行う技術に関するものである。
【背景技術】
【０００２】
複数のバスマスタが同一のメモリ領域を用いて読み書きを行う場合、読み出しのメモリアクセスが書き込みのメモリアクセスを追い越すと、結果として不正データを読み出してしまう可能性がある。このようにアクセスをバッファリングする機能が存在する場合、バスマスタによる書き込み処理よりも後に開始したバスマスタによる読み出し処理がメモリコントローラに先に到達し、書き込み処理よりも先に処理されてしまう可能性がある。
【０００３】
このような課題の回避方法として、バスマスタＡが転送した最後のデータを読み出し（ダミーリード）、データの書き込みが終了したことを確認してからバスマスタＢの読み出し処理を起動する、といったものがある。また、バスマスタＡが最後のデータを転送してからある程度の時間経過を待ってバスマスタＢの読み出し処理を起動する、といった手法がよく知られている。
【０００４】
しかしながら、最初の手法では無駄な読み出しアクセスが発生しシステム全体の性能が下がる可能性がある。また、後の手法では最適な待ち時間を割り出すのが困難である。といった課題がある。これらの課題を解決するために、メモリコントローラがメモリの共有領域の最終アドレスへの書き込み要求がメモリに対して発行されたことをバスマスタBに通知する、といったものが提案されている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２４１６１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
スキャン処理やプリント処理は一般的にライン単位で行われる。このときスキャン処理を行うバスマスタは複数ライン分のラインバッファを持ち、空いたラインバッファを使用しながらラインごとに処理を行うことでページ単位で処理するよりもバッファ容量を削減することができる。何ライン分のバッファを必要とするかはシステムに依存して決定される。プリント処理を行うバスマスタも同様に複数ライン分のラインバッファを持ち、空いたラインバッファを使用しながらラインごとに処理を行う。
【０００７】
例えば1ラインあたりのデータサイズが１ＫＢであるとすると、バスマスタＡが１ライン目のデータをアドレス0x0〜0x3FFに書き込む。バスマスタＢがそのデータを読み出している間にバスマスタＡは２ライン目のデータをアドレス0x400〜0x7FFに書き込む。バスマスタＢが0x400〜0x7FFからデータを読み出している間にバスマスタＡは３ライン目のデータをアドレス0x0〜0x3FFに書き込む。このように書き込みアクセスの最終アドレスが0x3FF→0x7FF→0x3FF→0x7FF→…と変化する。
【０００８】
上述したようにライン単位で処理が実行される場合、アクセスごとにメモリのアドレスを変更する必要がある。しかしながら、前記の手法ではアクセスの最終アドレスが常に同じでなければならず最終アドレスが変化する場合に対応できない。また、順序を保証する必要がある書き込み、読み出しを行うバスマスタの組み合わせが複数ある場合に対応できない。
【０００９】
また、メモリコントローラ内でメモリアクセスの順序が確定したとしてもメモリにアクセスを発行するまで書き込み終了通知を出さないため、読み出しの開始が遅れシステム全体での性能が低下する。
【００１０】
そこで、本発明の目的は、バスマスタがアクセスするアドレスがアクセスごとに変化してもアクセス順序を保証することにある。
【課題を解決するための手段】
【００１１】
本発明のメモリシステムは、複数のバスマスタと前記複数のバスマスタからアクセスされるメモリコントローラと前記メモリコントローラがアクセスするメモリとから構成されるシステムにおいて、前記メモリコントローラは、バスマスタからのアクセスの最終アドレスを設定するレジスタと、前記最終アドレスへのアクセスを受けとり、前記アクセスがメモリへ発行される順番が確定すると通知信号を出力し、前記通知信号に応じて他のバスマスタからのアクセスを開始する制御手段とを備えたことを特徴とする。
【発明の効果】
【００１２】
本発明によれば、バスマスタがアクセスするアドレスがアクセスごとに変化してもアクセス順序が保証できる。また、複数アクセスが先行して発行される場合はアクセスの最終アドレスを複数設定することでアクセス順序が保証できる。また、書き込み、読み出しを行うバスマスタの組み合わせが複数ある場合にもアクセス順序が保証できる。さらに、メモリコントローラ内でアクセス順序が確定した時点でアクセス終了を通知することで次のアクセスを早期に開始できシステム全体での性能が向上する。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態に係るメモリシステムの構成を示す図である。
【図２】本発明の実施形態に係るメモリシステムの動作を示すタイミングチャートである。
【図３】本発明の実施形態に係るメモリシステムの動作を示すタイミングチャートである。
【発明を実施するための形態】
【００１４】
図１は、本発明の実施形態に係るメモリシステムの構成図である。図１において、１０１、１０２はメモリアクセスを行うバスマスタである。２０１、２０２はシステムバスである。２０３はメモリコントローラのレジスタ設定用のレジスタバスである。４００はバスマスタ１０２を起動するプロセッサである。プロセッサ４００はレジスタバス２０３を介してメモリコントローラのレジスタアクセスも行う。９００はメモリコントローラである。９０１はシステムバス２０１、２０２からのアクセスを調停する調停回路である。９０２は調停回路９０１で選択されたアクセスを保持するアクセスバッファである。アクセスバッファ９０２は受信したアクセスがメモリにアクセスされる順番が確定するとそのアドレスを通知信号として通知する。９０３はアクセスバッファ９０２で処理順序が確定したアクセスから順番にメモリアクセスを行うメモリアクセス回路である。９０４はバス２０３からのレジスタアクセスを制御してメモリコントローラ内部のレジスタを設定するレジスタアクセス回路である。９０５はバスマスタ１０１からの書き込みアクセスの最終アドレスを設定するためのレジスタである。９０６はアクセスバッファ９０２から通知されるアドレスと最終アドレスレジスタ９０５のアドレスを比較し、一致する場合は最終アクセスの順番が確定したことを通知するアドレス判定回路である。３００はメモリコントローラ９００によってアクセスされるメモリである。
【００１５】
ここでは複合機がスキャンしたデータをプリントするコピー機能を例に説明する。バスマスタ１０１はスキャナ（図示しない）から受信するデータを受信してメモリ３００に書き込みアクセスを行うものとする。バスマスタ１０２はバスマスタ１０２がメモリ３００に書き込んだデータを読み出してプリンタ（図示しない）に送信するものとする。また、奇数ライン目のデータはメモリ領域のアドレス0x0〜0x3FFに書き込まれ、偶数ライン目のデータはメモリ領域のアドレス0x400〜0x7FFに書き込まれるものとする。スキャナからデータの受信が開始されるとプロセッサ４００は奇数ライン目であれば0x3FFを、偶数ライン目であれば0x7FFを最終アドレスレジスタ９０５に設定し、バスマスタ１０１の書き込み処理を起動する。本実施形態ではプロセッサ４００が最終アドレスレジスタ９０５の設定とバスマスタ１０１の起動を行っているが、本発明ではプロセッサであることに限定しない。
【００１６】
調停回路９０１はアクセスバッファ９０２に空きバッファがあることを監視し、システムバス２０１とシステムバス２０２からのアクセス調停を行う。調停回路９０１によってアクセスを許可されたシステムバス上のアクセスをアクセスバッファ９０２に転送する。アクセスバッファ９０２はアクセスを１つのみ保持できるものでもよいし、複数保持できるものでもよい。複数保持できる場合はアクセスバッファ９０２において保持されたアクセスに対してリオーダリング処理をしてもよい。
【００１７】
アクセスを１つのみ保持できる場合、アクセスバッファ９０２は書き込みアクセスが入力されるとその最終アドレスをアドレス判定回路９０６に通知する。アクセスを複数保持できりオーダリング処理をしない場合、アクセスバッファ９０２は書き込みアクセスが入力されるとその最終アドレスをアドレス判定回路９０６に通知する。
【００１８】
アクセスを複数保持できるオーダリング処理をする場合、アクセスバッファ９０２は保持しているアクセスに対してリオーダリング処理をする。そして、書き込みアクセスがメモリアクセス回路９０３によって処理される順番が確定したときにその最終アドレスを通知信号としてアドレス判定回路９０６に出力する。
【００１９】
アクセスバッファ９０２で処理順番が確定したアクセスから順にメモリアクセス回路９０３がメモリ３００に対してメモリアクセスを行う。アドレス判定回路９０６はアクセスバッファ９０２から通知されたアドレスが最終アドレスレジスタ９０５に設定されたアドレスと一致するかを判定する。一致する場合は、書き込みアクセスがそれ以降にバスマスタに発行されるアクセスによって追い越されないことを通知する。
【００２０】
起動回路５００はアドレス判定回路９０６からの通知に応じてバスマスタ１０２の読み出し処理を起動する。以上述べたようにアクセスの最終アドレスがアクセスごとに変化しても２つのアクセス間でのメモリアクセス順序を保証できる。最終アドレスレジスタを複数アドレスが設定できる構成にすることで、読み出しアクセスがアクセスバッファに受信される前に次の書き込みアクセスがアクセスバッファに受信される場合にも順序保証が可能となる。その場合、設定されたアドレスから順にアドレス判定回路の判定に使用される。
【００２１】
例えば、図２に示すように0x0〜0x3FFへの書き込み→0x400〜0x7FFへの書き込み→0x0〜0x3FFからの読み出し→0x400〜0x7FFからの読み出しといった順で処理される場合を示す。0x0〜0x3FFへの書き込みを開始時（Ｔ１）に最終アドレスレジスタにアドレス0x3FFを設定し、0x400〜0x7FFへの書き込みを開始時（Ｔ４）にアドレス0x7FFを設定する。このとき0x0〜0x3FFからの読み出しはまだ実行されておらず、最終アドレスレジスタはＴ４〜Ｔ６の期間はアドレス0x3FFと0x7FFを保持する必要がある。であるから最終アドレスレジスタは複数アドレスが設定できる構成となる。図４では最終アドレスレジスタをFIFO構成としているためREG[0]から0x3FFが取り出されるとREG[1]の0x7FFがREG[0]に設定されている（Ｔ６）。
【００２２】
さらに、最終アドレスレジスタを複数アドレスが設定できる構成にすることで、バスマスタＡとバスマスタＢ間でのアクセス順序保証とバスマスタＣとバスマスタＤ間でのアクセス順序保証を行う場合にも順序保証が可能となる。
【００２３】
例えば、図３に示すようにバスマスタＡが0x0〜0x3FFにデータを書き込み、バスマスタＢがそのアドレスから読み出す。それと同時にバスマスタCが0x800〜0xBFFにデータを書き込み、バスマスタＤがそのアドレスから読み出す場合、バスマスタＡによる0x0〜0x3FFへの書き込み開始時（Ｔ１）に最終アドレスレジスタにアドレス0x3FFを設定する。バスマスタＣによる0x800〜0xBFFへの書き込み開始時（Ｔ３）に最終アドレスレジスタ９０５にアドレス0xBFFを設定する。このときバスマスタＢによる0x0〜0x3FFからの読み出しはまだ実行されておらず、最終アドレスレジスタはＴ５〜Ｔ７の期間はアドレス0x3FFと0xBFFを保持する必要がある。であるから最終アドレスレジスタはバスマスタＡとバスマスタＢのアクセス、バスマスタＣとバスマスタＤのアクセスそれぞれに最終アドレスレジスタを設定できる構成となる。
【００２４】
本実施形態では、バスマスタ１０２を起動する起動回路５００を設けているが、プロセッサ４００がアドレス判定回路９０６からの通知に応じてバスマスタ１０２の読み出し処理を起動する構成であっても構わない。
【００２５】
本実施形態では、読み出しアクセスが書き込みアクセスを追い越さないことを保証することに限定して説明しているが、本発明の技術は書き込み、読み出しに関わらず２つのアクセス間でのメモリアクセス順序を保証することができる。
【００２６】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００２７】
１０１、１０２：バスマスタ、２０１、２０２：システムバス、２０３：レジスタバス、３００：メモリ、４００：プロセッサ、５００：起動回路、９００：メモリコントローラ、９０１：調停回路、９０２：アクセスバッファ、９０３：メモリアクセス回路、９０４：レジスタアクセス回路、９０５：最終アドレスレジスタ、９０６：アドレス判定回路
【図１】
2011013812.tif 000003
【図２】
2011013812.tif 000004
【図３】
2011013812.tif 000005