(57)【要約】【課題】  ＤＭＡ転送のための複雑なアドレス演算を行なう技術を提供する。【解決手段】  Ｎ次元（Ｎは２以上の整数）の階層構造のブロックＬＮＤＢについて、第０階層のＬ０ＤＢから順に、スタートアドレスＳＡと、データ長ＤＬと、Ｎ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔと、Ｎ個のブロック個数Ｌ（ｉ）−ｎとに基づいて、ソース領域またはディスティネーション領域におけるＮ階層データブロックのためのアドレス演算を実行する。【選択図】        図３
2006099205.tif 000002
【特許請求の範囲】
【請求項１】
ソース領域内のデータをディスティネーション領域に転送するＤＭＡコントローラであって、
前記ソース領域のデータのアドレスを演算するソースアドレス演算部と、
前記ディスティネーション領域のアドレスを演算するディスティネーションアドレス演算部と、
を備え、
前記ソースアドレス演算部及び前記ディスティネーションアドレス演算部のそれぞれは、Ｎ次元（Ｎは２以上の整数）の階層構造を有するＮ階層データブロックに関するアドレスを演算することが可能であり、
前記Ｎ階層データブロックは、指定されたスタートアドレス以降のメモリ領域において、指定されたデータ長ＤＬを有するデータ要素の集合として構成されており、
前記データ要素を第０階層のデータブロックと定義したとき、ｉ番目（ｉは１からＮまでの整数）の階層のデータブロックは、（ｉ−１）番目の階層のデータブロックが、指定されたオフセットＬ（ｉ）−ｏｆｆｓｅｔで、指定されたブロック個数Ｌ（ｉ）−ｎだけ繰り返し配置された構成を有しており、
前記ソースアドレス演算部及び前記ディスティネーションアドレス演算部のそれぞれは、
前記スタートアドレスを記憶するスタートアドレス記憶部と、
前記データ長ＤＬを記憶するデータ長記憶部と、
第１階層から第Ｎ階層までのデータブロックのためのＮ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔ（ｉは1からＮまでの整数）を記憶するオフセット記憶部と、
第１階層から第Ｎ階層までのデータブロックのためのＮ個のブロック個数Ｌ（ｉ）−ｎ（ｉは1からＮまでの整数）を記憶するブロック個数記憶部と、
前記スタートアドレスと、前記データ長ＤＬと、前記Ｎ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔと、前記Ｎ個のブロック個数Ｌ（ｉ）−ｎとに基づいて、前記ソース領域または前記ディスティネーション領域における前記Ｎ階層データブロックのためのアドレス演算を実行するアドレス演算実行部と、
を備える、ＤＭＡコントローラ。
【請求項２】
請求項１記載のＤＭＡコントローラであって、
前記ソースアドレス演算部と前記ディスティネーションアドレス演算部は、前記スタートアドレスと、前記データ長ＤＬと、前記Ｎ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔと、前記Ｎ個のブロック個数Ｌ（ｉ）−ｎの値を、互いに独立に設定可能である、
ＤＭＡコントローラ。
【請求項３】
請求項１または２記載のＤＭＡコントローラであって、
前記アドレス演算実行部は、
1回のデータ転送で転送されるデータ量の累積値と、前記データ長ＤＬとの関係から、前記第０階層のデータブロックとしての前記データ要素の転送が１回終了したことを示す信号を出力するデータ長カウンタと、
（ｉ−１）番目（ｉは１からＮまでの整数）の階層のデータブロックの転送回数と、前記ブロック個数Ｌ（ｉ）−ｎとの関係から、前記ｉ番目の階層のデータブロックの転送が１回終了したことを示す信号を出力するＮ個の第ｉ階層カウンタと、
前記（ｉ−１）番目の階層のデータブロックの転送が１回終了する度に前記ｉ番目の階層のオフセットＬ（ｉ）−ｏｆｆｓｅｔを選択して出力するオフセット選択部と、
前記スタートアドレスに、前記１回のデータ転送で転送されるデータ量を順次加算してゆき、また、前記オフセット選択部から前記ｉ番目の階層のオフセットＬ（ｉ）−ｏｆｆｓｅｔが出力されたときには、更に前記ｉ番目の階層のオフセットＬ（ｉ）−ｏｆｆｓｅｔを加算することによって、転送対象となるデータのアドレスを順次生成する加算部と、
を備える、ＤＭＡコントローラ。
【請求項４】
請求項３記載のＤＭＡコントローラであって、
前記1回のデータ転送で転送されるデータ量は可変である、ＤＭＡコントローラ。
【請求項５】
Ｎ次元（Ｎは２以上の整数）の階層構造を有するＮ階層データブロックに関するアドレスを演算することが可能なアドレス演算装置であって、
前記Ｎ階層データブロックは、指定されたスタートアドレス以降のメモリ領域において、指定されたデータ長ＤＬを有するデータ要素の集合として構成されており、
前記データ要素を第０階層のデータブロックと定義したとき、ｉ番目（ｉは１からＮまでの整数）の階層のデータブロックは、（ｉ−１）番目の階層のデータブロックが、指定されたオフセットＬ（ｉ）−ｏｆｆｓｅｔで、指定されたブロック個数Ｌ（ｉ）−ｎだけ繰り返し配置された構成を有しており、
前記アドレス演算装置は、
前記スタートアドレスを記憶するスタートアドレス記憶部と、
前記データ長ＤＬを記憶するデータ長記憶部と、
第１階層から第Ｎ階層までのデータブロックのためのＮ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔ（ｉは1からＮまでの整数）を記憶するオフセット記憶部と、
第１階層から第Ｎ階層までのデータブロックのためのＮ個のブロック個数Ｌ（ｉ）−ｎ（ｉは1からＮまでの整数）を記憶するブロック個数記憶部と、
前記スタートアドレスと、前記データ長ＤＬと、前記Ｎ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔと、前記Ｎ個のブロック個数Ｌ（ｉ）−ｎとに基づいて、前記Ｎ階層データブロックのためのアドレス演算を実行するアドレス演算実行部と、
を備える、アドレス演算装置。
【請求項６】
Ｎ次元（Ｎは２以上の整数）の階層構造を有するＮ階層データブロックに関するアドレスを演算するためのアドレス演算方法であって、
前記Ｎ階層データブロックは、指定されたスタートアドレス以降のメモリ領域において、指定されたデータ長ＤＬを有するデータ要素の集合として構成されており、
前記データ要素を第０階層のデータブロックと定義したとき、ｉ番目（ｉは１からＮまでの整数）の階層のデータブロックは、（ｉ−１）番目の階層のデータブロックが、指定されたオフセットＬ（ｉ）−ｏｆｆｓｅｔで、指定されたブロック個数Ｌ（ｉ）−ｎだけ繰り返し配置された構成を有しており、
前記アドレス演算方法は、
前記スタートアドレスと、前記データ長ＤＬと、第１階層から第Ｎ階層までのデータブロックのためのＮ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔ（ｉは1からＮまでの整数）と、第１階層から第Ｎ階層までのデータブロックのためのＮ個のブロック個数Ｌ（ｉ）−ｎ（ｉは1からＮまでの整数）とに基づいて、前記Ｎ階層データブロックのためのアドレス演算を実行するアドレス演算実行工程を備える、
アドレス演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＤＭＡ転送のためのアドレス演算に関する。
【背景技術】
【０００２】
図１２は、従来のＤＭＡコントローラによるアドレス演算を示す説明図である。従来のＤＭＡコントローラは、ソース領域２１Ａのスタートアドレスと、ディスティネーション領域２２Ａのスタートアドレスと、転送データ長の指定を受け、メモリのソース領域２１Ａから転送データ長分のデータをディスティネーション領域２２Ａに転送するアドレス演算を行なっていた。このときの転送データは、ソース領域２１Ａに連続的に保存されていたデータであり、転送により、そのままの順番でディスティネーション領域２２Ａに連続的に保存される。
【０００３】
【特許文献１】特願昭６１−２３５９０７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、画像データは、（Ｘ（補助領域），Ｒ（レッド），Ｇ（グリーン），Ｂ（ブルー））という単位で１画素のデータが構成されていることが多い。このとき、Ｒ成分（Ｒ０，Ｒ１といった要素の集合）やＧ成分やＢ成分の単位での処理を行なう場合に、３つの色成分を各画素データから抽出し、別々のディスティネーション領域に転送したいという要望がある。しかし、従来のＤＭＡコントローラでこのような転送を実現するには、ＣＰＵが多数回にわたってＤＭＡコントローラに転送指示を出さなければならず、多大な時間を要するという問題があった。
【０００５】
このような問題は、画像データの転送時に限らず、一般に、複雑なデータ転送を行なうことを必要とする場合に共通する問題であった。
【０００６】
本発明は、上記した問題点を解決するためになされたものであり、ＤＭＡ転送のための複雑なアドレス演算を行なう技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題の少なくとも一部を解決するため、本発明によるＤＭＡコントローラは、
ソース領域内のデータをディスティネーション領域に転送するＤＭＡコントローラであって、
前記ソース領域のデータのアドレスを演算するソースアドレス演算部と、
前記ディスティネーション領域のアドレスを演算するディスティネーションアドレス演算部と、
を備え、
前記ソースアドレス演算部及び前記ディスティネーションアドレス演算部のそれぞれは、Ｎ次元（Ｎは２以上の整数）の階層構造を有するＮ階層データブロックに関するアドレスを演算することが可能であり、
前記Ｎ階層データブロックは、指定されたスタートアドレス以降のメモリ領域において、指定されたデータ長ＤＬを有するデータ要素の集合として構成されており、
前記データ要素を第０階層のデータブロックと定義したとき、ｉ番目（ｉは１からＮまでの整数）の階層のデータブロックは、（ｉ−１）番目の階層のデータブロックが、指定されたオフセットＬ（ｉ）−ｏｆｆｓｅｔで、指定されたブロック個数Ｌ（ｉ）−ｎだけ繰り返し配置された構成を有しており、
前記ソースアドレス演算部及び前記ディスティネーションアドレス演算部のそれぞれは、
前記スタートアドレスを記憶するスタートアドレス記憶部と、
前記データ長ＤＬを記憶するデータ長記憶部と、
第１階層から第Ｎ階層までのデータブロックのためのＮ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔ（ｉは1からＮまでの整数）を記憶するオフセット記憶部と、
第１階層から第Ｎ階層までのデータブロックのためのＮ個のブロック個数Ｌ（ｉ）−ｎ（ｉは1からＮまでの整数）を記憶するブロック個数記憶部と、
前記スタートアドレスと、前記データ長ＤＬと、前記Ｎ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔと、前記Ｎ個のブロック個数Ｌ（ｉ）−ｎとに基づいて、前記ソース領域または前記ディスティネーション領域における前記Ｎ階層データブロックのためのアドレス演算を実行するアドレス演算実行部と、
を備えることを特徴とする。
【０００８】
本発明によれば、Ｎ階層データブロックに関するアドレスを演算することにより、ＤＭＡ転送のための複雑なアドレス演算を実行することが可能である。また、Ｎ階層データブロックの転送が完了するまでに必要とされるアドレス演算を、ＤＭＡコントローラの内部で実行することが可能である。
【０００９】
前記ソースアドレス演算部と前記ディスティネーションアドレス演算部は、前記スタートアドレスと、前記データ長ＤＬと、前記Ｎ個のオフセットＬ（ｉ）−ｏｆｆｓｅｔと、前記Ｎ個のブロック個数Ｌ（ｉ）−ｎの値を、互いに独立に設定可能であるものとしても良い。
【００１０】
これによれば、ソース領域とディスティネーション領域とが、互いに非対称となるアドレス演算を行なうことが可能となる。
【００１１】
前記アドレス演算実行部は、
1回のデータ転送で転送されるデータ量の累積値と、前記データ長ＤＬとの関係から、前記第０階層のデータブロックとしての前記データ要素の転送が１回終了したことを示す信号を出力するデータ長カウンタと、
（ｉ−１）番目（ｉは１からＮまでの整数）の階層のデータブロックの転送回数と、前記ブロック個数Ｌ（ｉ）−ｎとの関係から、前記ｉ番目の階層のデータブロックの転送が１回終了したことを示す信号を出力するＮ個の第ｉ階層カウンタと、
前記（ｉ−１）番目の階層のデータブロックの転送が１回終了する度に前記ｉ番目の階層のオフセットＬ（ｉ）−ｏｆｆｓｅｔを選択して出力するオフセット選択部と、
前記スタートアドレスに、前記１回のデータ転送で転送されるデータ量を順次加算してゆき、また、前記オフセット選択部から前記ｉ番目の階層のオフセットＬ（ｉ）−ｏｆｆｓｅｔが出力されたときには、更に前記ｉ番目の階層のオフセットＬ（ｉ）−ｏｆｆｓｅｔを加算することによって、転送対象となるデータのアドレスを順次生成する加算部と、を備えるものとしても良い。
【００１２】
また、前記1回のデータ転送で転送されるデータ量は可変であるものとしても良い。
【００１３】
なお本発明は種々の形態で実現可能であり、例えば、アドレス演算装置およびアドレス演算方法等の形態で実現可能である。
【発明を実施するための最良の形態】
【００１４】
図１は、ＤＭＡコントローラ（以下、ＤＭＡＣと呼ぶ）１０００を備えるコンピュータシステムを示す説明図である。ＤＭＡＣ１０００は、メモリ２０におけるソース領域２１のデータをディスティネーション領域２２に転送するための装置である。ＤＭＡＣ１０００は、バス１１００に接続されており、ＣＰＵ１０やメモリ２０との間で情報の伝達が可能である。
【００１５】
ＤＭＡＣ１０００は、制御部１００と、ソースアドレス演算回路２００と、ディスティネーションアドレス演算回路３００と、バスインタフェース４００と、バッファユニット５００とを備えている。バッファユニット５００は、ソースバッファ５２０と、ディスティネーションバッファ５３０とを備えている。
【００１６】
図２は、ソースアドレス演算回路２００の内部構成を示すブロック図である。ソースアドレス演算回路２００は、スタートアドレスレジスタ２１０と、要素間オフセットレジスタ２２１と、ユニット間オフセットレジスタ２２２と、セット間オフセットレジスタ２２３と、データ長カウンタ２３０と、要素個数カウンタ２３１と、ユニット個数カウンタ２３２と、セット個数カウンタ２３３と、第１のマルチプレクサ２５０と、第１のデコーダ２６０と、第２のデコーダ２６２と、第２のマルチプレクサ２５２と、第１の加算器２７０と、第２の加算器２７２と、第３のマルチプレクサ２５４と、アドレスレジスタ２８０とを備えている。レジスタ２１０，２２１〜２２３とカウンタ２３０〜２３３は、ＣＰＵ１０によって設定されたパラメータをそれぞれ保持している。
【００１７】
図３は、レジスタ２１０，２２１〜２２３に設定されるパラメータＳＡ，Ｅｏｆｆｓｅｔ，Ｕｏｆｆｓｅｔ，Ｓｏｆｆｓｅｔと、カウンタ２３０〜２３３に設定されるパラメータＤＬ，Ｅｎ，Ｕｎ，Ｓｎの意味を示す説明図である。図３では、転送対象となるデータ領域が、３次元の階層構造を有する３階層データブロックとして構成されている。この３階層データブロックは、以下の構成を有している。
（１）第０階層データブロックＬ０ＤＢ：データ長ＤＬの長さを有する連続したデータ。図３の例では、ＤＬ＝３バイトであり、３バイトで１つの第０階層データブロックＬ０ＤＢが構成されている。なお、内部に「Ｂ」と記された矩形は１バイトを示している。第０階層データブロックＬ０ＤＢは、この階層構造データの基本的なデータの単位となるので、「データ要素」とも呼ぶ。第０階層データブロックＬ０ＤＢを単に「要素」とも呼ぶ。
（２）第１階層データブロックＬ１ＤＢ：第０階層データブロックＬ０ＤＢを、要素間オフセットＥｏｆｆｓｅｔだけ互いに離間させて要素個数Ｅｎだけ繰り返し配置したデータ群。第１階層データブロックＬ１ＤＢを「ユニット」とも呼ぶ。要素間オフセットＥｏｆｆｓｅｔは、本発明の第１階層のオフセットＬ（１）−ｏｆｆｓｅｔに相当し、要素個数Ｅｎは、本発明の第１階層のブロック個数Ｌ（１）−ｎに相当する。
（３）第２階層データブロックＬ２ＤＢ：第１階層データブロックＬ１ＤＢを、ユニット間オフセットＵｏｆｆｓｅｔだけ互いに離間させてユニット個数Ｕｎだけ繰り返し配置したデータ群。第２階層データブロックＬ２ＤＢを「セット」とも呼ぶ。ユニット間オフセットＵｏｆｆｓｅｔは、本発明の第２階層のオフセットＬ（２）−ｏｆｆｓｅｔに相当し、ユニット個数Ｕｎは、本発明の第２階層のブロック個数Ｌ（２）−ｎに相当する。
（４）第３階層データブロックＬ３ＤＢ：第２階層データブロックＬ２ＤＢを、セット間オフセットＳｏｆｆｓｅｔだけ互いに離間させてセット個数Ｓｎだけ繰り返し配置したデータ群。第３階層データブロックＬ３ＤＢを「セット群」とも呼ぶ。セット間オフセットＳｏｆｆｓｅｔは、本発明の第３階層のオフセットＬ（３）−ｏｆｆｓｅｔに相当し、セット個数Ｓｎは、本発明の第３階層のブロック個数Ｌ（３）−ｎに相当する。
【００１８】
なお、第０階層データブロックＬ０ＤＢを第１階層と考えて、図３のデータ構造を４次元（即ち４階層）のデータブロックと考えることも可能である。
【００１９】
再度、図２に戻り説明する。各カウンタ２３０〜２３３は、それぞれに設定されているパラメータＤＬ，Ｅｎ，Ｕｎ，Ｓｎの値を順次減算し、そのカウント値ＤＬ−ｃ，Ｅｎ−ｃ，Ｕｎ−ｃ，Ｓｎ−ｃが０になると、初期値ＤＬ，Ｅｎ，Ｕｎ，Ｓｎに戻って減算を繰り返す。なお、これらのカウント値を、「残存データ長ＤＬ−ｃ」，「残存要素個数Ｅｎ−ｃ」，「残存ユニット個数Ｕｎ−ｃ」，「残存セット個数Ｓｎ−ｃ」と呼ぶ。各カウンタ２３０〜２３３は、本発明のブロック個数記憶部に相当するレジスタを内部に有している。
【００２０】
第１のデコーダ２６０は、データ長カウンタ２３０から与えられた残存データ長ＤＬ−ｃと、アドレスレジスタ２８０から与えられる現在アドレスＡｄｒに基づいて、転送データバイト数Ｄｂを決定する。転送データバイト数Ｄｂは、１回のデータ転送で転送されるデータ量である。第１のデコーダ２６０は、転送データバイト数Ｄｂが一定値となるよう決定しても良いし、転送回数や残存データ長ＤＬ−ｃに基づいて変動するように決定しても良い。例えば、１バイト，２バイト，４バイト，８バイトと、転送データバイト数Ｄｂを変化させるものとしても良い。即ち、１回のデータ転送で転送されるデータ量は可変とすることができる。第２のマルチプレクサ２５２は、制御部１００（図１）から供給される選択信号Ｓ１に応じて、転送データバイト数Ｄｂと、値「０」とのうちの一方を選択して出力する。具体的には、データ転送の実行中には転送データバイト数Ｄｂを選択し、データ転送を実行していないときには値「０」を選択する。
【００２１】
第２のデコーダ２６２は、４つのカウンタ２３０〜２３３から与えられるカウント値ＤＬ−ｃ，Ｅｎ−ｃ，Ｕｎ−ｃ，Ｓｎ−ｃに応じて、選択信号Ｓ２を生成して、第１のマルチプレクサ２５０に供給する。カウンタ２３１〜２３３は、本発明の第ｉ階層カウンタに相当する。
【００２２】
第１のマルチプレクサ２５０は、この選択信号Ｓ２に応じて、３つのオフセットＥｏｆｆｓｅｔ，Ｕｏｆｆｓｅｔ，Ｓｏｆｆｓｅｔと、値「０」の４つの値のうちの１つを選択して出力する。具体的には、残存データ長ＤＬ−ｃが０になったときには、要素間オフセットＥｏｆｆｓｅｔを選択する。また、残存要素個数Ｅｎ−ｃが０になったときには、ユニット間オフセットＵｏｆｆｓｅｔを選択する。更に、残存ユニット個数Ｕｎ−ｃが０になったときには、セット間オフセットＳｏｆｆｓｅｔを選択する。また、４つのカウント値ＤＬ−ｃ，Ｅｎ−ｃ，Ｕｎ−ｃ，Ｓｎ−ｃがいずれも０でないときには、値「０」を選択する。第１のマルチプレクサ２５０は、本発明のオフセット選択部に相当する。
【００２３】
第１の加算器２７０は、第１と第２のマルチプレクサ２５０,２５２から出力された値を加算する。この加算結果は、第２の加算器２７２において現在アドレスＡｄｒと加算される。
【００２４】
第３のマルチプレクサ２５４は、制御部１００から供給される選択信号Ｓ３に応じて、スタートアドレスＳＡと、第２の加算器２７２の加算結果とのうちの一方を選択して出力する。具体的には、転送の開始時にのみスタートアドレスＳＡを選択し、その後は第２の加算器２７２の加算結果を選択する。アドレスレジスタ２８０は、第３のマルチプレクサ２５４の出力を現在アドレスＡｄｒとして保持し、バスインタフェース４００に供給する。第１のデコーダ２６０と、第２と第３のマルチプレクサ２５２,２５４と、第１と第２の加算器２７０，２７２と、アドレスレジスタ２８０は、本発明の加算部に相当する。
【００２５】
なお、ディスティネーションアドレス演算回路も、図２と同じ構成を有している。また、ソースアドレス演算回路２００内の各種のパラメータＳＡ，Ｅｏｆｆｓｅｔ，Ｕｏｆｆｓｅｔ，Ｓｏｆｆｓｅｔ，ＤＬ，Ｅｎ，Ｕｎ，Ｓｎは、ディスティネーションアドレス演算回路３００内のこれらのパラメータとは独立に設定可能である。なお、ソースアドレス演算回路２００とディスティネーションアドレス演算回路において、パラメータＳＡ，Ｅｏｆｆｓｅｔ，Ｕｏｆｆｓｅｔ，Ｓｏｆｆｓｅｔ，ＤＬ，Ｅｎ，Ｕｎ，Ｓｎを全て互いに同じ値に設定するものとしても良い。この場合、ソース領域２１とディスティネーション領域２２とが、互いに対称（データ配列が同じ）となる。
【００２６】
図４は、アドレス演算処理を示すフローチャートである。アドレス演算処理は、ＣＰＵ１０が、種々のパラメータ（要素個数Ｅｎ、ユニット個数Ｕｎ、セット個数Ｓｎ、データ長ＤＬ、要素間オフセットＥｏｆｆｓｅｔ、ユニット間オフセットＵｏｆｆｓｅｔ、セット間オフセットＳｏｆｆｓｅｔ、スタートアドレスＳＡ）を設定し、ＤＭＡＣ１０００にデータ転送命令を出力した後に、ソースアドレス演算回路２００およびディスティネーションアドレス演算回路３００（以下、ソースアドレス演算回路２００およびディスティネーションアドレス演算回路３００を単にアドレス演算回路と呼ぶ）により実行される。
【００２７】
アドレス演算処理には、セット群ループｒｐ３と、セットループｒｐ２と、ユニットループｒｐ１と、要素ループｒｐ０という４つのループが存在する。要素ループｒｐ０（第０階層ループ）では、図３における第０階層データブロックＬ０ＤＢ（要素）のアドレス演算を実行する。ユニットループｒｐ１（第１階層ループ）は、図３における第１階層データブロックＬ１ＤＢ（ユニット）内のアドレス演算を実行する。セットループｒｐ２（第２階層ループ）では、図３における第２階層データブロックＬ２ＤＢ（セット）内のアドレス演算を実行する。セット群ループｒｐ３（第３階層ループ）では、図３における第３階層データブロックＬ３ＤＢ（セット群）内のアドレス演算を実行する。以下、アドレス演算処理を図２の回路を参照しつつ説明する。
【００２８】
第３のマルチプレクサ２５４に供給される選択信号Ｓ３は、アドレス演算処理の最初はスタートアドレスＳＡを出力するように制御部１００により設定される。第３のマルチプレクサ２５４は、選択信号Ｓ３に従い、スタートアドレスレジスタ２１０に保存されているスタートアドレスＳＡをアドレスレジスタ２８０に保存する。これにより、現在アドレスＡｄｒはスタートアドレスＳＡとなる（ステップＳ１０）。
【００２９】
図６は、転送対象となるメモリ領域を模式的に示す説明図である。図６の１マスは１バイトを示す。図６（ａ）の左端が、スタートアドレスＳＡとして指定されている。以下では、図６を参照しつつアドレス演算処理を説明する。
【００３０】
アドレス演算回路が、セット群ループｒｐ３（図４）を開始すると、ユニット個数カウンタ２３２は、残存ユニット個数Ｕｎ−ｃを初期値Ｕｎに戻す（ステップＳ２０）。また、アドレス演算回路が、セットループｒｐ２を開始すると、要素個数カウンタ２３１は、残存要素個数Ｅｎ−ｃを初期値Ｅｎに戻す（ステップＳ３０）。そして、アドレス演算回路が、ユニットループｒｐ１を開始すると、データ長カウンタ２３０は、残存データ長ＤＬ−ｃを初期値ＤＬに戻す（ステップＳ４０）。なお、これらの処理は、アドレス演算処理中、カウンタにより各パラメータの値が０になるため、再度ループ処理を実行する前にパラメータの値を初期値に戻すために必要とされる処理である。しかし、現在の各値はＣＰＵ１０が設定した初期値のままなので、図４の全体のループの１回目の実行時には、ステップＳ２０，Ｓ３０，Ｓ４０は省略可能である。
【００３１】
要素ループｒｐ０は、データ長ＤＬ分のアドレスを出力するためのループである。図６（ａ）の例では、データ長ＤＬは３バイトであり、要素ループｒｐ０により、データＸ１１とデータＸ２２とデータＸ３３の３バイト分のアドレスを出力する。
【００３２】
そのために、要素ループｒｐ０では、まず、現在アドレスＡｄｒを出力する（ステップＳ５０）。今は、現在アドレスＡｄｒはスタートアドレスＳＡなので、図６(ａ)における左端のスタートアドレスＳＡが出力され、データＸ１１の最初のアドレス（以下、単にアドレスという）が指定されたことになる。
【００３３】
要素ループｒｐ０では、次に、アドレスレジスタ２８０の値である現在アドレスＡｄｒに出力データバイト数Ｄｂが加算される（ステップＳ６０）。出力データバイト数Ｄｂは、１回のデータ転送によって転送されるデータのバイト数を示す。出力データバイト数Ｄｂは、通常はデータ長ＤＬ以下の値が設定される。
【００３４】
図２のアドレス演算回路は、ステップＳ６０の処理を以下のように実行する。図２の第１のデコーダ２６０は、残存データ長ＤＬ−ｃと現在アドレスＡｄｒを参照しつつ、図１の制御部１００がどれだけのデータを転送可能であるかに応じて出力データバイト数Ｄｂを出力する。本実施例では、第１のデコーダ２６０は、出力データバイト数Ｄｂを、常に１バイトと設定するものとする。
【００３５】
図２の第２のマルチプレクサ２５２は、第１のデコーダ２６０が出力した出力データバイト数Ｄｂ（値「１」）を第１の加算器２７０に出力する。なお、第２のマルチプレクサ２５２に与えられる選択信号Ｓ１は、データ転送の実行中は、出力データバイト数Ｄｂを出力するよう制御部１００により指定されている。一方、第２のデコーダ２６２は、残存データ長ＤＬ−ｃを基に、選択信号Ｓ２を生成する。選択信号Ｓ２は、残存データ長ＤＬ−ｃが「０」でなければ、第１のマルチプレクサ２５０が「０」を出力するように生成される。今は、残存データ長ＤＬ−ｃは３バイトであるから、第１のマルチプレクサ２５０は「０」を出力する。よって、第１の加算器２７０は、出力データバイト数Ｄｂ（値「１」）と「０」を足し合わせ、出力データバイト数Ｄｂ（値「１」）を出力する。
【００３６】
第２の加算器２７２は、現在アドレスＡｄｒ（今はスタートアドレスＳＡ）と出力データバイト数Ｄｂ（値「１」）とを足し合わせ、第３のマルチプレクサ２５４に出力する。第３のマルチプレクサ２５４に与えられる選択信号Ｓ３は、アドレス演算処理の最初（ステップＳ１０のスタートアドレスＳＡ出力）以外には、第２の加算器２７２からの出力信号を選択して出力するように制御部１００により設定されている。よって、第３のマルチプレクサ２５４は、現在アドレスＡｄｒ（今はスタートアドレスＳＡ）と出力データバイト数Ｄｂ（値「１」）を足し合わせた値をアドレスレジスタ２８０に出力する。これにより、アドレスレジスタ２８０の値である現在アドレスＡｄｒは、（現在アドレスＡｄｒ＋出力データバイト数Ｄｂ）に置換される（ステップＳ６０）。ここでは、現在アドレスＡｄｒは、（スタートアドレスＳＡ＋１）バイトとなる。
【００３７】
データ長カウンタ２３０は、残存データ長ＤＬ−ｃから出力データバイト数Ｄｂを減算する（ステップＳ７０）。ここでは、残存データ長ＤＬ−ｃは、３バイトから１バイトを引いて２バイトとなる。要素ループｒｐ０は、残存データ長ＤＬ−ｃが０になるまで繰り返されるので、再び現在アドレスＡｄｒが出力される（ステップＳ５０）。即ち、図６においては、スタートアドレスＳＡ＋１バイトの位置のデータＸ１２のアドレスが指定される。そして、ステップＳ６０で現在アドレスＡｄｒは、スタートアドレスＳＡ＋２バイトとなり、ステップＳ７０で残存データ長ＤＬ−ｃは１バイトとなる。残存データ長ＤＬ−ｃが０ではないので、再び現在アドレスＡｄｒが指定される（ステップＳ５０）。即ち、図６においては、スタートアドレスＳＡ＋２バイトの位置のデータＸ１３のアドレスが指定される。そして、ステップＳ６０で現在アドレスＡｄｒは、スタートアドレスＳＡ＋３バイト（図６におけるＥｌ１の位置）となり、ステップＳ７０で残存データ長ＤＬ−ｃは０バイトとなる。残存データ長ＤＬ−ｃが０になったので、要素ループｒｐ０を抜けて、ステップＳ８０に進む。
【００３８】
ところで、以上の要素ループｒｐ０によりアドレス指定されるデータ長ＤＬ分のデータ領域は、先述したように「要素」と呼ぶ。図６（ａ）では、４つの要素Ｅ１１〜Ｅ１４が図示されている。要素Ｅ１２は、データＸ２１と、データＸ２２と、データＸ２３で構成されており、要素Ｅ１２のデータ長はＤＬである。即ち、要素Ｅ１２は要素Ｅ１１と同じ構成である。要素Ｅ１３と要素Ｅ１４も要素Ｅ１１と同じ構成である。各要素の始めのアドレスは、それぞれアドレスＥｓ１、Ｅｓ２、Ｅｓ３、Ｅｓ４であり、末尾のアドレスは、それぞれアドレスＥｌ１、Ｅｌ２、Ｅｌ３、Ｅｌ４である。要素間オフセットＥｏｆｆｓｅｔは、要素間のギャップの長さであり、図６（ａ）の例では３バイトである。要素個数Ｅｎは、第１階層に含まれる要素の数であり、図６（ａ）の例では要素個数Ｅｎは４である。
【００３９】
残存データ長ＤＬ−ｃが０になると、図２における第２のデコーダ２６２は要素個数カウンタ２３１に要素個数Ｅｎを１減らすよう信号を送る。その信号を受け、要素個数カウンタ２３１は、残存要素個数Ｅｎ−ｃから１を減算する（ステップＳ８０）。ステップＳ８０により、ここでは残存要素個数Ｅｎ−ｃは３になる。次に、アドレス演算回路は、要素間オフセットＥｏｆｆｓｅｔ設定処理を行なう（ステップＳ９０）。
【００４０】
図５は、要素間オフセットＥｏｆｆｓｅｔ設定処理を示すフローチャートである。残存要素個数Ｅｎ−ｃが０ではないとき（ステップＳ９１：ＮＯ）、現在アドレスＡｄｒを（現在アドレスＡｄｒ＋要素間オフセットＥｏｆｆｓｅｔ）に置換する（ステップＳ９２）。図６（ａ）の例では、今、要素個数Ｅｎ＝３で、現在アドレスＡｄｒはアドレスＥｌ１であるから、ステップＳ９２により、現在アドレスＡｄｒは、アドレスＥｌ１に要素間オフセットＥｏｆｆｓｅｔの３バイトを加え、アドレスＥｓ２となる。
【００４１】
図２のアドレス演算回路は、ステップＳ９２の処理を以下のように実行する。第１のデコーダ２６０は、残存データ長ＤＬ−ｃが現在「０」であるから、出力データバイト数Ｄｂを「０」として出力する。従って、第２のマルチプレクサ２５２は、出力データバイト数Ｄｂ（値「０」）を出力する。なお、制御部１００が出力データバイト数Ｄｂではなく「０」を出力するよう選択信号Ｓ１を設定するものとしても良い。その場合も、第２のマルチプレクサ２５２から「０」が出力される。一方、第２のデコーダ２６２は、残存データ長ＤＬ−ｃが０で、かつ残存要素個数Ｅｎ−ｃが０ではないときは、第１のマルチプレクサ２５０に要素間オフセットＥｏｆｆｓｅｔを出力させる選択信号Ｓ２を生成する。この選択信号Ｓ２に応じて、第１のマルチプレクサ２５０は要素間オフセットＥｏｆｆｓｅｔを出力する。第１の加算器２７０は、要素間オフセットＥｏｆｆｓｅｔと「０」を足し合わせ、要素間オフセットＥｏｆｆｓｅｔを第２の加算器２７２へ出力する。第２の加算器２７２は、現在アドレスＡｄｒと要素間オフセットＥｏｆｆｓｅｔを足し合わせ、第３のマルチプレクサ２５４に出力する。第３のマルチプレクサ２５４は、選択信号Ｓ３に従い、（現在アドレスＡｄｒ＋要素間オフセットＥｏｆｆｓｅｔ）をアドレスレジスタ２８０に出力する。以上により、現在アドレスＡｄｒは、（現在アドレスＡｄｒ＋要素間オフセットＥｏｆｆｓｅｔ）に置換される（ステップＳ９２）。
【００４２】
図４に戻る。ユニットループｒｐ１は、残存要素個数Ｅｎ−ｃが「０」になるまで繰り返される。図６（ａ）の例では、現在の残存要素個数Ｅｎ−ｃは「３」であるから、再度ユニットループｒｐ１が実行される。即ち、残存データ長ＤＬ−ｃは初期値ＤＬに戻され（ステップＳ４０）、要素ループｒｐ０が実行される。要素ループｒｐ０により、図６（ａ）の要素Ｅ１１の時と同様に、要素Ｅ１２のアドレスが出力され、現在アドレスＡｄｒはアドレスＥｌ２となり、残存データ長ＤＬ−ｃは「０」になる。こうしてユニットループｒｐ１を繰り返し実行して、残存要素個数Ｅｎ−ｃが「０」になったとき、現在アドレスＡｄｒはアドレスＥｌ４となる。図５の要素間オフセットＥｏｆｆｓｅｔ設定処理によれば、残存要素個数Ｅｎ−ｃが「０」の時には（ステップＳ９１：ＹＥＳ）、現在アドレスＡｄｒは変更しないので、現在アドレスＡｄｒは、アドレスＥｌ４のままである（ステップＳ９０）。残存要素個数Ｅｎ−ｃが「０」となったので、ユニットループｒｐ１を抜けて、ステップＳ１００の処理に進む。
【００４３】
以上のユニットループｒｐ１によりアドレス指定可能なデータ領域（要素間オフセットＥｏｆｆｓｅｔを含む）は、先述したように「ユニット」と呼ぶ。図６（ａ）の例では、アドレスＥｓ１からアドレスＥｌ４までが１つのユニットである。図６（ｂ）には、要素Ｅ１１〜Ｅ１４が第１のユニットＵ１１を構成することが示されている。図６（ｂ）には、ユニットＵ１１の他に、２つのユニットＵ１２，Ｕ１３が図示されている。ユニットＵ１２，Ｕ１３は、ユニットＵ１１と同じ構成である。各ユニットの始めのアドレスは、それぞれアドレスＵｓ１、Ｕｓ２、Ｕｓ３であり、末尾のアドレスは、それぞれアドレスＵｌ１、Ｕｌ２、Ｕｌ３である。ユニット間オフセットＵｏｆｆｓｅｔは、ユニット間のギャップの長さであり、図６（ｂ）の例では４バイトである。ユニット個数Ｕｎは、第２階層に含まれるユニットの数であり、図６（ｂ）の例ではユニット個数Ｕｎは３である。
【００４４】
残存要素個数Ｅｎ−ｃが０になると、図２における第２のデコーダ２６２はユニット個数カウンタ２３２に残存ユニット個数Ｕｎ−ｃを１減らすよう信号を送る。その信号を受け、ユニット個数カウンタ２３２は、残存ユニット個数Ｕｎ−ｃから１を減算する（ステップＳ１００）。図６の例では、残存ユニット個数Ｕｎ−ｃは２になる。次に、ユニット間オフセットＵｏｆｆｓｅｔ設定処理を行なう（ステップＳ１１０）。ユニット間オフセットＵｏｆｆｓｅｔ設定処理は、図５の要素間オフセットＥｏｆｆｓｅｔ設定処理において、ＥｎをＵｎに変え、ＥｏｆｆｓｅｔをＵｏｆｆｓｅｔに変えた処理であるので、図示を省略した。
【００４５】
ユニット間オフセットＵｏｆｆｓｅｔ設定処理においては、残存ユニット個数Ｕｎ−ｃが０ではないとき、現在アドレスＡｄｒを（現在アドレスＡｄｒ＋ユニット間オフセットＵｏｆｆｓｅｔ）に置換する。図６（ｂ）の例では、今、残存ユニット個数Ｕｎ−ｃが２で、現在アドレスＡｄｒはアドレスＵｌ１（アドレスＥｌ４に一致）であるから、ユニット間オフセットＵｏｆｆｓｅｔ設定処理により、現在アドレスＡｄｒはアドレスＵｓ２となる。
【００４６】
図２のアドレス演算回路は、上記ステップＳ９２の処理と同様にして、現在アドレスＡｄｒを（現在アドレスＡｄｒ＋ユニット間オフセットＵｏｆｆｓｅｔ）に置換する。なおこのとき、第２のデコーダ２６２は、残存データ長ＤＬ−ｃが「０」で、残存要素個数Ｅｎ−ｃが「０」で、残存ユニット個数Ｕｎ−ｃが「０」ではないときは、第１のマルチプレクサ２５０にユニット間オフセットＵｏｆｆｓｅｔを出力させる選択信号Ｓ２を生成する。これにより、第１のマルチプレクサ２５０はユニット間オフセットＵｏｆｆｓｅｔを出力する。
【００４７】
図４に戻る。セットループｒｐ２は、残存ユニット個数Ｕｎ−ｃが「０」になるまで繰り返される。ユニット間オフセットＵｏｆｆｓｅｔ設定処理（ステップＳ１１０）では、残存ユニット個数Ｕｎ−ｃが「０」の時には現在アドレスＡｄｒは進ませないので、現在アドレスＡｄｒは、アドレスＵｌ３のままである。ユニット個数Ｕｎが「０」となると、セットループｒｐ２を抜けて、ステップＳ１２０に進む。
【００４８】
以上のセットループｒｐ２によりアドレス指定されるメモリ領域は、先述したように「セット」と呼ぶ。図６（ｂ）の例では、アドレスＵｓ１からアドレスＵｌ３までが１つのセットである。図６（ｃ）には、ユニットＵ１１からユニットＵ１３までが第１のセットＳ１１を構成することが示されている。図６（ｃ）には、セットＳ１１の他に、セットＳ１２が図示されている。セットＳ１２はセットＳ１１と同じ構成である。各セットの始めのアドレスは、それぞれアドレスＳｓ１、Ｓｓ２であり、末尾のアドレスは、それぞれアドレスＳｌ１、Ｓｌ２である。セット間オフセットＳｏｆｆｓｅｔは、セット間のギャップの長さであり、図６（ｃ）の例では４バイトである。セット個数Ｓｎは、第３階層に含まれるセットの数であり、図６（ｃ）の例ではセット個数Ｓｎは２である。
【００４９】
残存ユニット個数Ｕｎ−ｃが０になると、図２における第２のデコーダ２６２はセット個数カウンタ２３３に残存セット個数Ｓｎ−ｃを１減らすよう信号を送る。その信号を受け、セット個数カウンタ２３３は、残存セット個数Ｓｎ−ｃから１を減算する（ステップＳ１２０）。図６の例では、残存セット個数Ｓｎ−ｃは１になる。次に、セット間オフセットＳｏｆｆｓｅｔ設定処理を行なう（ステップＳ１３０）。セット間オフセットＳｏｆｆｓｅｔ設定処理は、図５の要素間オフセットＥｏｆｆｓｅｔ設定処理において、ＥｎをＳｎに変え、ＥｏｆｆｓｅｔをＳｏｆｆｓｅｔに変えた処理であるので、図示を省略した。
【００５０】
セット間オフセットＳｏｆｆｓｅｔ設定処理においては、残存セット個数Ｓｎ−ｃが０ではないとき、現在アドレスＡｄｒを（現在アドレスＡｄｒ＋セット間オフセットＳｏｆｆｓｅｔ）に置換する。図６（ｃ）の例では、残存セット個数Ｓｎ−ｃが１で、現在アドレスＡｄｒはアドレスＳｌ１（アドレスＵｌ３に一致）であるから、セット間オフセットＳｏｆｆｓｅｔ設定処理により、現在アドレスＡｄｒは、アドレスＳｓ２となる。
【００５１】
図２のアドレス演算回路は、上記ステップＳ９２の処理と同様に、現在アドレスＡｄｒを（現在アドレスＡｄｒ＋セット間オフセットＳｏｆｆｓｅｔ）に置換する。なお、第２のデコーダ２６２は、残存データ長ＤＬ−ｃが０で、残存要素個数Ｅｎ−ｃが０で、残存ユニット個数Ｕｎ−ｃが０で、残存セット個数Ｓｎ−ｃが０ではないときは、第１のマルチプレクサ２５０にセット間オフセットＳｏｆｆｓｅｔを出力させる選択信号Ｓ２を生成する。これにより、第１のマルチプレクサ２５０はセット間オフセットＳｏｆｆｓｅｔを出力する。
【００５２】
図４に戻る。セット群ループｒｐ３は、残存セット個数Ｓｎ−ｃが「０」になるまで繰り返される。セット個数Ｓｎが「０」となると、セット群ループｒｐ３を抜けて、処理は終了する。以上のセット群ループｒｐ３によりアドレス指定されるメモリ領域は、先述したように「セット群」と呼ぶ。図６（ｂ）の例では、アドレスＳｓ１からアドレスＳｌ２までが１つのセット群である。
【００５３】
上記アドレス演算処理における各種パラメータを設定することにより実行されうるアドレス演算の例を以下の図７〜図１１で説明する。なお、図７〜図１１において、１マスは1バイトに相当する。
【００５４】
図７は、ソース領域２１及びディスティネーション領域２２を示す説明図である。図７（ａ）はソース領域２１を示し、図７（ｂ）はディスティネーション領域２２を示す。ソース領域２１内の画像データは、（Ｘ（補助領域），Ｒ（レッド），Ｇ（グリーン），Ｂ（ブルー））という単位で画素毎に順番に保存されている。このようなソース領域２１のデータに対して、以下のように各種パラメータを設定し、図４と図５で示したアドレス演算処理を実行する。
・データ長ＤＬ  ＝  １バイト；
・要素個数Ｅｎ  ＝  ８；
・ユニット個数Ｕｎ  ＝  ３；
・セット個数Ｓｎ  ＝  １；
・要素間オフセットＥｏｆｆｓｅｔ  ＝  ３バイト；
・ユニット間オフセットＵｏｆｆｓｅｔ  ＝  −２８バイト；
・セット間オフセットＳｏｆｆｓｅｔ  ＝  ０バイト；
【００５５】
このようにパラメータを設定すると、ソースアドレス演算回路２００が行なうアドレス演算処理では、まず、スタートアドレスＳＡからデータ長ＤＬ（1バイト）分のデータＲ０のアドレス（以下、アドレスＲ０という。他のデータについても同じ）を指定し、次に要素間オフセットＥｏｆｆｓｅｔ（３バイト）分の間隔をあけて、次のアドレスＲ１を指定する。そして、また要素間オフセットＥｏｆｆｓｅｔ（３バイト）分の間隔をあけて、次のアドレスＲ２を指定する。このようなアドレス指定を要素個数Ｅｎ（８個）分繰り返し、アドレスＲ７まで指定する。アドレスＲ０〜Ｒ７で、1ユニット分のアドレスを指定できたことになる。
【００５６】
次に、ユニット間オフセットＵｏｆｆｓｅｔ（−２８バイト）分の間隔をあけ、アドレスＧ０を指定する。次に要素間オフセットＥｏｆｆｓｅｔ（３バイト）分の間隔をあけて、次のアドレスＧ１を指定する。このようなアドレス指定を要素個数Ｅｎ（８個）分繰り返し、アドレスＧ７まで指定する。アドレスＧ０〜Ｇ７で、２つめのユニットのアドレスを指定できたことになる。
【００５７】
更に、ユニット間オフセットＵｏｆｆｓｅｔ（−２８バイト）分の間隔をあけて、アドレスＢ０を指定する。次に要素間オフセットＥｏｆｆｓｅｔ（３バイト）分の間隔をあけて、次のアドレスＢ１を指定する。このようなアドレス指定を要素個数Ｅｎ（８個）分繰り返し、アドレスＢ７まで指定する。アドレスＢ０〜Ｂ７で、３つめのユニットのアドレスを指定できたことになる。
【００５８】
ユニット個数Ｕｎは３であるから、ここでユニットのアドレス指定は終了する。ユニット個数Ｕｎ（３個）分で1セットであるから、アドレスＲ０〜Ｒ７，Ｇ０〜Ｇ７，Ｂ０〜Ｂ７で１セットである。よって、1セット分のアドレス指定もできたことになる。セット個数Ｓｎは１であるから、ここで、アドレス演算処理は終了する。
【００５９】
このように、図７（ａ）のような画像データに対して、適当なパラメータを指定してアドレス演算処理を実行すると、アドレスＲ０〜Ｒ７，Ｇ０〜Ｇ７，Ｂ０〜Ｂ７を得ることができる。このアドレス演算結果は、Ｒ（レッド）とＧ（グリーン）とＢ（ブルー）という成分毎にアドレス指定がなされているので、画像処理において成分毎の処理を行なう際に有用である。
【００６０】
ソースアドレス演算回路２００が図７（ａ）のようなアドレス演算処理を行なった際に、ディスティネーションアドレス演算回路３００が、以下のように各種パラメータを設定してアドレス演算処理を実行すると、データ転送後のディスティネーション領域２２のデータ配列は、図７（ｂ）で示されるようになる。
・データ長ＤＬ  ＝  １バイト；
・要素個数Ｅｎ  ＝  ８；
・ユニット個数Ｕｎ  ＝  ３；
・セット個数Ｓｎ  ＝  １；
・要素間オフセットＥｏｆｆｓｅｔ  ＝  ０バイト；
・ユニット間オフセットＵｏｆｆｓｅｔ  ＝  ０バイト；
・セット間オフセットＳｏｆｆｓｅｔ  ＝  ０バイト；
【００６１】
データ長ＤＬが１バイトであるから、１バイトのデータが１要素である。要素間オフセットＥｏｆｆｓｅｔが０バイトであるから、図７（ｂ）において要素Ｒ０と次の要素Ｒ１の間隔は０バイトである。要素個数Ｅｎが８であるから、8つの要素Ｒ０〜Ｒ７が１ユニットを構成する。ユニット間オフセットＵｏｆｆｓｅｔが０バイトであるから、図７（ｂ）においてユニット同士の間隔は０バイトである。ユニット個数Ｕｎが３であるから、３つのユニットＲ０〜Ｒ７，Ｇ０〜Ｇ７，Ｂ０〜Ｂ７が１セットを構成する。セット個数Ｓｎは１であるから、結果的にディスティネーション領域２２のデータ配列は図７（ｂ）で示されるようになる。
【００６２】
なお、逆に、図７（ｂ）をソース領域２１とし、図７（ａ）をディスティネーション領域とすることも可能である。
【００６３】
図８は、他のディスティネーション領域２２を示す説明図である。図８は、ソースアドレス演算回路２００が図７（ａ）のようなアドレス演算処理を行なった際に、ディスティネーションアドレス演算回路３００が、以下のように各種パラメータを設定してアドレス演算処理を実行した場合のデータ転送後のディスティネーション領域２２のデータ配列である。
・データ長ＤＬ  ＝  ２４バイト；
・要素個数Ｅｎ  ＝  １；
・ユニット個数Ｕｎ  ＝  １；
・セット個数Ｓｎ  ＝  １；
・要素間オフセットＥｏｆｆｓｅｔ  ＝  ０バイト；
・ユニット間オフセットＵｏｆｆｓｅｔ  ＝  ０バイト；
・セット間オフセットＳｏｆｆｓｅｔ  ＝  ０バイト；
【００６４】
このように、パラメータの設定値が異なっていても、アドレス演算処理の結果のデータ配列が同じになることもある。
【００６５】
図９は、更に他のディスティネーション領域２２を示す説明図である。図９は、ソースアドレス演算回路２００が図７（ａ）のようなアドレス演算処理を行なった際に、ディスティネーションアドレス演算回路３００が、以下のように各種パラメータを設定してアドレス演算処理を実行した場合のデータ転送後のディスティネーション領域２２のデータ配列である。
・データ長ＤＬ  ＝  ４バイト；
・要素個数Ｅｎ  ＝  ２；
・ユニット個数Ｕｎ  ＝  ３；
・セット個数Ｓｎ  ＝  １；
・要素間オフセットＥｏｆｆｓｅｔ  ＝  １バイト；
・ユニット間オフセットＵｏｆｆｓｅｔ  ＝  ２バイト；
・セット間オフセットＳｏｆｆｓｅｔ  ＝  ０バイト；
【００６６】
データ長ＤＬが４バイトであるから、（Ｒ０〜Ｒ３），（Ｒ４〜Ｒ７），（Ｇ０〜Ｇ３），（Ｂ０〜Ｂ３）などがそれぞれ１要素である。要素間オフセットＥｏｆｆｓｅｔが１バイトであるから、図９において要素Ｒ０〜Ｒ３と要素Ｒ４〜Ｒ７の間隔は１バイトとなっている。他の要素間のオフセットも１バイトである。要素個数Ｅｎが２であるから、（Ｒ０〜Ｒ７），（Ｇ０〜Ｇ７）などがそれぞれ１ユニットを構成する。ユニット間オフセットＵｏｆｆｓｅｔが２バイトであるから、図９においてユニットＲ０〜Ｒ７とユニットＧ０〜Ｇ７の間隔は２バイトとなっている。ユニットＧ０〜Ｇ７とユニットＢ０〜Ｂ７との間隔も２バイトである。ユニット個数Ｕｎが３であるから、３つのユニットＲ０〜Ｒ７，Ｇ０〜Ｇ７，Ｂ０〜Ｂ７が１セットを構成する。セット個数Ｓｎは１であるから、ディスティネーション領域２２は図９で示されるようになる。
【００６７】
このように、ソースアドレス演算回路２００とディスティネーションアドレス演算回路３００においては、データ長ＤＬと、要素個数Ｅｎと、ユニット個数Ｕｎと、セット個数と、要素間オフセットＥｏｆｆｓｅｔと、ユニット間オフセットＵｏｆｆｓｅｔと、
セット間オフセットＳｏｆｆｓｅｔのうち少なくとも１つが互いに異なるものであっても良い。このことにより、ソースアドレス演算回路２００とディスティネーションアドレス演算回路３００は、非対称的に複雑なアドレス指定を行なうことができる。
【００６８】
図１０は、他のディスティネーション領域２２を示す説明図である。図１０では、図７〜図９より複雑なアドレス指定を実現している。ソースアドレス演算回路２００が図７（ａ）のようなアドレス演算処理を行なった際に、ディスティネーションアドレス演算回路３００が、以下のように各種パラメータを設定してアドレス演算処理を実行した場合のデータ転送後のディスティネーション領域２２のデータ配列である。
・データ長ＤＬ  ＝  ２バイト；
・要素個数Ｅｎ  ＝  ２；
・ユニット個数Ｕｎ  ＝  ２；
・セット個数Ｓｎ  ＝  ２；
・要素間オフセットＥｏｆｆｓｅｔ  ＝  ５バイト；
・ユニット間オフセットＵｏｆｆｓｅｔ  ＝  −４バイト；
・セット間オフセットＳｏｆｆｓｅｔ  ＝  ６バイト；
【００６９】
データ長ＤＬが２バイトであるから、Ｒ０〜Ｒ１が１要素である。要素間オフセットＥｏｆｆｓｅｔが５バイトであるから、図１０において要素Ｒ０〜Ｒ１と次のデータＲ２との間隔は５バイトである。次に、データ長ＤＬが２バイトであるから、Ｒ２〜Ｒ３が１要素を構成する。要素個数Ｅｎが２であるから、２つの要素Ｒ０〜Ｒ３が１ユニットを構成する。ユニット間オフセットＵｏｆｆｓｅｔが−４バイトであるから、図１０においてユニットＲ０〜Ｒ３と次のデータＲ４の間隔は−４バイトである。また、データ長ＤＬが２バイトであるから、（Ｒ４〜Ｒ５），（Ｒ６〜Ｒ７）などがそれぞれ１要素で、要素間オフセットＥｏｆｆｓｅｔが５バイトであるから、要素Ｒ４〜Ｒ５と要素Ｒ６〜Ｒ７の間隔も５バイトで、要素個数Ｅｎが２であるから、Ｒ４〜Ｒ７が１ユニットを構成する。ユニット個数Ｕｎが２であるから、２つのユニットＲ０〜Ｒ７が１セットを構成する。セット間オフセットＳｏｆｆｓｅｔが６バイトであるから、図１０のセットＲ０〜Ｒ７と次のデータＧ０との間隔は６バイトである。同様に、（Ｇ０〜Ｇ１），（Ｇ２〜Ｇ３），（Ｇ４〜Ｇ５），（Ｇ６〜Ｇ７）などがそれぞれ１要素で、（Ｇ０〜Ｇ３）と（Ｇ４〜Ｇ７）がそれぞれ１ユニットを構成する。ユニット個数Ｕｎが２であるから、Ｇ０〜Ｇ７が１セットを構成する。セット個数Ｓｎは２であるから、ディスティネーション領域２２は図１０で示されるようになる。
【００７０】
本実施例のアドレス演算処理は、様々に利用可能である。図１１は、更に他のソース領域２１及びディスティネーション領域２２を示す説明図である。図１１（ｃ）で示すようなドキュメントを画像処理で読み込むと、通常、ドキュメントを横方向に読み込んだデータになる。図１１（ａ）は、そのようなデータがソース領域２１に保存された状態を示している。ソースアドレス演算回路２００が、下記の式（１．１）〜式（１．７）で示されるように各種パラメータを設定してアドレス演算処理を実行し、ディスティネーションアドレス演算回路３００が、式（２．１）〜（２．７）で示されるように各種パラメータを設定してアドレス演算処理を実行した場合、図１１（ｃ）の矢印で示す方向に読み込んだデータをディスティネーション領域２２に保存することができる。
・データ長ＤＬ  ＝  ３バイト  ・・・（１．１）
・要素個数Ｅｎ  ＝  ３  ・・・（１．２）
・ユニット個数Ｕｎ  ＝  １  ・・・（１．３）
・セット個数Ｓｎ  ＝  １  ・・・（１．４）
・要素間オフセットＥｏｆｆｓｅｔ  ＝  ５７バイト  ・・・（１．５）
・ユニット間オフセットＵｏｆｆｓｅｔ  ＝  ０バイト  ・・・（１．６）
・セット間オフセットＳｏｆｆｓｅｔ  ＝  ０バイト  ・・・（１．７）
・データ長ＤＬ  ＝  ９バイト  ・・・（２．１）
・要素個数Ｅｎ  ＝  １  ・・・（２．２）
・ユニット個数Ｕｎ  ＝  １  ・・・（２．３）
・セット個数Ｓｎ  ＝  １  ・・・（２．４）
・要素間オフセットＥｏｆｆｓｅｔ  ＝  ０バイト  ・・・（２．５）
・ユニット間オフセットＵｏｆｆｓｅｔ  ＝  ０バイト  ・・・（２．６）
・セット間オフセットＳｏｆｆｓｅｔ  ＝  ０バイト  ・・・（２．７）
【００７１】
以上のように、本実施例では、要素とユニットとセットという３階層で構成されるデータブロックに関するアドレス演算をすることにより、ＤＭＡ転送のための複雑なアドレス演算を実行することが可能である。
【００７２】
また、ＤＭＡＣ１０００の内部で複雑なデータ転送を行なうことができるので、結果的に、ＣＰＵ１０の負荷を軽減できる。本実施例では、ＣＰＵ１０は、ＤＭＡＣ１０００に対して、一度パラメータ設定をし、データ転送命令を出力すればデータ転送を実行できるので、データ転送を効率的に行なうことができる。
その他の実施例：
【００７３】
（１）上記実施例では、画像処理の際のデータ転送について、同一メモリ２０内にソース領域２１とディスティネーション領域２２が存在する場合を説明した。本発明のＤＭＡコントローラは、画像処理の際のデータ転送に有用であるが、用途はそれに限られない。例えば、同一のポートに対して、メモリ内の１２８ｂｉｔのデータを１ｂｉｔずつ連続的に送信したい場合、ソースアドレス演算回路２００において、データ長ＤＬを１ｂｉｔ、要素個数を１２８、ユニット個数を１、セット個数を１、要素間オフセットＥｏｆｆｓｅｔを０、ユニット間オフセットＵｏｆｆｓｅｔを０、セット間オフセットＳｏｆｆｓｅｔを０と設定し、ディスティネーションアドレス演算回路３００において、データ長ＤＬを１ｂｉｔ、要素個数を１２８、ユニット個数を１、セット個数を１、要素間オフセットＥｏｆｆｓｅｔをー１ｂｉｔ、ユニット間オフセットＵｏｆｆｓｅｔを０、セット間オフセットＳｏｆｆｓｅｔを０と設定すれば、同一のポートに対して、メモリ内の１２８ｂｉｔのデータを連続的に送信することが可能となる。
【００７４】
（２）上記実施例では、カウンタ２３０〜２３３は、減算カウンタであるが、この代わりに、加算カウンタと、その加算結果をそれぞれの設定値ＤＬ，Ｅｎ，Ｕｎ，Ｓｎと比較する比較器とを設けるようにしても良い。即ち、一般には、カウントすべき値の累積値と、設定値との関係に応じて、累積値がその設定値に達したことを示す機能を有するカウンタ回路を用いることができる。
【００７５】
（３）上記実施例では、カウンタ２３０〜２３３と、第１のデコーダ２６０と、第２のデコーダ２６２と、第１のマルチプレクサ２５０と、第２のマルチプレクサ２５２と、第３のマルチプレクサ２５４と、第１の加算器２７０と、第２の加算器２７２と、アドレスレジスタ２８０とで、本発明のアドレス演算実行部を構成するものとしたが、これに限らず、様々な回路構成でアドレス演算実行部を実現可能である。
【００７６】
（４）上記実施例では、ＤＭＡＣ１０００は、３階層データブロックに関するアドレス演算をするものとして説明したが、階層数は３に限らず、様々に設定可能である。例えば、２階層であっても良いし、４階層以上であっても良い。その場合、オフセットレジスタや、カウンタは、階層数に応じて備えるものとしても良い。
【００７７】
以上、実施例に基づき本発明に係るＤＭＡコントローラを説明してきたが、上記した発明の実施の形態は、本発明の理解を容易にするためのものであり、本発明を限定するものではない。例えば本発明は、図２で示されるような単体のアドレス演算装置としても実施可能である。本発明は、その趣旨並びに特許請求の範囲を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物が含まれることはもちろんである。
【図面の簡単な説明】
【００７８】
【図１】ＤＭＡコントローラ１０００を備えるコンピュータシステムを示す説明図。
【図２】ソースアドレス演算回路２００の内部構成を示すブロック図。
【図３】レジスタ２１０，２２１〜２２３に設定されるパラメータＳＡ，Ｅｏｆｆｓｅｔ，Ｕｏｆｆｓｅｔ，Ｓｏｆｆｓｅｔとカウンタ２３０〜２３３に設定されるパラメータＤＬ，Ｅｎ，Ｕｎ，Ｓｎの意味を示す説明図。
【図４】アドレス演算処理を示すフローチャート。
【図５】要素間オフセットＥｏｆｆｓｅｔ設定処理を示すフローチャート。
【図６】転送対象となるメモリ領域を模式的に示す説明図。
【図７】ソース領域２１及びディスティネーション領域２２を示す説明図。
【図８】他のディスティネーション領域２２を示す説明図。
【図９】更に他のディスティネーション領域２２を示す説明図。
【図１０】他のディスティネーション領域２２を示す説明図。
【図１１】更に他のソース領域２１及びディスティネーション領域２２を示す説明図。
【図１２】従来のＤＭＡコントローラによるアドレス演算を示す説明図。
【符号の説明】
【００７９】
２０...メモリ
２１，２１Ａ...ソース領域
２２，２２Ａ...ディスティネーション領域
１００...制御部
２００...ソースアドレス演算回路
２１０...スタートアドレスレジスタ
２２１...要素間オフセットレジスタ
２２２...ユニット間オフセットレジスタ
２２３...セット間オフセットレジスタ
２３０...データ長カウンタ
２３１...要素個数カウンタ
２３２...ユニット個数カウンタ
２３３...セット個数カウンタ
２５０...第１のマルチプレクサ
２５２...第２のマルチプレクサ
２５４...第３のマルチプレクサ
２６０...第１のデコーダ
２６２...第２のデコーダ
２７０...第１の加算器
２７２...第２の加算器
２８０...アドレスレジスタ
３００...ディスティネーションアドレス演算回路
４００...バスインタフェース
５００...バッファユニット
５２０...ソースバッファ
５３０...ディスティネーションバッファ
１１００...バス
Ａｄｒ...現在アドレス
Ｄｂ...転送データバイト数
ＤＬ...データ長
ＤＬ−ｃ...残存データ長
Ｅｎ...要素個数
Ｅｎ−ｃ...残存要素個数
Ｅｏｆｆｓｅｔ...要素間オフセット
Ｕｎ...ユニット個数
Ｕｎ−ｃ...残存ユニット個数
Ｕｏｆｆｓｅｔ...ユニット間オフセット
Ｓｎ...セット個数
Ｓｎ−ｃ...残存セット個数
Ｓｏｆｆｓｅｔ...セット間オフセット
Ｌ１ＤＢ...第１階層データブロック
Ｌ２ＤＢ...第２階層データブロック
Ｌ３ＤＢ...第３階層データブロック
Ｓ１〜Ｓ３...選択信号
【図１】
2006099205.tif 000003
【図２】
2006099205.tif 000004
【図３】
2006099205.tif 000005
【図４】
2006099205.tif 000006
【図５】
2006099205.tif 000007
【図６】
2006099205.tif 000008
【図７】
2006099205.tif 000009
【図８】
2006099205.tif 000010
【図９】
2006099205.tif 000011
【図１０】
2006099205.tif 000012
【図１１】
2006099205.tif 000013
【図１２】
2006099205.tif 000014