以下、図面を参照して、本発明の実施形態を詳細に説明する。本実施形態においては、データ転送制御装置として、規格で仕様が規定されていない独自仕様DMAC(Direct Memory Access Controler:DMAコントローラ)と、規格で仕様が規定されている規格準拠DMACとが、FIFO(First In First Out)を介して、メモリとHDD(Hard Disc Drive)との間でデータ転送を行うPC(Personal Cmputer)や画像形成装置等の情報処理装置を例として説明する。
この独自仕様DMACと規格準拠DMACとは機能が異なり、独自仕様DMACは、規格準拠DMACにはない、2次元DMA転送機能やディスクリプタチェイン等の機能を備える。即ち、本実施形態においては、規格準拠DMACがモジュール対応DMACとして機能し、独自仕様DMACが機能対応DMACとして機能する。このように構成された情報処理装置1において、本実施形態に係る要旨の一つは、規格準拠DMACと独自仕様DMACとを併用する場合において効率的な制御を実現することにある。
まず、本実施形態に係る情報処理装置1のハードウェア構成について図1を参照して説明する。図1は、本実施形態に係る情報処理装置1のハードウェア構成を模式的に示すブロック図である。
図1に示すように、本実施形態に係る情報処理装置1は、独自仕様DMAC10、FIFO20、SATA(Serial Advanced Technology Attachment)制御部30、メモリ40、CPU(Central Processing Unit)50、HDD60、高速バス71、低速バス72、アドレス制御部80を備える。
FIFO20は、先に記憶したデータから順番にデータを取り出すことができる一時記憶装置で、データ入力用とデータ出力用の2つのスレーブインターフェースで高速バス71に接続されており、バスに接続されているマスターインターフェースを備えた任意のモジュールからアクセスすることができる。
FIFO20は、独自仕様DMAC10が出力する制御信号である疑似応答要求のアサートを検知すると、疑似応答を開始する。FIFO20は、疑似応答時、マスターインターフェースから送信要求があった場合には、FIFO20の状態に関わらず、即ち、空であっても、疑似データを送信する。一方、FIFO20は、疑似応答時、マスターインターフェースから受信要求があった場合には、FIFO20の状態に関わらず、即ち、満杯の状態であっても、データを受信し、受信したデータを記憶することなく破棄する。
ここで、本実施形態に係るFIFO20がこのように、疑似応答時、マスターインターフェースから送信要求があった場合、空でも疑似データを送信し、マスターインターフェースから受信要求があった場合、満杯でもデータを受信する理由について説明する。
HDD60等のストレージデバイスはセクター単位でのアクセスが必要であるため、規格準拠DMAC31のデータ転送量がセクタサイズの整数倍である。これに対し、独自仕様DMAC10のデータ転送サイズは1画素単位で設定可能である。そのため、規格準拠DMACと独自DMACとの間でデータ転送量の差が発生する。従って、本実施形態に係る情報処理装置1は、このときに上述したような疑似応答を実行することで、データ転送を正常に完了させるようになっている。
即ち、情報処理装置は、仮に疑似応答を実行しない場合、FIFO20に対するデータの送信要求に対して、FIFO20にデータが入力されるのを待ち続けることになる。また、情報処理装置は、仮に疑似応答を実行しない場合、FIFO20に対する受信要求に対して、FIFO20に空きができるまで待ち続けることになる。そこで、本実施形態に係る情報処理装置1、上述したような疑似応答を実行することでデータ転送を正常に完了させるようになっている。本実施形態に係る情報処理装置1は、このことを要旨の一つとしている。
データ送信用スレーブインターフェース21は、FIFO20に記憶してあるデータを、受信機能を備えた任意のマスターインターフェースへ送信する。受信機能を備えたマスターインターフェースを持つモジュールは、送信用スレーブインターフェース21に割り当てられたアドレスに対してリード動作を実行することで、FIFO20に記憶してあるデータを取得することができる。
データ受信用スレーブインターフェース22は、送信機能を備えた任意のマスターインターフェースから送信されたデータを受信する。このとき受信されたデータはFIFO20に記憶される。送信機能を備えたマスターインターフェースを持つモジュールは、受信用スレーブインターフェース22に割り当てられたアドレスに対してライト動作を実行することで、FIFO20へのデータ入力を実施することができる。
スレーブインターフェース21及び22は、データバス幅128bitで高速バス71に接続される。また、FIFO20の記憶容量は、8バースト動作×2回分=8×128bit×2=2048bit=256Byteとする。ここで、8バースト動作の転送サイズ(8×128bit)は、FIFO20を最も高い頻度で使用するSATA制御部30内部の規格準拠DMAC31の1回のバースト転送サイズである。FIFO20は、このように構成されることで、FIFO20にデータがライトされる速度と、FIFO20からデータがリードされる速度が同等である場合に、最小限の記憶容量でデータ転送速度を維持することが可能となる。
高速バス71は、任意のマスターインターフェースを備えたモジュールと、任意のスレーブインターフェースを備えたモジュール間のデータ転送を仲介する。この高速バス71に接続された複数組のマスターモジュール/スレーブモジュール間のデータ転送は、並行して実行され得る。本実施形態に係る高速バス71の帯域は、数GByte/Sの帯域が想定されている。
低速バス72は、各機能モジュールの設定情報等の高速な転送を必要としないデータの送受信で使用され、任意のマスターインターフェースを備えたモジュールと、任意のスレーブインターフェースを備えたモジュール間のデータ転送を仲介する。この高速バス71に接続された1組のマスターモジュール/スレーブモジュール間でデータ転送中である場合には、他のマスターモジュール/スレーブモジュール間でデータ転送を実行することはできない。本実施例では、数十MByte/Sの帯域を想定している。
CPU50は、各機能モジュールの動作を設定し、システムのメイン制御を実行する。また、CPU50は、データ送受信用のマスターインターフェース51を通して、バスに接続された任意のスレーブインターフェースを持つモジュールにアクセスすることができる。CPU50は、各スレーブインターフェースには、スレーブモジュールの仕様に応じたアドレス範囲、または、特定アドレス値が割り当てられており、このアドレスを指定することで、所望のスレーブモジュールにアクセスすることができる。
独自仕様DMAC10は、規格で仕様が規定されていない独自に設計・開発され、若しくは、独自に調達されたDMACである。この独自仕様DMAC10は、データ入力用のマスターインターフェース12とデータ出力用のマスターインターフェース13とで高速バス71に接続されており、バスに接続されているスレーブインターフェースを備えた任意のモジュールに対してアクセスすることができる。
また、独自仕様DMAC10は、データ送信用のマスターインターフェース12を通して、任意の受信用スレーブインターフェースを持つモジュールにライトすることができる。また、独自仕様DMAC10は、データ受信用のマスターインターフェース13を通して、任意の送信用スレーブインターフェースを持つモジュールからデータをリードすることができる。
また、独自仕様DMAC10は、2次元DMA転送機能を備えており、メモリ40とHDD60との間で、2次元画像として記憶しされている2次元画像データを転送する際、その全てを転送するのではなく、選択された特定の矩形領域のみを転送することができる。この2次元DMA転送機能の詳細については、図3〜図5にて説明する。
また、独自仕様DMAC10は、データ転送が完了すると、疑似応答要求をアサートすることで、FIFO20に対して疑似応答を要求する。独自仕様DMAC10のディスクリプタアドレス等の各種設定は、低速バス72に接続されたデータ送受信用スレーブインターフェース11を通してCPU50により設定される。
メモリ40は、HDD60からリードしたCPU50の動作プログラムを記憶し、若しくは、CPU50の処理したデータを記憶する等、各機能モジュールの作業領域として使用される主記憶装置である。データ送受信用のスレーブインターフェース41には、メモリ40の容量に応じたアドレス範囲が割り当てられており、バスに接続された任意のマスターインターフェースを持つモジュールは、このアドレスを指定することで、メモリ40にアクセスすることができる。
SATA制御部30は、データ送受信用のマスター型の規格準拠DMAC31が内蔵されている。また、SATA制御部30は、SATA規格に準拠したデバイスを制御するためのSATAホストコントローラ機能を備え、HDD60へのデータライト/データリードを実行する。SATAのコマンド設定や、HDD60のステータス情報の取得は、低速バス72に接続された送受信用のスレーブインターフェース32を通して、CPU50により実行される。
規格準拠DMAC31は、規格で仕様が規定されたDMACである。この規格準拠DMAC31は、マスターインターフェース33を通して高速バス71に接続され、スレーブインターフェースを持つ任意のモジュールにアクセスすることができる。規格準拠DMAC31のリード対象スレーブモジュール、ライト対象スレーブモジュール、転送データサイズ等の各種設定は、スレーブインターフェース32を通してCPU50により設定される。
アドレス制御部80は、規格準拠DMAC31がFIFO20にアクセスする場合には、アドレスを固定することで、インクリメントしないようにする。
HDD60は、SATA規格に準拠したストレージデバイスで、OS(Operating System)、アプリケーションプログラム等を記憶し、また、処理データの一時待避領域等に使用される。
次に、本実施形態に係る情報処理装置1におけるメモリ40のデータ構造について、図2を参照して説明する。図2は、本実施形態に係る情報処理装置1におけるメモリ40のデータ構造を模式的に示す図である。
図2に示すように、本実施形態に係る情報処理装置1において、メモリ40は、独自仕様DMAC制御レジスタ領域100、FIFO(出力)領域210、FIFO(入力)領域220、SATA制御レジスタ領域300、規格準拠DMAC制御レジスタ領域310、メモリ領域400、システム制御レジスタ領域500を含む。
システム制御レジスタ領域500は、CPU50の動作モード等を設定する領域で、アドレス0x0008_0000〜0x0010_0FFFが割り当てられている。
SATA制御レジスタ領域300は、送受信用スレーブインターフェース32を通してマスターモジュールがアクセスできる領域で、アドレス0x0010_1000〜0x0010_1FFFが割り当てられている。
規格準拠DMAC制御レジスタ領域310は、送受信用スレーブインターフェース32を通してマスターモジュールがアクセスできる領域で、アドレス0x0010_2000〜0x0010_2FFFが割り当てられている。
独自仕様DMAC制御レジスタ領域100は、送受信用スレーブインターフェース11を通してマスターモジュールがアクセスできる領域で、アドレス0x0010_3000〜0x0010_3FFFが割り当てられている。
FIFO(入力)領域220は、受信用スレーブインターフェース22を通してマスターモジュールがアクセスできる領域で、アドレス0x0020_0000が割り当てられている。
FIFO(出力)領域210は、送信用スレーブインターフェース21を通してマスターモジュールがアクセスできる領域で、アドレス0x0020_1000が割り当てられている。
メモリ領域400は、送受信用スレーブインターフェース41を通してマスターモジュールがアクセスできる領域で、アドレス0x8000_0000〜0xFFFF_FFFFが割り当てられている。
本実施例では、メモリ領域400は、画像記憶領域410、独自仕様DMACディスクリプタ(1)記憶領域420、独自仕様DMACディスクリプタ(2)記憶領域430、規格準拠DMACディスクリプタ記憶領域440を含む。
画像記憶領域410は、横n画素×縦m画素の2次元画像を記憶する。独自仕様DMACディスクリプタ(1)記憶領域420、及び、独自仕様DMACディスクリプタ(2)記憶領域430は、CPU50が独自仕様DMAC10の動作パラメータを記述する領域である。
このように、独自仕様DMACディスクリプタ(1)記憶領域420、及び、独自仕様DMACディスクリプタ(2)記憶領域430がチェインされている構成が、規格準拠DMAC31にはない、独自仕様DMAC10のみが備えるディスクリプタチェイン機能を実現するための構成である。尚、本実施例では、独自仕様DMACディスクリプタ記憶領域は、2段チェインされているが、同様のディスクリプタが追加作成されることにより、3段以上のチェインも可能になる。
規格準拠DMACディスクリプタ記憶領域440は、CPU50が規格準拠DMAC31の動作パラメータを記述する領域である。
次に、本実施形態に係る情報処理装置1における2次元DMA転送機能について、図3〜図5を参照して説明する。図3は、本実施形態に係る画像記憶領域410に記憶されている2次元画像データの画素情報とメモリアドレスとの関係を示す図である。図4は、本実施形態に係る独自仕様DMAC10が2次元DMA転送によりメモリ40から画像データをリードする際のディスクリプタ設定を説明するための図である。図5は、本実施形態に係る独自仕様DMAC10が2次元DMA転送によりメモリ40に画像データをライトする際のディスクリプタ設定を説明するための図である。
尚、図4及び図5の内容は、CPU50若しくは独自仕様DMAC10により設定される。即ち、本実施形態においては、CPU50若しくは独自仕様DMAC10がアドレス設定部及び転送パラメータ設定部として機能する。
図3に示すように、本実施形態に係る画像記憶領域410は、アドレス範囲0xC000_0000〜0xC000_0000+m*n−1に、横n画素×縦m画素の2次元画像データを記憶している。
本実施形態に係る画像記憶領域410は、1画素あたりのデータサイズを8bit(1Byte)とし、1アドレスあたり8bit(1Byte)=1画素のデータを記憶することができるものとする。
図3の一マスは、1画素に相当し、各画素に記述されている数値は、画素情報を記憶しているメモリアドレスのオフセットを示している。例えば、記載が「0」のマスならば、アドレス0xC000_0000に対応し、n−1ならば、アドレス0xC000_0000+(n−1)に対応する。
独自仕様DMAC10の2次元DMA転送機能で転送する矩形領域を、4つのオフセットアドレスX1、Y1、X2、Y2で定義すると、図3の太線で囲まれた領域が、転送対象の矩形領域となる。
このように選択された矩形領域について、独自仕様DMAC10は、アドレスY1*n+X1、Y1*n+X1+1・・・の順番にアクセスしていき、アドレスY1*n+X2のアクセス後は、(Y1+1)*n+X1、(Y1+1)*n+X1+1・・・の順番でアクセスする。そして、独自仕様DMAC10は、アドレス(Y1+1)*n+X2のアクセス後は、(Y1+2)*n+X1、(Y1+2)*n+X1+1・・・の順番でアクセスし、以後、同様の動作を繰り返す。独自仕様DMAC10は、アドレスY2*n+X2へのアクセスが終了すると、転送完了となる。
また、図4に示すように、本実施形態に係る独自仕様DMAC10が2次元DMA転送によりメモリ40から画像データをリードする際、CPU50により、独自仕様DMACディスクリプタ(1)記憶領域420及び独自仕様DMACディスクリプタ(2)記憶領域430にディスクリプタが作成される。このとき、独自仕様DMACディスクリプタ(1)記憶領域420には、アドレス0x8000_1000〜の40Byte分のディスクリプタが作成され、独自仕様DMACディスクリプタ(2)記憶領域430には、アドレス0x8000_1040〜の40Byte分のディスクリプタが作成される。尚、このディスクリプタ設定は、上記のアドレスの他、任意の空きメモリアドレスに作成可能である。
独自仕様DMACディスクリプタ(1)記憶領域420には、DMAC起動後、最初に動作する転送パラメータが設定される。独自仕様DMACディスクリプタ(2)記憶領域430には、独自仕様DMACディスクリプタ(1)記憶領域420に設定された動作が終了した後に動作する転送パラメータが設定される。本実施例では、独自仕様DMACディスクリプタ記憶領域は、図2に示したように、2段チェインされている例について説明するが、独自仕様DMACディスクリプタ(2)記憶領域430に設定された動作が終了した後に動作する転送パラメータがさらに設定されることで、3段以上のチェインも可能になる。この転送パラメータには、データ転送の際に動作する動作内容が記述されている。
転送モード設定4201には、メモリアクセスの方向が設定され、メモリ40から画像データをリードされる場合にはメモリリード方向に設定される。
次ディスクリプタアドレス421には、独自仕様DMACディスクリプタ(1)記憶領域420に設定された動作が終了した後に、次に実行するディスクリプタが存在する場合には、そのディスクリプタの記憶アドレスが設定される。本実施例では、この次ディスクリプタアドレス421には、独自仕様DMACディスクリプタ(2)記憶領域430の開始アドレス0x8000_1040が設定される。
データ転送元アドレス422には、メモリ40から画像データがリードされる場合には、転送対象画像を含む2次元画像データの記憶開始アドレスが設定される。本実施例では、このデータ転送元アドレス422には0xC000_0000が設定される。
データ転送先アドレス423には、メモリ40から画像データがリードされる場合には、FIFO20のデータ受信用スレーブインターフェース22のアドレスが設定される。本実施例では、このデータ転送先アドレス423には0x0020_0000が設定される。
横方向画像切り出し開始オフセットアドレス424には、2次元DMA転送時の転送対象となる矩形領域の横方向の開始位置が位置情報として指定される。本実施例では、この横方向画像切り出し開始オフセットアドレス424にはX1が指定される。この横方向画像切り出し開始オフセットアドレス424にオフセットアドレスとしてX1が指定された場合には、横方向にX1−1番目の画素が転送対象領域の開始画素となる。
縦方向画像切り出し開始オフセットアドレス425には、2次元DMA転送時の転送対象となる矩形領域の縦方向の開始位置が位置情報として指定される。本実施例では、この縦方向画像切り出し開始オフセットアドレス425にはY1が指定される。この縦方向画像切り出し開始オフセットアドレス425にオフセットアドレスとしてY1が指定された場合には、縦方向にY1−1番目の画素が転送対象領域の開始画素となる。
横方向画像切り出し終了オフセットアドレス426には、2次元DMA転送時の転送対象となる矩形領域の横方向の終了位置が位置情報として指定される。本実施例では、この横方向画像切り出し終了オフセットアドレス426にはX2が指定される。この横方向画像切り出し終了オフセットアドレス426にオフセットアドレスとしてX2が指定された場合には、横方向にX2−1番目の画素が転送対象領域の終了画素となる。
縦方向画像切り出し終了オフセットアドレス427には、2次元DMA転送時の転送対象となる矩形領域の縦方向の終了位置が位置情報として指定される。本実施例では、この縦方向画像切り出し終了オフセットアドレス427にはY2が指定される。この縦方向画像切り出し終了オフセットアドレス427にオフセットアドレスとしてY2が指定された場合には、縦方向にY2−1番目の画素が転送対象領域の終了画素となる。
横方向画像サイズ428には、転送対象画像を含む2次元画像データの横方向のページサイズが画素単位で設定される。本実施例では、この横方向画像サイズ428にはnが設定される。縦方向画像サイズ429には、転送対象画像を含む2次元画像データの縦方向のページサイズが画素単位で設定される。本実施例では、この縦方向画像サイズ429にはmが設定される。
転送モード設定4301には、メモリアクセスの方向が設定され、メモリ40から画像データがリードされる場合にはメモリリード方向に設定される。
次ディスクリプタアドレス431には、独自仕様DMACディスクリプタ(2)記憶領域430に設定された動作が終了した後に、次に実行するディスクリプタが存在する場合には、そのディスクリプタの記憶アドレスが設定される。本実施例では、独自仕様DMACディスクリプタ(2)記憶領域430が最後の転送となるため、次ディスクリプタアドレス431には0x0000_0000が設定される。独自仕様DMAC10は、次ディスクリプタアドレスが0x0000_0000の場合には、次の転送を実行しない仕様となっている。
データ転送元アドレス432には、メモリ40から画像データがリードされる場合には、転送対象画像を含む2次元画像データの記憶開始アドレスが設定される。本実施例では、このデータ転送元アドレス432には0xC000_0000が設定される。
データ転送先アドレス433には、FIFO20のデータ受信用スレーブインターフェース22のアドレスが設定される。本実施例では、このデータ転送先アドレス433には0x0020_0000が設定される。
横方向画像切り出し開始オフセットアドレス434には、2次元DMA転送時の転送対象となる矩形領域の横方向の開始位置が位置情報として指定される。本実施例では、この横方向画像切り出し開始オフセットアドレス434にはX3が指定される。この横方向画像切り出し開始オフセットアドレス434にオフセットアドレスとしてX3が指定され場合には、横方向にX3−1番目の画素が転送対象領域の開始画素となる。
縦方向画像切り出し開始オフセットアドレス435には、2次元DMA転送時の転送対象となる矩形領域の縦方向の開始位置が位置情報として指定される。本実施例では、この縦方向画像切り出し開始オフセットアドレス435にはY3が指定される。この縦方向画像切り出し開始オフセットアドレス435にオフセットアドレスとしてY3が指定された場合には、縦方向にY3−1番目の画素が転送対象領域の開始画素となる。
横方向画像切り出し終了オフセットアドレス436には、2次元DMA転送時の転送対象となる矩形領域の横方向の終了位置が位置情報として指定される。本実施例では、この横方向画像切り出し終了オフセットアドレス436にはX4が指定される。この横方向画像切り出し終了オフセットアドレス436にオフセットアドレスとしてX4が指定された場合には、横方向にX4−1番目の画素が転送対象領域の終了画素となる。
縦方向画像切り出し終了オフセットアドレス437には、2次元DMA転送時の転送対象となる矩形領域の縦方向の終了位置が位置情報として指定される。本実施例では、この縦方向画像切り出し終了オフセットアドレス437にはY4が指定される。この縦方向画像切り出し終了オフセットアドレス437にオフセットアドレスとしてY4が指定された場合には、縦方向にY4−1番目の画素が転送対象領域の終了画素となる。
横方向画像サイズ438には、転送対象画像を含む2次元画像データの横方向のページサイズが画素単位で設定される。本実施例では、この横方向画像サイズ438にはnが設定される。縦方向画像サイズ439には、転送対象画像を含む2次元画像データの縦方向のページサイズが画素単位で設定される。本実施例では、この縦方向画像サイズ439にはmが設定される。
また、図5に示すように、本実施形態に係る独自仕様DMAC10が2次元DMA転送によりメモリ40へ画像データをライトする際とリードする際とでは、転送モード設定4201及び転送モード設定4301、データ転送元アドレス422及び423、データ転送先アドレス423及び433が異なる。
転送モード設定4201には、メモリアクセスの方向が設定され、メモリ40へ画像データをライトする場合にはメモリライト方向に設定される。
次ディスクリプタアドレス421には、独自仕様DMACディスクリプタ(1)記憶領域420に設定された動作が終了した後に、次に実行するディスクリプタが存在する場合には、そのディスクリプタの記憶アドレスを設定する。本実施例では、この次ディスクリプタアドレス421には、独自仕様DMACディスクリプタ(2)記憶領域430の開始アドレス0x8000_1040が設定される。
データ転送元アドレス422には、メモリ40へ画像データがライトされる場合には、FIFO20のデータ送信用スレーブインターフェース21のアドレスが設定される。本実施例では、このデータ転送元アドレス422には0x0020_1000が設定される。
データ転送先のアドレス423には、メモリ40へ画像データがライトされる場合には、転送対象画像を含む2次元画像データの記憶開始アドレスが設定される。本実施例では、データ転送先のアドレス423には0xC000_0000が設定される。
横方向画像切り出し開始オフセットアドレス424には、2次元DMA転送時の転送対象となる矩形領域の横方向の開始位置が指定される。本実施例では、この横方向画像切り出し開始オフセットアドレス424にはX1が指定される。この横方向画像切り出し開始オフセットアドレス424にオフセットアドレスとしてX1が指定された場合には、横方向にX1−1番目の画素が転送対象領域の開始画素となる。
縦方向画像切り出し開始オフセットアドレス425には、2次元DMA転送時の転送対象となる矩形領域の縦方向の開始位置が指定される。本実施例では、この縦方向画像切り出し開始オフセットアドレス425にはY1が指定される。この縦方向画像切り出し開始オフセットアドレス425にオフセットアドレスとしてY1が指定された場合には、縦方向にY1−1番目の画素が転送対象領域の開始画素となる。
横方向画像切り出し終了オフセットアドレス426には、2次元DMA転送時の転送対象となる矩形領域の横方向の終了位置が指定される。本実施例では、この横方向画像切り出し終了オフセットアドレス426にはX2が指定される。この横方向画像切り出し終了オフセットアドレス426にオフセットアドレスとしてX2が指定された場合には、横方向にX2−1番目の画素が転送対象領域の終了画素となる。
縦方向画像切り出し終了オフセットアドレス427には、2次元DMA転送時の転送対象となる矩形領域の縦方向の終了位置を指定する。本実施例では、この縦方向画像切り出し終了オフセットアドレス427にはY2が指定される。この縦方向画像切り出し終了オフセットアドレス427にオフセットアドレスとしてY2が指定された場合には、縦方向にY2−1番目の画素が転送対象領域の終了画素となる。
横方向画像サイズ428には、転送対象画像を含む2次元画像データの横方向のページサイズが画素単位で設定される。本実施例では、この横方向画像サイズ428にはnが設定される。縦方向画像サイズ429には、転送対象画像を含む2次元画像データの縦方向のページサイズが画素単位で設定される。本実施例では、この縦方向画像サイズ429にはmが設定される。
転送モード設定4301には、メモリアクセスの方向が設定され、メモリ40へ画像データがライトされる場合にはメモリライト方向に設定される。
次ディスクリプタアドレス431には、独自仕様DMACディスクリプタ(2)記憶領域430に設定された動作が終了した後に、次に実行するディスクリプタが存在する場合には、そのディスクリプタの記憶アドレスが設定される。本実施例では、独自仕様DMACディスクリプタ(2)記憶領域430が最後の転送となるため、この次ディスクリプタアドレス431には0x0000_0000が設定される。独自仕様DMAC10は、次ディスクリプタアドレスが0x0000_0000の場合には、次の転送を実行しない仕様となっている。
データ転送元アドレス432には、メモリ40に画像データがライトされる場合には、FIFO20のデータ送信用スレーブインターフェース21のアドレスが設定される。本実施例では、このデータ転送元アドレス432には0x0020_1000が設定される。
データ転送先のアドレス433には、メモリ40に画像データがライトされる場合には、転送対象画像を含む2次元画像データの記憶開始アドレスが設定される。本実施例では、このデータ転送先のアドレス433には0xC000_0000が設定される。
横方向画像切り出し開始オフセットアドレス434には、2次元DMA転送時の転送対象となる矩形領域の横方向の開始位置が指定される。本実施例では、この横方向画像切り出し開始オフセットアドレス434にはX3が指定される。この横方向画像切り出し開始オフセットアドレス434にオフセットアドレスとしてX3が指定され場合には、横方向にX3−1番目の画素が転送対象領域の開始画素となる。
縦方向画像切り出し開始オフセットアドレス435には、2次元DMA転送時の転送対象となる矩形領域の縦方向の開始位置が指定される。本実施例では、この縦方向画像切り出し開始オフセットアドレス435にはY3が指定される。この縦方向画像切り出し開始オフセットアドレス435にオフセットアドレスとしてY3が指定された場合には、縦方向にY3−1番目の画素が転送対象領域の開始画素となる。
横方向画像切り出し終了オフセットアドレス436には、2次元DMA転送時の転送対象となる矩形領域の横方向の終了位置が指定される。本実施例では、この横方向画像切り出し終了オフセットアドレス436にはX4が指定される。この横方向画像切り出し終了オフセットアドレス436にオフセットアドレスとしてX4が指定された場合には、横方向にX4−1番目の画素が転送対象領域の終了画素となる。
縦方向画像切り出し終了オフセットアドレス437には、2次元DMA転送時の転送対象となる矩形領域の縦方向の終了位置が指定される。本実施例では、この縦方向画像切り出し終了オフセットアドレス437にはY4が指定される。この縦方向画像切り出し終了オフセットアドレス437にオフセットアドレスとしてY4が指定された場合には、縦方向にY4−1番目の画素が転送対象領域の終了画素となる。
横方向画像サイズ438には、転送対象画像を含む2次元画像データの横方向のページサイズが画素単位で設定される。本実施例では、この横方向画像サイズ438にはnが設定される。縦方向画像サイズ439には、転送対象画像を含む2次元画像データの縦方向のページサイズが画素単位で設定される。本実施例では、この縦方向画像サイズ439にはmが設定される。
次に、本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介して行うデータ転送に先だってその準備を行う際の処理について、図6を参照して説明する。図6は、本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介して行うデータ転送に先だってその準備を行う際の処理を説明するためのシーケンス図である。
図6に示すように、本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介して行うデータ転送に先だってその準備を行う際にはまず、CPU50は、独自仕様DMAC10に対して、動作パラメータを記述するためのディスクリプタ(1)用の記憶アドレス(本実施例では、0x8000_1000)を通知し、割り込みマスク等の設定を実行する(S601)。
そして、CPU50は、独自仕様DMAC10に通知したディスクリプタ(1)用の記憶アドレスにディスクリプタ(1)を作成する(S602)。このとき、CPU50が作成するディスクリプタ(1)の内容は、メモリ40から画像データがリードされる場合には、図4を参照して説明した内容となる。また、このとき、CPU50が作成するディスクリプタ(1)の内容は、メモリ40へ画像データがライトされる場合には、図5を参照して説明した内容となる。
CPU50は、ディスクリプタ(1)の作成後、アドレス0x8000_1040にディスクリプタ(2)を作成する(S603)。このとき、CPU50が作成するディスクリプタ(2)の内容は、メモリ40から画像データがリードされる場合には、図4を参照して説明した内容となる。また、このとき、CPU50が作成するディスクリプタ(2)の内容は、メモリ40へ画像データがライトされる場合には、図5を参照して説明した内容となる。
そして、CPU50は、例えば、AHCI(Advanced Host Controller Interface)規格で定められた設定等、規格準拠DMAC31の設定を実行するし、規格準拠DMAC31が参照するそれらのディスクリプタの内容を作成する(S604)。
次に、CPU50は、例えば、AHCI規格で定められた設定等、SATA制御部30の設定を実行する(S605)。そして、CPU50は、独自仕様DMAC10を起動する(S606)。起動した独自仕様DMAC10は、独自仕様DMACディスクリプタ(1)記憶領域420(本実施例では、0x8000_1000)にアクセスし、転送パラメータを取得して、取得した転送パラメータからリードアドレス若しくはライトアドレスを算出する(S607)。
そしてCPU50は、規格準拠DMAC31を起動する(S608)。起動した規格準拠DMAC31は、規格準拠DMACディスクリプタ記憶領域440(本実施例では、0x8001_0000)にアクセスし、転送パラメータを取得する(S609)。規格準拠DMAC31は、取得した転送パラメータに従い、SATA制御部30に対してSATAコマンド発行を指令し(S610)、HDD60に対してSATAコマンドを発行させる(S611)。
このようにして、本実施形態に係る情報処理装置1は、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介して行うデータ転送の準備を完了する。
次に、本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介してメモリ40から画像データをリードしてHDD60にライトする際の処理について、図7〜図9を参照して説明する。図7〜図9は、本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介してメモリ40から画像データをリードしてHDD60にライトする際の処理を説明するためのシーケンス図である。尚、図7〜図9は、図6におけるデータ転送の準備が終了した直後からの処理について示している。
本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介してメモリ40から画像データをリードしてHDD60にライトする際にはまず、SATAコマンドを発行したSATA制御部30は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、規格準拠DMAC31に対してデータのライトを要求する(S701)。
SATA制御部30からライト要求を受けた規格準拠DMAC31は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、FIFO20に対してリードを要求する(S702)。規格準拠DMAC31からリード要求を受けたFIFO20は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、独自仕様DMAC10に対してデータのライトを要求する(S703)。
FIFO20からライト要求を受けた独自仕様DMAC10は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、メモリ40に対してリードを要求する(S704)。独自仕様DMAC10からリード要求を受けたメモリ40は、独自仕様DMAC10にデータを転送する(S705)。
メモリ40からデータを受信した独自仕様DMAC10は、そのデータをFIFO20に転送する(S706)。独自仕様DMAC10からデータを受信したFIFO20は、そのデータを規格準拠DMAC31に転送する(S707)。FIFO20からデータを受信した規格準拠DMAC31は、そのデータをSATA制御部30に転送する(S708)。規格準拠DMAC31からデータを受信したSATA制御部30は、HDD60がデータ受信可能な状態である場合、そのデータをHDD60にライトする(S709)。
このとき、本実施例では、データバス幅が128bitであるため、ディスクリプタ(1)に関する1回目の転送では、メモリ40上のアドレス0xC000_0000+Y1*n+X1〜0xC000_0000+Y1*n+X1+15に記憶されている128bit分の画像データがリードされる。同様に、2回目の転送では、メモリ40上のアドレス0xC000_0000+Y1*n+X1+16〜0xC000_0000+Y1*n+X1+31に記憶されている128bit分の画像データがリードされる。尚、2回目以降のリードアドレスは、独自仕様DMAC10がS607において取得した転送パラメータから算出されたリードアドレスと前回のリードアドレスとから算出される。
そして、S701〜S709と同様の処理が繰り返し行われ、独自仕様DMACディスクリプタ(1)記憶領域420(本実施例では、0x8000_1000)に設定されている全てのデータ転送が終了すると、次に、独自仕様DMAC10は、独自仕様DMACディスクリプタ(2)記憶領域430(本実施例では、0x8000_1040)にアクセスし、転送パラメータを取得して、取得した転送パラメータからリードアドレスを算出する(S710)。このように、本実施形態に係る情報処理装置1は、規格準拠DMAC31にはない、独自仕様DMAC10のみが備えるディスクリプタチェイン機能を使用することが可能となっている。
そして、本実施形態に係る情報処理装置1は、S701〜S709と同様の処理を繰り返し行う。このとき、本実施例では、データバス幅が128bitであるため、ディスクリプタ(2)に関する1回目の転送では、アドレス0xC000_0000+Y3*n+X3〜0xC000_0000+Y3*n+X3+15に記憶されている128bit分の画像データが転送される。
同様に、2回目の転送では、アドレス0xC000_0000+Y3*n+X3+16〜0xC000_0000+Y3*n+X3+31に記憶されている128bit分の画像データが転送される。尚、2回目以降のリードアドレスは、独自仕様DMAC10がS710において取得した転送パラメータから算出されたリードアドレスと前回のリードアドレスとから算出される。このように、本実施形態に係る情報処理装置1は、規格準拠DMAC31にはない、独自仕様DMAC10のみが備える2次元DMA転送機能を使用することが可能となっている。
尚、図7に示す例では、規格準拠DMAC31がリード要求を発行した後に、独自仕様DMAC10がリード要求を発行しているが、独自仕様DMAC10の方が先にリード要求を発行することも可能である。また、独自仕様DMAC10及び規格準拠DMAC31は、発行したリード要求に対するデータを受信する前に、次のリード要求を発行することが可能である。
図8に示すように、独自仕様DMAC10は、独自仕様DMACディスクリプタ(2)記憶領域430(本実施例では、0x8000_1040)に設定されている全てのデータをFIFO20に転送すると(S801)、CPU50に対して転送が完了したことを通知すると共に(S802)、FIFO20に対して疑似応答を要求する(S803)。
独自仕様DMAC10から疑似応答要求を受けたFIFO20は、以降、SATA制御部30から規格準拠DMAC31に対するライト要求に対し(S804)、規格準拠DMAC31からリード要求を受けると(S805)、規格準拠DMAC31に疑似データを転送する(S806)。
FIFO20から疑似データを受信した規格準拠DMAC31は、その疑似データをSATA制御部30に転送する(S807)。規格準拠DMAC31から疑似データを受信したSATA制御部30は、その疑似データをHDD60にライトする(S808)。
ここで、独自仕様DMACが全てのデータをFIFO20に転送するとFIFO20に対して疑似応答を要求し、以降、FIFO20が疑似データを転送する理由について説明する。
独自仕様DMAC10が2次元DMA転送機能で転送することができるデータ転送サイズは、図3を参照して説明したように、特定の矩形領域であって1Byte刻みで設定可能であるが、規格準拠DMAC31が転送することができるデータ転送サイズは、セクタサイズ刻み(本実施例では、512Byte刻み)である。即ち、独自仕様DMAC10のデータ転送サイズの最小単位は、1Byteであり、規格準拠DMAC31のデータ転送サイズの最小単位は、512Byteである。
そのため、FIFO20には、規格準拠DMAC31のデータ転送サイズに満たないデータが最後に残ることになり、そのデータも規格準拠DMAC31により転送されてしまうと、FIFO20は空となってしまう。
例えば、メモリ40からHDD60へ600Byte分のデータが転送される場合、512Byte分のデータが転送されると、FIFO20には、残りの88Byte(600Byte−512Byte)分のデータが最後に残ることになり、その88Byte分のデータも規格準拠DMAC31により転送されてしまうと、FIFO20は空となってしまう。しかし、このとき、規格準拠DMAC31は、424Byte(512Byte−88Byte)分のデータを転送しなければならない状態となっている。
ところが、FIFO20が空になってしまうと、FIFO20は、規格準拠DMAC31からリード要求があっても規格準拠DMAC31にデータを転送することができなくなってしまう。その結果、規格準拠DMAC31は、FIFO20からのデータの転送を待ち続けてしまい、いつまでたっても処理が終了しなくなってしまう。
そこで、本実施形態に係る情報処理装置1においては、FIFO20は、独自仕様DMAC10から疑似応答要求を受けると、内部バッファが空になっても、規格準拠DMAC31のデータ転送サイズに達するまで、規格準拠DMAC31に疑似データを転送し続けるように構成されている。そのため、規格準拠DMAC31は、滞りなくデータ転送を続けることが可能となる。
本実施形態に係る情報処理装置1は、このように構成されることで、規格準拠DMAC31にはない、2次元DMA転送機能やディスクリプタチェイン等、独自仕様DMAC10が備える機能を容易に使用することが可能となる。
そして、本実施形態に係る情報処理装置1は、S804〜S808と同様の処理を繰り返し行う。その結果、図9に示すように、SATA制御部30は、規格準拠DMAC31に対して最後のライトを要求する(S901)。SATA制御部30から最後のライト要求を受けた規格準拠DMAC31は、FIFO20に対して最後のリードを要求する(S902)。
規格準拠DMAC31から最後のリード要求を受けたFIFO20は、規格準拠DMAC31に最後の疑似データを転送する(S903)。FIFO20から最後の疑似データを受信した規格準拠DMAC31は、その最後の疑似データをSATA制御部30に転送する(S904)。規格準拠DMAC31から最後の疑似データを受信したSATA制御部30は、その最後の疑似データをHDD60にライトする(S905)。
このとき、SATA制御部30に最後の疑似データを転送した規格準拠DMAC31は、CPU50に対して転送が完了したことを通知する(S906)。規格準拠DMAC31から転送完了通知を受けたCPU50は、独自仕様DMAC10に対して疑似応答解除を指令する(S907)。疑似応答解除要求を受けた独自仕様DMAC10は、FIFO20に対して疑似応答解除を要求する(S908)。
本実施形態に係る情報処理装置1においては、このようにして、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介してメモリ40から画像データをリードしてHDD60にライトする。
次に、本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介してHDD60から画像データをリードしてメモリ40にライトする際の処理について、図10〜図12を参照して説明する。図10〜図12は、本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介してHDD60から画像データをリードしてメモリ40にライトする際の処理を説明するためのシーケンス図である。尚、図10〜図12は、図6におけるデータ転送の準備が終了した直後からの処理について示している。
本実施形態に係る情報処理装置1において、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介してHDD60から画像データをリードしてメモリ40にライトする際にはまず、メモリ40は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、独自仕様DMAC10に対してデータのライトを要求する(S1001)。
メモリ40からライト要求を受けた独自仕様DMAC10は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、FIFO20に対してリードを要求する(S1002)。独自仕様DMAC10からリード要求を受けたFIFO20は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、規格準拠DMAC31に対してデータのライトを要求する(S1003)。
FIFO20からライト要求を受けた規格準拠DMAC31は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、SATA制御部30に対してリードを要求する(S1004)。規格準拠DMAC31からリード要求を受けたSATA制御部30は、データ受信可能な状態である場合、即ち、内部バッファに空きがある場合、HDD60からデータをリードし(S1005)、規格準拠DMAC31にそのデータを転送する(S1006)。
SATA制御部30からデータを受信した規格準拠DMAC31は、そのデータをFIFO20に転送する(S1007)。規格準拠DMAC31からデータを受信したFIFO20は、そのデータを独自仕様DMAC10に転送する(S1008)。FIFO20からデータを受信した独自仕様DMAC10は、そのデータをメモリ40にライトする(S1009)。
このとき、本実施例では、データバス幅が128bitであるため、ディスクリプタ(1)に関する1回目の転送では、メモリ40上のアドレス0xC000_0000+Y1*n+X1〜0xC000_0000+Y1*n+X1+15に128bit分の画像データがライトされる。同様に、2回目の転送では、メモリ40上のアドレス0xC000_0000+Y1*n+X1+16〜0xC000_0000+Y1*n+X1+31に128bit分の画像データがライトされる。尚、2回目以降のライトアドレスは、独自仕様DMAC10がS607において取得した転送パラメータから算出されたライトアドレスと前回のライトアドレスとから算出される。
そして、S1001〜S1009と同様の処理が繰り返し行われ、独自仕様DMACディスクリプタ(1)記憶領域420(本実施例では、0x8000_1000)に設定されている全てのデータ転送が終了すると、次に、独自仕様DMAC10は、独自仕様DMACディスクリプタ(2)記憶領域430(本実施例では、0x8000_1040)にアクセスし、転送パラメータを取得して、取得した転送パラメータからライトアドレスを算出する(S1010)。このように、本実施形態に係る情報処理装置1は、規格準拠DMAC31にはない、独自仕様DMAC10のみが備えるディスクリプタチェイン機能を使用することが可能となっている。
そして、本実施形態に係る情報処理装置1は、S1001〜S1009と同様の処理を繰り返し行う。このとき、本実施例では、データバス幅が128bitであるため、ディスクリプタ(2)に関する1回目の転送では、アドレス0xC000_0000+Y3*n+X3〜0xC000_0000+Y3*n+X3+15に記憶されている128bit分の画像データが転送される。
同様に、2回目の転送では、アドレス0xC000_0000+Y3*n+X3+16〜0xC000_0000+Y3*n+X3+31に記憶されている128bit分の画像データが転送される。尚、2回目以降のリードアドレスは、独自仕様DMAC10がS710において取得した転送パラメータから算出されたリードアドレスと前回のリードアドレスとから算出される。このように、本実施形態に係る情報処理装置1は、規格準拠DMAC31にはない、独自仕様DMAC10のみが備える2次元DMA転送機能を使用することが可能となっている。
尚、図10に示す例では、独自仕様DMAC10がリード要求を発行した後に、規格準拠DMAC31がリード要求を発行しているが、規格準拠DMAC31の方が先にリード要求を発行することも可能である。また、独自仕様DMAC10及び規格準拠DMAC31は、発行したリード要求に対するデータを受信する前に、次のリード要求を発行することが可能である。
図11に示すように、独自仕様DMAC10は、独自仕様DMACディスクリプタ(2)記憶領域430(本実施例では、0x8000_1040)に設定されている全てのデータをメモリ40にライトすると(S1101)、CPU50に対して転送が完了したことを通知すると共に(S1102)、FIFO20に対して疑似応答を要求する(S1103)。
独自仕様DMAC10から疑似応答要求を受けたFIFO20は、以降、規格準拠DMAC31に対するライト要求に対してデータが転送されてくると(S1104〜S1108)、そのデータを破棄する(S1109)。
ここで、独自仕様DMACが全てのデータをメモリ40にライトするとFIFO20に対して疑似応答を要求し、以降、FIFO20が受信したデータを破棄する理由について説明する。
上述したように、独自仕様DMAC10のデータ転送サイズの最小単位と規格準拠DMAC31のデータ転送サイズの最小単位とは異なり、独自仕様DMAC10のデータ転送サイズの最小単位の方が小さい。
そのため、独自仕様DMAC10は、転送するべきデータを全てメモリ40へライトすると、それ以上のデータをFIFO20からリードする必要がなくなるが、それ以上のデータが規格準拠DMAC31によりFIFO20へライトされてしまうと、FIFO20は満杯となってしまう。
例えば、HDD60からメモリ40へ600Byte分のデータが転送される場合、その600Byte分のデータ全てがメモリ40にライトされると、それ以上のデータはFIFO20からリードされなくなるが、規格準拠DMAC31により412Byte(512Byte−(600Byte−512Byte))分のデータがさらにFIFO20へライトされ続け、ついには、FIFO20は満杯となってしまう。
ところが、FIFO20が満杯になってしまうと、FIFO20は、規格準拠DMAC31にライトを要求することができなくなってしまう。その結果、規格準拠DMAC31は、FIFO20からのライト要求を待ち続けてしまい、いつまでたっても処理が終了しなくなってしまう。
そこで、本実施形態に係る情報処理装置1においては、FIFO20は、独自仕様DMAC10から疑似応答要求を受けると、内部バッファが満杯になっても、規格準拠DMAC31のデータ転送サイズに達するまで、規格準拠DMAC31にライトを要求し続け、それ以降受信したデータについては破棄するように構成されている。そのため、規格準拠DMAC31は、滞りなくデータ転送を続けることが可能となる。
本実施形態に係る情報処理装置1は、このように構成されることで、規格準拠DMAC31にはない、2次元DMA転送機能やディスクリプタチェイン等、独自仕様DMAC10が備える機能を容易に使用することが可能となる。
そして、本実施形態に係る情報処理装置1は、S1104〜S809と同様の処理を繰り返し行う。その結果、図12に示すように、FIFO20は、規格準拠DMAC31に対して最後のライトを要求する(S1201)。FIFO20から最後のライト要求を受けた規格準拠DMAC31は、SATA制御部30に対して最後のリードを要求する(S1202)。
規格準拠DMAC31から最後のリード要求を受けたSATA制御部30は、HDD60から最後のデータをリードし(S1203)、規格準拠DMAC31にその最後のデータを転送する(S1204)。SATA制御部30から最後のデータを受信した規格準拠DMAC31は、その最後のデータをFIFO20に転送する(S1205)。規格準拠DMAC31から最後のデータを受信したFIFO20は、その最後のデータを破棄する(S1206)。
このとき、FIFO20に最後のデータを転送した規格準拠DMAC31は、CPU50に対して転送が完了したことを通知する(S1207)。規格準拠DMAC31から転送完了通知を受けたCPU50は、独自仕様DMAC10に対して疑似応答解除を指令する(S1208)。疑似応答解除要求を受けた独自仕様DMAC10は、FIFO20に対して疑似応答解除を要求する(S1209)。
本実施形態に係る情報処理装置1においては、このようにして、独自仕様DMAC10と規格準拠DMAC31とがFIFO20を介してHDD60から画像データをリードしてメモリ40にライトする。
尚、本実施形態においては、メモリ40とHDD60との間でのデータ転送について説明したが、情報処理装置1に接続された異なる入出力装置間でのデータ転送についても同様に適用可能である。