(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-07-30
(45)【発行日】2024-08-07
(54)【発明の名称】メモリ制御装置、メモリ制御方法及び画像形成装置
(51)【国際特許分類】
G06F 12/00 20060101AFI20240731BHJP
G06F 12/06 20060101ALI20240731BHJP
H04N 1/21 20060101ALI20240731BHJP
【FI】
G06F12/00 571B
G06F12/00 580
G06F12/06 540E
G06F12/00 560B
H04N1/21
(21)【出願番号】P 2019227620
(22)【出願日】2019-12-17
【審査請求日】2022-11-30
(32)【優先日】2018-12-31
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-12-31
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-12-31
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-12-31
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-07-31
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-11-10
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】000006150
【氏名又は名称】京セラドキュメントソリューションズ株式会社
(74)【代理人】
【識別番号】100115831
【氏名又は名称】藤岡 隆浩
(72)【発明者】
【氏名】中村 匡芳
(72)【発明者】
【氏名】ドンペイ ス
【審査官】田名網 忠雄
(56)【参考文献】
【文献】米国特許出願公開第2018/0173649(US,A1)
【文献】特開2010-262429(JP,A)
【文献】特開2009-193107(JP,A)
【文献】特開2010-218323(JP,A)
【文献】特開2006-099199(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 12/06
H04N 1/21
(57)【特許請求の範囲】
【請求項1】
複数のバンクを有するバンクグループを複数有するメモリを制御するためのメモリ制御装置であって、
書込みデータを含み、前記メモリへのデータの書込みを要求する書込み要求データセットと、前記メモリからのデータの読出しを要求する読出し要求データセットとを受信し、前記読出しの要求に応じて読み出された読出しデータを送信する送受信部と、
前記書込み要求データセットを使用し、前記書込みデータの書込み先を前記メモリ内の所定の領域毎に分割して転送IDを付して前記所定の領域毎に書込み制御データを生成し、前記読出し要求データセットを使用し、前記読出しデータの読出し先を前記所定の領域毎に分割して転送IDを付して前記所定の領域毎に読出し制御データを生成するデータ処理部と、
前記書込みデータを一時的に格納する書込みバッファと、
同一バンクグループ内において処理が制限されるコマンド間隔であるバンクグループ内制約時間と、相違するグループ間において処理が制限されるコマンド間隔であるバンクグループ間制約時間とに基づいて、前記書込み制御データと前記読出し制御データとをマスクし、前記マスクの対象外のコマンドを格納する調停キューと、
前記調停キューに格納された前記書込み制御データと前記読出し制御データとを対象として処理の優先順位を決定する調停を実行する調停部と、
前記優先順位に基づいて選択された前記書込み制御データを使用して前記書込みバッファに格納された前記書込みデータを前記メモリに書き込み、前記優先順位に基づいて選択された前記読出し制御データを使用して前記メモリから読み出された読出しデータを一時的に読出しバッファに格納するためのコマンドを生成するコマンド生成部と、
を備え、
前記複数のバンクグループは、それぞれ複数のローカルバッファに接続され、
前記複数のローカルバッファは、前記メモリの外部からアクセス可能な単一のグローバルバッファに接続されているメモリ制御装置。
【請求項2】
請求項1に記載のメモリ制御装置であって、
前記メモリ制御装置は、前記メモリの制御における処理の優先性を表す処理優先性データを生成し、
前記処理優先性データを所定の時間経過毎に変動させ、
前記制御データの生成は、前記書込み要求データセットと前記処理優先性データとを使用し、前記書込みデータの書込み先を前記メモリ内の所定の領域毎に分割して前記処理優先性データと転送IDを付して前記所定の領域毎に書込み制御データを生成し、前記読出し要求データセットと前記処理優先性データとを使用し、前記読出しデータの読出し先を前記所定の領域毎に分割して前記処理優先性データと転送IDを付して前記所定の領域毎に読出し制御データを生成し、
前記調停は、
前記変動によって予め設定されている閾値を通過した前記処理優先性データを検出し、前記検出された少なくとも1つの処理優先性データをキューに保持し、
前記キューに保持された処理優先性データの処理が完了するまで、前記処理優先性データの検出を停止するメモリ制御装置。
【請求項3】
請求項2に記載のメモリ制御装置であって、
前記メモリ制御装置は、読出し又は書込みの一方向を処理し、読出し状態、書込み状態、読出しから書込みへの第1の遷移状態及び書込みから読出しへの第2の遷移状態を含む複数の状態を有するデータバスを使用して前記読出し又は前記書込みを実行し、
前記データバスが前記第1の遷移状態にあるときには、前記読出し制御データを実行するためのコマンドと、前記書込み制御データを処理するためのアクティベートコマンドの優先順位を上げるメモリ制御装置。
【請求項4】
請求項2又は3のいずれか1項に記載のメモリ制御装置であって、
前記メモリ制御装置は、読出し又は書込みの一方向を処理し、読出し状態、書込み状態、読出しから書込みへの第1の遷移状態及び書込みから読出しへの第2の遷移状態を含む複数の状態を有するデータバスを使用して前記読出し又は前記書込みを実行し、
前記データバスが前記第2の遷移状態にあるときには、前記書込み制御データを実行するためのコマンドと、前記読出し制御データを処理するためのアクティベートコマンドの優先順位を上げるメモリ制御装置。
【請求項5】
請求項2乃至4のいずれか1項に記載のメモリ制御装置であって、
前記書込み要求データセット及び前記読出し要求データセットは、通信の優先性を表す通信優先性データを含み、
前記処理優先性データは、前記通信優先性データを使用して生成されるメモリ制御装置。
【請求項6】
画像読取装置であって、
プロセッサと、
メモリと、
請求項5記載のメモリ制御装置と、
画像を読取ることによって画像データを生成する画像読取部と、
を備え、
前記画像読取部は、前記通信優先性データを含む前記書込み要求データセットを使用して、前記生成された画像データを前記メモリに書き込む画像読取装置。
【請求項7】
画像送信装置であって、
プロセッサと、
メモリと、
請求項5記載のメモリ制御装置と、
通信対象となる画像データを使用して画像を送信する画像送信部と、
を備え、
前記画像送信部は、前記通信優先性データを含む前記読出し要求データセットを使用して、前記画像データを前記メモリから読み出す画像送信装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリ制御装置、メモリ制御方法及び画像形成装置プログラムに関する。
【背景技術】
【0002】
画像形成装置(たとえばプリンター、多機能プリンター、又は複合機(Multifunction Peripheral))は、画像処理等に用いるメモリとしてSDRAM (Synchronous Dynamic Random Access Memory)を利用することが多くなっている。SDRAMは、高速な入出力インターフェースを備えている。近年では、さらに、DDR SDRAM(Double-Data-Rate Synchronous Dynamic Random Access Memory)が実現化され、インターフェース仕様としてのAXI(Advanced eXtensible Interface)の導入に伴い、入出力インターフェースの高速化が進んでいる。
【先行技術文献】
【特許文献】
【0003】
【文献】特開2017-157217号公報
【文献】特開2007-72930号公報
【文献】特開2010-134628号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、従来技術では、メモリ制御装置の内部における調停処理については十分な検討がなされていなかった。
【0005】
本発明は、このような状況に鑑みてなされたものであり、メモリ制御装置の内部における調停処理を使用するメモリ制御の高速化を実現することを目的とする。
【課題を解決するための手段】
【0006】
本発明は、複数のバンクを有するバンクグループを複数有するメモリを制御するためのメモリ制御装置を提供する。前記のメモリ制御装置は、書込みデータを含み、前記メモリへのデータの書込みを要求する書込み要求データセットと、前記メモリからのデータの読出しを要求する読出し要求データセットとを受信し、前記読出しの要求に応じて読み出された読出しデータを送信する送受信部と、前記書込み要求データセットを使用し、前記書込みデータの書込み先を前記メモリ内の所定の領域毎に分割して転送IDを付して前記所定の領域毎に書込み制御データを生成し、前記読出し要求データセットを使用し、前記読出しデータの読出し先を前記所定の領域毎に分割して転送IDを付して前記所定の領域毎に読出し制御データを生成するデータ処理部と、前記書込みデータを一時的に格納する書込みバッファと、同一バンクグループ内において処理が制限されるコマンド間隔であるバンクグループ内制約時間と、相違するグループ間において処理が制限されるコマンド間隔であるバンクグループ間制約時間とに基づいて、前記書込み制御データと前記読出し制御データとをマスクし、前記マスクの対象外のコマンドを格納する調停キューと、前記調停キューに格納された前記書込み制御データと前記読出し制御データとを対象として処理の優先順位を決定する調停を実行する調停部と、前記優先順位に基づいて選択された前記書込み制御データを使用して前記書込みバッファに格納された前記書込みデータを前記メモリに書き込み、前記優先順位に基づいて選択された前記読出し制御データを使用して前記メモリから読み出された読出しデータを一時的に読出しバッファに格納するためのコマンドを生成するコマンド生成部とを備え、前記調停部は、前記複数のバンクグループのうち最後にアクセスした前記バンクグループに対する処理を要求する制御データの優先順位を上げる。
【0007】
本発明は、複数のバンクを有するバンクグループを複数有するメモリを制御するためのメモリ制御方法を提供する。前記のメモリ制御方法は、書込みデータを含み、前記メモリへのデータの書込みを要求する書込み要求データセットと、前記メモリからのデータの読出しを要求する読出し要求データセットとを受信し、前記読出しの要求に応じて読み出された読出しデータを送信し、前記書込み要求データセットを使用し、前記書込みデータの書込み先を前記メモリ内の所定の領域毎に分割して転送IDを付して前記所定の領域毎に書込み制御データを生成し、前記読出し要求データセットを使用し、前記読出しデータの読出し先を前記所定の領域毎に分割して転送IDを付して前記所定の領域毎に読出し制御データを生成し、前記書込みデータを一時的に書込みバッファに格納し、同一バンクグループ内において処理が制限されるコマンド間隔であるバンクグループ内制約時間と、相違するグループ間において処理が制限されるコマンド間隔であるバンクグループ間制約時間とに基づいて、前記書込み制御データと前記読出し制御データとをマスクし、前記マスクの対象外のコマンドを調停キューに格納し、前記調停キューに格納された前記書込み制御データと前記読出し制御データとを対象として処理の優先順位を決定する調停を実行し、前記優先順位に基づいて選択された前記書込み制御データを使用して前記書込みバッファに格納された前記書込みデータを前記メモリに書き込み、前記優先順位に基づいて選択された前記読出し制御データを使用して前記メモリから読み出された読出しデータを一時的に読出しバッファに格納するためのコマンドを生成し、前記複数のバンクグループのうち最後にアクセスした前記バンクグループに対する処理を要求する制御データの優先順位を上げる。
【発明の効果】
【0008】
本発明によれば、メモリ制御装置の内部における調停処理を使用するメモリ制御の高速化を実現するための技術を提供することができる。
【図面の簡単な説明】
【0009】
【
図1】本開示の第1実施形態に係る画像形成装置1の機能構成を示すブロックダイアグラムである。
【
図2】第1実施形態に係るメモリ制御部60の機能構成を示すブロックダイアグラムである。
【
図3】第1実施形態に係るメモリ制御回路600の機能構成を示すブロックダイアグラムである。
【
図4】第1実施形態に係るデータ制御部620の機能構成を示すブロックダイアグラムである。
【
図5】第1実施形態に係る内部調停部623の機能構成を示すブロックダイアグラムである。
【
図6】第1実施形態に係るバンク内調停部のコマンド要求の状態遷移図である。
【
図7】第1実施形態に係るバンク内調停処理手順の内容を示すフローチャートである。
【
図8】第1実施形態に係る要求ピックアップ処理の内容を示すフローチャートである。
【
図9】第1実施形態に係るメモリ制御回路600におけるデータ読出し処理に関する機能構成を示すブロックダイアグラムである。
【
図10】第1実施形態に係る順序管理部671の内容を示すブロックダイアグラムである。
【
図11】第1実施形態に係るデータ読出し処理手順の内容を示すフローチャートである。
【
図12】第1実施形態に係る転送ID登録処理の内容を示すフローチャートである。
【
図13】第1実施形態に係る読出しデータ出力処理の内容を示すフローチャートである。
【
図14】第1実施形態に係るメモリ制御回路600におけるデータ書込み処理に関する機能構成を示すブロックダイアグラムである。
【
図15】第1実施形態に係るデータ書込み処理手順の内容を示すフローチャートである。
【
図16】第1実施形態に係るアドレス監視処理手順の内容を示すフローチャートである。
【
図17】第2実施形態に係る内部調停部623aの機能構成を示すブロックダイアグラムである。
【
図18】第2実施形態に係るバンク間制御部6234aの制御方向ステータスの状態遷移図である。
【
図19】第2実施形態に係るtFAW制約の内容を示すタイミングチャートである。
【
図20】tFAW制約に起因するデータバスのストール状態を示すタイミングチャートである。
【
図21】第2実施形態に係る要求ピックアップ処理の内容を示すフローチャートである。
【
図22】第2実施形態に係る書込み要求ピックアップ処理(ステップS44a)及び読出し要求ピックアップ処理の内容を示すフローチャートである。
【
図23】第3実施形態に係る画像形成装置の機能構成を示すブロックダイアグラムである。
【
図24】第3実施形態に係る内部調停部の機能構成を示すブロックダイアグラムである。
【
図25】第3実施形態に係るタイムアウトノード調停処理の内容を示すフローチャートである。
【
図26】第3実施形態に係るバンク間調停処理(方向制御(IDLE時))の内容を示すフローチャートである。
【
図27】第3実施形態に係るバンク間調停処理(方向制御(WRITING時:タイムアウトノード不存在の場合))の内容を示すフローチャートである。
【
図28】第3実施形態に係るバンク間調停処理(方向制御(WRITING時:タイムアウトノード存在の場合))の内容を示すフローチャートである。
【
図29】第3実施形態に係るREAD切替処理の内容を示すフローチャートである。
【
図30】第3実施形態に係るバンク間調停処理(方向制御(READING時:タイムアウトノード不存在の場合))の内容を示すフローチャートである。
【
図31】第3実施形態に係るバンク間調停処理(方向制御(READING時:タイムアウトノード存在の場合))の内容を示すフローチャートである。
【
図32】第3実施形態に係るWRITE切替処理の内容を示すフローチャートである。
【
図33】第3実施形態に係るバンク間調停処理(方向制御(READ2WRITE時))の内容を示すフローチャートである。
【
図34】第3実施形態に係るバンク間調停処理(方向制御(WRITE2READ時))の内容を示すフローチャートである。
【発明を実施するための形態】
【0010】
以下、本発明を実施するための形態(以下、「実施形態」という)を、図面を参照して説明する。
【0011】
画像形成装置は、多くの機能を有し、高解像度化に伴って取り扱うデータ量も増大しつつあり、大容量の高速メモリ(たとえばDDRメモリ)を採用するものがある。本願発明者は、高速メモリの読み書きにおけるレイテンシの要求が機能毎に異なる点に着目し、このような観点から大容量の高速メモリの読み書きにおける効率的な調停機能を有するメモリ制御技術を創作した。本願発明者は、特にtFAW制約に対応して効率的な調停を実現する処理手順を創作した。
【0012】
以下、本開示を実施するための形態(以下、「実施形態」という)を、図面を参照して以下の順序で説明する。
A.第1実施形態に係る画像形成装置の機能構成:
B.第1実施形態に係るメモリ制御部の機能構成:
C.第1実施形態に係るバンク内調停処理手順:
D.第1実施形態に係るデータ読出し処理手順:
E.第1実施形態に係るデータ書込み処理手順:
F.第2実施形態に係る画像形成装置の機能構成(tFAW制約対応処理手順):
G.第3実施形態に係る画像形成装置の機能構成(バンク間調停処理手順):
H.変形例:
【0013】
A.画像形成装置の機能構成:
図1は、本開示の第1実施形態に係る画像形成装置1の機能構成を示すブロックダイアグラムである。画像形成装置1は、制御部10と、画像処理部20と、画像形成部30と、記憶部40と、画像読取部50と、メモリ制御部60と、これらを相互に接続するAXIバス90とを備えている。画像形成装置1は、さらに、メモリ制御部60によって制御されるDDRメモリ70と、物理層のインターフェースとして機能するDDR物理層インターフェース80とを備えている。画像処理部20は、RIP処理部21を有している。画像形成部30は、露光部31を有している。DDRメモリ70は、4つのバンク、すなわち、第1バンクB1と、第2バンクB2と、第3バンクB3と、第4バンクB4とを有している。
【0014】
画像形成装置1は、さらに、制御部10に接続されている第1AXIマスタ10Mと、画像処理部20に接続されている第2AXIマスタ20Mと、画像形成部30に接続されている第3AXIマスタ30Mと、記憶部40に接続されている第4AXIマスタ40Mと、画像読取部50に接続されている第5AXIマスタ50Mと、メモリ制御部60に接続されているNetwork Interconnect部(NIC部(たとえばAMBA Network Interconnect)とも呼ばれる。)60Mとを備えている。
【0015】
第1AXIマスタ10M、第2AXIマスタ20M、第3AXIマスタ30M、第4AXIマスタ40M、第5AXIマスタ50M及びNIC部60Mは、Direct Memory Access(DMA)制御機能を有し、それぞれ複数のAXI_IDを使用することができる。ただし、本実施形態では、第1AXIマスタ10M、第2AXIマスタ20M、第3AXIマスタ30M、第4AXIマスタ40M、第5AXIマスタ50M及びNIC部60Mは、説明を分かりやすくするために、それぞれ1つずつのAXI_IDを使用するものとする。AXI_IDは、管理IDとも呼ばれる。
【0016】
AXIバス90は、AXIプロトコルに従って各機器間の通信を可能とする。AXIバス90は、AXIプロトコルに基づいてキューオーエス(Quality of Service:QOS)値をサポートしている。この例では、QOS値は、値0乃至3の2ビットのデータとして通信の優先度を表している。具体的には、たとえばQOS値0は、専用帯域の使用の許可を示している。QOS値1は、高優先度を示し、QOS値2は、中優先度を示し、QOS値3は、低優先度を示している。QOS値は、通信優先性データとも呼ばれる。
【0017】
制御部10は、MPU(Micro Processing Unit)やCPU(Central Processing Unit)等のプロセッサを備えている。また、制御部10は、各種I/O、USB(ユニバーサル・シリアル・バス)、バス、その他ハードウェア等のインターフェースに関連するコントローラ機能を備えている。制御部10は、画像形成装置1の全体を制御する。
【0018】
記憶部40は、非一時的な記憶媒体であるハードディスクドライブやフラッシュメモリー等からなる記憶装置で、それぞれ制御部10が実行する処理の制御プログラムやデータを記憶する。
【0019】
画像読取部50は、原稿から画像を読み取って(すなわちスキャンして)デジタルデータである画像データを生成する。画像読取部50は、第5AXIマスタ50MとAXIバス90とNIC部60Mとメモリ制御部60とを順に介して、DDRメモリ70に画像データを書き込むことができる。第5AXIマスタ50Mは、NIC部60Mのマスタモジュールとして機能する。NIC部60Mは、第5AXIマスタ50Mのスレーブモジュールとして機能する。NIC部60Mは、メモリ制御部60のマスタモジュールとして機能する。メモリ制御部60は、NIC部60MのAXIスレーブモジュールとして機能する。
【0020】
第5AXIマスタ50Mは、制御部10からの指令に応じて、DMA制御機能によって、QOS値0を付して画像データを含む書込み要求パケットをAXIバス90に送信する。AXIバス90は、第5AXIマスタ50Mからの指令に応じて、帯域及びレイテンシを確保し、QOS値0が付され、書込み対象である画像データを含む書込み要求パケットを、帯域を使用してNIC部60Mに送信する。
【0021】
NIC部60Mは、書込み要求パケットに応じてメモリ制御部60を使用してDDRメモリ70に画像データを書き込む。これにより、画像読取部50は、DDRメモリ70に画像データを書き込むことができる。書込み要求パケットは、詳細については後述するが、書込み要求データセットとも呼ばれる。
【0022】
画像処理部20は、DDRメモリ70から画像データを読出して画像データを受信することができる。具体的には、第2AXIマスタ20Mは、画像処理部20からの指令に応じて、DMA制御機能によってQOS値3が付された読出し要求データセットをAXIバス90に送信する。AXIバス90は、帯域を使用することなく、QOS値3が付された読出し要求データセットをNIC部60Mに送信する。
【0023】
NIC部60Mは、読出し要求データセットに応じてメモリ制御部60を使用してDDRメモリ70から画像データを読出してAXIバス90に送信する。AXIバス90は、画像データを含む読出しデータパケットを第2AXIマスタ20Mに送信する。
【0024】
画像処理部20のRIP(raster image processor)処理部21は、第2AXIマスタ20Mから受信した画像データに対してRIP処理を実行する。これにより、RIP処理部21は、各色のピクセルマップデータであるピクセルデータを生成することができる。RIP処理には、色変換処理と、ハーフトーン処理とが含まれている。
【0025】
次に画像処理部20は、第2AXIマスタ20MとAXIバス90とNIC部60Mとメモリ制御部60とを順に介して、DDRメモリ70にピクセルデータを書き込むことができる。これにより、画像形成装置1は、ピクセルデータを一時的に保存することができる。
【0026】
画像形成部30は、画像処理部20と同様に、メモリ制御部60とNIC部60MとAXIバス90と第3AXIマスタ30Mとを順に介して、DDRメモリ70からピクセルデータを読出してピクセルデータを受信することができる。ただし、第3AXIマスタ30Mは、QOS値0を使用してDDRメモリ70からの読出し処理を実行する。
【0027】
画像形成部30の露光部31は、各色のピクセルデータにハーフトーン処理を実行してドットデータを生成する。ドットデータは、色材を使用して印刷媒体上に形成されるドット形成状態を表すためのデータである。露光部31は、ドットデータに基づいて各色の現像ドラム(図示略)に対して露光処理を実行することができる。画像形成部30は、露光処理に引き続き、現像処理や定着処理を実行して画像形成処理を実行することができる。
【0028】
AXIバス90は、AXIプロトコルに基づいてキューオーエス(Quality of Service:QOS)値をサポートしている。AXIバス90は、QOS値を使用して画像データやピクセルデータの送受信のために帯域制御や優先制御を実行することができる。これにより、画像形成装置1は、効率的で信頼性の高い内部通信を実現することができる。
【0029】
具体的には、第5AXIマスタ50Mは、画像読取時においてDDRメモリ70に画像データを書き込む際には、画像読取部50からDDRメモリ70への画像データの送信のための帯域及びレイテンシをAXIバス90に確保させることができる。これにより、画像形成装置1は、帯域を使用して画像データを送信することができるので、画像読取処理において順次生成される画像データの過度の送信遅延に起因するデータ廃棄(データ欠落)を排除することができる。
【0030】
一方、画像処理部20は、画像処理時においてDDRメモリ70から画像データを読出して受信する際には、一時的に低速となっても大きな問題とはならない。画像データは、DDRメモリ70に格納されているので、画像データの過度の送信遅延があっても画像データが失われることはないからである。画像処理部20は、画像処理後においてピクセルデータをDDRメモリ70に書き込む際にも、帯域及びレイテンシをAXIバス90に確保させる必要がない。
【0031】
これに対して、制御部10は、画像形成時においてDDRメモリ70からピクセルデータを読出して画像形成部30の露光部31に送信する際には、固定した速度、すなわち適切なレイテンシでピクセルデータを送信することが望まれる。これにより、画像形成装置1は、帯域を使用してピクセルデータを送信することができるので、画像形成処理において露光部31に順次必要とされるピクセルデータの過度の送信遅延に起因するドット抜け(画像欠落)を排除することができる。
【0032】
このように、画像形成装置1は、メモリ制御部60と、他の機器(すなわち、制御部10、画像処理部20、画像形成部30と、記憶部40及び画像読取部50)との間の通信においては、QOS値を使用して効率的で信頼性の高い内部通信を実現することができる。
【0033】
しかしながら、本願発明者は、メモリ制御部60の内部処理に関しては、優先制御等について十分に検討されていない点に着目した。本願発明者は、メモリ制御部60の制御対象となるメモリの容量拡大と読み書き速度の高速化の要請とを考慮し、メモリ制御部60の内部処理の効率化について検討した。
B.メモリ制御部の機能構成:
【0034】
図2は、第1実施形態に係るメモリ制御部60の機能構成を示すブロックダイアグラムである。メモリ制御部60は、通信調停部700と、通信制御部800と、メモリ制御回路600とを備えている。メモリ制御部60は、DDRメモリ70へのデータの書込みと、DDRメモリ70からのデータの読出しとを制御する。この例では、メモリ制御部60は、AXI仕様に基づいて、読出しは、読出しアドレスチャネル(R/Address)と、読出しデータチャネル(R/Data)とを使用し、書込みは、書込みアドレスチャネル(W/Address)と、書込みデータチャネル(W/Data)と、書込み応答チャネル(W/Response)とを使用してNIC部60Mと通信する。以下では、画像読取部50からDDRメモリ70に画像データを書き込む処理を第1の例として説明する。
【0035】
画像データを書き込む処理では、メモリ制御部60は、書込みアドレスチャネル(W/Address)と、書込みデータチャネル(W/Data)と、書込み応答チャネル(W/Response)とを使用してNIC部60Mと通信を行う。具体的には、メモリ制御部60は、書込みアドレスチャネル(W/Address)を使用して制御データをパケット(制御パケットとも呼ばれる。)のような形で受信し、書込みデータチャネル(W/Data)を使用して画像データをパケット(データパケットとも呼ばれる。)のような形で受信し、画像データの最終パケットの受信に応じて書込み応答チャネル(W/Response)を使用して書込み応答信号をNIC部60Mに送信する。制御データには、アドレスとQOS値とAXI_IDとが含まれる。書込み要求パケットは、書込みアドレスチャネル(W/Address)を使用して送信される制御データと、書込みデータチャネル(W/Data)を使用して送信される画像データとの組み合わせであり、書込み要求データセットとも呼ばれる。
【0036】
通信調停部700は、DDRメモリ70へのデータの書込み要求とデータの読出し要求との間の通信調停を実行する。DDRメモリ70へのデータの書込みとデータの読出しは同時には実行できない一方、NIC部60Mは、書込み要求と読出し要求とを独立して調停するので、メモリ制御部60は、書込み要求パケットと読出し要求パケットとを同時に受信することがあるからである。これにより、メモリ制御部60は、データの書込みとデータの読出しが同時には実行できないDDRメモリ70の制御を行いつつ、NIC部60Mからの書込み要求パケットと読出し要求パケットの同時受信を可能としている。
【0037】
通信制御部800は、パケット受信部810と、分岐部820と、QOS変換部830とを備えている。パケット受信部810は、通信調停部700からパケットを受信し、制御データと書込みデータとを分岐部820に送信する。パケット受信部810は、さらに、制御パケットからQOS値を取り出して、QOS変換部830に送信する。QOS変換部830は、処理優先性データ生成部とも呼ばれる。通信制御部800は、単に送受信部とも呼ばれる。
【0038】
QOS変換部830は、0乃至3の値を有するQOS値をメモリ内サイクル値(単にDCV(Due Cycle Value)値とも呼ばれる。)に変換する。具体的には、QOS変換部830は、予め準備されているテーブル(図示略)を使用して、0乃至3のQOS値をそれぞれ150、200、250及び300のDCV値(初期値)に変換する。テーブルは、固有のQOS値の許容レイテンシ要求であるQOS値の優先性に応じて、たとえばシミュレーション等を使用して優先度の高いQOS値ほど小さなDCV値に変換できるようにすることが好ましい。DCV値は、処理優先性データとも呼ばれる。
【0039】
分岐部820は、制御パケットに含まれるアドレスを解析して処理が複数のバンク(後述、所定の領域とも呼ばれる。)や複数のRow(行並びに所定の領域とも呼ばれる。)に渡る処理であると判断すると、バンク毎及びRow毎のトランザクションTに分割する。各トランザクションTは、AXI_ID、書込みアドレス、書込みデータ及び転送ID(後述する書込みバッファ制御部611から供給)又はAXI_ID、読出しアドレス及び転送ID(後述する読出しバッファ制御部612から供給)を格納している。書込みアドレスは、アドレスデータ(WorR/Address)において書込みフラグが立っているデータである。分岐部820は、さらに、各トランザクションTのAXI_IDに同一のDCV値を紐付けてメモリ制御回路600に送信する。
【0040】
図3は、第1実施形態に係るメモリ制御回路600の機能構成を示すブロックダイアグラムである。メモリ制御回路600は、バッファ制御部610と、データ制御部620と、コマンド生成部630と、書込み制御部640と、読出し制御部650と、バンク制御回路660と、順序制御部670と、書込みバッファ681と、書込みバッファテーブル682と、読出しバッファ691と、読出しバッファテーブル692とを備える。バッファ制御部610は、書込みバッファ制御部611と、読出しバッファ制御部612とを備えている。書込みバッファ681及び読出しバッファ691は、単にバッファとも呼ばれる。トランザクションTには、書込みトランザクションTと読出しトランザクションTとがある。
【0041】
書込みバッファ制御部611は、書込み処理用の転送ID(WtransID)を管理し、分岐部820に供給する。具体的には、書込みバッファ制御部611は、書込みトランザクションT毎に空いている転送IDを割り当てるとともに、書込みバッファ681内に格納領域を割り当て、転送IDに紐づけして割り当て領域を表す情報を書込みバッファテーブル682に記録する。書込みバッファ制御部611は、割り当てられた格納領域に順次AXIマスタの書込みデータチャネル(W/Data)からやってくる書込みデータを書込む。書込み制御部640は、書込みバッファ681内から書込みデータを読み出し、バンク制御回路660を介して、DDRメモリ70に書込みデータが転送された後に転送IDを解放する。
【0042】
読出しバッファ制御部612は、読出し処理用の転送ID(RtransID)を管理し、分岐部820に供給する。具体的には、読出しバッファ制御部612は、読出しトランザクションT毎に空いている転送IDを割り当てるとともに、読出しバッファ691内に格納領域を割り当て、転送IDに紐づけして割り当て領域を表す情報を読出しバッファテーブル692に記録する。読出し制御部650は、割り当てられた読出しバッファにDDRメモリ70から読み出した読出しデータを書込む。読出し制御部650は、読出しバッファ691内から読出しデータを読み出し、順序制御部670を介して、AXIの読出しデータチャネルでAXIマスタに出力した後に転送IDを解放する。
【0043】
バッファ制御部610は、各トランザクションTを受信して解析する。書込みバッファ制御部611は、書込みデータを書込みバッファ681に送信し、書込みバッファ681の各領域に、DDRメモリ70への書込みまで一時的に格納する。書込みバッファ制御部611は、書込みバッファ681内における書込みデータの格納領域を特定するバッファ内アドレスを書込みバッファテーブル682に転送IDと紐付けて格納する。一方、バッファ制御部610は、各トランザクションTのうちの制御データ(アドレス及びDCV値を含む。)をデータ制御部620に送信する。
【0044】
図4は、第1実施形態に係るデータ制御部620の機能構成を示すブロックダイアグラムである。データ制御部620は、デコード部621と、DCVカウントダウン部622と、内部調停部623(単に調停部とも呼ばれる。)と、第1バンク管理部BM1と、第2バンク管理部BM2と、第3バンク管理部BM3と、第4バンク管理部BM4とを備えている。第1バンク管理部BM1乃至第4バンク管理部BM4は、単に調停キュー又はバンク内調停キューとも呼ばれる。DCVカウントダウン部622は、変動処理部とも呼ばれる。
【0045】
第1バンク管理部BM1、第2バンク管理部BM2、第3バンク管理部BM3及び第4バンク管理部BM4は、それぞれ調停キューとして機能する。第1バンク管理部BM1、第2バンク管理部BM2、第3バンク管理部BM3及び第4バンク管理部BM4は、それぞれDDRメモリ70の第1バンクB1、第2バンクB2、第3バンクB3及び第4バンクB4の読み書きの管理(制御)に利用される。第1バンク管理部BM1乃至第4バンク管理部BM4は、内部調停部623とともに書込み処理と読出し処理とで共有されている。DDRメモリ70が内部データバス(図示略)を読出しと書込みで共有しているので、データ制御部620は、書込み処理と読出し処理とを同時に実行することができない。データ制御部620は、書込み処理と読出し処理とを区別しつつ、同一のロジックを使って処理して柔軟な調停を実現している。
【0046】
デコード部621は、バッファ制御部610から受信した制御データをデコードすることによって、制御データに格納されているアドレスに基づいて第1バンク管理部BM1、第2バンク管理部BM2、第3バンク管理部BM3及び第4バンク管理部BM4のいずれか1つを選択する。この例では、第1バンク管理部BM1が選択されたものとする。
【0047】
デコード部621は、制御データをデコードすることによって、さらに、Row情報、Col情報、BL情報(バースト回数情報)、W/R情報、ID情報及びDCV値を取得する。Row情報は、データの読み書き先の行情報を示している。Col情報は、データの読み書き先の列情報を示している。BL情報は、バースト長、すなわちバーストの回数(たとえば4又は8)を表す情報であり、換言すれば、1回のアクティベートでトランザクションTを完了させるために必要なRead/Writeコマンドの回数に相当する。W/R情報は、書込みと読出しのいずれかを表す情報である。ID情報は、トランザクションTの転送IDを示し、書込みバッファテーブル682を介して書込みバッファ681内の書込みデータ、あるいは読出しバッファテーブル692を介して読出しバッファ691内の読出しデータと紐付けられている。
【0048】
デコード部621は、デコードされた制御データとして、Row情報、Col情報、BL情報、W/R情報、ID情報及びDCV値をAge情報とともに、選択された第1バンク管理部BM1に保存する。Age情報は、上述の複数の情報が第1バンク管理部BM1乃至第4バンク管理部BM4に保存された順番を示すパラメータである。W/R情報が書込みを意味している制御データは、書込み制御データとも呼ばれる。W/R情報が読出しを意味している制御データは、読出し制御データとも呼ばれる。
【0049】
図5は、第1実施形態に係る内部調停部623の機能構成を示すブロックダイアグラムである。内部調停部623は、内部調停部623の全体を制御するコントローラ6231と、4個のバンク内調停部6232と、重複アドレス検出部6233と、バンク間制御部6234とを備えている。コントローラ6231は、バンク内調停部6232と、重複アドレス検出部6233と、バンク間制御部6234とを制御する。
【0050】
4個のバンク内調停部6232は、制御方向ステータスを考慮して、それぞれ第1バンクB1、第2バンクB2、第3バンクB3及び第4バンクB4のいずれかのバンク内(同一バンク)での書込み要求と読出し要求の調停を実行する。具体的には、たとえば制御方向ステータスが書込み処理であると仮定する。この場合には、第1バンクB1用のバンク内調停部6232は、第1バンクB1に対して書込み処理と読出し処理とが各1つ存在するときには、書込み処理を選択し、第2バンクB2用のバンク内調停部6232は、第2バンクB2に対して読出し処理のみが存在するときには、読出し処理を選択し、第3バンクB3用のバンク内調停部6232は、第3バンクB3に対して書込み処理のみが存在するときには、書込み処理を選択し、第4バンクB4用のバンク内調停部6232は、第4バンクB4に対して書込み処理と読出し処理とが各1つ存在するときには、書込み処理を選択する。なお、本処理の詳細については後述する。
【0051】
4個のバンク内調停部6232は、各バンク内での調停結果をバンク間制御部6234に送信する。この例では、バンク間制御部6234は、3つの書込み処理と1つの読出し処理とを受領し、制御方向ステータスを書込み処理に維持する。このような処理によって、第1バンクB1、第2バンクB2、第3バンクB3及び第4バンクB4に対する書込み処理の要求比率が低下し、読出し処理の要求比率が増加することになる。これにより、バンク間制御部6234は、読出し処理の要求比率の増加に応じて、自然に制御方向ステータスを読出し処理に切り替えることになる。このような選択によって、制御方向ステータスの切替が抑制される。
【0052】
重複アドレス検出部6233は、第1バンク管理部BM1乃至第4バンク管理部BM4に保存されている複数のトランザクションTにおいて、新たに保存されたトランザクションTと同一アドレスへのアクセスを要求しているトランザクションTを検出する。重複アドレス検出部6233は、同一アドレスへのアクセスを要求している複数のトランザクションT(依存関係トランザクション又は依存関係制御データとも呼ばれる。)を特定して各バンク内調停部6232に通知する。バンク内調停部6232は、この通知に応じてバンク毎に順序制限モードに処理モードを遷移させる。順序制限モードの詳細については後述する(
図14乃至
図16参照)。依存関係トランザクションは、優先性に拘わらずFIFOで処理すべきトランザクションである。
【0053】
図6は、第1実施形態に係るバンク内調停部6232のコマンド要求の状態遷移図である。DDRメモリ70の第1バンクB1乃至第4バンクBM4は、IDLE状態S1と、ACT状態S2と、Writing状態S3と、ACTIVE状態S4と、Reading状態S5と、WritingA状態S6と、Precharging状態S7と、ReadingA状態S8とを含む8個の状態を有している。WritingA状態S6は、Writingに引き続きPrechargingを自動で実行する状態である。ReadingA状態S8は、Readingに引き続きPrechargingを自動で実行する状態である。
【0054】
バンク内調停部6232は、次の4つの要素を使用して状態遷移を行う。第1の要素は、tRCやtRPといったDDRメモリ70に関連するタイミングの制約である。第2の要素は、バンク内調停部6232が送信した要求がバンク間制御部6234での調停結果として受け付けられたことを示すGrant信号である。第3の要素は、調停キューに保存されている複数のトランザクションTの状態である。具体的には、選択されているトランザクションTが最終バーストであるかどうかである。第4の要素は、バンク間制御部6234からのフィードバックFBである。フィードバックFBは、メモリ制御回路600が書込み状態であるか読み出し状態のいずれであるかを示している。
C.バンク内調停処理手順:
【0055】
図7は、第1実施形態に係るバンク内調停処理手順の内容を示すフローチャートである。バンク内調停処理手順では、バンク内調停部6232は、バンク内(同一バンク)での書込み要求と読出し要求の調停を実行する。
【0056】
ステップS10では、バンク内調停部6232は、ポーズ状態(ポーズオン)であるか否かを判断する。ポーズ状態は、バンク内調停部6232からバンク間制御部6234にActivateコマンドが受理され、Activateコマンドに従属する書込み要求又は読出し要求のコマンド(Read/Writeコマンド)の処理が完了するまでの間の状態である(
図7参照)。Activateコマンドに従属するRead/Writeコマンドの処理とは、ActivateコマンドによってアクティベートされたバンクのRowに対する全てのRead/Writeコマンドによって実行される処理を意味している。バンク間制御部6234は、Read/Writeコマンドが実行される毎にBL情報をデクリメントし、トランザクションTを完了させるために必要なRead/Writeコマンドの回数を管理する。
【0057】
バンク内調停部6232は、ポーズ状態である場合には、処理をステップS90に進め、ポーズ状態でない場合には、処理をステップS20に進める。ステップS90では、バンク内調停部6232は、現選択要求を維持、すなわち次の処理対象候補となっているトランザクションT2(
図5参照)を変更することなく維持する。
【0058】
これにより、バンク内調停部6232は、アクティベートされた特定のRowに対する全ての処理が完了される前に、他のRowをアクティベートし、特定のRowをアクティベートし直すことに伴う余計なPreCharge処理及びActivate処理を排除することができる。この結果、バンク内調停部6232は、効率的なRead/Writeコマンドの処理を実現することができる。
【0059】
ステップS20では、バンク内調停部6232は、順序制限モードであるか否かを判断する。バンク内調停部6232は、順序制限モードである場合には、処理をステップS80に進め、順序制限モードでない場合には、処理をステップS30に進める。バンク内調停部6232は、調停することなく、すなわち全てのトランザクションTをピックアップし、処理をステップS80に進める。順序制限モードは、調停キュー固定処理に応じて設定される。調停キュー固定処理では、バンク内調停部6232は、特定されたバンクのキューの調停を停止させ、FIFOの作動モードとする(
図14乃至
図16参照)。
【0060】
ステップS80では、バンク内調停部6232は、FIFOの作動モードで作動し、Age情報に基づいて、第1バンク管理部BM1に最初に保存されたトランザクションTを選択する。これにより、バンク内調停部6232は、依存関係トランザクションの依存関係を崩すことなく、各トランザクションTを選択することができる。
【0061】
ステップS30では、たとえば第1バンク管理部BM1用のバンク内調停部6232は、第1バンク管理部BM1にタイムアウト要求が存在するか否かを判断する。タイムアウト要求は、第1バンク管理部BM1に長時間滞留することによって、所定の閾値未満となったDCV値を有するトランザクションTである。DCV値の詳細については後述する。
【0062】
バンク内調停部6232は、少なくとも1つのタイムアウト要求が存在する場合には、処理をステップS50に進め、タイムアウト要求が存在しない場合には、処理をステップS40に進める。ステップS50では、バンク内調停部6232は、タイムアウト要求のみをピックアップし、処理をステップS80に進める。
【0063】
ステップS80では、バンク内調停部6232は、Age情報に基づいて、第1バンク管理部BM1に保存された少なくとも1つのタイムアウト要求のうちの最初に保存されたタイムアウト要求(トランザクションT)を選択する。具体的には、たとえば、バンク内調停部6232は、次の処理対象候補であるトランザクションT2(
図5参照)の選択をトランザクションT3(
図6参照)の選択に変更することができる。これにより、バンク内調停部6232は、第1バンク管理部BM1に過度に長期間滞留したトランザクションTを優先的に処理することができる。
【0064】
なお、詳細については後述するが、内部調停部623は、チェーンを形成している複数のスロットに登録されている転送IDについて閾値未満のDCV値が検出された場合には、その検出された転送IDのよりも先に処理されるべき上位側の転送IDを有するトランザクションTの全てを例外処理(タイムアウト要求処理)の対象とする。これにより、内部調停部623は、読出しデータの順序制限の要請を満たしつつ閾値未満のDCV値を有するトランザクションTの円滑な処理を実現することができる。
【0065】
図8は、第1実施形態に係る要求ピックアップ処理(ステップS40)の内容を示すフローチャートである。要求ピックアップ処理は、制御方向ステータスに応じて、効率的な処理を実現するための書込み要求又は読出し要求をピックアップする処理である。DDRメモリ70は、内部データバス(ASICなどのチップとDDRメモリデバイスをつなぐ物理的な電気信号線、図示略)を読出しと書込みで共有しているので、書込み処理と読出し処理とを同時に実行することができず、データバスの方向を切り替えるためのターンアラウンドタイムの制約ペナルティーを有している。
【0066】
よって、バンク内調停部6232は、前述のように制御方向ステータスに応じて書込み要求又は読出し要求をピックアップすることで読出しと書込みの切り替え抑制することによって効率的な処理を実現することができる。ただし、このような制御は、トランザクションTの滞留の発生要因ともなっている。なお、タイマー(図示略)を装備し、一定時間の経過に応じて積極的に制御方向の切り替えを実行するようにしてもよい。
【0067】
ステップS41では、バンク内調停部6232は、制御方向ステータスが書込側ステータスと読出側ステータスのいずれであるかを判断する。書込側ステータスは、書込み処理が可能な書込みステータスと、読出し処理が可能な読出側ステータスから書込みステータスへの遷移中のステータスである書込み遷移ステータスとを含んでいる。読出側ステータスは、読出し処理が可能な読出側ステータスと、書込みステータスから読出側ステータスへの遷移中のステータスである読出し遷移ステータスとを含んでいる。なお、この例では、IDLE状態S1は、書込側ステータスに含まれる。したがって、リセット解除後の初期状態は、書込側ステータスとなる。
【0068】
バンク内調停部6232は、制御方向ステータスが書込側ステータスであると判断した場合には、処理をステップS42に進め、制御方向ステータスが読出側ステータスであると判断した場合には、処理をステップS43に進める。
【0069】
ステップS42では、バンク内調停部6232は、書込み要求が存在する場合には、書込み要求をピックアップ(ステップS44)し、書込み要求が存在しない場合には、読出し要求をピックアップする。これにより、バンク内調停部6232は、制御方向ステータスが書込側ステータスであると判断した場合には、書込み要求を優先的にピックアップすることができる。
【0070】
ステップS43では、バンク内調停部6232は、読出し要求が存在する場合には、読出し要求をピックアップ(ステップS45)し、読出し要求が存在しない場合には、書込み要求をピックアップする。これにより、バンク内調停部6232は、制御方向ステータスが読出側ステータスであると判断した場合には、読出し要求を優先的にピックアップすることができる。
【0071】
このように、要求ピックアップ処理(ステップS40)は、制御方向ステータスに応じて、効率的な処理を実現するための書込み要求又は読出し要求をピックアップすることができる。
【0072】
ステップS60(
図7参照)では、バンク内調停部6232は、現在処理中のトランザクションT1と同一Rowへのアクセスを要求しているトランザクションTが存在するか否かを判断する。バンク内調停部6232は、このようなトランザクションTが存在する場合には、それをピックアップし(ステップS70)、このようなトランザクションTが存在しない場合には、処理をステップS80に進める。
【0073】
既にアクティベートされているRowへのアクセスは、PreChargeおよびActivateの必要がない。よって、バンク内調停部6232は、既にアクティベートされているRowへのアクセスを要求しているトランザクションTをピックアップすることによって効率的な処理を実現することができる。
【0074】
ステップS80では、バンク内調停部6232は、ピックアップされたトランザクションTの中からAge情報に基づいて、第1バンク管理部BM1に最初に保存されたタイムアウト要求(トランザクションT)を選択することができる。これにより、バンク内調停部6232は、効率的なDDRメモリ70の制御を実現するとともに、トランザクションTの過度の滞留を抑制することによって効率的で信頼性のあるメモリ制御を実現することができる。
【0075】
4個のバンク内調停部6232は、各バンク内での調停結果をバンク間制御部6234に送信する。バンク間制御部6234は、第1バンクB1、第2バンクB2、第3バンクB3及び第4バンクB4のバンク間(相違バンク)での書込み要求と読出し要求の調停を実行する。なお、実装上は、Activate_for_Read、Activate_for_Write、Read、Write及びPreChargeといったコマンドレベルの調停が行われることになる。
【0076】
バンク間制御部6234は、第1バンクB1、第2バンクB2、第3バンクB3及び第4バンクB4のバンク間における状態遷移間の時間的制約を考慮してバンク間の調停を実行する。ただし、バンク間制御部6234は、タイムアウト要求処理を最優先で選択する点でバンク内調停部6232と共通している。これにより、バンク間制御部6234は、第1バンク管理部BM1乃至第4バンク管理部BM4に過度に長期間滞留したトランザクションTを優先的に処理することができる。
【0077】
内部調停部623は、次の処理対象候補となっているトランザクションTの制御データをコマンド生成部630(
図3参照)に送信する。書込み処理は、コマンド生成部630が生成するコマンド制御データと、書込み制御部640によるデータ出力とによって行われる。読出し処理は、コマンド生成部630が生成するコマンド制御データと、読出し制御部650によるデータ入力とによって行われる。
【0078】
コマンド生成部630(
図3参照)は、W/R情報に基づいてバンク制御回路660にコマンド制御データを送信する。コマンド制御データは、たとえばアクティベートやライトを実行するための制御データである。さらに、コマンド生成部630は、W/R情報が書込みを表している場合には、書込み制御部640に転送IDを送信し、所定のタイミングでデータバスに書込みデータを供給させる。コマンド生成部630は、W/R情報が読出しを表している場合には、読出し制御部650に転送IDを送信し、所定のタイミングでデータバスから読出しデータを取得させる。この例では、コマンド生成部630は、DDRメモリ70に画像データを書き込む処理を実行する。コマンド制御データは、さらに、Row情報、Col情報、BL情報及びID情報を含んでいる。
【0079】
書込み制御部640は、ID情報とBL情報とを使用して書込みバッファテーブル682から書込みバッファ681内における書込みデータの格納領域を特定するバッファ内アドレスを取得する。書込みバッファテーブル682には、ID情報によって特定されるトランザクションTの各バーストに紐付けられているバッファ内アドレスが格納されている。書込み制御部640は、バッファ内アドレスを使用して書込みバッファ681から書込みデータを取得する。
【0080】
書込み制御部640は、Row情報、Col情報及びBL情報を使用し、第1バンク管理部BM1の管理対象であるDDRメモリ70の第1バンクB1(
図1参照)に書込みデータを格納する。書込みデータの格納は、アナログ回路として機能するバンク制御回路660を使用して行われる。
【0081】
次に、DDRメモリ70から画像形成部30がピクセルデータを読み出す処理を第2の例として説明する。画像形成部30は、第3AXIマスタ30Mを使用して読出し要求パケットをメモリ制御部60に送信する。読出し要求パケットには、第3AXIマスタ30Mが使用するAXI_IDと、制御データ(アドレスとQOS値とを含む。)とが含まれ、読出し要求データセットとも呼ばれる。
【0082】
画像データを読み出す処理では、メモリ制御部60は、読出しアドレスチャネル(R/Address)と、読出しデータチャネル(R/Data)とを使用してNIC部60Mと通信を行う。具体的には、メモリ制御部60は、読出しアドレスチャネル(R/Address)を使用して制御データをパケット(制御パケットとも呼ばれる。)のような形で受信し、読出しデータチャネル(R/Data)を使用して画像データをパケット(データパケットとも呼ばれる。)のような形でNIC部60Mに送信する。制御データには、アドレスとQOS値とAXI_IDとが含まれる。
【0083】
分岐部820は、制御パケットに含まれるアドレスを解析して処理が複数のバンク(後述)や複数のRowに渡る処理であると判断すると、バンク毎やRow毎のトランザクションTに分割する。各トランザクションTは、この例では、AXI_IDと読出しアドレスとを格納している。読出しアドレスは、アドレスデータ(WorR/Address)において書込みフラグが立っていないデータである。分岐部820は、さらに、各トランザクションTのAXI_IDにDCV値を紐付けてメモリ制御回路600に送信する。バッファ制御部610は、各トランザクションTのうちの制御データ(アドレス及びDCV値を含む。)をデータ制御部620に送信する。
【0084】
データ制御部620は、転送IDの制御データをコマンド生成部630(
図3参照)に送信する。コマンド生成部630は、W/R情報に基づいて読出し制御部650にコマンド制御データを送信する。
【0085】
コマンド生成部630は、コマンド制御データを生成し、Row情報、Col情報及びBL情報を使用してDDRメモリ70からデータを読出してデータバスに乗せ、読出し制御部650は、データバスから読出しデータを取得する。読出し制御部650は、ID情報を使用して読出しバッファテーブル692から、読出しバッファ691内における読出しデータの格納領域を特定するバッファ内アドレスを取得する。バッファ内アドレスは、その転送IDによるアクセスが何回目のものであるかを表すNUM(アクセス回数)によって特定される。NUMは、読出しバッファテーブル692によって管理され、アクセス毎にインクリメントされる。読出し制御部650は、バッファ内アドレスを使用して取得した読出しデータを読出しバッファ691に格納する。
【0086】
バッファ制御部610の読出しバッファ制御部612は、ID情報を使用して読出しバッファテーブル692から、読出しバッファ691内における読出しデータの格納領域を特定するバッファ内アドレスを取得する。読出しバッファ制御部612は、バッファ内アドレスを使用して読出しバッファ691から順序制御部670に読出しデータを転送する。
【0087】
順序制御部670は、ID情報を使用して予め設定されている順序に読出しデータを並び替えて、通信制御部800に読出しデータを送信する。通信制御部800は、通信調停部700を介することなく、画像形成部30に読出しデータ(この例では、ピクセルデータ)を送信することができる。なお、DDRメモリ70へのデータの書込み要求とデータの読出し要求は、前述のように通信調停部700によって通信調停が実行される。
【0088】
このように、メモリ制御回路600は、制御方向ステータスに応じて効率的な処理を実現するための書込み要求又は読出し要求をピックアップする要求ピックアップ処理等を行うことによって効率的な処理を実現することができる。さらに、メモリ制御回路600は、例外処理としてDCV値を使用する優先制御処理を実行することができる。
【0089】
本願発明者は、たとえばDDRメモリ70がSDRAM(Synchronous Dynamic Random Access Memory)デバイスである場合には、メモリ制御回路600は、その制御に多くの制約が存在する点を考慮して設計されている点に着目した。具体的には、メモリ制御回路600では、SDRAMの制御においては、ACTIVATEコマンド発行から次のACTIVATEコマンドが発行できるまでの期間(tRRD)やACTIVATEコマンド発行から、READコマンド発行できるまでの期間(tRCD)といった状態遷移間の時間的制約が発生する。
【0090】
このような観点から設計されたメモリ制御回路600は、全体としての処理効率を実現する一方、データ制御部620が書込み処理と読出し処理とを同時に実行することができない故に、時としてメモリ制御回路600の内部にピックアップされない未処理の特定のデータを滞留させる可能性があることを本願発明者は見いだした。具体的には、簡単な例を挙げると、たとえば最初に読出し要求パケットを1個受信し、次に書込み要求パケットを1個受信し、その次に読出し要求パケットを1000個連続して受信した場合には、書込み処理と読出し処理とを同時に実行することができないので、処理の全体の効率性の観点から書込み要求パケットが滞留することがある。
【0091】
本願発明者は、このような問題を解決するために、制御パラメータとしてDCV値を新規に導入した。DCVカウントダウン部622は、メモリ制御回路600内において全てのDCV値をカウントダウンする。すなわち、メモリ制御回路600内の全てのDCV値は、所定時間の経過毎に「1」ずつ同期してデクリメント(減算)される。DCV値は、0乃至3のQOS値に基づいて変換された初期値としての150、200、250及び300のDCV値から所定の時間経過毎に変動させる(たとえばデクリメント)される。
【0092】
内部調停部623は、予め設定された閾値としての所定値(たとえば20)を通過したDCV値(この例では、閾値未満のDCV値)が検出された場合には、例外処理(タイムアウト要求処理)としてAge情報に拘わらず、最優先で処理、すなわち、このDCV値を含んでいる書込み制御データ又は読出し制御データを使用してDDRメモリ70を制御する。すなわち、内部調停部623は、所定値よりも小さなDCV値が検出された場合には、たとえば必要に応じてデータバスの方向を切り替えるとともに、書込み先又は読出し先のバンクが利用可能な状態でなくても利用可能な状態に遷移(アクティベート)させることによって処理を実行することができる。
【0093】
このように、第1実施形態に係る画像形成装置1は、メモリ制御部60と、画像処理部20等の他の機器との間の通信において効率的で信頼性の高い内部通信を実現するために使用されるQOS値を継承し、メモリ制御部60の内部における予期できない滞留が仮に発生しても効率的で信頼性の高い通信とすることができる。
【0094】
具体的には、メモリ制御部60は、DCV値を使用して優先制御処理を実行することができるので、たとえば画像読取処理においては順次生成される画像データの過度の送信遅延に起因するデータ廃棄(データ欠落)を排除することができるとともに、画像形成処理においては露光部31に順次必要とされるピクセルデータの過度の送信遅延に起因するドット抜け(画像欠落)を排除することができる。
D.データ読出し処理手順:
【0095】
図9は、第1実施形態に係るメモリ制御回路600におけるデータ読出し処理に関する機能構成を示すブロックダイアグラムである。バッファ制御部610の読出しバッファ制御部612は、RID管理部6121と、予約領域管理部6122とを備えている。RID管理部6121は、データ読出し処理で使用される転送ID(RTransID)を管理する。予約領域管理部6122は、転送IDに紐付けて読出しバッファ691内における読出しデータの格納領域を割り当てて予約する。
【0096】
順序制御部670は、読出しデータの順序を整える整序キューとして機能する順序管理部671と、データ出力部672とを備えている。順序制御部670は、AXIマスタ(たとえば第1AXIマスタ10M)が複数のデータ読出し処理をメモリ制御部60に要求した場合に、同一のAXI_IDを使用してAXIマスタが要求した順序に従って読出しデータを送信する機能を有している。すなわち、順序制御部670は、同一のAXI_IDを有する複数のデータ読出し要求を受信した場合には、そのデータ読出し要求の受信の順序で読出しデータを送信することができる。これにより、メモリ制御回路600は、AXIの仕様を満たすことができる。なお、本実施形態では、説明を分かりやすくするために、各AXIマスタは、それぞれ1つずつのAXI_IDを使用するものとしている。
【0097】
図10は、第1実施形態に係る順序管理部671の内容を示すブロックダイアグラムである。順序管理部671は、#0(Slot#0と表記)乃至#N-1(Slot#N-1と表記)のN個のスロットを有している。各スロットは、AXI_ID格納領域と、ステータス格納領域と、親スロット格納領域と、第1転送ID格納領域(最上位)と、第2転送ID格納領域と、第3転送ID格納領域と、第4転送ID格納領域(最下位)とを有している。第1乃至第4転送ID格納領域は、転送IDが有効に格納されていることを示す有効フラグVFとともに転送IDを格納する。
【0098】
AXI_ID格納領域は、読出し要求データセットの送信元であるAXIマスタ(たとえば第1AXIマスタ10M)のAXI_IDを格納する領域である。この例では、第1乃至第4転送ID格納領域は、それぞれ読出し要求データセットから生成される少なくとも1つ(この例では、最大2個)の転送IDを格納可能であって、上位(先に処理されるべき格納位置)から下位(後に処理されるべき格納位置)順序づけられている。
【0099】
ステータス格納領域は、メイン(Main)、スレーブ(Slave)及び空き(Empty)のいずれかのステータス(Status)を格納する領域である。メインは、各AXI_IDに紐付けられた転送IDのうち最も古い転送IDを格納しているスロットであることを示している。スレーブは、他のスロットに従属、すなわち従属先である他のスロットの後に処理されることを示している。親スロット格納領域は、ステータスがスレーブとなっているスロットにおいて、その従属先である親スロットを特定するための情報である親スロット特定情報を格納している。
【0100】
具体的には、たとえば順序管理部671は、状態ST1において、メインである#0スロットと、#0スロットに従属する#1スロットと、#1スロットに従属する#2スロットとを有している。この例では、順序制御部670は、#0スロット、#1スロット及び#2スロットの順に各転送IDを処理することになる。
【0101】
図11は、第1実施形態に係るデータ読出し処理手順の内容を示すフローチャートである。ステップS110では、メモリ制御部60は、たとえば画像形成部30に接続されている第3AXIマスタ30Mから読出し要求データセットを受信する。読出し要求データセットには、第3AXIマスタ30Mを表すAXI_IDと、制御データ(アドレスとQOS値とを含む。)とが含まれている。
【0102】
ステップS120では、分岐部820は、読出し要求データセットの制御データ(アドレスやAXI_BL情報)を解析してRow情報、Col情報及びBL情報を取得して分割の要否を判断する。分岐部820(
図2参照)は、分割が不要な場合には、処理をステップS130に進め、分割が必要な場合には、処理をステップS140に進める。
【0103】
ステップS130では、分岐部820は、バッファ制御部610(
図9参照)に対してAXI_BL情報を渡して単一の転送IDを要求する。バッファ制御部610のRID管理部6121は、空いている(不使用の)転送IDの中から1つを選択する。予約領域管理部6122は、選択された転送IDに紐付けて読出しバッファ691内の空き領域の一部を予約して予約領域を割り当てる。予約領域のサイズは、バーストの回数(たとえば4又は8)を表す情報であるBL情報に基づいて決定される。予約領域管理部6122は、読出しバッファテーブル692に予約領域のアドレスとステータスを格納する。ステータスには、読出しバッファ691のアクティベート、割当済み、書込み完了及び転送済み(空き)の4つの状態がある。予約領域管理部6122は、予約領域のステータスとして割当済みを格納する。
【0104】
ステップS140では、分岐部820は、読出し要求データセットを複数(この例では、最大2個)のトランザクションTに分割し、各トランザクションTのRow情報、Col情報及びBL情報を生成する。分岐部820は、複数のトランザクションTのそれぞれに対して転送IDを要求する。バッファ制御部610のRID管理部6121は、複数の転送IDを選択する。予約領域管理部6122は、選択された複数の転送IDのそれぞれに紐付けて読出しバッファ691内の空き領域の一部を予約して複数の予約領域を割り当てる。予約領域管理部6122は、読出しバッファテーブル692に複数の予約領域のアドレスを格納する。予約領域管理部6122は、複数の予約領域のステータスとして割当済みを格納する。
【0105】
ステップS150では、バッファ制御部610は、分岐部820からトランザクションTを受信する。各トランザクションTには、AXI_IDと転送IDとが含まれている。バッファ制御部610のRID管理部6121は、トランザクションTの受信に応じて順序制御部670に対してAXI_IDと転送ID(RtransID)とを渡して、転送IDの登録を要求する。順序制御部670は、順序管理部671のAXI_ID格納領域においてAXI_IDを検索する。
【0106】
図12は、第1実施形態に係る転送ID登録処理(ステップS160)の内容を示すフローチャートである。ステップS161では、順序制御部670は、トランザクションTに紐付けられているAXI_IDと同一のAXI_IDがAXI_ID格納領域に格納されているスロットがあるか否かを判断する。順序制御部670は、このようなスロットが存在しない場合には、処理をステップS162に進め、このようなスロットが存在する場合には、処理をステップS164に進める。
【0107】
ステップS162では、RID管理部6121は、空きスロット、すなわち、ステータス格納領域に空き(Empty)のステータスが格納されているスロットの1つを選択し、選択されたスロットの最上位の格納領域である第1転送ID格納領域に転送IDを登録する。ステップS163では、RID管理部6121は、ステータスをメイン(Main)に変更し、すなわち、転送IDが登録されたスロットのステータス格納領域にメイン(Main)のステータスを格納する。
【0108】
なお、空きスロットが残存していない場合には、読出しバッファ制御部612は、読出し処理用の転送ID(RtransID)を分岐部820に供給することができない。よって、分岐部820は、読出しトランザクションTの生成を停止し、書込みトランザクションTのみを生成することになる。
【0109】
ステップS164では、順序制御部670は、トランザクションTに紐付けられているAXI_IDと同一のAXI_IDがAXI_ID格納領域に格納されているスレーブスロットがあるか否かを判断する。順序制御部670は、このようなスロットが存在しない場合には、処理をステップS165に進め、このようなスロットが存在する場合には、処理をステップS169に進める。
【0110】
ステップS165では、順序制御部670は、スレーブスロットが従属していないメインスロットメイン(Main)のスロットの第1乃至第4転送ID格納領域に空き領域が存在するか否かを判断する。順序制御部670は、空き領域が存在しない場合には、処理をステップS166に進め、空き領域が存在する場合には、処理をステップS168に進める。ステップS168では、順序制御部670は、第1乃至第4転送ID格納領域の空き領域のうちの最も上位の格納領域に転送IDを登録する。
【0111】
ステップS166では、順序制御部670は、空きスロットの1つを選択し、選択されたスロットの最上位の格納領域である第1転送ID格納領域に転送IDを登録する。ステップS167では、順序制御部670は、ステータスをスレーブ(Slave)に変更し、親スロット格納領域に従属先であるメイン(Main)のスロットのスロット番号を格納する。
【0112】
ステップS169では、順序制御部670は、スレーブスロットのうち最下層スロットに転送IDを登録する。具体的には、たとえば
図10の状態ST1に示されるように、順序制御部670は、最下層スロットである#2スレーブスロットに転送IDを登録する。#2スレーブスロットは、#1スレーブスロットの下層スロットである。#1スレーブスロットは、メインの#0スロットの下層スロットである。このように、順序制御部670は、メインの#0スロットから最下層スロットである#2スレーブスロットまでの複数のスロット(転送ID)にチェーンを形成させている。
【0113】
なお、順序制御部670は、最下層スロットに空き領域が存在しない場合には、空きスロットの1つを選択し、選択されたスロットの最上位の格納領域である第1転送ID格納領域に転送IDを登録し、ステータスをスレーブ(Slave)に変更し、親スロット格納領域に従属先であるメインのスロットのスロット番号を格納する。
【0114】
一方、内部調停部623は、前述のようにチェーンを形成している複数のスロットに登録されている転送IDについて閾値未満のDCV値が検出された場合には、その検出された転送IDの上位側の転送IDを有するトランザクションTの全てを例外処理(タイムアウト要求処理)の対象とする。これにより、閾値未満のDCV値を有するトランザクションTの円滑な処理を実現することができる。
【0115】
ステップS170では、バッファ制御部610は、各トランザクションTのうちの制御データ(アドレス及びDCV値を含む。)をデータ制御部620に送信する。ステップS180では、内部調停部623は、調停処理を実行し、コマンド制御データを出力する。読出し制御部650は、コマンド制御データに基づいてDDRメモリ70からデータを読み出し、転送IDとNUM(アクセス回数)とを使用して読出しバッファテーブル692から予約領域のアドレスを取得する。読出し制御部650は、予約領域のアドレスを使用して読み出したデータを読出しバッファ691内に書き込み、書き込みの完了に応じて読出しバッファテーブル692内の予約領域のステータスを書込み完了に変更(Update)する。
【0116】
図13は、第1実施形態に係る読出しデータ出力処理(ステップS190)の内容を示すフローチャートである。ステップS191では、データ出力部672は、読出しバッファテーブル692内において、メインのスロットの最上位の格納領域に格納されている転送IDのステータスを監視する。
【0117】
ステップS192では、データ出力部672は、メインのスロットの最上位の格納領域に格納されている転送IDに紐づけられている予約領域の書込み完了へのステータス変更の検出に応じて、処理をステップS193に進める。
【0118】
ステップS193では、データ出力部672は、予約領域に書き込まれた読出しデータ(R/Data)を出力する。データ出力部672は、メインのスロットの最上位の格納領域から転送IDを削除するとともに、予約領域管理部6122は、読出しバッファテーブル692の対応するステータスを転送済み(空き)にする。
【0119】
ステップS194では、データ出力部672は、転送IDの削除によってスロットが空きスロットになったか否かを判断する。データ出力部672は、空きスロットになった場合には、処理をステップS195に進め、空きスロットにならなかった場合には、読出しデータ出力処理(ステップS190)の処理を完了する。ステップS195では、データ出力部672は、スロットのステータスを空き(Empty)に変更する(
図10の状態ST1及びST2参照)。
【0120】
ステップS196では、データ出力部672は、空きスロットになったスロットに従属するスレーブスロットが存在するか否かを判断する。データ出力部672は、スレーブスロットが存在する場合には、処理をステップS197に進め、スレーブスロットが存在しない場合には、読出しデータ出力処理(ステップS190)の処理を完了する。
【0121】
ステップS197では、データ出力部672は、空きスロットになったスロットに従属し、空きスロットのスロット番号を親スロット格納領域に格納しているスレーブスロットのステータスをメイン(Main)に変更する(
図10の状態ST1及びST2参照)。これにより、データ出力部672は、新たにメインとなったスロットの最上位に格納されている転送IDを監視対象とすることができる。
【0122】
一方、内部調停部623は、空きスロットの数を監視し、空きスロットの数が予め設定されている閾値未満となった場合には、制御方向ステータスの切替方法を調整する。具体的には、内部調停部623は、空きスロットの数が閾値未満となった場合には、読出側ステータスへ切り替えやすくする一方、書込側ステータスへの切替を抑制するように制御方向ステータスの切替方法を調整する。
【0123】
これにより、メモリ制御部60は、読出しバッファ691内に過度に多くのバッファ領域を必要とすることなく、読出しバッファ691を効率的に使用して円滑な読出し処理を実現することができる。
E.データ書込み処理手順:
【0124】
図14は、第1実施形態に係るメモリ制御回路600におけるデータ書込み処理に関する機能構成を示すブロックダイアグラムである。バッファ制御部610の書込みバッファ制御部611は、WID管理部6111と、予約領域管理部6112とを備えている。WID管理部6111は、データ読出し処理で使用される転送IDを管理する。予約領域管理部6112は、転送IDに紐付けて書込みバッファ681内における書込みデータの格納領域を割り当てて予約する。
【0125】
データ書込み処理では、AXIマスタが複数のデータ書込みをメモリ制御部60に要求しても書込み順序には、データ読出し処理におけるような制限が無い。よって、データ書込み処理には、順序制御部のような構成は不要である。
【0126】
図15は、第1実施形態に係るデータ書込み処理手順(ステップS200)の内容を示すフローチャートである。ステップS210では、メモリ制御部60は、たとえば画像読取部50に接続されている第5AXIマスタ50Mから書込み要求データセットを受信する。書込み要求データセットには、第5AXIマスタ50Mを表すAXI_IDと、制御データ(アドレスとQOS値とを含む。)とが含まれている。
【0127】
ステップS220では、データ制御部620の重複アドレス検出部6233は、アドレス監視処理を実行する。アドレス監視処理は、ステップS230乃至ステップS290の各処理と並行して実行され、必要に応じてバンク内調停部6232の作動モードを順序制限モードとする。アドレス監視処理の詳細については後述する。
【0128】
ステップS230では、分岐部820は、書込み要求データセットの制御データ(アドレスやAXI_BL情報)を解析してRow情報、Col情報及びBL情報を取得して分割の要否を判断する。分岐部820は、分割が不要な場合には、処理をステップS240に進め、分割が必要な場合には、処理をステップS250に進める。
【0129】
ステップS240では、分岐部820は、バッファ制御部610に対してAXI_BL情報を渡して単一の転送IDを要求する。バッファ制御部610のWID管理部6111は、空いている(不使用の)転送IDの中から1つを選択する。予約領域管理部6112は、選択された転送IDに紐付けて書込みバッファ681内の空き領域の一部を予約して予約領域を割り当てる。予約領域のサイズは、バーストの回数(たとえば4又は8)を表す情報であるBL情報に基づいて決定される。予約領域管理部6112は、書込みバッファテーブル682に予約領域のアドレスとステータスを格納する。ステータスには、書込みバッファ681の割当済み、書込み完了及び転送済み(空き)の3つの状態がある。予約領域管理部6112は、予約領域のステータスとして割当済みを格納する。
【0130】
ステップS250では、分岐部820は、書込み要求データセットを複数のトランザクションTに分割し、各トランザクションTのRow情報、Col情報及びBL情報を生成する。分岐部820は、複数のトランザクションTのそれぞれに対して転送IDを要求する。バッファ制御部610のWID管理部6111は、複数の転送IDを選択する。予約領域管理部6112は、選択された複数の転送IDのそれぞれに紐付けて書込みバッファ681内の空き領域の一部を予約して複数の予約領域を割り当てる。予約領域管理部6112は、書込みバッファテーブル682に複数の予約領域のアドレスを格納する。予約領域管理部6112は、複数の予約領域のステータスとして割当済みを格納する。
【0131】
ステップS260では、バッファ制御部610は、分岐部820からトランザクションTと書込みデータとを受信する。各トランザクションTには、AXI_IDと転送IDとが含まれている。バッファ制御部610は、書込みバッファ681内の予約領域のステータスが割当済みであることを確認し、書込みデータを書き込み、予約領域のステータスを書込み完了にする。
【0132】
ステップS270では、バッファ制御部610は、各トランザクションTのうちの制御データ(アドレス及びDCV値を含む。)をデータ制御部620に送信する。ステップS280では、内部調停部623は、調停処理を実行し、コマンド制御データを出力する。
【0133】
ステップS290では、書込み制御部640は、データ書込み処理を実行する。データ書込み処理では、書込み制御部640は、コマンド制御データに基づいてDDRメモリ70からデータを読み出し、転送IDとNUM(アクセス回数)とを使用して書込みバッファテーブル682から予約領域のアドレスを取得する。書込み制御部640は、予約領域のアドレスを使用して書込みバッファ681から読み出したデータをDDRメモリ70に書き込み、書き込みの完了に応じて書込みバッファ681内の予約領域のステータスを転送済み(空き)に変更(Update)する。
【0134】
図16は、第1実施形態に係るアドレス監視処理手順の内容を示すフローチャートである。アドレス監視処理では、重複アドレス検出部6233は、書込み要求データセットの書込み先のアドレスと少なくとも一部が重複するアドレスを指定している書込み要求データセット及び読出し要求データセットである重複アクセス要求データを監視し、その入力に係る調停処理を制限する。態様としては、以下の3つの組み合わせが存在する。
(1)書込み要求データセット(先入力)と読出し要求データセット(後入力)の組合せ
(2)読出し要求データセット(先入力)と書込み要求データセット(後入力)の組合せ
(3)書込み要求データセット同士の組合せ
【0135】
(1)書込み要求データセット(先入力)と読出し要求データセット(後入力)の組合せでは、調停によって書込み要求データセット(先入力)よりも読出し要求データセット(後入力)が先に処理されると、書込み要求データセットによる書込み前の古いデータが読み出されてしまうという問題が生じる。よって、調停の停止が要請されることになる。この組合せは、第1の組合せとも呼ばれる。
【0136】
(2)読出し要求データセット(先入力)と書込み要求データセット(後入力)の組合せでは、調停によって読出し要求データセット(先入力)よりも書込み要求データセット(後入力)が先に処理されると、本来読み出すべきデータが書込み要求データセット(後入力)によって先に書き換えられてしまうという問題が生じる。よって、調停の停止が要請されることになる。この組合せは、第2の組合せとも呼ばれる。
【0137】
(3)書込み要求データセット同士の組合せでは、調停によって書込み要求データセット(先入力)よりも書込み要求データセット(後入力)が先に処理されると、書込み要求データセット(後入力)によって最終的に残存すべきデータが書込み要求データセット(先入力)によって書き換えられてしまうという問題が生じる。よって、調停の停止が要請されることになる。この組合せは、第3の組合せとも呼ばれる。
【0138】
メモリ制御部60は、書込み要求データの受信に応じてWrite/Response信号を送信する(
図2参照)。メモリ制御部60は、Write/Response信号の発信後において、その書込み要求データによる書込み処理が完了したことを前提として、書込み要求データセット及び読出し要求データセットが処理されることを保証するように構成されている。本実施形態では、この保証は、アドレス監視処理によって実現される。
【0139】
ステップS221では、バッファ制御部610の重複アドレス検出部6233は、アドレス管理処理を実行する。アドレス管理処理では、重複アドレス検出部6233は、書込み要求データセットの入力に応じて、その書込みトランザクションTの書込み先のバンク情報、Row情報及びCol情報を監視対象アドレスとして管理する。
【0140】
ステップS222では、重複アドレス検出部6233は、重複アドレス監視処理を実行する。重複アドレス監視処理では、重複アドレス検出部6233は、書込み要求データセット又は読出し要求データセットの入力に応じて、書込み要求データセット及び読出し要求データセットによるトランザクションT(書込みトランザクションT及び読出しトランザクションT)が指定するバンク情報、Row情報及びCol情報を第1バンク管理部BM1乃至第4バンク管理部BM4において監視する。
【0141】
重複アドレス検出部6233は、読出し要求データセットの入力に応じて、読出し要求データセットで読出し対象となっているアドレスと監視対象アドレスとの重複である重複アドレスを探索する。重複アドレス検出部6233は、重複アドレスの検出に応じて、アドレスの重複が検出されたバンクを特定する。これにより、重複アドレス検出部6233は、第1の組合せに対応する問題を解決することができる。
【0142】
重複アドレス検出部6233は、書込み要求データセットの入力に応じて、書込み要求データセットで書込み対象となっているアドレスと監視対象アドレスとの重複である重複アドレスを探索し(第3の組合せ)、さらに書込み要求データセットで書込み対象となっているアドレスと第1バンク管理部BM1乃至第4バンク管理部BM4に既に格納されている読出し要求データセットの読出し対象となっているアドレスとの重複である重複アドレスを探索する(第2の組合せ)。重複アドレス検出部6233は、重複アドレスの検出に応じて、アドレスの重複が検出されたバンクを特定する。これにより、重複アドレス検出部6233は、第2及び第3の組合せに対応する問題を解決することができる。
【0143】
ステップS223では、バンク内調停部6232は、重複アドレスが検出されたバンクの特定に応じて、特定されたバンクの調停キュー固定処理を実行する(ステップS224)。調停キュー固定処理では、バンク内調停部6232は、特定されたバンクのキューの調停を停止させ、FIFOの作動モード(順序制限モード)とする。これにより、バンク内調停部6232は、上述の第1の組合せ乃至第3の組合せにおける問題を回避するために調停を停止する。
【0144】
ステップS225では、重複アドレス検出部6233は、第1バンク管理部BM1乃至第4バンク管理部BM4において、重複アクセス要求データに係る監視対象アドレスを指定しているトランザクションTのBL情報に基づいて、その重複アドレスが解消したか否かを判断することができる。具体的には、重複アドレス検出部6233は、監視対象アドレスを指定しているトランザクションTについて、バンク間制御部6234によってRead/Writeコマンドが実行される毎にデクリメントされるBL情報を監視し、最終バーストに対してRead/Writeコマンドが実行されると、そのトランザクションTが処理済みとなってその重複アドレスが解消したと判断することができる。
【0145】
重複アドレス検出部6233は、各バンク内の重複アドレスが残存していないと判断すると、バンク毎に調停キュー開放処理を実行する(ステップS226)。調停キュー開放処理では、バンク内調停部6232は、固定されたバンクのキューの作動モードをFIFO(順序制限モード)から変更し、調停を再開する。
【0146】
一方、内部調停部623は、書込みバッファ681の不使用の記憶領域の量や利用可能な転送IDの数を監視し、それぞれ予め設定されている閾値未満となった場合には、制御方向ステータスの切替方法を調整する。具体的には、内部調停部623は、書込みバッファ681の不使用の記憶領域の量等が閾値未満となった場合には、書込側ステータスへ切り替えやすくする一方、読出側ステータスへの切替を抑制するように制御方向ステータスの切替方法を調整する。
【0147】
これにより、メモリ制御部60は、書込みバッファ681内に過度に多くのバッファ領域を必要とすることなく、書込みバッファ681を効率的に使用して円滑な読出し処理を実現することができる。
F.第2実施形態に係る画像形成装置の機能構成(tFAW制約対応処理手順):
【0148】
図17は、第2実施形態に係る内部調停部623aの機能構成を示すブロックダイアグラムである。第2実施形態に係る内部調停部623aは、tFAW制約を考慮して調停を実行することができる点で一の実施形態に係る内部調停部623と相違する。第2実施形態に係る内部調停部623aは、バンク間制御部6234の代わりにバンク間制御部6234aを備えている。バンク間制御部6234aは、tFAW管理部6234T1と、BL情報管理部6234T2と、マスク処理部6234T3と、バンク間調停部6234T4とを備えている。BL情報管理部6234T2は、残バースト回数管理部とも呼ばれる。
【0149】
図18は、第2実施形態に係るバンク間制御部6234aの制御方向ステータスの状態遷移図である。制御方向ステータスは、IDLE状態SB1と、Writing状態SB2と、Reading状態SB3と、Read2Write状態SB4と、Write2Read状態SB5とを含む5個の状態を有している。Read2Write状態SB4は、書込み遷移ステータスとも呼ばれる。Write2Read状態SB5は、読出し遷移ステータスとも呼ばれる。
【0150】
Read2Write状態SB4は、Reading状態SB3からWriting状態SB2への遷移状態である。Read2Write状態SB4は、Readコマンドを実行しつつActivate_for_Writeコマンド(Writeコマンド実行のための)を実行する状態である。Write2Read状態SB5は、Writing状態SB2からReading状態SB3への遷移状態である。Write2Read状態SB5は、Writeコマンドを実行しつつActivate_for_Readコマンド(Readコマンド実行のための)を実行する状態である。
【0151】
図19は、第2実施形態に係るtFAW制約の内容を示すタイミングチャートである。tFAW制約(Four Activate Window delay)は、高効率のメモリ制御を実現するために重要なバンク間のタイミング制約の一つである。tFAW制約は、Activateが4つ存在してもよい期間を定義したものである。tFAW制約は、Activateにおける電力消費によってSDRAM Deviceの機能が悪影響を受けないように定義されているものである。メモリ制御は、tFAW制約によって、ある一定期間内におけるActivateの多発を制限することができる。この例では、tFAW制約の期間は、30クロックに設定されているものとする。
【0152】
クロックCLKは、メモリ制御部60の制御クロックを示している。バンク間制御部6234aのtFAW管理部6234T1は、4つのフラグFL1乃至FL4を有している。BL情報管理部6234T2は、BL情報、すなわちバーストの回数の残存数である残BL数を管理している。残BL数には、残書込みBL数(残BL数(W))と残読出しBL数(残BL数(R))とがある。マスク処理部6234T3は、4つのフラグFL1乃至FL4に基づいてマスクフラグMを設定し、マスクフラグMに基づいてActivateをマスク(制限)する。バンク間調停部6234T4は、制御方向ステータスを管理している。
【0153】
メモリ制御部60は、時刻T1(クロック0)において、Activate_for_WriteコマンドWA1を実行している。これに応じて、tFAW管理部6234T1は、時刻T1に最初のフラグFL1を所定の期間(この例ではtFAW制約の期間である30クロック)立てる。次に、メモリ制御部60は、時刻T2(クロック4)において、Activate_for_WriteコマンドWA2を実行している。これに応じて、tFAW管理部6234T1は、時刻T2に2番目のフラグFL2を立てる。さらに、次に、メモリ制御部60は、時刻T3(クロック8)において、Activate_for_WriteコマンドWA3を実行している。これに応じて、tFAW管理部6234T1は、時刻T3に3番目のフラグFL3を立てる。
【0154】
メモリ制御部60は、時刻T4(クロック12)において、Activate_for_WriteコマンドWA4を実行している。これに応じて、tFAW管理部6234T1は、時刻T4に4番目のフラグFL4を立てる。マスク処理部6234T3は、4つのフラグFL1乃至FL4がすべて立ったので、マスクフラグMを立てる。マスク処理部6234T3は、マスクフラグMが立ったので、Activateを制限(禁止)する。
【0155】
メモリ制御部60は、時刻T5(クロック30)において、最初のフラグFL1を降ろす。時刻T1(クロック0)から所定の期間(tFAW制約の期間である30クロック)経過したからである。これにより、マスク処理部6234T3は、時刻T5において、マスクフラグMを降ろして、Activateを可能とする。
【0156】
メモリ制御部60は、時刻T6(クロック32)において、Activate_for_WriteコマンドWA2を実行している。これに応じて、tFAW管理部6234T1は、T6に再び最初のフラグFL1を立てる。マスク処理部6234T3は、4つのフラグFL1乃至FL4がすべて立ったので、マスクフラグMを立てる。マスク処理部6234T3は、マスクフラグMが立ったので、2番目のフラグFL2が降りる時刻T7までActivateを制限(禁止)する。これにより、メモリ制御部60は、は、Activateにおける電力消費によってSDRAM Deviceの機能が悪影響を受けないようにすることができる。
【0157】
一方、BL情報管理部6234T2は、書込みバーストの回数の残存数である残書込みBL数を更新する。BL情報管理部6234T2は、時刻T1のActivate_for_WriteコマンドWA1に関連するBL情報に基づいて残書込みBL数を更新する。この例では、BL情報管理部6234T2は、BL情報がBL=4なので、残書込みBL数に4を加算して残書込みBL数を「4」とする。次に、BL情報管理部6234T2は、時刻T2において、Activate_for_WriteコマンドWA2に関連するBL情報(BL=4)に基づいて残書込みBL数を「8」に更新する。
【0158】
一方、BL情報管理部6234T2は、Writeコマンドが実行される毎に残書込みBL数を「1」だけデクリメント(減算して)し、残書込みBL数を「7」に更新する。このように、BL情報管理部6234T2は、Activateなしで処理される予定のバーストの回数の残存数を実時間で管理することができる。
【0159】
図20は、tFAW制約に起因するデータバスのストール状態を示すタイミングチャートである。
図20は、
図19の例において、Activate_for_WriteコマンドWA1乃至WA4に関連するBL数が小さいケースを示している。
【0160】
この例では、時刻T11において、メモリ制御部60は、残BL数がゼロとなってDDR物理層インターフェース80の送信可能な書込みデータが枯渇することになる。時刻T6までは、tFAW制約の期間なので新たなActivate_for_WriteコマンドWAの発行が禁止されているからである。
【0161】
これにより、メモリ制御部60は、最後のWriteコマンドの実行で送信される書き込みデータをデータバスに送信した後に、すなわち遅れ時間D1の経過の後にメモリ制御部60とDDR物理層インターフェース80との間のDDR PHY Interface(DFI)バスをストールさせることになる。さらに、DDR PHY Interface(DFI)バスのストールに伴って、遅れ時間D2の経過の後にメモリバス(Mバス)のストールも発生している。
【0162】
本願発明者は、DFIバスのストールの一因として、時刻T4の調停時に選択されたActivate_for_Writeコマンドに伴う書き込みデータ のバースト数が少ないことに着目し、新たなバンク間調停方法を創作した。この調停方法は、残バースト数に着目し、残バースト数が少なくなったらBL数が大きな書込み又は読出しを伴うActivate_for_Write又はActivate_for_Readを調停結果として選択する というインテリジェントな方法である。具体的には、メモリ制御部60は、たとえば時刻T4においてインテリジェントな方法で調停を実行し、BL数が比較的に大きな数(たとえば7や8)のデータを伴うActivate_for_Writeを選択 していればDFIバス及びメモリバスのストールを防止又は短縮化することができたはずである。
【0163】
図21は、第2実施形態に係る要求ピックアップ処理(ステップS40a)の内容を示すフローチャートである。第2実施形態に係る要求ピックアップ処理(ステップS40a)は、書込み要求ピックアップ処理(ステップS44)及び読出し要求ピックアップ処理(ステップS45)が書込み要求ピックアップ処理(ステップS44a)及び読出し要求ピックアップ処理(ステップS45a)に変更されている点で第1実施形態に係る要求ピックアップ処理(ステップS40)と相違している。
【0164】
図22は、第2実施形態に係る書込み要求ピックアップ処理(ステップS44a)及び読出し要求ピックアップ処理(ステップS45a)の内容を示すフローチャートである。
図22(a)は、書込み要求ピックアップ処理(ステップS44a)の内容を示すフローチャートである。
図22(b)は、読出し要求ピックアップ処理(ステップS45a)の内容を示すフローチャートである。読出し要求ピックアップ処理(ステップS45a)は、処理対象となる要求が書込み要求ではなく読出し要求である点を除いて、書込み要求ピックアップ処理(ステップS44a)と同一の処理なので、書込み要求ピックアップ処理(ステップS44a)についてのみ説明する。
【0165】
ステップS441では、バンク間調停部6234T4は、残書込みBL数取得処理を実行する。残書込みBL数取得処理では、バンク間調停部6234T4は、BL情報管理部6234T2から書込みバーストの回数の残存数である残書込みBL数を取得する。
【0166】
ステップS442では、バンク間調停部6234T4は、残書込みBL数と予め設定されている所定の閾値とを比較し、残書込みBL数が所定の閾値未満であるか否かを判断する。バンク間調停部6234T4は、残書込みBL数が所定の閾値未満である場合には、処理をステップS444に進め、残書込みBL数が所定の閾値以上である場合には、処理をステップS443に進める。
【0167】
ステップS443では、バンク間調停部6234T4は、ラウンドロビン方式で書込み要求をピックアップする。これにより、バンク間調停部6234T4は、特定の書込み要求の滞留を抑制して円滑に調停することができる。
【0168】
ステップS444では、バンク間調停部6234T4は、BL数が最大の書込み要求をピックアップする。これにより、バンク間調停部6234T4は、残書込みBL数が所定の閾値未満である場合、すなわちtFAW制約によってActivateが制限されたときに、処理対象のバースト回数がゼロとなって書込み処理が停止してしまう可能性を抑制することができる。所定の閾値は、書込み処理の停止の可能性とBL数が少ない書込み要求の滞留のトレードオフとして解析とシミュレーションとを利用して決定することができる。
【0169】
このように、第2実施形態に係るメモリ制御部60は、tFAW制約に起因する性能低下を抑制し、効率的な調停を実現することができる。
G.第3実施形態に係る画像形成装置の機能構成(バンク間調停処理手順)
【0170】
図23は、第3実施形態に係る画像形成装置1aの機能構成を示すブロックダイアグラムである。画像形成装置1aは、DDRメモリ70がDDRメモリ70aに変更され、メモリ制御部60がメモリ制御部60aに変更されている点で画像形成装置1と相違する。DDRメモリ70aは、16個のバンクを有しているDouble-Data-Rate4 Synchronous Dynamic Random Access Memoryである。メモリ制御部60aは、論理回路として構成されているマスク処理部60MPを有している。
【0171】
DDRメモリ70aは、4個のバンクを含む4つのバンクグループBG1乃至BG4と、4つのローカルバッファ71乃至74と、1つのグローバルバッファ75とを有している。4つのバンクグループBG1乃至BG4は、それぞれ4つのローカルバッファ71乃至74に接続されている。4つのローカルバッファ71乃至74は、いずれもグローバルバッファ75に接続されている。グローバルバッファ75は、物理層インターフェース80に接続され、書込みデータ及び読出しデータの送受信に使用される。
【0172】
DDRメモリ70aは、タイミング制約として、同一バンクグループ内の比較的に長いカラムコマンド間(column to column delay、すなわち間隔)の間隔tCCD_L(tCCDロング)と、相違するバンクグループ間の比較的に短いカラムコマンド間(column to column delay、すなわち間隔)の間隔tCCD_S(tCCDショート)とを有している。
【0173】
すなわち、DDRメモリ70aでは、同一バンクグループ内においてバンクへの読み書きの処理が制限されるカラムコマンド間の間隔tCCD_L(バンクグループ内制約時間とも呼ばれる。)は、相違するバンクグループ間においてバンクへの読み書きの処理が制限されるカラムコマンド間の間隔tCCD_S(バンクグループ間制約時間とも呼ばれる。)よりも長い間隔の時間的制約がある。換言すれば、一のバンクグループ内のバンクへの読み書きのコマンドが実行されると、同一、すなわち最後にアクセスされたバンクグループ内のバンクへの読み書きよりも相違するバンクグループ内のバンクへの読み書きの方が短いタイミング制約で実行可能である。
【0174】
マスク処理部60MPには、4個のバンク内調停部6232においてタイミング制約を満たしていることが確認されているAct、Read、Write及びPreChargeの各要求が入力される。ただし、バンク内調停部6232は、バンクグループ内制約時間(tCCD_L)及びバンクグループ間制約時間(tCCD_S)を考慮することなく、各要求をマスク処理部60MPに送信する。マスク処理部60MPは、バンクグループ内制約時間(tCCD_L)又はバンクグループ間制約時間(tCCD_S)によって制限対象となっている要求をマスクする。
【0175】
これにより、メモリ制御部60aは、バンクグループ内制約時間(tCCD_L)及びバンクグループ間制約時間(tCCD_S)によって制限対象となっている要求を予め調停対象から排除することができるので、バンクグループ内制約時間(tCCD_L)及びバンクグループ間制約時間(tCCD_S)によって阻害されることなく円滑な処理を実現することができる。
【0176】
図24は、第3実施形態に係る内部調停部623bの機能構成を示すブロックダイアグラムである。第3実施形態に係る内部調停部623bは、タイムアウトノード管理部6235と、バス方向制御部6236とに接続されている。第3実施形態に係る内部調停部623bは、第2実施形態に係るバンク間制御部6234aの代わりにバンク間制御部6234bを備えている。バンク間制御部6234bは、タイムアウトノード検出部6234T5を備えている。
【0177】
バンク間制御部6234bには、バンク間制御部6234及びバンク間制御部6234aと同様に、4個のバンク内調停部6232においてタイミング制約を満たしていることが確認されているAct、Read、Write及びPreChargeの各要求が入力される。
【0178】
バス方向制御部6236は、データ管理部6236Dと、方向ステートマシン6236Sと、切替タイマー6236Tとを有している。データ管理部6236Dは、書込み要求及び読出し要求の有無を管理している。方向ステートマシン6236Sは、内部データバスの5状態、すなわちIDLE、Writing、Reading、Read2Write及びWrite2Readの5つの状態を管理し、各ステータス(状態)を出力する。切替タイマー6236Tは、強制的な内部データバスの方向の切り替えのための時間を計測する。
【0179】
バス方向制御部6236は、切替タイマー6236Tの使用によって、書込み処理又は読出し処理の一方が内部データバスを占有し続けて、他方の処理が出来なくなることを抑制又は防止するために内部データバスのデータの流れる方向を切替(制御)することができる。切替タイマー6236Tは、方向ステートマシン6236Sが出力するステータス(状態)に基づいて、書込み処理又は読出し処理の一方が継続的に実行されている時間を計測し、すなわちカウンタを作動させ、予め設定されている一定期間に到達するとカウンタをリセットする。この一定期間は、図示しないレジスタで設定可能である。
【0180】
バス方向制御部6236は、データ管理部6236Dによる書込み要求及び読出し要求の有無に基づいて内部データバスの方向を制御する。すなわち、バス方向制御部6236は、たとえば書込み処理の継続に起因してカウンタがリセットされ、読出し要求が存在するとの情報をデータ管理部6236Dから取得した場合には、内部データバスの方向を書込み処理の方向から読出し処理の方向に切り替える。一方、バス方向制御部6236は、書込み処理の継続に起因してカウンタがリセットされ、読出し要求が存在しないとの情報をデータ管理部6236Dから取得した場合には、内部データバスの方向を書込み処理の方向のまま維持する。
【0181】
バス方向制御部6236は、書込み処理又は読出し処理の一方の処理中、たとえば書込み処理中に、書込み要求が無くなって読出し要求が存在するときには、切替タイマー6236Tによる計測時間が一定期間に到達する前に、内部データバスの方向を逆方向(この例では、読出し処理の方向)に切り替える。
【0182】
バス方向制御部6236は、さらに、閾値未満のDCV値が検出された場合には、例外処理(タイムアウト要求処理)として内部データバスの方向を逆方向に切り替えることができる。具体的には、バンク間制御部6234bのタイムアウトノード検出部6234T5は、閾値未満のDCV値を有する制御データを検出し、制御データの処理に必要な内部データバスの方向を特定する一方、方向ステートマシン6236Sから内部データバスの状態を表す状態信号DSを取得して内部データバスの現在の方向を特定する。タイムアウトノード検出部6234T5は、制御データの処理に必要な内部データバスの方向が内部データバスの現在の方向と逆である場合には、バス方向制御部6236にタイムアウト信号DCCを送信し、内部データバスの方向を逆転させることができる。
【0183】
図25は、第3実施形態に係るタイムアウトノード調停処理(ステップS300)の内容を示すフローチャートである。タイムアウトノード調停処理は、閾値未満のDCV値を有する制御データであるタイムアウトノードと、DCV値が閾値以上のノードである通常ノードとを対象とする調停処理である。タイムアウトノード調停処理では、タイムアウトノード管理部6235が使用される。タイムアウトノード管理部6235は、フラグ6235Fと、タイムアウトノードキュー6235Qとを有している。フラグ6235Fは、処理中のタイムアウトノードが存在するか否かを表すフラグである。タイムアウトノードキュー6235Qは、調停対象となるタイムアウトノードを保持するキューである。
【0184】
ステップS310では、バンク間制御部6234bは、フラグ6235Fの状態と状態信号DSとに基づき、タイムアウトノードキュー6235Qに要求(たとえば書込み要求や読出し要求)を伴うタイムアウトノードが存在するか否かを判断する。
【0185】
バンク間制御部6234bは、タイムアウトノードキュー6235Qに登録されている要求を伴うタイムアウトノードが存在する場合には、処理をステップS315に進める。ステップS315では、バンク間制御部6234bは、タイムアウトノードキュー6235Qに登録されている要求を伴うタイムアウトノードの全てを最優先で処理する。バンク間制御部6234bは、タイムアウトノードキュー6235Qに登録されている要求を伴うタイムアウトノードが存在しない場合には、処理をステップS320に進める。
【0186】
ステップS320では、バンク間制御部6234bのタイムアウトノード検出部6234T5は、タイムアウトノードの検出処理を実行する。このように、バンク間制御部6234bは、要求を伴うタイムアウトノードが存在する場合には、新たにタイムアウトノードの検出処理及び調停処理を実行することなく、要求を伴うタイムアウトノードの処理を優先して実行し、要求を伴うタイムアウトが存在しない場合のみに、新たにタイムアウトノードの検出処理及び調停処理を実行することになる。これにより、バンク間制御部6234bは、新たなタイムアウトノードの検出に起因する処理中のタイムアウトノードの処理の阻害を予防し、タイムアウトノードの処理の円滑化を実現することができる。
【0187】
バンク間制御部6234bは、処理対象となっているタイムアウトノードが存在せず、タイムアウトノードが検出されなかった場合には、処理をバンク間調停処理(ステップS400、S400a、S400c、S400e及びS400f)に進める。これにより、バンク間制御部6234bは、通常ノードのみを対象とするバンク間調停処理を実行することができる。一方、バンク間制御部6234bは、タイムアウトノードが少なくとも1つでも検出された場合には、タイムアウトノードのみを調停の対象とするために処理をステップS330に進める。
【0188】
ステップS330では、バンク間制御部6234bは、タイムアウトノードピックアップ処理を実行する。タイムアウトノードピックアップ処理では、バンク間制御部6234bは、全てのタイムアウトノードをピックアップし、処理をバンク間調停処理(S400,S400b,S400d~S400f)に進める。これにより、バンク間制御部6234bは、タイムアウトノードのみを対象とするバンク間調停処理を実行することができる。バンク間調停処理の結果は、タイムアウトノードキュー6235Qに登録される。
【0189】
ステップS400乃至S400eでは、バンク間制御部6234bは、バンク間調停処理を実行する。バンク間調停処理は、タイムアウトノード検出部6234T5が複数のタイムアウトノードを検出した場合に、複数のタイムアウトノードをタイムアウトノードキュー6235Qに保持し、複数のタイムアウトノードの処理のための優先順位を決定する処理である。バンク間調停処理は、内部データバスの状態がIDLE時、WRITING時、READING時、READ2WRITE時及びWRITE2READ時のいずれであるかに応じて処理内容が異なる。以下では、状態毎にバンク間調停処理の内容が説明される。
【0190】
図26は、第3実施形態に係るバンク間調停処理(方向制御(IDLE時:ステップS400))の内容を示すフローチャートである。方向制御がIDLE時には、処理対象となっているタイムアウトノードが存在せず、タイムアウトノードが検出されなかった場合には、バンク間制御部6234bは、通常ノードのみを対象とするバンク間調停処理を実行する。バンク間制御部6234bは、タイムアウトノードが検出されている場合には、タイムアウトノードのみを対象とするバンク間調停処理を実行する。
【0191】
ステップS410では、バンク間制御部6234bは、読出し要求又は書込み要求を伴うノード(タイムアウトノード又は通常ノード)が存在するか否かを判断し、読出し要求又は書込み要求を伴うノードが存在する場合には、処理をステップS420に進め、読出し要求又は書込み要求を伴うノードが存在しない場合には、処理をステップS450に進める。
【0192】
ステップS420では、バンク間制御部6234bは、読出し要求又は書込み要求を伴うノードが単一又は複数のいずれであるかを判断し、読出し要求又は書込み要求を伴うノードが単一である場合には、バンク間調停処理が不要なので、バンク間調停処理が完了し、複数である場合には、処理をステップS430に進める。
【0193】
ステップS430では、バンク間制御部6234bは、最終バンク、すなわち最後にアクセスしたバンクに対する要求を伴なうノードが存在する場合には、そのノードを選択して調停を終了し、最終バンクに対する要求を伴なうノードが存在しない場合には、ラウンドロビン方式で要求を選択する(ステップS440)。
【0194】
メモリ制御部60aは、複数ビートで構成される1トランザクションに1個のトランザクションIDを付与する。たとえば書込み処理の際には、このトランザクションIDに紐づく形で、書込みバッファテーブルの1エントリーに、書込みバッファテーブル682のどの位置にデータが保存されているかの情報が登録される。トランザクションIDは、そのすべてのデータがメモリに書き出されるまで保護されるので、効率よく書込みバッファ681及び書込みバッファテーブル682を使用するためには、既に書込みを開始したトランザクションIDは極力早く終了することが好ましい。この点は、読出しバッファ691及び読出しバッファテーブル692についても同様である。
【0195】
これにより、メモリ制御部60aは、書込みバッファ681、書込みバッファテーブル682、読出しバッファ691及び読出しバッファテーブル692といったハードウェアリソースを効果的に使用して円滑な処理を実現することができる。
【0196】
ステップS450では、バンク間制御部6234bは、ノードがActivate要求、すなわちActivate_for_Read要求又はActivate_for_Write要求であるか否かを判断し、ノードがActivate要求である場合には、処理をステップS480に進め、ノードがActivate要求でない場合には、処理をステップS460に進める。ノードは、Activate要求が存在しない場合には、PreCharge要求のみが存在することになる。
【0197】
ステップS460では、バンク間制御部6234bは、ノードがPreCharge要求であるか否かを判断し、PreCharge要求でない場合には、バンク間調停処理が不要なので、バンク間調停処理が完了し、PreCharge要求である場合には、処理をステップS465に進める。
【0198】
ステップS465では、バンク間制御部6234bは、PreCharge要求を伴うノードが単一又は複数のいずれであるかを判断し、単一である場合には、バンク間調停処理が不要なので、バンク間調停処理が完了し、複数である場合には、ラウンドロビン方式で要求を選択する(ステップS470)。
【0199】
ステップS480では、バンク間制御部6234bは、Activate要求を伴うノードが単一又は複数のいずれであるかを判断し、単一である場合には、バンク間調停処理が不要なので、バンク間調停処理が完了し、複数である場合には、要求ピックアップ処理(ステップS40a(
図21参照))で要求を選択する。
【0200】
図27は、第3実施形態に係るバンク間調停処理(方向制御(WRITING時:タイムアウトノード不存在の場合(ステップS400a)))の内容を示すフローチャートである。方向制御がWRITING時のバンク間調停処理は、ステップS410、ステップS420及びステップS450がそれぞれステップS410a、ステップS420a及びステップS450aに変更されている点で、方向制御がIDLE時のバンク間調停処理と相違する。
【0201】
ステップS410a、ステップS420a及びステップS450aの処理は、バンク間制御部6234bが書込み要求を伴う通常ノードのみを処理の対象とする点で、読出し要求又は書込み要求を伴うノード(タイムアウトノード及び通常ノード)を処理の対象とするステップS410、ステップS420及びステップS450の処理と相違している。これにより、バンク間調停処理は、タイムアウトノード不存在の場合において、方向制御がWRITING時には、書込み要求を伴う通常ノードのみを処理対象として円滑な処理を実現することができる。
【0202】
ステップS430では、バンク間制御部6234bは、最終バンク、すなわち最後にアクセスしたバンクに対する要求を伴なうノードが存在する場合には、そのノードを選択して調停を終了し、最終バンクに対する要求を伴なうノードが存在しない場合には、ラウンドロビン方式で要求を選択する(ステップS440)。この点では、WRITING時のバンク間調停処理は、IDLE時のバンク間調停処理と同一である。ただし、WRITING時には、最終バンクに対する要求を伴なうノードが存在する場合に、そのノードを選択すれば、書込みバッファ681及び書込みバッファテーブル682を効率的に使用することができる。
【0203】
図28は、第3実施形態に係るバンク間調停処理(方向制御(WRITING時:タイムアウトノード存在の場合(ステップS400b)))の内容を示すフローチャートである。方向制御がWRITING時において、タイムアウトノード存在の場合のバンク間調停処理は、ステップS410a、ステップS420a及びステップS450aがそれぞれステップS410b、ステップS420b及びステップS450bに変更されている点と、READ切替処理(ステップS490)が追加されている点とにおいて、方向制御がWRITING時において、タイムアウトノード不存在の場合のバンク間調停処理と相違する。
【0204】
ステップS410b、ステップS420b、ステップS450b及びステップS460bの処理は、バンク間制御部6234bが書込み要求を伴うタイムアウトノードのみを処理の対象とする点で、書込み要求を伴う通常ノードのみを処理の対象とするステップS410a、ステップS420a、ステップS450a及びステップS460の処理と相違している。これにより、バンク間調停処理は、タイムアウトノードが存在する場合において、方向制御がWRITING時には、書込み要求を伴うタイムアウトノードのみを処理対象として円滑な処理を実現することができる。
【0205】
図29は、第3実施形態に係るREAD切替処理(ステップS490)の内容を示すフローチャートである。ステップS491では、バンク間制御部6234bは、読出し要求を伴うタイムアウトノードが存在するか否かを判断し、読出し要求を伴うタイムアウトノードが存在する場合には、処理をステップS492に進め、読出し要求を伴うタイムアウトノードが存在しない場合には、処理をステップS494に進める。
【0206】
ステップS492では、バンク間制御部6234bは、読出し要求を伴うタイムアウトノードが単一又は複数のいずれであるかを判断し、単一である場合には、バンク間調停処理が不要なので、バンク間調停処理が完了し、複数である場合には、ラウンドロビン方式で要求を選択する(ステップS493)。
【0207】
ステップS494では、バンク間制御部6234bは、タイムアウトノードがActivate_for_Read要求であるか否かを判断し、タイムアウトノードがActivate_for_Read要求である場合には、処理をステップS495に進め、タイムアウトノードがActivate_for_Read要求でない場合には、何らの処理も必要なく、処理を戻す(
図28参照)。
【0208】
ステップS495では、バンク間制御部6234bは、Activate_for_Read要求を伴うタイムアウトノードが単一又は複数のいずれであるかを判断し、単一である場合には、バンク間調停処理が不要なので、バンク間調停処理が完了し、複数である場合には、要求ピックアップ処理(ステップS40a(
図21参照))で要求を選択する。ステップS497では、バンク間制御部6234bは、内部データバスの方向をWriting状態からReading状態に変更させる。
【0209】
図30は、第3実施形態に係るバンク間調停処理(方向制御(READING時:タイムアウトノード不存在の場合(ステップS400c)))の内容を示すフローチャートである。方向制御がREADING時のバンク間調停処理は、ステップS410、ステップS420及びステップS450がそれぞれステップS410c、ステップS420c及びステップS450cに変更されている点で、方向制御がIDLE時のバンク間調停処理と相違する。
【0210】
ステップS410c、ステップS420c及びステップS450cの処理は、バンク間制御部6234bが読出し要求を伴う通常ノードのみを処理の対象とする点で、読出し要求又は書込み要求を伴うノード(タイムアウトノード及び通常ノード)を処理の対象とするステップS410、ステップS420及びステップS450の処理と相違している。これにより、バンク間調停処理は、タイムアウトノード不存在の場合において、方向制御がREADING時には、読出し要求を伴う通常ノードのみを処理対象として円滑な処理を実現することができる。
【0211】
ステップS430では、バンク間制御部6234bは、最終バンク、すなわち最後にアクセスしたバンクに対する要求を伴なうノードが存在する場合には、そのノードを選択して調停を終了し、最終バンクに対する要求を伴なうノードが存在しない場合には、ラウンドロビン方式で要求を選択する(ステップS440)。この点では、READING時のバンク間調停処理は、IDLE時のバンク間調停処理と同一である。ただし、READING時には、最終バンクに対する要求を伴なうノードが存在する場合に、そのノードを選択すれば、読出しバッファ691及び読出しバッファテーブル692を効率的に使用することができる。
【0212】
図31は、第3実施形態に係るバンク間調停処理(方向制御(READING時:タイムアウトノード存在の場合(ステップS400d)))の内容を示すフローチャートである。方向制御がREADING時において、タイムアウトノード存在の場合のバンク間調停処理は、ステップS410c、ステップS420c及びステップS450cがそれぞれステップS410d、ステップS420d及びステップS450dに変更されている点と、WRITE切替処理(ステップS490a)が追加されている点とにおいて、方向制御がREADING時において、タイムアウトノード不存在の場合のバンク間調停処理と相違する。
【0213】
ステップS410d、ステップS420d、ステップS450d及びステップS460dの処理は、バンク間制御部6234bが読出し要求を伴うタイムアウトノードのみを処理の対象とする点で、読出し要求を伴う通常ノードのみを処理の対象とするステップS410c、ステップS420c、ステップS450c及びステップS460の処理と相違している。これにより、バンク間調停処理は、タイムアウトノードが存在する場合において、方向制御がREADING時には、読出し要求を伴うタイムアウトノードのみを処理対象として円滑な処理を実現することができる。
【0214】
図32は、第3実施形態に係るWRITE切替処理(ステップS490a)の内容を示すフローチャートである。WRITE切替処理は、ステップS491乃至ステップS495及びステップS497がそれぞれステップS491a乃至ステップS495a及びステップS497aに変更され、処理対象が読出し要求から書込み要求に変更されている点でREAD切替処理(ステップS490)と相違する。WRITE切替処理(ステップS490a)では、さらに、バンク間制御部6234bは、内部データバスの方向をReading状態からWriting状態に変更(ステップS497a)させる点でREAD切替処理(ステップS490)と相違する。
【0215】
図33は、第3実施形態に係るバンク間調停処理(方向制御(READ2WRITE時(ステップS400e)))の内容を示すフローチャートである。方向制御がREAD2WRITE時のバンク間調停処理は、ステップS410、ステップS420及びステップS450がそれぞれステップS410c、ステップS420c及びステップS450cに変更されている点で、方向制御がIDLE時のバンク間調停処理と相違する。READ2WRITE時の状態は、Reading状態からWriting状態への遷移状態なので、読出し要求を処理しつつ書込み要求のためのActivate処理を実行する状態である。
【0216】
ステップS410c、ステップS420c及びステップS450cの処理は、バンク間制御部6234bが読出し要求を伴うタイムアウトノード及びActivate_for_Write要求のみを処理の対象とする点で、読出し要求又は書込み要求を伴うタイムアウトノードを処理の対象とするステップS410、ステップS420及びステップS450の処理と相違している。これにより、バンク間調停処理は、方向制御がREAD2WRITE時には、読出し要求を処理しつつ書込み要求のためのActivate処理を円滑に実行することができる。
【0217】
図34は、第3実施形態に係るバンク間調停処理(方向制御(WRITE2READ時(ステップS400f)))の内容を示すフローチャートである。方向制御がWRITE2READ時のバンク間調停処理は、ステップS410、ステップS420及びステップS450がそれぞれステップS410d、ステップS420d及びステップS450dに変更されている点で、方向制御がIDLE時のバンク間調停処理と相違する。WRITE2READ時の状態は、WRITE状態からREAD状態への遷移状態なので、書込み要求を処理しつつ読出し要求のためのActivate処理を実行する状態である。
【0218】
ステップS410d、ステップS420d及びステップS450dの処理は、バンク間制御部6234bは、書込み要求を伴うタイムアウトノード及びActivate_for_Read要求のみを処理の対象とする点で、読出し要求又は書込み要求を伴うタイムアウトノードを処理の対象とするステップS410、ステップS420及びステップS450の処理と相違している。これにより、バンク間調停処理は、方向制御がWRITE2READ時には、書込み要求を処理しつつ読出し要求のためのActivate処理を円滑に実行することができる。
【0219】
このように、第3実施形態に係るメモリ制御部60aは、バンクグループ内制約時間(tCCD_L)及びバンクグループ間制約時間(tCCD_S)によって制限対象となっている要求を予め調停対象から排除することができるので、バンクグループ内制約時間(tCCD_L)及びバンクグループ間制約時間(tCCD_S)によって阻害されることなく円滑な処理を実現することができる。さらに、メモリ制御部60aは、書込みバッファ681、書込みバッファテーブル682、読出しバッファ691及び読出しバッファテーブル692といったハードウェアリソースを効果的に使用して円滑な処理を実現することができる。
【0220】
H.変形例:
本開示は、上記各実施形態だけでなく、以下のような変形例でも実施することができる。
【0221】
変形例1:上記実施形態では、AXIプロトコルを使用し、AXIプロトコルに基づいてQOS値をサポートしているが、必ずしもAXIプロトコルを使用する必要はなく、QOS値の代わりに通信の優先性を表す他の通信優先性データを使用してもよい。本開示は、メモリ制御部の外部の機器との通信の優先性を表す通信優先性データを使用して優先的に処理を実行するものであればよい。
【0222】
変形例2:上記実施形態では、メモリ制御部の外部の機器との通信の優先性を表す通信優先性データ(たとえばQOS値)を使用してメモリの制御における処理の優先性を表すDCV値を生成しているが、必ずしも通信優先性データを使用してDCV値を生成する必要はない。本開示は、割り込み処理の実行に使用される処理優先性データ(たとえば初期値が同一)を生成するものであればよい。
【0223】
変形例3:上記実施形態では、通信優先性データを使用してDCV値を生成しているが、逆にDCV値に基づいて通信優先性データを調整するようにしてもよい。具体的には、通信制御部は、たとえば閾値未満のDCV値を有するトランザクションTのQOS値を、たとえば「2」から「0」に変更するように、すなわちDCV値に応じて通信における優先性を高めるように構成されていてもよい。これにより、画像形成装置は、メモリ制御部での長時間の滞留に起因するシステム全体の処理の遅延を抑制することができる。
【0224】
変形例4:上記実施形態では、本開示は、画像読取部と画像形成部とを備える画像形成装置に適用されているが、画像送信部を有し、画像送信装置として機能するファクシミリ機能を有する画像形成装置に適用してもよい。ファクシミリ機能は、通信対象となる画像データをメモリから読出して送信する機能を含んでいる。
【0225】
変形例5:上記実施形態では、本開示は、画像形成装置に適用されているが、画像形成装置に限定されない。本開示は、画像形成装置以外の装置に利用されるメモリを制御するメモリ制御装置にも適用可能である。
【符号の説明】
【0226】
1 画像形成装置
10 制御部
20 画像処理部
30 画像形成部
40 記憶部
41 校正用データ記憶領域
50 画像読取部
60 メモリ制御部
70 DDRメモリ