JP2007183692A - データ処理装置 - Google Patents

データ処理装置 Download PDF

Info

Publication number
JP2007183692A
JP2007183692A JP2005380609A JP2005380609A JP2007183692A JP 2007183692 A JP2007183692 A JP 2007183692A JP 2005380609 A JP2005380609 A JP 2005380609A JP 2005380609 A JP2005380609 A JP 2005380609A JP 2007183692 A JP2007183692 A JP 2007183692A
Authority
JP
Japan
Prior art keywords
data
transfer
memory
dma
read
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2005380609A
Other languages
English (en)
Inventor
Toru Tsuruta
徹 鶴田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2005380609A priority Critical patent/JP2007183692A/ja
Priority to US11/397,804 priority patent/US20070174506A1/en
Publication of JP2007183692A publication Critical patent/JP2007183692A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)

Abstract

【課題】リード転送要求実行時のデータ転送効率を向上させる。
【解決手段】データ処理部2のプロセッサ2aからデータ管理部3が管理するデータのリード要求が出力されると、受信側DMA制御部2bにより、専用線4を介して、DMA転送要求がデータ処理部2からデータ管理部3へ出力される。次に、データ管理部3において、メモリ制御部3cにより、DMA転送要求で示されたデータがメモリ3bから読み出され、バッファ3caに格納される。データがバッファ3caに格納されると、送信側DMA制御部3aにより、バスの使用権利が獲得される。そして、メモリ制御部3cにより、バッファ3caに格納されたデータが、バス1を介してデータ処理部2内の指定されたデータ記憶領域にDMAによりライト転送される。
【選択図】図1

Description

本発明はDMA(Direct Memory Access)転送を行うデータ処理装置に関し、特にリアルタイム性が要求されるデータ処理装置に関する。
現在、様々な分野で情報処理技術が利用されている。その中で、画像処理に代表されるように、大量のデータ処理を必要とする技術分野がある。しかも、用途によっては、大量のデータの処理のリアルタイム性が必要とされる。
例えば、自動車に設置したカメラで撮影した画像をマイクロコンピュータで解析し、自動車を自動制御する技術がある。この技術により、自動車を駐車位置に自動的に移動させたり、直進する自動車が車線からはみ出さないように制御したりすることができる。この技術では、画像処理が遅延すると、自動車を正しくコントロールできなくなる。そのため、大量のデータを処理しながらも、リアルタイム性も堅持しなければならない。
大量のデータをリアルタイムに処理するには、高い演算性能と高いメモリアクセス性能を両立した処理システムが必要である。
このように、大量のデータをリアルタイムに処理するシステムでは、複数の処理エンジンコアにより、複数の処理ブロックをパイプライン処理する。パイプライン処理するための処理エンジンコアの数は、処理エンジンコアの演算性能とアプリケーションのリアルタイム性の必要条件から決定される。
また、大量のデータをリアルタイム処理しなければならない画像処理においては、バス性能がシステム性能を左右する大きな要因となる。特に専用ハードで実現した処理エンジンコアは、短時間で大量のデータを処理可能な構成とすることが必要である。そのため、バスのデータ転送能力が低いと、処理エンジンコアにおいてデータ待ちが発生し、演算性能を十分発揮できない結果となる。
このデータ転送は、一般的にDMAで実行される。CPU(Central Processing Unit)を含むシステム構成では、CPUバスにDMA制御部が接続された構成をとる。DMA制御部はプロセッサが制御しているCPUバスの使用権利を一時的に獲得し、CPUバスに接続された2つのメモリ間でデータ転送を実行する。つまり、画像処理システムにおいて、DMA転送の効率化はバス性能を左右し、バス性能はシステム全体の性能を左右するという関係にある。
図20は、従来の画像処理システム構成例を示す図である。大量のデータを処理する従来のシステムでは、CPUバス901を介して、メモリ部910と複数のデータ処理部920,930,940,・・・が接続されている。CPUバス901は、バス制御回路902によって、リクエストの調停が行われる。
メモリ部910は、メモリ制御部911とDRAM(Dynamic Random Access Memory)912とを有している。メモリ制御部911は、DRAMに対するデータの書き込みと、データの読み出しとを制御する。DRAM912には、複数のデータ処理部920,930,940,・・・で使用するデータが格納される。
データ処理部920は、プロセッサエレメント921、SRAM(Static Random Access Memory)922,923、メモリインタフェース(I/F)部924、およびプロセッサエレメントDMAコントローラ(PE−DMAC)925を有している。
プロセッサエレメント921は、2つのSRAM922,923を利用してデータ演算を行う。SRAM922,923には、プロセッサエレメント921で使用するデータおよび演算結果が記憶される。メモリI/F部924は、SRAM922,923に対するデータの書き込みとデータの読み出しとを行う。PE−DMAC925は、メモリI/F部924がCPUバス901を介してデータ転送を行う場合のDMA制御を行う。
データ処理部930は、プロセッサエレメント931、SRAM932,933、メモリインタフェース(I/F)部934、およびDMAコントローラ(PE−DMAC)935を有している。データ処理部930内の各要素は、データ処理部920内の同名の要素と同じ機能を有している。
データ処理部940は、プロセッサエレメント941、SRAM942,943、メモリインタフェース(I/F)部944、およびDMAコントローラ(PE−DMAC)945を有している。データ処理部940内の各要素は、データ処理部920内の同名の要素と同じ機能を有している。
図21は、従来のシステムにおけるリードアクセスのタイミングチャートである。この図21には、PE−DMAC925からDRAM910に対するリード要求を出力した場合の例が示されている。
PE−DMAC925からリード要求(Read req)が出力されると、CPUバス901のバス制御回路902でバス調停(Bus arbitration)が行われる。リード要求が許可されると、PE−DMAC925においてデータリードに必要な情報が判断(Status Judgement)が行われ、データリードに必要な情報がメモリ制御部911に送られる。
メモリ制御部911では、指定されたリード要求の調停(Req arbitration)が行われ、その後、DRAM912に対するリードアクセスが行われる。DRAM912から読み出されたデータは、CPUバス901を介してPE−DMAC925に送られる。
このような手順で、DMA転送が繰り返される。しかも、リアルタイムに処理を実行するために複数の各データ処理部920,930,940,・・・が設けられているため、各データ処理部920,930,940,・・・からメモリ部910へのアクセスが頻発する。そこで、CPUバス901経由のデータ転送をできるだけ効率よく行うための技術が考えられている。
例えば、メモリ制御部911において、余分なデータが転送されないように、DRAM912から読み出したデータをバッファに格納し、そのバッファから必要なデータのみをCPUバス901を介して転送する技術がある(特許文献1参照)。
また、DMA転送では、転送効率を上げるためにバースト転送が行われるが、バースト転送中に障害が発生したとき、バースト転送が終わるまで障害情報の通知が待たされてしまう。そこで、DMA転送を行うCPUバスとは別に、障害情報を転送するPioバスを設けて、DMA転送中に障害情報を採取する技術も考えられている(特許文献2参照)。
なお、図20に示したような構成のシステムに適用可能なバス接続方式として、例えば、ARM社のAMBA(Advanced Microcontroller Bus Architecture)バスがある。最も普及しているのがAMBA AHB(Advanced High-Performance Bus)であり、最新方式としてAMBA AXI(Advanced eXtensible Interface)が広まりつつある(非特許文献1参照)。
特開2001−22637号公報 特開平7−219888号公報 ARM社、"AMBA Home Page"、[online]、[2005年12月7日検索]、インターネット、<URL:http://www.arm.com/products/solutions/AMBAHomePage.html>
しかし、CPUバスでDMA転送を実行すると、リード転送要求実行時にCPUバスを無駄に占有するサイクルが存在し、DMA転送の効率低下を招いていた。
以下にDMAの転送効率が低下する理由を説明する。
前述したように、大量のデータを処理する画像処理システムでは、DMA転送の効率がシステム性能を左右する。DMA転送効率は、バスのビット幅と動作周波数が重要な要素であるが、これらのみで決まるものではない。
バス仕様では、バスの使用権利を確保した際に、使用権利を解放するまでに転送可能なデータ量(最大データ転送サイズ)を制限していることが多い。これは、データ転送の要求元が複数存在する場合、ひとつの要求元のデータ転送でバスを長時間占有してしまうと、他の要求元のデータ転送が待たされて実行できなくなるためである。すなわち、他のデバイスの処理が待たされることになり、待たされたデバイスの処理のリアルタイム性を損なう可能性が高いからである。
そこで、一般には、1回のバス使用権利獲得時のデータ転送の最大データ転送サイズを制限し、所望のデータを複数に分割して転送する。これにより、他の要求元によるデータ転送の割り込みが可能となる。
実際に他の要求元のデータ転送が割り込むかどうかは、複数のデータ転送の要求元に割り当てられた優先順位に基づく調停によって決定される。このバス調停サイクルが1回のデータ転送の最初に必ず入り込む。そのため、データ転送の分割は、DMA転送効率低下を招く。
このような条件下で、データ転送の要求元から、あるまとまったデータのリード転送の実行要求があった場合を考える。バス仕様の制約から、1回のデータ転送の最大データ転送サイズを制限するために、最大データ転送サイズが予め定められている。受け取ったリード転送要求が最大データ転送サイズを超えるリード転送要求であった場合、DMA制御部において、受け取ったリード転送要求は複数のリード転送要求に自動分割される。分割後のリード転送要求で転送されるデータサイズは、最大データ転送サイズを超えないようにする。分割された複数のリード転送要求毎にバスにリード転送の要求を行うことで、最大データ転送サイズを超えたデータ転送が防止される。
1回のリード転送は以下の手順で実行される。
A)PE−DMACはCPUバスにリード転送要求(Read req)を出力し、バスの使用権利を確保する。
B)PE−DMACは、メモリ制御部にリード転送したいアドレス(start,adr,data_length,etc.)を伝える。
C)メモリ制御部はメモリ(DRAM)からデータを読み出す。
D)メモリ制御部は、CPUバスにデータを出力し、所望のメモリへのデータ転送完了後、バスの使用権利を放棄し、PE−DMACにアクセス完了信号(end)を出力する。
リード転送要求が複数に分割されている場合、現在の転送処理のD)が終了しないと次の転送処理のA)が開始できないため、A)〜C)の処理中はデータ転送が実施できないのにバスを占有していることになり、DMAの転送効率は大幅に低下していた。
なお、ARM社のAMBA AXIでは、データ転送要求バスとデータ転送バスを別のバスとして構成し、データ転送要求を多重に発行することを可能としている。つまり、A)・B)のリード転送要求とD)のデータ転送を異なるバスで構成し、D)の処理中にA)・B)を実行できる。このようなマルチレイヤのバス構成を採用することで、リード転送要求を多重に発行することが可能となる。
リード転送要求を多重化するには、多重化している状態を記憶する必要がある。これを実現するには、記憶数分の記憶回路が必要となり、回路規模を増加させる要因である。そのため、実現する際には多重化数が制約される。AMBA AXIでは、この多重化数は任意であり、AMBA AXIであったとしても多重化できないバス構成も許されるため、DMA転送の効率化に関しては、AMBA AHBと同等である可能性もある。実装するプロセッサコアの仕様によっては、AMBA AXIなどのマルチレイヤのバス構成が利用できない場合もあり、この場合は解決手段が存在しなかった。
また、近年になり、プロセッサの動作周波数の向上による高性能化には陰りが見えてきている。これは、以前であればトランジスタの微細化によるスピードの向上が見込めたが、ライン幅が100nm以下になると動作周波数の向上に限界が出てきた。そのため、トランジスタのさらなる微細化は、小型化のみの効果しか見込むことができない。
そこで、性能向上を実現するために、1チップにプロセッサコアを複数搭載した、マルチコアのプロセッサが主流になりつつある。つまりマルチコア・プロセッサシステムでは、データ転送の要求元が複数存在するわけであり、DMA転送の効率化は重要な要素であると言える。
さらに、大量のデータを取り扱う処理の1つとして、画像処理がある。この画像処理におけるデータ転送の効率化に関しては、画像処理特有の課題が存在する。
画像処理の場合、DMA転送に2次元矩形アクセスをサポートすることが常套手段である。例えば、2次元矩形アクセスは、フレームメモリ上から、画面内の一部の矩形データを、別のメモリに転送するときに有効である。
2次元矩形アクセスでは、矩形領域の水平方向へはアドレスが連続するが、垂直方向にはアドレスは連続しない。一方、転送先のメモリ上では、切り出した矩形データを連続アドレスで配置する。すなわち、転送先では1次元アクセスする場合が殆どである。このような場合、矩形データを水平方向に1行毎の短冊状(長方形領域)に分割して、複数のリード転送要求を行う。
ところで、バスは、データ転送のバースト長が長い方が効率的な転送になることは周知の事実である。例えば、1回のバス調停で160バイト転送した場合と、10回のバス調停で16バイト転送を10回行った場合とでは、9回のバス調停サイクル分、後者の方が160バイト転送に要する総サイクル数が多い。ここで、バス幅を64bit(8Bytes)、バス調停サイクルを1サイクルとして、バス転送効率(1サイクル当たりの平均のデータ転送量)を求めると、以下のようになる。
バス調停1回で160バイト転送を1回:160÷(160÷8+1)=7.62バイト/サイクル
バス調停1回で16バイト転送を10回:160÷((16÷8+1)×10)=5.33バイト/サイクル
すなわち、データ転送効率の低下が(7.62-5.33)/7.62=約30%認められる。これは、1回当たりのデータ転送量が少ないと、分割して増加した分のバス調停サイクルが無視できない値となることを示している。
しかし、画像処理の場合、2次元矩形アクセスでDMA転送する際の矩形データの水平方向サイズは32〜64画素程度と、さほど大きくならない。むしろ近年では、画像処理アプリ全体で大量のデータ転送を行う必要があるため、バス幅を64bit(8Bytes)よりも大きくする傾向がある。従って、データ転送のバースト長が短くなってしまう場合のデータ転送効率の低下は、更に顕著になる。
本発明はこのような点に鑑みてなされたものであり、リード転送要求実行時のデータ転送効率を向上させることができるダイレクトメモリアクセス制御回路を提供することを目的とする。
本発明では上記課題を解決するために、図1に示すようなデータ処理装置が提供される。本発明に係るデータ処理装置は、バス1を介して接続されたデータ処理部2とデータ管理部3との間でDMA転送を行うものである。専用線4は、データ処理部2とデータ管理部3とを接続しており、DMA転送要求の通知に利用される。受信側DMA制御部2bは、データ処理部2内に設けられ、データ処理部2のプロセッサ2aからデータ管理部3が管理するデータのリード要求が出力されると、DMA転送要求を専用線4を介して出力する。送信側DMA制御部3aは、データ管理部3内に設けられ、受信側DMA制御部2bから出力されたDMA転送要求を専用線4を介して受け取り、DMA転送要求で示されたデータのメモリリード要求を出力する。また、送信側DMA制御部3aは、データがバッファ3caに格納されるとバス1の使用権利を獲得し、DMAライト要求を出力する。メモリ制御部3cは、データ管理部3内に設けられ、送信側DMA制御部3aからメモリリード要求が出力されると、データ管理部3で管理しているメモリ3bからデータを読み出し、バッファ3caに格納する。また、メモリ制御部3cは、データを送信側DMA制御部3aからDMAライト要求が出力されると、バッファ3caに格納されたデータを、バスを介してデータ処理部2内の指定されたデータ記憶領域に対してDMAライト転送を行う。
このようなデータ処理装置によれば、データ処理部2のプロセッサ2aからデータ管理部3が管理するデータのリード要求が出力されると、専用線4を介して、DMA転送要求がデータ処理部2からデータ管理部3へ出力される。次に、データ管理部3において、DMA転送要求に応じて、DMA転送要求で示されたデータがデータ管理部3で管理しているメモリ3bから読み出され、バッファ3caに格納される。データがバッファ3caに格納されるとバスの使用権利が獲得される。そして、バッファ3caに格納されたデータが、バス1を介してデータ処理部2内の指定されたデータ記憶領域にDMAによりライト転送される。
本発明では、データ処理部でのリード要求が出されると、専用線を介して、データ管理部に対してDMA転送要求を出力し、データ管理部からDMAによるライト転送を行うようにした。これにより、データの転送準備が整った後にバスの使用権利を獲得することができ、バスを介したデータのデータ転送効率が向上する。
以下、本発明の実施の形態を図面を参照して説明する。
図1は、本実施の形態の概略を示す図である。データ処理装置は、バス1を介してデータ処理部2とデータ管理部3とが接続されている。データ処理部2は、プロセッサ2aと受信側DMA制御部2bとを有する。また、データ管理部3は、送信側DMA制御部3a、メモリ3b、およびメモリ制御部3cを有する。データ処理部2の受信側DMA制御部2bは、データ管理部3の送信側DMA制御部3aと専用線4で接続されている。専用線4は、DMA転送要求の通知に利用される。
データ処理部2のプロセッサ2aは、データ処理を行う。そして、データ処理部2は、データ処理中にデータ管理部3が管理するメモリ3b内のデータが必要になると、受信側DMA制御部2bに対してリード要求を出力する。
データ処理部2の受信側DMA制御部2bは、プロセッサ2aからリード要求が出力されると、専用線4を介し、データ管理部3の送信側DMA制御部3aに対してDMA転送要求を出力する。このDMA転送要求には、転送対象となるデータを特定する情報(アドレスやデータ長)や、DMAライト転送時にデータを書き込むべきデータ処理部2内のデータ記憶領域を示す情報(書き込み先のアドレス等)が含まれる。
データ管理部3の送信側DMA制御部3aは、受信側DMA制御部2bから出力されたDMA転送要求を専用線4を介して受け取り、DMA転送要求で示されたデータのメモリリード要求をメモリ制御部3cに対して出力する。また、送信側DMA制御部3aは、データがバッファ3caに格納されるとバス1の使用権利を獲得し、DMAライト要求をメモリ制御部3cに対して出力する。
データ管理部3のメモリ制御部3cは、送信側DMA制御部3aからリード要求が出力されると、データ管理部3で管理しているメモリ3bからデータを読み出し、バッファ3caに格納する。また、メモリ制御部3cは、データを送信側DMA制御部3aからDMAライト要求が出力されると、バッファ3caに格納されたデータを、バスを介してデータ処理部2内の指定されたデータ記憶領域に対してDMAライト転送を行う。
このようなデータ処理装置によれば、データ処理部2のプロセッサ2aからデータ管理部3が管理するデータのリード要求が出力されると、受信側DMA制御部2bにより、専用線4を介して、DMA転送要求がデータ処理部2からデータ管理部3へ出力される。DMA転送要求に応じて、データ管理部3内の送信側DMA制御部3aにより、メモリリード要求が出力される。すると、メモリ制御部3cにより、DMA転送要求で示されたデータがデータ管理部3で管理しているメモリ3bから読み出され、バッファ3caに格納される。データがバッファ3caに格納されると、送信側DMA制御部3aによりバスの使用権利が獲得され、DMAライト要求が出力される。そして、メモリ制御部3cにより、バッファ3caに格納されたデータが、バス1を介してデータ処理部2内の指定されたデータ記憶領域に対して、DMAによりライト転送される。
このようにして、DMA転送におけるリード転送要求の効率化が実現される。すなわち、DMAによるデータ転送をライト転送のみとすることが、バス仕様に依存せずにDMA転送効率を高める最も単純な手法である。ライト転送要求の場合の動作を以下に説明する。
あるまとまったデータを転送したい場合、複数のライト転送要求に分割する必要がある。1回のライト転送要求は、要求元が直接アクセス制御するメモリからデータを読み出して、転送先にデータを転送する処理を行うが、メモリから読み出すためのアドレスは、要求元のDMA転送制御部が情報を保有している。複数のライト転送要求に分割されたとしても、次にメモリから読み出すためのアドレスは、ライト転送要求元の制御部内が保有しており、バス仕様には依存しない。つまり、ライト転送は元々効率よく実行できる可能性を持っている。
このように、DMA転送をライト転送のみとすることは効果的であるが、要求元が他のメモリからデータを読み出せなくなっては、所望の処理が実現できなくなるため、何らかの代替案が必要となる。そこで、本発明では、データ処理部2からのDMA転送要求をデータ管理部3に通知するための専用線4を設けた。その結果、バス1を介さずに、データ処理部2が必要としているデータのDMA転送要求を、データ管理部3に伝えることができる。データ管理部3では、転送すべきデータが特定されていれば、そのデータをバッファ3caに読み出した後、バス1の使用権利を獲得し、DMAライト転送をすることができる。
次に、本実施の形態の詳細を説明する。
[第1の実施の形態]
第1の実施の形態は、大量のデータをリアルタイムに処理するLSI(Large Scale Integration)の例である。
図2は、第1の実施の形態LSIの構成例を示す図である。LSI100には、バス制御回路102で制御されるCPUバス101が設けられている。CPUバス101には、汎用CPU110、メモリ部130、および複数のデータ処理部150,150a,150bが接続されている。
汎用CPU110は、各種データ処理を行う。また汎用CPU110には、周辺IO11が接続されており、周辺IO11を介したデータの入出力を行うことができる。
メモリ部130には、DRAMを有している。メモリ部130は、DRAMに対するデータの書き込みおよび読み出しを行うと共に、CPUバス101を介したデータ転送を行う。
データ処理部150,150a,150bは、画像処理をリアルタイムに実行する。データ処理部150,150a,150bは、処理対象の画像データをCPUバス101を介してメモリ部130から取得する。また、データ処理部150,150a,150bは、処理結果のデータを、CPUバス101を介してメモリ部130に転送する。
図3は、メモリ部とデータ処理部との内部構成を示すブロック図である。メモリ部130は、メモリ制御部131、DMA制御部(MEM−DMAC)132、およびDRAM133を有している。
メモリ制御部131は、内部にバッファ(MEM−BUF)131aを有している。メモリ制御部131は、非常に広いバンド幅の信号線でDRAM133に接続されていると共に、CPUバス101に接続されている。メモリ制御部131は、DRAM133に対するデータの書き込みおよび読み出しを行う。また、メモリ制御部131は、CPUバス101を介してデータの送受信を行う。
なお、DMA転送を行う場合、メモリ制御部131は、MEM−DMAC132からの指示に従って動作する。また、DRAM133から読み出してデータ処理部150に転送するデータは、バッファ131aに格納され、必要なデータのみが取り出されてデータ処理部150に送信される。
MEM−DMAC132は、データ処理部150に対して、リード要求用の専用線20で接続されている。なお、図3では、データ処理部150との間のリード要求用の専用線20のみが示されているが、他のデータ処理部150a,150bとの間も同様のリード要求専用線で接続されている。
MEM−DMAC132は、リード要求用の専用線20を介してデータ処理部150から送られたリード要求に応じて、DRAM133の内のデータのデータ処理部150に対するDMA転送を制御する。
データ処理部150は、プロセッサエレメント151、SRAM152,153、メモリインタフェース(I/F)154、およびDMA制御部(PE−DMAC)155を有している。
プロセッサエレメント151は、画像処理を実行する。プロセッサエレメント151は、2つのSRAM152,153に接続されており、処理すべき画像データをSRAM152,153から読み出す。そして、プロセッサエレメント151は、処理結果をSRAM152,153に書き込む。
SRAM152,153は、処理対象の画像データおよび処理結果を格納する記憶装置である。SRAM152,153は、一方にデータの書き込みが行われている間に他方からデータの読み出しが行われる。
メモリI/F154は、CPUバス101を介して受け取ったデータをSRAM152,153に格納する。また、メモリI/F154は、SRAM152,153に格納されたデータを、CPUバス101を介してメモリ部130に転送する。なお、DMA転送が行われる場合、メモリI/F154は、PE−DMAC155からの指示に従って、データ転送処理を行う。
PE−DMAC155は、DMA転送処理を制御する。PE−DMAC155には、リード要求(DMA転送要求)用の専用線20が接続されており、リード要求を出力する場合、リード要求用の専用線20を介してメモリ部130のMEM−DMAC132に対してリード要求を出力する。
このように、本実施の形態では、メモリ部130にリード転送要求専用のMEM−DMAC132を配置し、DMA転送の要求元からリード転送要求を受け付けるリード要求用の専用線20を備えた。これにより、以下のようにDMA転送が行われる。
データ処理部150においてDMAによるリード転送要求が設定された場合、PE−DMAC155は、CPUバス101に要求を出力する代わりに、リード要求用の専用線20を介して、リード転送要求の設定情報をメモリ部130のMEM−DMAC132に通知する。メモリ部130のリード要求専用のMEM−DMAC132は、要求内容に従い、メモリ制御部にメモリアクセスのリクエストを行い、メモリ制御部はメモリからデータを読み出し、バッファ131aに一時格納したのち、CPUバス101にはライト転送要求を行う。なお、バス仕様の制約による転送要求の分割は、MEM−DMAC132が行う。このような処理を行うことで、CPUバス101上にはDMAによるデータ転送は全てライト転送によって行われ、CPUバス101を効率的に利用可能となる。
図4は、データ処理部からのリード要求の処理手順を示す図である。図4には、各回路間で受けた渡される情報が示されている。
図5は、第1の実施の形態における共有メモリからのリード処理手順を示すタイミングチャートである。これは、リード転送要求が1次元転送であり、DRAM133からのデータ読み出しは1回のバーストアクセスで完了し、かつCPUバス101仕様の最大データ長以下のデータ転送の場合の例である。
このタイミングチャートでは、上から順に、データ処理部150のDMA制御部(PE−DMAC)155、メモリ部130のDMA制御部(MEM−DMAC)132、メモリ部130のメモリ制御部131、DRAM133、メモリ制御部131内のバッファ(MEM−BUF)131a、およびCPUバス101の処理状況が時系列で示されている。なお、図5中、CPUバス101の処理については、バス制御回路102が実行する処理も含まれている。
図4に示した情報の受け渡し、および各回路での処理を、図5のタイミングチャートに沿って説明する。
まず、時刻t1に、PE−DMAC155においてリードアクセス処理が開始される。このリードアクセス処理では、データ処理部150のPE−DMAC155からメモリ部130のMEM−DMAC132に対して、リード要求用の専用線20を介してリード転送要求(Read req)が出力される。この際、リード転送要求と共に、DMA転送に必要な情報(リードデータの先頭のアドレス、データ長、ライト転送による書き込み先のアドレス等)が転送される。すると、MEM−DMAC132において、リード転送要求の調停処理(Req arbitration)が行われる。
すなわち、MEM−DMAC132は、現在の動作状況に基づいて、PE−DMAC155からのリード転送要求を受け付けることができるか否かを判断する。MEM−DMAC132は、受け付け可能であれば、受信したリード転送要求に応じた転送準備を行う。
具体的には、MEM−DMAC132は、バッファ131a内に他のデータ転送の為のデータが残っていなければ、リード転送要求を受けることができる。バッファ131a内のデータ残量を確認するのは、バッファ131a内で直前のリクエストによるデータと、今受け付けようとしているリクエストのデータとが混在することを防ぐためである。リード転送要求を受け付ける場合、MEM−DMAC132は、DMA転送に必要な情報を記憶する。
図5の例では、PE−DMAC155からのリード転送要求を実行することが決定されている。すると、時刻t2に調停処理が終了し、MEM−DMAC132からPE−DMAC155へ、リード要求用の専用線20を介してアクノリッジ信号(Read ack)が返される。RE−DMAC155では、アクノリッジ信号(Read ack)の受信によって、リードアクセス処理が終了する。
また、時刻t2からMEM−DMAC132において、リードアクセス処理が開始される。このリードアクセス処理では、最初に、MEM−DMAC132からメモリ制御部131に対して、DRAM133へのアクセスリクエスト(req)が出力される。また、アクセスリクエストと同時に、MEM−DMAC132は、転送すべきデータの先頭アドレス(adr)とデータ長(data_length)とをメモリ制御部131に対して出力する。すると、メモリ制御部131では、アクセスリクエストの調停処理(Req arbitration)が行われる。
時刻t3に、ライト要求が実行可能と判断され、メモリ制御部131では、DRAM133に対するリードアクセス処理が行われる。
メモリ制御部131のリードアクセス処理では、MEM−DMAC132から指示された先頭アドレスから、指定されたデータ長分のデータが、DRAM133から読み出される。具体的には、メモリ制御部131は、読み出し対象のデータのアドレスを、DRAM133に対して順次出力し、DRAM133から出力されるデータを取得する。そして、メモリ制御部131は、DRAM133から読み出したデータを、バッファ131aに格納する。
なお、DRAM133に対するアクセスでは、DRAMの仕様のため、最初の数サイクルはデータを取り出すことができない。図5の例では、時刻t4からバッファ131aへのリードデータの書き込みが開始されている。
時刻t5に、DRAM133からのデータの読み出しが終了すると、メモリ制御部131からMEM−DMAC132へ、ライト要求に対するアクノリッジ信号(ack)が出力される。MEM−DMAC132は、アクノリッジ信号(ack)に応じて、状態遷移先の判断を行う。
バッファ131aに指定されたデータ長分のデータが格納されたことを認識し、ライト要求(Write req)を出力する状態に遷移するべきであることを判断する。判断処理が完了した時刻t6に、MEM−DMAC132からCPUバス101上にライト要求(Write req)が出力される。ライト要求は、バス制御回路102で受け付けられる。バス制御回路102では、他の装置との間のバス使用権利の競合に関する調停処理(Bus arbitration)が行われる。
時刻t7に調停が終了すると、バス制御回路102からMEM−DMAC132に対して、ライトアクノリッジ信号(Write ack)が出力される。すると、MEM−DMAC132は、ライトアクノリッジ信号(Write ack)に応じて、状態遷移先の判断を行う。
CPUバス101のバス使用権利が獲得できたことを認識し、ライト転送処理(Write transfer)に遷移するべきであることを判断する。判断処理が完了した時刻t8に、MEM−DMAC132からメモリ制御部131に、スタート信号(start)とライト転送のデータサイズ(Wlength)とが出力される。その後、MEM−DMAC132は、CPUバス101のライト転送処理(Write transfer)の制御を行う。なお、ライト転送におけるデータ処理部150側での書き込み位置は、「Padr」によってデータ処理部150によって指定される。
また、メモリ制御部131は、スタート信号(start)を受け取り、データ処理部150に対するDMAによるライト転送処理(Write transfer)に遷移するべきであることを判断する。判断処理が完了した時刻t9に、CPUバス101を介して、データ処理部150に対するDMAによるライト転送処理(Write transfer)を行う。具体的には、メモリ制御部131は、MEM−DMAC132からのスタート信号(start)に応じて、バッファ131aに予め蓄えておいたデータを、データ幅(Wlength)で示されるデータ長ずつ、CPUバス101を介してデータ処理部150に対して出力する。
メモリ制御部131からCPUバス101への出力データ(Out Mdata)は、データ処理部150のメモリI/F154への入力データ(In Pdata)となる。この入力データは、メモリI/F154によってSRAM152に書き込まれる。具体的には、メモリI/F154は、書き込み先のアドレス(Padr)で指定されたアドレスから順に、SARM152に対してアドレス(adr)を出力し、入力データ(In Pdata)をSRAM152の該当アドレスに書き込む。
時刻t10にライト転送処理が終了すると、メモリ制御部131からMEM−DMAC132に対して、終了信号(end)が出力される。
このように、リード要求の転送レイテンシは、時刻t1から時刻t10までの時間であるが、CPUバス101の占有時間は、時刻t7から時刻t10までの時間で済む。すなわち、CPUバス101の占有時間が少なくて済み、システム全体でのCPUバス101を介したデータ転送効率を向上させることができる。
ここで、転送すべきデータ量がライト転送のデータサイズよりも大きい場合、複数回に分けてデータ転送が行われる。その場合、図5の時刻t5から時刻t10までの処理が繰り返し実行される。
図6は、データの分割転送が行われる場合のタイミングチャートである。図6の例は、例えば、DMA制御部(PE−DMAC)155からCPUバス101の仕様の最大データ長がMバイト(Mは、1以上の整数)の場合に、転送すべきデータサイズが2Mの1次元転送でのリード転送要求(Read req)が発行された場合の処理を示している。
図6の処理は、時刻t1から時刻t10までは図5と同様であるため、説明を省略する。時刻t10に、一回目のライトデータ転送が終了すると、MEM−DMAC132は、メモリ制御部131内のバッファ131aの残留データ量を算出する。この場合、転送すべきデータサイズ2Mに対して、一回目のライトデータ転送でCPUバス101の仕様の最大データ長の制限により、データサイズM分のデータしか転送できていないので、送信のデータがM分あることを認識する。
残りがあることを認識したことで、再度、ライト要求(Write req)を出力する状態に遷移するべきであることを判断する。判断処理が完了した時刻t11に、MEM−DMAC132からCPUバス101上にライト要求(Write req)が出力される。ライト要求は、バス制御回路102で受け付けられる。バス制御回路102では、他の装置との間のバス使用権利の競合に関する調停処理(Bus arbitration)が行われる。なお、調停処理によってMEM−DMAC132の使用を許可する場合、バス制御回路102からデータ処理部150に対して、書き込み先のアドレス(Padr)等の制御データが渡される。
時刻t12に調停が終了すると、バス制御回路102からMEM−DMAC132に対して、ライトアクノリッジ(Write ack)が出力される。すると、MEM−DMAC132は、ライトアクノリッジ(Write ack)に応じて、状態遷移先の判断を行う。
CPUバス101のバス使用権利が獲得できたことを認識し、ライト転送処理(Write transfer)に遷移するべきであることを判断する。判断処理が完了した時刻t13に、MEM−DMAC132からメモリ制御部131に、スタート信号(start)とライト転送のデータサイズ(Wlength)とが出力される。その後、MEM−DMAC132は、ライト転送処理(Write transfer)を実行する。
また、メモリ制御部131は、スタート信号(start)を受け取り、データ処理部150に対するDMAによるライト転送処理(Write transfer)に遷移するべきであることを判断する。判断処理が完了した時刻t14に、CPUバス101を介して、データ処理部150に対するDMAによるライト転送処理(Write transfer)を行う。具体的には、メモリ制御部131は、MEM−DMAC132からのスタート信号(start)に応じて、バッファ131aの蓄えられている未送信のデータを、データ幅(Wlength)で示されるデータ長分、CPUバス101を介してデータ処理部150に対して出力する。
メモリ制御部131からCPUバス101への出力データ(Out Mdata)は、データ処理部150のメモリI/F154への入力データ(In Pdata)となる。この入力データは、メモリI/F154によってSRAM152に書き込まれる。具体的には、メモリI/F154は、書き込み先のアドレス(Padr)で指定されたアドレスから順に、SARM152に対してアドレス(adr)を出力し、入力データ(In Pdata)をSRAM152の該当アドレスに書き込む。
時刻t15に2回目のライト転送処理が終了すると、メモリ制御部131からMEM−DMAC132に対して、終了信号(end)が出力される。
この例では、リード要求の転送レイテンシは、時刻t1から時刻t15までの時間であるが、CPUバス101の占有時間は、時刻t7から時刻t10までの時間と、時刻t12から時刻t15までの時間である。このように、複数回に分けでデータを転送する場合においても、CPUバス101の占有時間を従来(例えば、図21に示す処理)に比べ少なくすることができる。
[第2の実施の形態]
次に、第2の実施の形態について説明する。第2の実施の形態では、画像処理用LSIに本発明を適用した場合の例を示す。第2の実施の形態では、画像データを取り扱うために、フレームメモリ上の2次元(矩形)データを読み出す際に、読み出したデータを連続のアドレスで格納する機能を備えている。
図7は、第2の実施の形態の画像処理用LSIの構成例を示す図である。画像処理用LSI200には、バス制御回路202で制御されるCPUバス201が設けられている。CPUバス201には、汎用CPU210、画像入力インタフェース(I/F)220、メモリインタフェース(I/F)230、画像出力インタフェース(I/F)240、および複数の画像処理エンジン250,250a,250bが接続されている。
汎用CPU210は、各種データ処理を行う。また汎用CPU210には、周辺IO11が接続されており、周辺IO11を介したデータの入出力を行うことができる。
画像入力I/F220には、カメラ12が接続されている。画像入力I/F220は、カメラ12から送られる画像を、CPUバス201を介してフレームメモリ13等に転送する。
メモリI/F230には、フレームメモリ13が接続されている。フレームメモリ13は、DRAM等の高速でアクセス可能な大容量の記憶装置である。また、メモリI/F230とフレームメモリ13との間は、非常に広いバンド幅の信号線で接続されている。メモリI/F230は、フレームメモリ13に対するデータの書き込みおよび読み出しを行うと共に、CPUバス201を介したデータ転送を行う。
画像出力I/F240には、ディスプレイ14が接続されている。画像出力I/F240は、CPUバス201を介して画像データを受け取り、ディスプレイ14に出力する。
画像処理エンジン250,250a,250bは、画像処理をリアルタイムに実行する。画像処理エンジン250,250a,250bは、処理対象の画像データをCPUバス201を介してフレームメモリ13から取得する。また、画像処理エンジン250,250a,250bは、処理結果のデータを、CPUバス201を介してフレームメモリ13に転送する。
図8は、メモリI/Fと画像処理エンジンとの内部構成を示すブロック図である。メモリI/F230は、メモリ制御部231とDMA制御部(MEM−DMAC)232とを有している。
メモリ制御部231は、内部にバッファ(MEM−BUF)231aを有している。メモリ制御部231は、非常に広いバンド幅の信号線でフレームメモリ13に接続されていると共に、CPUバス201に接続されている。メモリ制御部231は、フレームメモリ13に対するデータの書き込みおよび読み出しを行う。また、メモリ制御部231は、CPUバス201を介してデータの送受信を行う。
なお、DMA転送を行う場合、メモリ制御部231は、MEM−DMAC232からの指示に従って動作する。また、フレームメモリ13から読み出して画像処理エンジン250等に転送するデータは、バッファ231aに格納され、必要なデータのみが取り出されて画像処理エンジン250に送信される。
MEM−DMAC232は、画像処理エンジン250に対して、リード要求用の専用線20で接続されている。なお、図8では、画像処理エンジン250との間のリード要求用の専用線20のみが示されているが、他の画像処理エンジン250a,250bとの間も同様のリード要求専用線で接続されている。
MEM−DMAC232は、リード要求用の専用線20を介して画像処理エンジン250から送られたリード要求に応じて、フレームメモリ13の内のデータの画像処理エンジン250に対するDMA転送を制御する。
画像処理エンジン250は、プロセッサエレメント251、SRAM252,253、メモリインタフェース254、およびDMA制御部(PE−DMAC)255を有している。なお、画像処理エンジン250内の各構成要素は、DMA転送に関する機能に関しては、図3に示したデータ処理部150内の同名の構成要素と同様の機能を有している。
このような構成要素により、第2の実施の形態では、DMA転送の2次元アクセスの転送効率の低下を防ぐことができる。すなわち、第1の実施の形態と同様の手法を用いて、フレームメモリ13から矩形データを切り出すリード転送要求を行う。フレームメモリ13側のリード要求専用のMEM−DMAC232も2次元アクセスをサポートする。
ここで、矩形領域のデータを短冊状に分割し、短冊上のデータをライト転送する。このような場合に、フレームメモリ13から読み出したデータを一時保存するバッファ231aに蓄積するデータ量Mを指定できるようにし、指定されたデータ長以上のデータがバッファに蓄積されたら、CPUバス201にライト転送要求を行える機能を付加する。
例えば、バッファ231a上にフレームメモリ13からの読み出しデータを一時保存し、MをCPUバス201の仕様制約の最大データ転送サイズとする。そして、データがMだけ蓄積されたら、ライト転送を行う。この機能により、ライト転送回数を低減できる。
ここで、フレームメモリ13から読み出したデータを、連続するアドレスに格納する機能について説明する。
図9は、転送時のデータ幅の半分のデータ長に分割されたデータを転送する場合の例を示す図である。図9〔A〕には、読み出したデータ毎に転送する場合の例が示されており、図9〔B〕には、連続するアドレスに置き換えて転送する場合の例を示している。この例では、CPUバス201のデータ幅が、フレームメモリ13から1回で読み出すデータ長の2倍の場合を示している。
図9〔A〕に示すように、フレームメモリ13内の矩形の領域内の画像データ13aを読み出す場合を想定する。
フレームメモリ13内の記憶領域は複数の行に分割され、各行の左から右の順でアドレスが割り当てられている(図中、実線で示す)。右端の記憶領域の次のアドレスは、その下の行の左端の記憶領域となる。
このとき、転送すべき画像データ13aの記憶領域を示すアドレスは、とびとびの値となる。すなわち、画像データ13aの横方向(水平方向)に連続する記憶領域(同一の行)のみが、連続のアドレスに格納されている。そのため、画像データ13aを縦方向(垂直方向)の高さに応じた行数分のデータに分割して、フレームメモリ13から画像データ13aを読み出す必要がある。図9〔A〕の例では、「data#1」〜「data#6」の6つのデータに分割されている。
フレームメモリ13からデータを読み出す毎に、そのデータをCPUバス201を介して転送すると、6回のデータ転送が必要となる。
一方、第2の実施の形態では、図9〔B〕に示すように、フレームメモリ13から読み出したデータを連続のアドレスに格納し、最大データ長分のデータをCPUバス201を介して転送する。これにより、3回のデータ転送で、画像データ13aを転送することができる。転送されたデータは、画像処理エンジン250のSRAM内の連続するアドレスの領域に格納される。
すなわち、短冊に分割されたデータを個別に転送すると6回の転送になるのに対して、本実施の形態では3回の転送で全てのデータを転送可能である。
なお、矩形データの短冊のデータ長の整数倍がCPUバス201のバス幅になるとは限らない。バス幅が短冊のデータ長の整数倍ではない場合には、短冊毎にライト転送を行うと必ず一部のデータは不必要であったことになる。
これもバッファ231aにて1次元に連続したデータとし、バッファ231a上にてCPUバス201の仕様の制約に従ったデータ分割を行うことで、最後のデータ分割以外は有効なデータのみでライト転送が実行されることになる。つまり、最後だけが一部のデータが不必要になる可能性があるのみで、不必要なデータ転送を低減させることが可能になる。
図10は、転送時のデータ幅の1.5倍のデータ長に分割されたデータを転送する場合の例を示す図である。図10〔A〕には、読み出したデータ毎に転送する場合の例が示されており、図10〔B〕には、連続するアドレスに置き換えて転送する場合の例を示している。この例では、CPUバス201のデータ幅が、フレームメモリ13から1回で読み出すデータ長の2/3の場合を示している。
図10〔A〕の例では、画像データ13aののうちフレームメモリ13から「data#1a」と「data#1b」とが一回で読み出されるものとする。同様に、「data#2a」と「data#2b」、「data#3a」と「data#3b」、「data#4a」と「data#4b」、「data#5a」と「data#5b」、「data#6a」と「data#6b」がフレームメモリ13から一回で読み出される。
図10〔A〕に示すように、フレームメモリ13からデータを読み出す毎にCPUバス201を介してそのデータを転送すると、フレームメモリ13からデータ読み出しを行う度に、2回のデータ転送が必要となる。従って、矩形領域の画像データ13a全てのデータ転送を行うには、12回のデータ転送が行われる。なお、図10〔A〕において、黒で塗りつぶした領域は、不要な転送データ(例えば、全て0の値のデータ)を示している。
一方、第2の実施の形態では、図10〔B〕に示すように、フレームメモリ13から読み出したデータを連続のアドレスに格納し、最大データ長分のデータをCPUバス201を介して転送する。具体的には、1回目に「data#1a」が転送される。2回目に「data#1b」と「data#2a」の前半部分「data#2a−1」が転送される。3回目に「data#2a」の後半部分「data#2a−2」と「data#2b」とが転送される。以降同様に、データ転送が行われる。
このように、短冊状のデータそれぞれを2回に分けて転送すると、12回の内の6回は無駄なデータ転送になる。それ対して、第2の実施の形態では、計9回の転送であり、無駄なデータは転送されない。転送されたデータは、画像処理エンジン250のSRAM内の連続するアドレスの領域に格納される。
図9、図10に示すような処理を実行するため、メモリI/F230内のMEM−DMAC232は、2つのシーケンサを有する。一方のシーケンサ(第1のシーケンサ)は、PE−DMAC255からのリード転送要求受け付け処理およびメモリ制御部231へのフレームメモリ13アクセス要求処理を行う。他方のシーケンサ(第2のシーケンサ)は、CPUバス201へのライト転送要求処理とメモリ制御部231へのデータ転送要求処理とを行う。
同様に、メモリI/F230内のメモリ制御部231は、2つのシーケンサを有する。一方のシーケンサ(第1のシーケンサ)は、フレームメモリアクセス処理を行う。他方のシーケンサ(第2のシーケンサ)は、CPUバス201を介したデータ転送処理を行う。
以下、これらのシーケンサにおける処理内容を具体的に説明する。なお、図11〜図14に示すフローチャートでは、変数への値の代入および変数の値の比較の表記を、C言語の記述に合わせている。
図11は、MEM−DMACの第1のシーケンサの処理を示すフローチャートである。以下、図11に示す処理をステップ番号に沿って説明する。
なお、後述する各ステップにおいて、「MLength」に書き込みアクセスする際には、MEM−DMAC232の第2のシーケンサとの間のアクセス競合を常にチェックする必要がある。
[ステップS1]MEM−DMAC232の第1のシーケンサは、起動されると初期化処理を行う。初期化処理では、「Read ack=OFF」、「MLength=0」と設定される。「Read ack」は、リード転送要求に応じて専用線20を介してPE−DMAC255に出力するアクノリッジ信号である。「MLength」は、バッファ231aに格納されたデータ長を示す変数である。なお、この初期化処理は、システムのパワーON時やリセット時に一度だけ実行するものである。よって通常フローは、これ以降説明するステップS2〜S14の中で遷移する。
[ステップS2]MEM−DMAC232の第1のシーケンサは、バッファ231aに格納されたデータ長を記憶する変数「MLength」が0で、かつ「Read req」がONであるという条件を満たすか否かを判断する。なお、「MLength=0」を確認するのは、バッファ231a内で直前のリクエストによるデータと、今受け付けようとしているリクエストのデータが混在することを防ぐためである。これらの条件が満たされれば、処理がステップS3に進められる。条件が満たされていなければ、条件が満たされるまで、ステップS2の処理を繰り返す。なお、画像処理エンジン250のPE−DMAC255からのリード転送要求(Read req)が、専用線20を介してメモリI/F230のMEM−DMAC232に伝わることで、「Read req」がONとなる。
[ステップS3]「MLength」が0で、かつ「Read req」がONを検出すると、MEM−DMAC232の第1のシーケンサは、DMA転送に必要な情報(Radr, HLength, VLength, Vjump, Wsadr)を記憶し、アクノリッジ信号(Read ack)をPE−DMAC255に対して出力する。
DMA転送に必要な情報は、「Rsadr」(読み出しスタートアドレス)、「HLength」(水平方向データ長)、「VLength」(垂直方向データ長)、「Vjump」(垂直方向アドレスのジャンプ値)、「Wsadr」(書き込みステートアドレス)である。これらの情報は、PE−DMAC255から専用線20を介して与えられる。
なお、「VLength」(垂直方向データ長)が2以上の場合に、2次元矩形アクセスが行われる。「Vjump」は、一次元アクセスのときは「Don't care」である。なお、「Vjump」で示されるジャンプ値とは、転送すべき画像データの1つの行の最終アドレスから次の行の先頭アドレスまでの差分である。
また、アクノリッジ信号を出力する際には、「Read ack=OFF」が1パルスだけ「Read ack=ON」に変更され、その後「Read ack=OFF」に戻される。すなわち、専用線20に対して1パルスのハイレベルの信号が出力される。
[ステップS4]MEM−DMAC232の第1のシーケンサは、変数「Length」に「HLength」(水平方向データ長)を代入する。
[ステップS5」MEM−DMAC232の第1のシーケンサは、「Length」がフレームメモリ13アクセスの「DLength」(最大データ転送サイズ)以下か否かを判断する。なお、「DLength」(最大データ転送サイズ)は、バッファ231aの記憶容量やシステムのデータ転送効率等を考慮して予め設定された値である。「Length」が「DLength」以下であれば、処理がステップS6に進められる。「Length」が「DLength」より大きければ、処理がステップS7に進められる。
[ステップS6]MEM−DMAC232の第1のシーケンサは、「data_length」(データ長)に「Length」を代入し、「Length=0」とし、さらに「adr」(先頭アドレス)に「Rsadr」(読み出しスタートアドレス)を代入する。その後、処理がステップS8に進められる。
[ステップS7]MEM−DMAC232の第1のシーケンサは、「data_length」(データ長)に「DLength」を代入し、「Length」から「DLength」を減算し、さらに「adr」(先頭アドレス)に「Rsadr」(読み出しスタートアドレス)を代入する。その後、処理がステップS8に進められる。
[ステップS8]MEM−DMAC232の第1のシーケンサは、「MLength」がバッファ231aのオーバーフローを回避するための「Mth」(しきい値)より小さいか否かを判断する。「Mth」は、バッファ231aのバッファオーバフローを回避するためのしきい値である。「Mth」の値は、バッファサイズにより予め決定される。
「MLength」が「Mth」より小さければ、処理がステップS9に進められる。「MLength」が「Mth」以上であれば、「MLength」が「Mth」より小さくなるまで、ステップS8の処理が繰り返される(待ち状態(wait)となる)。なお、MEM−DMAC232の第2のシーケンサが「MLength」の値に依存して、MEM−DMAC232の第1のシーケンサと独立に処理を実行しており、MEM−DMAC232の第2のシーケンサの動作により「MLength」の値は減少する。
[ステップS9]MEM−DMAC232の第1のシーケンサは、メモリ制御部231の第1のシーケンサに対して、フレームメモリ13への「req」(アクセスリクエスト)、「adr」(先頭アドレス)、「data_length」(データ長)を出力する。アクセスリクエストを受け取ったメモリ制御部231の第1のシーケンサは、req信号受付処理を行い、フレームメモリ13アクセスを開始し、読み出したデータを全てバッファ231aに格納する。そして、メモリ制御部231の第1のシーケンサは、MEM−DMAC232の第1のシーケンサに「ack」(アクノリッジ信号)を発行する。
[ステップS10]MEM−DMAC232の第1のシーケンサは、メモリ制御部231の第1のシーケンサからの「ack」を待ち、「ack」を受け取ると処理をステップS11に進める。「ack」が無ければ、ステップS10の処理を繰り返し、「ack」を待ち続ける。
[ステップS11]MEM−DMAC232の第1のシーケンサは、メモリ制御部231の第1のシーケンサから「ack」を受けると、「MLength」に「data_length」を加算し、読み出しスタートアドレス「Rsadr」に「data_length」を加算する。
[ステップS12]MEM−DMAC232の第1のシーケンサは、「Length」が0か否かを判断する。「Length」が0であれば、処理がステップS13に進められる。「Length」が0で無ければ、処理がステップS5に進められる。
[ステップS13]MEM−DMAC232の第1のシーケンサは、垂直方向データ長「VLength」から1を減算する。
[ステップS14]MEM−DMAC232の第1のシーケンサは、「VLength」が0か否かを判断する。「VLength」が0で無ければ、処理がステップS15に進められる。「VLength」が0であれば、処理がステップS2に進められ、次のリード転送要求を待つ。
[ステップS15]MEM−DMAC232の第1のシーケンサは、「Rsadr」(読み出しスタートアドレス)に「Vjump」(垂直方向アドレスのジャンプ値)を加算する。その後、処理がステップS4に進められる。
次に、MEM−DMAC232の第2のシーケンサの処理について説明する。
図12は、MEM−DMACの第2のシーケンサの処理を示すフローチャートである。以下、図12に示す処理をステップ番号に沿って説明する。なお、後述する各ステップにおいて、「MLength」に書き込みアクセスする際には、MEM−DMAC232の第1のシーケンサとの間のアクセス競合を常にチェックする必要がある。
[ステップS21]MEM−DMAC232の第2のシーケンサは、MEM−DMAC232の第1のシーケンサの初期化が完了したか否かを判断する。初期化が完了した場合、処理がステップS22に進められる。初期化が完了しなければ、ステップS21の処理が繰り返され、MEM−DMAC232の第2のシーケンサは、第1のシーケンサが初期化されるのを待つ。
[ステップS22]MEM−DMAC232の第2のシーケンサは、「MLength≠0」か否かを判断する。「MLength」が0以外であれば、処理がステップS23に進められる。MLengthが0であれば、ステップS22の処理が繰り返され、MEM−DMAC232の第2のシーケンサは、「MLength」が更新されるのを待つ。なお、「MLength」は、メモリ制御部231の第1のシーケンサによってフレームメモリ13へのアクセス処理が行われた際に、MEM−DMAC232の第1のシーケンサによるステップS11の処理で更新される。
[ステップS23]MEM−DMAC232の第2のシーケンサは、「MLength<M」か否かを判断する。「MLength」が「M」(CPUバス201仕様の最大データ長)より小さければ、処理がステップS24に進められる。「MLength」が「M」以上であれば、処理がステップS26に進められる。
[ステップS24]MEM−DMAC232の第2のシーケンサは、「Length=0」かつ「VLength=0」の条件が満たされているか否かを判断する。これらの条件が満たされていれば、処理がステップS25に進められる。これらの条件が満たされていなければ、処理がステップS23に進められる。なお、これらの条件が満たされている場合、MEM−DMAC232の第1のシーケンサは、ステップS13を経て、ステップS2の状態に遷移していることを表している。
[ステップS25]MEM−DMAC232の第2のシーケンサは、ライト転送のデータサイズ「WLength」=「MLength」とし、書き込みアドレス「Wadr」=「Wsadr」とし、「MLength」=0とし、さらに「Wsadr」に「MLength」を加算する。その後、処理がステップS27に進められる。なお、ステップS25を経由する場合、DMA転送の完了を意味する。よって、「Wsadr」への加算はステップS26の処理との違いを明確にするために記述した。
[ステップS26]MEM−DMAC232の第2のシーケンサは、「WLength」(ライト転送のデータサイズ)=「M」とし、「Wadr」(書き込みアドレス)=「Wsadr」とし、「MLength」から「M」を減算し、さらに「Wsadr」に「M」を加算する。
[ステップS27]MEM−DMAC232の第2のシーケンサは、CPUバス201に対して「Write req」(ライト転送要求)を発行する。この「Write req」に応じて、バス制御回路202によって、CPUバス201の調停が行われる。
[ステップS28]MEM−DMAC232の第2のシーケンサは、バス制御回路202からの「Write ack」(アクノリッジ信号)が「ON」になったか否かを判断する。「Write ack」が「ON」であれば、処理がステップS29に進められる。「Write ack」が「ON」で無ければ、MEM−DMAC232の第2のシーケンサはステップS28の処理を繰り返し、ONになるのを待つ。なお、「Write ack」は、バス調停によりメモリI/F230に対してCPUバス201の占有が許可されたときに、バス制御回路202によってONに設定される。
[ステップS29]MEM−DMAC232の第2のシーケンサは、メモリ制御部231の第2のシーケンサに対して、CPUバス201への転送の「start」(スタート信号)を出力する。すなわち、MEM−DMAC232の第2のシーケンサは、「start」(スタート信号)の出力をONにする。
[ステップS30]MEM−DMAC232の第2のシーケンサは、メモリ制御部231の第2のシーケンサから入力されるend信号がONになったか否かを判断する。end信号がONになった場合、処理がステップS22に進められる。end信号がONになって無ければ、ステップS30の処理が繰り返され、メモリ制御部231の第2のシーケンサは、end信号の入力を待つ。なお、end信号は、1パルス分のハイレベル信号である。
次に、メモリ制御部231の第1のシーケンサの処理について説明する。
図13は、メモリ制御部の第1のシーケンサの処理を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。
[ステップS41]メモリ制御部231の第1のシーケンサは、初期化処理を行う。初期化処理では、「ack」(アクノリッジ信号)がOFFに設定される。
[ステップS42]メモリ制御部231の第1のシーケンサは、フレームメモリ13への「req」(アクセスリクエスト信号)がONか否かを判断する。「req」がONであれば、処理がステップS43に進められる。「req」がONでなければ、メモリ制御部231の第1のシーケンサは、ステップS42の処理を繰り返し、ONになるのを待つ。
[ステップS43]メモリ制御部231の第1のシーケンサは、MEM−DMAC232から受け取った「adr」(先頭アドレス)および「data_length」(データ長)に基づいて、フレームメモリ13に対するリードアクセスを実行する。そして、メモリ制御部231の第1のシーケンサは、読み取ったデータを、バッファ231a内に格納する。
[ステップS44]メモリ制御部231の第1のシーケンサは、アクノリッジ信号「ack」を出力する。具体的には、メモリ制御部231の第1のシーケンサは、「ack」(アクノリッジ信号)を「OFF」から「ON」に1パルス分変更後、「OFF]に戻す。その後、処理がステップS42に進められる。
次に、メモリ制御部231の第2のシーケンサの処理について説明する。
図14は、メモリ制御部の第2のシーケンサの処理を示すフローチャートである。以下、図14に示す処理をステップ番号に沿って説明する。
[ステップS51]メモリ制御部231の第2のシーケンサは、初期化処理を行う。初期化処理では、「end」(end信号)がOFFに設定される。
[ステップS52]メモリ制御部231の第2のシーケンサは、CPUバス201へのデータ転送に関する「start」(スタート信号)がONか否かを判断する。「start」がONであれば、処理がステップS53に進められる。「start」がONでなければ、メモリ制御部231の第2のシーケンサは、ステップS52の処理を繰り返し、ONになるのを待つ。
[ステップS53]メモリ制御部231の第2のシーケンサは、MEM−DMAC232から受け取った「WLength」(ライト転送のデータサイズ)に基づいて、バッファ231aに格納されているデータを先に格納された順に読み出し、CPUバス201に「OutMdata」として出力する。
[ステップS54]メモリ制御部231の第2のシーケンサは、「end」(end信号)を出力する。具体的には、メモリ制御部231の第2のシーケンサは、「end」を「OFF」から「ON」に1パルス分変更後、「OFF]に戻す。その後、処理がステップS52に進められる。
図11〜図14に示す処理を、MEM−DMAC232とメモリ制御部231とが実行することにより、図9〔B〕に示した転送時のデータ幅の半分のデータ長に分割されたデータを転送する場合や、図10〔B〕に示した転送時のデータ幅の1.5倍のデータ長に分割されたデータを転送する場合のデータ転送を、効率的に行うことができる。
図15は、転送時のデータ幅の半分のデータ長に分割されたデータを転送する場合の動作を示すタイミングチャートである。このタイミングチャートは、図9〔B〕に示すデータ転送を表している。すなわち、リード転送要求が2次元矩形アクセスであり、水平方向データ長がCPUバス201の仕様制約の最大データ転送サイズMの1/2倍、垂直方向データ長は6である。更に、水平方向データ長はフレームメモリ13へのアクセスの「DLength」(最大データ転送サイズ)より小さいものとする。
時刻t21に、画像処理エンジン250のPE−DMAC255からの「Read req」(リード転送要求)が、専用線20を介して、メモリI/F230のMEM−DMAC232の第1のシーケンサに伝わる。MEM−DMAC232の第1のシーケンサは、バッファ231aに格納されたデータ長を記憶する変数「MLength」が0で、かつ「Read req」がONとなったことを認識し、DMA転送に必要な情報(Radr, HLength=M/2, VLength=6, Vjump, Wsadr)を記憶する。そして、MEM−DMAC232の第1のシーケンサは、時刻t22にアクノリッジ信号「Read ack」をPE−DMAC255に発行する。
変数「Length」に水平方向データ長「HLength」を代入すると、「Length=M/2」となる。この「Length」はフレームメモリ13アクセスの最大データ転送サイズ「DLength」以下である。そのため、MEM−DMAC232の第1のシーケンサは、「data_length」(データ長)に「Length=M/2」を代入し、「Length=0」とし、先頭アドレス「adr」に「Radr」(読み出しスタートアドレス)を代入する。さらに、MEM−DMAC232の第1のシーケンサは、バッファ231aに格納されたデータ長を記憶する変数「MLength」が「Mth」(バッファ231aのオーバーフローを回避するためのしきい値)より小さいことを確認する。そして、MEM−DMAC232の第1のシーケンサは、時刻t23に、メモリ制御部231の第1のシーケンサに対して、フレームメモリ13への「req」(アクセスリクエスト)、「adr」(先頭アドレス)、「data_length」(データ長)を出力する。
なお、「MLength」が「Mth」より大きい場合は、小さくなるまで待つ。「MLength」の値は、MEM−DMAC232の第2のシーケンサが「MLength」の値に依存して独立して実行しており、MEM−DMAC232の第2のシーケンサにより「MLength」の値は減少する。
メモリ制御部231の第1のシーケンサは、req信号受付処理を行い、フレームメモリ13アクセスを開始し、読み出したデータを全てバッファ231aに格納する。フレームメモリ13はDRAMで構成されており、データ読み出し開始まで所定の時間を要するため、フレームメモリ13からのデータ出力は時刻t24から開始される。フレームメモリ13へのリードアクセスが時刻t25に終了すると、メモリ制御部231の第1のシーケンサは、MEM−DMAC232の第1のシーケンサに「ack」(アクノリッジ信号)を発行する。
「ack」(アクノリッジ信号)を受けたMEM−DMAC232の第1のシーケンサは、「MLength」に「data_length」(つまりM/2)を加算し、「Rsadr」(読み出しスタートアドレス)に「data_length」を加算する。MEM−DMAC232の第1のシーケンサは、「Length」が0であることを確認後に、「VLength」(垂直方向データ長)から1を減算する。これにより、「VLength=5」となるが、「VLength」が0でないので、MEM−DMAC232の第1のシーケンサの処理は継続し、「Rsadr」に「Vjump」(垂直方向アドレスのジャンプ値)を加算して、フレームメモリ13へのリードアクセスを繰り返す。
ここで、MEM−DMAC232の第1のシーケンサはMEM−DMAC232の第2のシーケンサと独立して実行されており、「Length=0」かつ「VLength=0」となるまで、フレームメモリ13へのリードアクセスが実行される。
時刻t26に、MEM−DMAC232の第2のシーケンサが「MLength≠0」を検出し、CPUバス201への「Write req」(ライト転送要求)処理を開始する。「MLength」の値チェックを行うと、「MLength」が「M」(CPUバス201の仕様における最大データ長)より小さいので、MEM−DMAC232の第1のシーケンサのフレームメモリ13アクセス処理の完了チェックに処理が移行する。フレームメモリ13アクセス処理の完了チェックは、変数「Length=0」かつ「VLength=0」で確認し、「WLength」(ライト転送のデータサイズ)=「MLength」とし、書き込みアドレス「Wadr」を「Wsadr」とし、「MLength」を0、「Wsadr」に「MLength」を加算する。そして、MEM−DMAC232の第2のシーケンサは、時刻t27に、「Write req」(ライト転送要求)を発行し、CPUバス201のバス制御回路202からの「Write ack」(アクノリッジ信号)がONになるのを待つ。
時刻t28に、CPUバス201のバス制御回路202から「write_ack」(アクノリッジ信号)を受ける。「write_ack」(アクノリッジ信号)の受信は、CPUバス201の使用権利が獲得できたことを意味する。そこで、MEM−DMAC232の第2のシーケンサは、時刻t29に、メモリ制御部231の第2のシーケンサに対して「start」(転送スタート信号)を出力(信号をON)する。
メモリ制御部231の第2のシーケンサは、「start」(転送スタート信号)がONになったことを検出すると、「WLength」情報よりバッファ231aに格納されているデータを、先に格納された順番に読み出し、時刻t30に、CPUバス201に「OutMdata」として出力する。出力完了後、時刻t31に、メモリ制御部231の第2のシーケンサは、「end」(終了信号)を発行する。
MEM−DMAC232の第2のシーケンサは「end」(終了信号)がONになることを検出し、処理が完了する。
時刻t21から時刻t31までの処理で、図9〔B〕に示す「data#1」と「data#2」とが、CPUバス201を介した1回のデータ転送で画像処理エンジン250に送られる。以降、時刻t21から時刻t31の間に行った処理を繰り返すことで、矩形領域内の全てのデータが転送される。
図15のタイミングチャートをみると、「Read req」からの転送レイテンシは長くなるが、CPUバスの占有時間は、データ転送のサイクルのみとなっていることがわかる。
図16は、転送時のデータ幅の1.5倍のデータ長に分割されたデータを転送する場合の動作を示すタイミングチャートである。このタイミングチャートは、図10〔B〕に示したデータ転送を表している。すなわち、リード転送要求が2次元矩形アクセスであり、水平方向データ長がCPUバス201における仕様制約の最大データ転送サイズMの3/2倍、垂直方向データ長は6である。更に、「DLength」(水平方向データ長はフレームメモリ13アクセスの最大データ転送サイズ)より小さいものとする。
時刻t41に、画像処理エンジン250のPE−DMAC255からの「Read req」(リード転送要求)が、専用線20を介して、メモリI/F230のMEM−DMAC232の第1のシーケンサに伝わる。MEM−DMAC232の第1のシーケンサは、バッファ231aに格納されたデータ長を記憶する変数「MLength」が0で、かつ「Read req」がONとなったことを認識し、DMA転送に必要な情報(Radr, HLength=3M/2, VLength=6, Vjump, Wsadr)を記憶する。MEM−DMAC232の第1のシーケンサは、時刻t42に「Read ack」(アクノリッジ信号)をPE−DMAC255に発行する。
変数Lengthに「HLength」(水平方向データ長)を代入すると、「Length=3M/2」となる。この「Length」がフレームメモリ13アクセスの「DLength」(最大データ転送サイズ)以下である。そのため、MEM−DMACの第1のシーケンサ232は、「data_length」(データ長)に「Length=3M/2」を代入し、「Length=0」とし、先頭アドレス「adr」に「Radr」(読み出しスタートアドレス)を代入する。さらに、MEM−DMAC232の第1のシーケンサは、バッファ231aに格納されたデータ長を記憶する変数「MLength」が「Mth」(バッファ231aのオーバーフローを回避するためのしきい値)より小さいことを確認する。そして、MEM−DMAC232の第1のシーケンサは、時刻t43に、メモリ制御部231の第1のシーケンサに対して、「req」(フレームメモリ13へのアクセスリクエスト)、「adr」(先頭アドレス)、「data_length」(データ長)を出力する。
なお、「MLength」が「Mth」より大きい場合は、小さくなるまで待つ。「MLength」の値は、MEM−DMAC232の第2のシーケンサが「MLength」の値に依存して独立して実行しており、MEM−DMAC232の第2のシーケンサの動作により「MLength」の値は減少する。
メモリ制御部231の第1のシーケンサは、req信号受付処理を行い、フレームメモリ13へのアクセスを開始し、読み出したデータ(data#1aとdata#1b)を全てバッファ231aに格納する。なお、フレームメモリ13からのデータ出力は、時刻t44から開始される。フレームメモリ13へのリードアクセスが時刻t45に終了すると、メモリ制御部231の第1のシーケンサは、MEM−DMAC232の第1のシーケンサに「ack」(アクノリッジ信号)を発行する。
ack信号を受けたMEM−DMAC232の第1のシーケンサは「MLength」に「data_length」(つまり3M/2)を加算し、「Rsadr」(読み出しスタートアドレス)に「data_length」を加算する。また、MEM−DMAC232の第1のシーケンサは、「Length」が0であることを確認後に、「VLength」(垂直方向データ長)から1を減算する。これにより、「VLength=5」となるが、「VLength」が0ではないので、MEM−DMAC232の処理は継続し、「Rsadr」(読み出しスタートアドレス)に「Vjump」(垂直方向アドレスのジャンプ値)を加算して、フレームメモリ13へのリードアクセスを繰り返す。
ここで、MEM−DMAC232の第1のシーケンサはMEM−DMAC232の第2のシーケンサと独立して実行されており、「Length=0」かつ「VLength=0」となるまで、フレームメモリ13へのリードアクセスが実行される。
時刻t46に、MEM−DMAC232の第2のシーケンサが「MLength≠0」を検出し、CPUバス201への「Write req」(ライト転送要求)処理を開始する。「MLength」の値チェックを行うと、初めは「MLength=3M/2」であり、CPUバス201における仕様の最大データ長「M」より大きい。すなわち、データ長「M」のデータ(data#1a)で「Write req」が発行できる条件が満たされている。そこで、MEM−DMAC232の第2のシーケンサは、「WLength=M」(ライト転送のデータサイズ)とし、「Wadr」(書き込みアドレス)を「Wsadr」とし、「MLength」を「M]だけ減算し、「Wsadr」に「M」だけ加算する。そして、MEM−DMAC232の第2のシーケンサは、「Write req」(ライト転送要求)を発行し、CPUバス201からの「Write ack」(アクノリッジ信号)がONになるのを待つ。
時刻t47に、CPUバス201のバス制御回路202から「write_ack」(アクノリッジ信号)を受けると、CPUバス201の使用権利が獲得できたことを意味するので、MEM−DMAC132の第2のシーケンサは、時刻t48に、CPUバス201への「start」(転送スタート信号)をONにする。
メモリ制御部231の第2のシーケンサは、「start」(転送スタート信号)がONになったことを検出すると、「WLength」よりバッファ231aに格納されているデータを、先に格納された順番に読み出し、時刻t49に、CPUバス201に「OutMdata」として出力する。出力完了後、時刻t50に、メモリ制御部231の第2のシーケンサは、「end」(終了信号)を発行する。
MEM−DMAC232の第2のシーケンサは、「end」(終了信号)がONになることを検出し、処理が完了する。
MEM−DMAC232の第1のシーケンサが「data#2a」、「data#2b」をフレームメモリ13から読み出すと「MLenght=2M」となり、MEM−DMAC232の第2のシーケンサは、「M」(データ長)で「data#1b」、「data#2a−1」のデータ転送処理を実行し、その結果「MLength=M」となる。再度MEM−DMAC232の第2のシーケンサは、データ長「M」で「data#2a−2」、「data#2b」のデータ転送処理を実行する。
同様に、残りの『「data#3a」、「data#3b」』〜『「data#6a」、「data#6b」』のデータ転送も行われる。
これにより、第1の実施の形態で同じ転送を実施すると、CPUバス201への「Write req」(ライト転送要求)が、「M」(CPUバス201の仕様制約の最大データ転送サイズ)の制約でサイズ「M」、サイズ「M/2」の転送の組合せを6回行う必要があり、合計12回となるところを、第2の実施の形態では9回となる。
また、フレームメモリ13へのアクセスに関しても、第1の実施の形態では合計12回のメモリアクセスであったのを、合計6回のアクセスに低減している。これは、フレームメモリ13がDRAMである場合、アクセス回数が減り、アクセスのバースト長が延びることにつながるため、DRAMのデータアクセス効率の向上にもつながる。なお、1回のDRAMアクセスでのデータ長を制限して、バッファ231aがオーバーフローしないようにする必要があるので、DRAMのデータアクセス効率も考慮して、バッファ231aの容量を決定する必要がある。
上記の例以外でも、第2の実施の形態によるデータ転送を行うことで、転送効率を上げることができる。
例えば、2次元矩形アクセスであり、水平方向データ長が、CPUバス201の仕様制約の最大データ転送サイズ「M」の5/4倍で、垂直方向データ長を4としたデータ転送が発生した場合を想定する。
図17は、転送時のデータ幅の5/4倍のデータ長に分割されたデータを転送する場合の動作を示すタイミングチャートである。図17では、矩形領域内の短冊状のデータを、それぞれ「data#1」、「data#2」、「data#3」、「data#4」としている。図17に示すように、フレームメモリ13に対するデータリードは4回行われており、CPUバス201を介したデータ転送は5回行われている。
また、メモリ制御部231の第1のシーケンサとメモリ制御部231の第2のシーケンサとは、図13、図14を見れば明らかなように、バッファ231aへのアクセスを除けば、全く独立に動作可能であることがわかる。よって、バッファ231aをデュアルポートメモリとしたり、ダブルバッファ化することで、フレームメモリ13へのアクセスとDMAのライト転送をパイプライン処理させることが可能となる。なお、バッファ231aをダブルバッファ化した場合、バッファ231aにデータを書き込む際には、2つのメモリに対して、バス仕様の最大データ長毎に交互に書き込まれる。
図18は、パイプライン処理を行った場合のタイミングチャートである。図18では、MEM−DMAC132の第1のシーケンサを「MEM−DMAC(シーケンサ#1)」、MEM−DMAC132の第2のシーケンサを「MEM−DMAC(シーケンサ#2)」、メモリ制御部231の第1のシーケンサを「メモリ制御部(シーケンサ#1)」、メモリ制御部231の第2のシーケンサを「メモリ制御部(シーケンサ#2)」と表している。
このように、パイプライン処理を行うことで、データ転送に要する時間を短縮することができる。また、PE−DMAC255からのリクエストも含めて、パイプライン化することもできる。
図19は、PE−DMACからのリクエストをパイプライン化した場合のタイミングチャートである。図19の例では、PE−DMAC255からの先のリード転送要求に応じたDMAによるライト転送が終了する前に、次のリード転送要求を受け付け、フレームメモリ13に対するリードアクセスを行っている。
以下、図19の様な処理を実行するには、MEM−DMAC232の処理に関して、図11に示した内容と若干の相違点がある。以下、図11に示す処理との違いを説明する。
図11のMEM−DMAC232の第1のシーケンサの処理では、「Read req」をチェックする際に、「MLength=0」のチェック(図11のステップS2)が含まれている。そのため、MEM−DMAC232の第2のシーケンサの転送が完了するまで、PE−DMAC255からの次のリード転送要求に対する「Read ack」を返信することができない。「MLength=0」のチェックの目的は、1度目のリクエストのデータと次のリクエストのデータがバッファ231a内で混じらないようにするためである。
そこで、図19に示すようにPE−DMAC255からのリクエストをパイプライン化する場合、「MLength=0」のチェック以外に、リクエストのデータがバッファ231a内で混じらないようにするための処理が追加される。例えば、データの最後部を示すポインタを設けることでデータの切れ目を識別し、MEM−DMAC232の第2のシーケンサでポインタの位置をチェックする。これにより、MEM−DMAC232の第1のシーケンサの処理における「MLength=0」のチェックを外すことが可能となり、PE−DMAC255からのリクエストも含めたパイプライン化が可能となる。
また、バッファ231aを二重化(例えば、第1のバッファと第2のバッファで構成する)すれば、「MLength」も二重化(MLength#1,MLength#2)される。そこで、1度目のリクエストで第1のバッファ、「MLength#1」を利用していたとすれば、2度目のリクエストでは、第2のバッファ、「MLength#2」を利用するようにする。その後も第1のバッファと第2のバッファとを交互に利用する。これにより、PE−DMAC255からのリクエストも含めたパイプライン化が可能になる。
なお、本発明は、上述の実施の形態にのみ限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変更を加えることができる。
以上説明した実施の形態の主な技術的特徴は、以下の付記の通りである。
(付記1) バスを介して接続されたデータ処理部とデータ管理部との間でDMA転送を行うデータ処理装置において、
前記データ処理部と前記データ記憶部とを接続し、DMA転送要求の通知に利用される専用線と、
前記データ処理部内に設けられ、前記データ処理部のプロセッサから前記データ管理部が管理するデータのリード要求が出力されると、前記DMA転送要求を前記専用線を介して出力する受信側DMA制御部と、
前記データ管理部内に設けられ、前記受信側DMA制御部から出力された前記DMA転送要求を前記専用線を介して受け取り、前記DMA転送要求で示されたデータのメモリリード要求を出力すると共に、前記データがバッファに格納されると前記バスの使用権利を獲得し、DMAライト要求を出力する送信側DMA制御部と、
前記データ管理部内に設けられ、前記送信側DMA制御部から前記メモリリード要求が出力されると、前記データ管理部で管理しているメモリからデータを読み出し、前記バッファに格納すると共に、前記データを前記送信側DMA制御部から前記DMAライト要求が出力されると、前記バッファに格納された前記データを、前記バスを介して前記データ処理部内の指定されたデータ記憶領域に対してDMAライト転送を行うメモリ制御部と、
を有することを特徴とするデータ処理装置。
(付記2) 前記メモリ制御部は、前記メモリリード要求で指定されたデータが、前記メモリ内の不連続のアドレスに記憶されている場合、前記メモリから読み出したデータを前記バッファの連続する記憶領域に格納し、前記バッファに格納された連続のデータを、前記バスで転送可能なデータ長に分割してDMAによりライト転送することを特徴とする付記1記載のデータ処理装置。
(付記3) 前記メモリ制御部は、前記メモリに格納された画像データ中の矩形領域を指定した前記メモリリード要求を受け取ると、前記矩形領域をアドレスが連続する複数の長方形領域に分割し、前記長方形領域毎にデータを読み出して前記バッファ内の連続の記憶領域に格納し、前記バッファに格納された連続のデータを、前記バスで転送可能なデータ長に分割してDMAライト転送を行うことを特徴とする付記1記載のデータ処理装置。
(付記4) 前記送信側DMA制御部は、
前記受信側DMA制御部から出力された前記DMA転送要求を前記専用線を介して受け取り、前記DMA転送要求で示されたデータのメモリリード要求を出力するリード制御回路と、
前記データが前記バッファに格納されると前記バスの使用権利を獲得し、DMAライト要求を出力するライト転送制御回路と、
を有し、前記リード制御回路と前記ライト転送制御回路とが互いに独立して動作することを特徴とする付記1記載のデータ処理装置。
(付記5) 前記送信側DMA制御部は、前記リード制御回路による前記DMA転送要求で示されたデータのメモリリード要求の出力と、前記ライト転送制御回路によるDMAライト要求の出力とをパイプラインで処理することを特徴とする付記4記載のデータ処理装置。
(付記6) 前記メモリ制御部は、
前記送信側DMA制御部から前記メモリリード要求が出力されると、前記データ管理部で管理しているメモリからデータを読み出し、前記バッファに格納するデータリード回路と、
前記データを前記送信側DMA制御部から前記DMAライト要求が出力されると、前記バッファに格納された前記データを、前記バスを介して前記データ処理部内の指定されたデータ記憶領域にDMAライト転送を行うDMA転送回路と、を有し、
前記データリード回路と前記DMA転送回路とが互いに独立して動作することを特徴とする付記1記載のデータ処理装置。
(付記7) 前記メモリ制御部は、前記データリード回路による前記バッファへのデータの書き込みと、前記DMA転送回路による前記バッファに格納されたデータのDMAライト転送とをパイプラインで処理することを特徴とする付記6記載のデータ処理装置。
(付記8) バスを介して接続されたデータ処理部とデータ管理部との間でDMA転送を行うためのDMA転送方法において、
前記データ処理部のプロセッサから前記データ管理部が管理するデータのリード要求が出力されると、前記データ処理部と前記データ管理部とを接続する専用線を介して、前記DMA転送要求を前記データ処理部から前記データ管理部へ出力し、
前記データ管理部において、前記DMA転送要求に応じて、前記DMA転送要求で示されたデータを前記データ管理部で管理しているメモリから読み出してバッファに格納し、
前記データがバッファに格納されると前記バスの使用権利を獲得し、
前記バッファに格納された前記データを、前記バスを介して前記データ処理部内の指定されたデータ記憶領域に対してDMAライト転送を行う、
ことを特徴とするデータ処理方法。
本実施の形態の概略を示す図である。 第1の実施の形態LSIの構成例を示す図である。 メモリ部とデータ処理部との内部構成を示すブロック図である。 データ処理部からのリード要求の処理手順を示す図である。 第1の実施の形態における共有メモリからのリード処理手順を示すタイミングチャートである。 データの分割転送が行われる場合のタイミングチャートである。 第2の実施の形態の画像処理用LSIの構成例を示す図である。 メモリI/Fと画像処理エンジンとの内部構成を示すブロック図である。 転送時のデータ幅の半分のデータ長に分割されたデータを転送する場合の例を示す図である。 転送時のデータ幅の1.5倍のデータ長に分割されたデータを転送する場合の例を示す図である。 MEM−DMACの第1のシーケンサの処理を示すフローチャートである。 MEM−DMACの第2のシーケンサの処理を示すフローチャートである。 メモリ制御部の第1のシーケンサの処理を示すフローチャートである。 メモリ制御部の第2のシーケンサの処理を示すフローチャートである。 転送時のデータ幅の半分のデータ長に分割されたデータを転送する場合の動作を示すタイミングチャートである。 転送時のデータ幅の1.5倍のデータ長に分割されたデータを転送する場合の動作を示すタイミングチャートである。 転送時のデータ幅の5/4倍のデータ長に分割されたデータを転送する場合の動作を示すタイミングチャートである。 パイプライン処理を行った場合のタイミングチャートである。 PE−DMACからのリクエストをパイプライン化した場合のタイミングチャートである。 従来の画像処理システム構成例を示す図である。 従来のシステムにおけるリードアクセスのタイミングチャートである。
符号の説明
1 バス
2 データ処理部
2a プロセッサ
2b 受信側DMA制御部
3 データ管理部
3a 送信側DMA制御部
3b メモリ
3c メモリ制御部
3ca バッファ

Claims (5)

  1. バスを介して接続されたデータ処理部とデータ管理部との間でDMA転送を行うデータ処理装置において、
    前記データ処理部と前記データ記憶部とを接続し、DMA転送要求の通知に利用される専用線と、
    前記データ処理部内に設けられ、前記データ処理部のプロセッサから前記データ管理部が管理するデータのリード要求が出力されると、前記DMA転送要求を前記専用線を介して出力する受信側DMA制御部と、
    前記データ管理部内に設けられ、前記受信側DMA制御部から出力された前記DMA転送要求を前記専用線を介して受け取り、前記DMA転送要求で示されたデータのメモリリード要求を出力すると共に、前記データがバッファに格納されると前記バスの使用権利を獲得し、DMAライト要求を出力する送信側DMA制御部と、
    前記データ管理部内に設けられ、前記送信側DMA制御部から前記メモリリード要求が出力されると、前記データ管理部で管理しているメモリからデータを読み出し、前記バッファに格納すると共に、前記データを前記送信側DMA制御部から前記DMAライト要求が出力されると、前記バッファに格納された前記データを、前記バスを介して前記データ処理部内の指定されたデータ記憶領域に対してDMAライト転送を行うメモリ制御部と、
    を有することを特徴とするデータ処理装置。
  2. 前記メモリ制御部は、前記メモリリード要求で指定されたデータが、前記メモリ内の不連続のアドレスに記憶されている場合、前記メモリから読み出したデータを前記バッファの連続する記憶領域に格納し、前記バッファに格納された連続のデータを、前記バスで転送可能なデータ長に分割してDMAによりライト転送することを特徴とする請求項1記載のデータ処理装置。
  3. 前記メモリ制御部は、前記メモリに格納された画像データ中の矩形領域を指定した前記メモリリード要求を受け取ると、前記矩形領域をアドレスが連続する複数の長方形領域に分割し、前記長方形領域毎にデータを読み出して前記バッファ内の連続の記憶領域に格納し、前記バッファに格納された連続のデータを、前記バスで転送可能なデータ長に分割してDMAライト転送を行うことを特徴とする請求項1記載のデータ処理装置。
  4. 前記メモリ制御部は、
    前記送信側DMA制御部から前記メモリリード要求が出力されると、前記データ管理部で管理しているメモリからデータを読み出し、前記バッファに格納するデータリード回路と、
    前記データを前記送信側DMA制御部から前記DMAライト要求が出力されると、前記バッファに格納された前記データを、前記バスを介して前記データ処理部内の指定されたデータ記憶領域にDMAライト転送を行うDMA転送回路と、を有し、
    前記データリード回路と前記DMA転送回路とが互いに独立して動作することを特徴とする請求項1記載のデータ処理装置。
  5. 前記メモリ制御部は、前記データリード回路による前記バッファへのデータの書き込みと、前記DMA転送回路による前記バッファに格納されたデータのDMAライト転送とをパイプラインで処理することを特徴とする請求項4記載のデータ処理装置。
JP2005380609A 2005-12-29 2005-12-29 データ処理装置 Withdrawn JP2007183692A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005380609A JP2007183692A (ja) 2005-12-29 2005-12-29 データ処理装置
US11/397,804 US20070174506A1 (en) 2005-12-29 2006-04-05 Data processing apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005380609A JP2007183692A (ja) 2005-12-29 2005-12-29 データ処理装置

Publications (1)

Publication Number Publication Date
JP2007183692A true JP2007183692A (ja) 2007-07-19

Family

ID=38286911

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005380609A Withdrawn JP2007183692A (ja) 2005-12-29 2005-12-29 データ処理装置

Country Status (2)

Country Link
US (1) US20070174506A1 (ja)
JP (1) JP2007183692A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016134005A (ja) * 2015-01-20 2016-07-25 オリンパス株式会社 画像処理装置

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4893822B2 (ja) * 2007-03-20 2012-03-07 富士通株式会社 半導体集積回路および半導体メモリのアクセス制御方法
US8325633B2 (en) * 2007-04-26 2012-12-04 International Business Machines Corporation Remote direct memory access
US8959307B1 (en) 2007-11-16 2015-02-17 Bitmicro Networks, Inc. Reduced latency memory read transactions in storage devices
US8281049B2 (en) * 2008-12-19 2012-10-02 Cisco Technology, Inc. Host-daughtercard configuration with double data rate bus
JP2011028343A (ja) * 2009-07-22 2011-02-10 Fujitsu Ltd 演算処理装置、およびデータ転送方法
US9135190B1 (en) * 2009-09-04 2015-09-15 Bitmicro Networks, Inc. Multi-profile memory controller for computing devices
US8665601B1 (en) 2009-09-04 2014-03-04 Bitmicro Networks, Inc. Solid state drive with improved enclosure assembly
US8447908B2 (en) 2009-09-07 2013-05-21 Bitmicro Networks, Inc. Multilevel memory bus system for solid-state mass storage
US8560804B2 (en) * 2009-09-14 2013-10-15 Bitmicro Networks, Inc. Reducing erase cycles in an electronic storage device that uses at least one erase-limited memory device
US9372755B1 (en) 2011-10-05 2016-06-21 Bitmicro Networks, Inc. Adaptive power cycle sequences for data recovery
US9043669B1 (en) 2012-05-18 2015-05-26 Bitmicro Networks, Inc. Distributed ECC engine for storage media
US9552619B2 (en) * 2012-08-08 2017-01-24 Megachips Corporation Image processing apparatus and image processing interface circuit
US9423457B2 (en) 2013-03-14 2016-08-23 Bitmicro Networks, Inc. Self-test solution for delay locked loops
US9672178B1 (en) 2013-03-15 2017-06-06 Bitmicro Networks, Inc. Bit-mapped DMA transfer with dependency table configured to monitor status so that a processor is not rendered as a bottleneck in a system
US10489318B1 (en) 2013-03-15 2019-11-26 Bitmicro Networks, Inc. Scatter-gather approach for parallel data transfer in a mass storage system
US9501436B1 (en) 2013-03-15 2016-11-22 Bitmicro Networks, Inc. Multi-level message passing descriptor
US9842024B1 (en) 2013-03-15 2017-12-12 Bitmicro Networks, Inc. Flash electronic disk with RAID controller
US9971524B1 (en) 2013-03-15 2018-05-15 Bitmicro Networks, Inc. Scatter-gather approach for parallel data transfer in a mass storage system
US9400617B2 (en) 2013-03-15 2016-07-26 Bitmicro Networks, Inc. Hardware-assisted DMA transfer with dependency table configured to permit-in parallel-data drain from cache without processor intervention when filled or drained
US9430386B2 (en) 2013-03-15 2016-08-30 Bitmicro Networks, Inc. Multi-leveled cache management in a hybrid storage system
US9798688B1 (en) 2013-03-15 2017-10-24 Bitmicro Networks, Inc. Bus arbitration with routing and failover mechanism
US9916213B1 (en) 2013-03-15 2018-03-13 Bitmicro Networks, Inc. Bus arbitration with routing and failover mechanism
US9720603B1 (en) 2013-03-15 2017-08-01 Bitmicro Networks, Inc. IOC to IOC distributed caching architecture
US9734067B1 (en) 2013-03-15 2017-08-15 Bitmicro Networks, Inc. Write buffering
US10120694B2 (en) 2013-03-15 2018-11-06 Bitmicro Networks, Inc. Embedded system boot from a storage device
US9875205B1 (en) 2013-03-15 2018-01-23 Bitmicro Networks, Inc. Network of memory systems
US10025736B1 (en) 2014-04-17 2018-07-17 Bitmicro Networks, Inc. Exchange message protocol message transmission between two devices
US9811461B1 (en) 2014-04-17 2017-11-07 Bitmicro Networks, Inc. Data storage system
US9952991B1 (en) 2014-04-17 2018-04-24 Bitmicro Networks, Inc. Systematic method on queuing of descriptors for multiple flash intelligent DMA engine operation
US10055150B1 (en) 2014-04-17 2018-08-21 Bitmicro Networks, Inc. Writing volatile scattered memory metadata to flash device
US10078604B1 (en) 2014-04-17 2018-09-18 Bitmicro Networks, Inc. Interrupt coalescing
US10042792B1 (en) 2014-04-17 2018-08-07 Bitmicro Networks, Inc. Method for transferring and receiving frames across PCI express bus for SSD device
US10552050B1 (en) 2017-04-07 2020-02-04 Bitmicro Llc Multi-dimensional computer storage system

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63159961A (ja) * 1986-12-24 1988-07-02 Toshiba Corp ダイレクトメモリアクセス転送制御装置
JPH02101560A (ja) * 1988-10-11 1990-04-13 Nec Corp バスインタフェース装置
JPH04286289A (ja) * 1991-03-14 1992-10-12 Sony Corp データのデコード方法及びそのデコーダ回路
JPH06332848A (ja) * 1993-05-19 1994-12-02 Fujitsu Ltd データ転送方式
JPH09106384A (ja) * 1995-10-12 1997-04-22 Fujitsu Ltd データ転送システム
JP2006072832A (ja) * 2004-09-03 2006-03-16 Nec Access Technica Ltd 画像処理システム

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5974480A (en) * 1996-10-18 1999-10-26 Samsung Electronics Co., Ltd. DMA controller which receives size data for each DMA channel
US6662258B1 (en) * 2000-08-22 2003-12-09 Integrated Device Technology, Inc. Fly-by support module for a peripheral bus
JP2003280982A (ja) * 2002-03-20 2003-10-03 Seiko Epson Corp 多次元メモリのデータ転送装置及び多次元メモリのデータ転送プログラム、並びに多次元メモリのデータ転送方法
KR100449721B1 (ko) * 2002-05-20 2004-09-22 삼성전자주식회사 서로 다른 데이터 버스 폭을 갖는 장치들을 위한인터페이스 및 이를 이용한 데이터 전송방법
JP3886460B2 (ja) * 2003-01-31 2007-02-28 富士通株式会社 複合型記憶装置及びそのカード用基板
US8001294B2 (en) * 2004-09-28 2011-08-16 Sony Computer Entertainment Inc. Methods and apparatus for providing a compressed network in a multi-processing system
JP4390694B2 (ja) * 2004-12-24 2009-12-24 富士通株式会社 Dma回路及びこれを用いたディスクアレイ装置
US20070076963A1 (en) * 2005-09-30 2007-04-05 Wellsyn Technology, Inc. Image transmission mechanism and method for implementing the same

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS63159961A (ja) * 1986-12-24 1988-07-02 Toshiba Corp ダイレクトメモリアクセス転送制御装置
JPH02101560A (ja) * 1988-10-11 1990-04-13 Nec Corp バスインタフェース装置
JPH04286289A (ja) * 1991-03-14 1992-10-12 Sony Corp データのデコード方法及びそのデコーダ回路
JPH06332848A (ja) * 1993-05-19 1994-12-02 Fujitsu Ltd データ転送方式
JPH09106384A (ja) * 1995-10-12 1997-04-22 Fujitsu Ltd データ転送システム
JP2006072832A (ja) * 2004-09-03 2006-03-16 Nec Access Technica Ltd 画像処理システム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016134005A (ja) * 2015-01-20 2016-07-25 オリンパス株式会社 画像処理装置

Also Published As

Publication number Publication date
US20070174506A1 (en) 2007-07-26

Similar Documents

Publication Publication Date Title
JP2007183692A (ja) データ処理装置
JP5787629B2 (ja) マシンビジョン用マルチプロセッサシステムオンチップ
JP4439491B2 (ja) マルチグラフィックスプロセッサシステム、グラフィックスプロセッサおよびデータ転送方法
JP4805351B2 (ja) Dramの並列処理を向上するシステム及び方法
JP2012038293A5 (ja)
US7581054B2 (en) Data processing system
US6651148B2 (en) High-speed memory controller for pipelining memory read transactions
US8504743B2 (en) Information processing system and data transfer method
JP2006227836A (ja) データ転送システムおよびデータ転送方法
US7409486B2 (en) Storage system, and storage control method
US8478946B2 (en) Method and system for local data sharing
JP5911548B1 (ja) 共有メモリへのアクセス要求をスケジューリングするための装置、方法およびコンピュータプログラム
US7913013B2 (en) Semiconductor integrated circuit
JP2007018222A (ja) メモリアクセス制御回路
JP4902640B2 (ja) 集積回路、及び集積回路システム
JP2006313479A (ja) 半導体集積回路装置及びデータ転送方法
TWI553483B (zh) 處理器及存取記憶體的方法
JP6294732B2 (ja) データ転送制御装置及びメモリ内蔵装置
JP7177948B2 (ja) 情報処理装置、及び情報処理方法
KR102334473B1 (ko) 적응형 딥러닝 가속 장치 및 방법
JP2010129029A (ja) メモリアクセス制御装置およびメモリアクセス制御方法
JP4431492B2 (ja) 複数のコヒーレンシー・グラニュールをサポートするデータ転送ユニット
US6785795B1 (en) Data processing device for use in cooperation with a memory
EP2667308A1 (en) Data writing control device, data writing control method, and information processing device
JP2006195810A (ja) メモリコントローラおよび高速データ転送方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080416

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20101222

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110111

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110309

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20110524