JP2011070372A - Dma transmission control device - Google Patents
Dma transmission control device Download PDFInfo
- Publication number
- JP2011070372A JP2011070372A JP2009220526A JP2009220526A JP2011070372A JP 2011070372 A JP2011070372 A JP 2011070372A JP 2009220526 A JP2009220526 A JP 2009220526A JP 2009220526 A JP2009220526 A JP 2009220526A JP 2011070372 A JP2011070372 A JP 2011070372A
- Authority
- JP
- Japan
- Prior art keywords
- transfer
- page
- dma
- control device
- data
- 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.)
- Pending
Links
Images
Landscapes
- Bus Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
Description
本発明はDMA(Direct Memory Access)転送制御装置に関し、特にスキャッタギャザ(Scatter Gather)DMA転送制御装置に関する。 The present invention relates to a DMA (Direct Memory Access) transfer control device, and more particularly to a scatter gather DMA transfer control device.
メインメモリと周辺機器との間でのデータ転送では、データの受け渡しをCPUの管理下で行うのが一般的である。しかし、データの受け渡しを常にCPUを介して行おうとすると、CPUの負荷が重くなるため、データ転送に時間を要することになる。
そこで、高速な機器とのデータの受け渡しを行う際には、CPUを介さずに周辺機器のインターフェース装置に制御権を渡して直接メインメモリとのデータの受け渡しを行う方式、即ちDMA転送が用いられる。
In data transfer between a main memory and a peripheral device, data is generally transferred under the control of a CPU. However, if data is always exchanged via the CPU, the load on the CPU increases and data transfer takes time.
Therefore, when transferring data with a high-speed device, a method of transferring data directly to the main memory by passing control right to the interface device of the peripheral device without using the CPU, that is, DMA transfer is used. .
このDMA転送において、DMA転送制御装置内に転送内容を示す転送情報(ディスクリプタ)を複数格納しておき、この複数の転送情報に基づいて連続的にデータ転送を行うのがチェーンDMA転送である(特許文献1)。また、このチェーンDMA転送の一種としてスキャッタギャザDMA転送が知られている。 In this DMA transfer, a plurality of pieces of transfer information (descriptors) indicating transfer contents are stored in the DMA transfer control device, and data transfer is continuously performed based on the plurality of pieces of transfer information in the chain DMA transfer ( Patent Document 1). Also, scatter gather DMA transfer is known as a kind of chain DMA transfer.
スキャッタギャザDMA転送は図1に示すように、メインメモリ100上に複数の転送情報を格納しておく転送情報領域101を持つ一方、DMA転送制御装置12がメインメモリ100上の転送情報領域101からバス13を介して転送情報を取得し、この取得した転送情報に基づいてDMA転送制御装置12にDMA開始命令を発行し、バス13を介してメインメモリ100にデータを転送し、当該メモリ100内のデータ領域102に書き込む、という動作を繰り返すことによってデータ転送を行うものである。
As shown in FIG. 1, the scatter gather DMA transfer has a transfer information area 101 for storing a plurality of transfer information on the main memory 100, while the DMA
ここで、データ領域103とは、malloc等の一般的な領域確保の関数でユーザー空間から確保されたメモリ領域であるとする。
Windows(登録商標)やLinuxのように、仮想記憶方式を採用するOS環境下では、このメモリ領域は、仮想アドレス空間では連続アドレスにマッピングされるが、物理アドレス空間ではページ単位で離散的にマッピングされる。
ページとは、仮想アドレス空間にマッピングできる物理メモリの最小単位のことをいうが、今日では4Kバイトのものが多い。
Here, it is assumed that the data area 103 is a memory area secured from the user space by a general area securing function such as malloc.
In an OS environment that employs a virtual storage system such as Windows (registered trademark) or Linux, this memory area is mapped to continuous addresses in the virtual address space, but discretely mapped in units of pages in the physical address space. Is done.
A page is the smallest unit of physical memory that can be mapped to a virtual address space, but today there are many 4K bytes.
例えば、mallocで20Kバイトのメモリ領域を確保した場合、その先頭アドレスの下位12ビットが0、つまり、先頭アドレスが4Kバイトのページ境界に割り当てられることは稀であり、大抵の場合はページの途中アドレスに割り当てられ、合計6ページ分のページをまたぐことになる。 For example, if a memory area of 20 Kbytes is secured with malloc, the lower 12 bits of the head address is 0, that is, the head address is rarely assigned to a page boundary of 4 Kbytes. In most cases, the middle of the page It is assigned to an address and spans a total of 6 pages.
一方、DMA転送制御装置12がメインメモリ100にアクセスするには、転送先アドレスとして、メインメモリ100の物理アドレスを指定する必要がある。
図2の例では、1ページ目の領域にデータ転送するために、先頭物理アドレス0x12792048、転送サイズ0x0FB8をセットしてDMA転送制御装置にDMA開始命令を発行し、1ページ目の転送が完了したら、2ページ目の転送条件である先頭物理アドレス0x12B94000、転送サイズ0x1000をセットしてDMA開始命令を発行し、2ページ目の転送が完了したら、次ページの転送条件をセットして転送を開始して完了を待つ。最終的に6ページ目の転送条件をセットしてDMA転送を開始し、この転送が完了した時点で全データの転送が完了したことになる。
On the other hand, in order for the DMA
In the example of FIG. 2, in order to transfer data to the area of the first page, the start physical address 0x12792048 and the transfer size 0x0FB8 are set, a DMA start command is issued to the DMA transfer controller, and the transfer of the first page is completed. Set the first physical address 0x12B94000 and transfer size 0x1000, which are the transfer conditions for the second page, issue a DMA start command, and when the transfer for the second page is complete, set the transfer conditions for the next page and start the transfer And wait for completion. Finally, the transfer condition for the sixth page is set and DMA transfer is started. When this transfer is completed, the transfer of all data is completed.
ここで問題になるのは、DMA転送制御装置12のページ単位の転送完了を知るための手段と、DMA転送制御装置12に次ページの転送情報をどのようなタイミングで与えるか、である。
The problem here is the means for knowing the completion of transfer in units of pages of the DMA
即ち、DMA転送制御装置12のページ単位の転送完了を一定周期で監視するポーリング手段を適用すると、その分CPUに負荷がかかるため、CPUを介さずにデータ転送を行うことでCPUにかかる負荷を軽減するというDMA転送の利点を享受できなくなるばかりでなく、リアルタイム性に乏しいポーリングでは、DMA転送制御装置12が実際にページ単位の転送を完了してからCPUがそれを認識するまでにはタイムラグが発生し、このタイムラグに伴い、次ページの転送情報をDMA転送制御装置12にセットするタイミングも遅れ、さらに、次ページの転送開始命令を発行するタイミングも遅れてしまう。
In other words, if the polling means for monitoring the completion of transfer in units of pages of the DMA
そこで、DMA転送制御装置12のページ単位の転送完了で割り込みを発生させ、デバイスドライバの割り込みルーチン内で次ページの転送情報をDMA転送制御装置12に書き込む方法もあるが、例えばバス13がPCIバスのように割り込み共有型のバスである場合、割り込みが発生したとしてもその発生源が複数箇所の可能性があるため、割り込み線を共有している全てのハードウェアについて割り込み発生の有無を調べなければならず、転送速度が重要視されるアプリケーションにおいては最適な方法とはいえない。
Therefore, there is a method in which an interrupt is generated upon completion of transfer in units of pages of the DMA
本発明は、上記の問題を鑑みてなされたものであり、その課題とするところは、ユーザー空間で確保されたメインメモリ領域であって、物理アドレス空間においては離散的にマッピングされるメインメモリ領域に高速に取り溢しなくデータを転送することにある。 The present invention has been made in view of the above problems, and the problem is that the main memory area secured in the user space is a main memory area that is discretely mapped in the physical address space. It is to transfer data at high speed without overflowing.
また、DMA転送制御装置から転送するデータは、DMA転送制御装置が備える同期書き込み、同期読み出し方式のメモリに予め格納されているものとして、このデータを、PCIバスを介してメインメモリにDMA転送する際のバスプロトコルについても本発明の課題とする。 Further, the data transferred from the DMA transfer control device is stored in advance in a synchronous write / synchronous read type memory provided in the DMA transfer control device, and this data is DMA transferred to the main memory via the PCI bus. The bus protocol at the time is also an object of the present invention.
上記の課題を解決するための手段として、請求項1に記載の発明は、仮想記憶方式を採用するOS環境下で動作するDMA転送制御装置であって、ユーザー空間でデータの転送先となるメモリ領域を確保した時点でその領域に対応する物理アドレスをカーネル空間で取得する手段と、前記DMA転送制御装置が具備するメモリに予め総ページ数、各ページの先頭物理アドレス、各ページの転送サイズ情報を前記データの転送に必要な転送情報として記録してからDMA転送を開始する手段とを備えることを特徴とする。
これにより、DMA転送制御装置はページ単位の転送が完了したタイミングで残りページ数をデクリメントするとともに、次ページの転送情報をDMA転送制御装置自身が備えるメモリから取得できるので、CPUがページ単位の転送完了を認識する必要はなく、高速なデータ転送が可能となる。
As a means for solving the above-mentioned problem, the invention according to
As a result, the DMA transfer control device decrements the number of remaining pages at the timing when the transfer in page units is completed, and the transfer information of the next page can be acquired from the memory included in the DMA transfer control device itself, so that the CPU can transfer in page units There is no need to recognize completion, and high-speed data transfer is possible.
請求項2に記載の発明は、同期読み出しメモリを有し、該同期読み出しメモリに格納されているデータをPCIバスを介してメインメモリに転送するDMA転送制御装置であって、前記PCIバスのターゲットレディ信号(TRDY#)がアサートされた次の1クロックだけ前記PCIバスのイニシエータレディ信号(IRDY#)をディアサートする手段と、前記イニシエータレディ信号(IRDY#)をディアサートしている1クロックの間に前記同期読み出しメモリのアドレスを確定しておく手段とを備えることを特徴とする。
これにより、アドレスを指定しても次のクロックが来ないと当該アドレスに格納されているデータを取り出すことができない同期読み出しメモリに格納されているデータを取り溢すことなくPCIバスを介してメインメモリに転送することができる。
請求項3に記載の発明は、前記データの前記メインメモリへの転送は、前記DMA転送制御装置がイニシエータデバイスとして動作し、かつ、前記メインメモリを含むチップセットがターゲットデバイスとして動作することでなされることを特徴とする。
The invention according to
As a result, even if an address is specified, the data stored in the address cannot be retrieved unless the next clock arrives. Can be transferred to memory.
According to a third aspect of the present invention, the data is transferred to the main memory by the DMA transfer control device operating as an initiator device and a chipset including the main memory operating as a target device. It is characterized by that.
本発明によれば、同期読み出しメモリに格納されているデータを取り溢しなく高速にメインメモリに転送することができる。 According to the present invention, the data stored in the synchronous read memory can be transferred to the main memory at high speed without overflowing.
以下、本発明の実施例を説明する。
図3は、本発明に係るDMA転送制御装置の構成例を示す図である。
DMA転送制御装置300は、ターゲットシーケンサ301と、レジスタインターフェース302(コンフィグレーションレジスタ3021とDMAコントロール/ステータスレジスタ3022を有する)と、イニシエータシーケンサ303と、ディスクリプタ格納メモリ304と、外部データ格納メモリ305と、パリティチェッカ/ジェネレータ306とで構成されており、PCIバス310を介して、チップセット320内のI/Oコントロールハブ(ICH)3202に接続されている。
チップセット320は、高速信号を授受するためのメモリコントロールハブ(MCH)3201と、ICH3202とで構成されており、MCH3201は、専用バスを介して、CPU330と、メインメモリ340に接続される。
Examples of the present invention will be described below.
FIG. 3 is a diagram showing a configuration example of the DMA transfer control device according to the present invention.
The DMA transfer control device 300 includes a
The chip set 320 includes a memory control hub (MCH) 3201 for transmitting and receiving high-speed signals and an ICH 3202, and the MCH 3201 is connected to the
次に、DMA転送制御装置300の構成要素について説明する。
ターゲットシーケンサ301は、CPU330がPCIバス310の制御権を有するイニシエータデバイス、DMA転送制御装置300がターゲットデバイスとして動作するためのステートマシンであって、イニシエータが発行するコンフィグレーションサイクルやメモリサイクルに応対する。
Next, components of the DMA transfer control device 300 will be described.
The
レジスタインターフェース302は、コンフィグレーションレジスタ3021と、DMAコントロール/ステータスレジスタ3022とで構成されている。
コンフィグレーションレジスタ3021は、DMA転送制御装置300が使用するメモリアドレス、割り込み線等のシステムハードウェアリソースを決定したり、PCIエージェントとしての各種機能のイネーブル/ディセーブルを決定したり、PCIエージェントとしての現在のステータスを示したり、デバイス固有の特性についての初期設定を行なったりする。
DMAコントロール/ステータスレジスタ3022は、DMA転送制御装置300に対して、DMA転送開始のコントロールをしたり、DMA転送制御装置300のDMA転送完了ステータスを示したり、CPU330から、PCIバス310を介して渡されるDMA転送情報を後述するディスクリプタ格納メモリ304に格納したりする。
The
The
The DMA control /
イニシエータシーケンサ303は、DMA転送制御装置300がPCIバス310の制御権を有するイニシエータデバイスとして動作するためのステートマシンである。詳細については後述する。
The
ディスクリプタ格納メモリ304は、DMA転送制御装置300がハードマクロとして備える同期書き込み/同期読み出し方式のメモリであって、データ転送先となるメインメモリの先頭物理アドレス、および、転送サイズについての情報を格納する。
本実施の形態では、ディスクリプタ格納メモリ304が、特許請求の範囲のDMA転送制御装置が具備するメモリを構成している。
The
In this embodiment, the
外部データ格納メモリ305は、DMA転送制御装置300がハードマクロとして備える同期書き込み/同期読み出し方式のメモリであって、外部からのデータをバッファリングし、イニシエータシーケンサ303から出力されるアドレスに基づき、バッファリングしてあるデータをPCIバス310に出力する。なお、外部データ格納メモリ305のデータビット幅は32ビットとし、1つのアドレスに4バイトのデータを格納することができる。
本実施の形態では、外部データ格納メモリ305が、特許請求の範囲の同期読み出しメモリを構成している。
The external
In the present embodiment, the external
ここで、同期書き込み/同期読み出し方式のメモリについて、図4を用いて説明する。
同期書き込みとは、図4(a)に示すように、クロックの立ち上がりにおけるアドレスバスの値をアドレスとして、このアドレスに、同クロックの立ち上がりにおけるデータバスの値がデータとして書き込まれる。
同期読み出しとは、図4(b)に示すように、アドレスを指定して、指定したアドレスのデータを読み出すことができるのは、次のクロックが来てからのものをいう。
なお、非同期読み出しとは、図4(c)に示すように、アドレスを指定して、次のクロックが来る前に指定したアドレスのデータを読み出すことができるものである。
したがって、あるタイミングで同期読み出し方式のメモリからデータを読み出す場合には、少なくともその1クロック前のタイミングで当該データが格納されているアドレスを確定しておく必要がある。
Here, a synchronous write / synchronous read type memory will be described with reference to FIG.
In the synchronous writing, as shown in FIG. 4A, the value of the address bus at the rising edge of the clock is used as an address, and the value of the data bus at the rising edge of the clock is written to this address as data.
As shown in FIG. 4B, the synchronous reading means that the address can be read and the data at the specified address can be read after the next clock arrives.
As shown in FIG. 4 (c), asynchronous reading is a method in which the address is designated and the data at the designated address can be read before the next clock arrives.
Therefore, when data is read from a synchronous read type memory at a certain timing, it is necessary to determine an address at which the data is stored at least one clock before the data.
パリティチェッカ/ジェネレータ306は、DMA転送制御装置300がターゲットデバイスとして振る舞う際のライトサイクル応答時、または、イニシエータデバイスとして振る舞う際のリードサイクル応答時、つまり、DMA転送制御装置300が受信側となる場合に送信側が生成するパリティをチェックし、パリティ異常検出時にはコンフィグレーションレジスタ3021にその旨を書き込むと共に、PERR#(パリティエラー信号)をアサートする一方、DMA転送制御装置300がターゲットデバイスとして振る舞う際のリードサイクル応答時、または、イニシエータデバイスとして振る舞う際のライトサイクル応答時、つまり、DMA転送制御装置300が送信側となる場合にパリティを生成してPAR(パリティ信号)として出力する。
The parity checker /
次に、DMA転送制御装置300の動作について、図5に示すフローチャートを用いて説明する。 Next, the operation of the DMA transfer control device 300 will be described using the flowchart shown in FIG.
ステップS1では、mallocでデータ転送先となるメインメモリ領域を確保する。具体例を示すため、ここでは20Kバイトの領域を確保したものとする。 In step S1, a main memory area as a data transfer destination is secured by malloc. In order to show a specific example, it is assumed here that an area of 20 Kbytes is secured.
ステップS2では、ステップS1で確保した領域がスワップアウトされないようにデバイスドライバに要求する。つまり、カーネル空間においてノンページドプールメモリを割り当てる。 In step S2, the device driver is requested not to swap out the area secured in step S1. That is, non-paged pool memory is allocated in the kernel space.
ステップS3では、ステップS1で確保した領域に対応する物理アドレスを取得する。物理アドレスはユーザー空間では取得できないため、カーネル空間で動作するデバイスドライバにアクセスすることによって取得される。 In step S3, a physical address corresponding to the area secured in step S1 is acquired. Since the physical address cannot be acquired in the user space, it is acquired by accessing a device driver operating in the kernel space.
ステップS4では、ステップS3で取得した物理アドレスに基づいて、ディスクリプタを生成する。このステップで、総ページ数、各ページの先頭物理アドレス、各ページの転送サイズ情報を含む図2に示すようなディスクリプタ(転送情報)が生成される。
図中の数値は発明者のテスト環境において実際に得られた例である。
この例では、ユーザー空間で確保したメモリ領域の先頭仮想アドレスが0x00900048であり、ページ境界から0x48だけオフセットしているため、1ページ目における転送サイズは4Kバイト(0x1000)から0x48を差し引いた0x0FB8となる。続く2ページ目から5ページ目までは、転送サイズは4Kバイト(0x1000)であり、最後の6ページ目における転送サイズは0x48となる。
また、各ページの先頭仮想アドレス0x00900048、0x00901000、0x00902000、0x00903000、0x00904000、0x00905000に対応する先頭物理アドレスとして、0x12792048、0x12B94000、0x12C55000、0x12496000、0x12621000、0x12922000が得られた。
In step S4, a descriptor is generated based on the physical address acquired in step S3. In this step, a descriptor (transfer information) as shown in FIG. 2 including the total number of pages, the top physical address of each page, and transfer size information of each page is generated.
The numerical values in the figure are examples actually obtained in the inventor's test environment.
In this example, since the top virtual address of the memory area secured in the user space is 0x00900048 and offset by 0x48 from the page boundary, the transfer size on the first page is 0x0FB8 obtained by subtracting 0x48 from 4K bytes (0x1000). Become. From the second page to the fifth page, the transfer size is 4K bytes (0x1000), and the transfer size in the final sixth page is 0x48.
In addition, 0x12727948, 0x12B94000, 0x12C55000, 0x122966000, 0x12621000, and 0x12922000 were obtained as the top physical addresses corresponding to the top virtual addresses 0x00900048, 0x00901000, 0x00902000, 0x00903000, 0x00904000, and 0x00905000 of each page.
ステップS5では、ステップS4で生成したディスクリプタをDMA制御装置300のディスクリプタ格納メモリ304に書き込み、また、総ページ数をDMAコントロール/ステータスレジスタ3022に書き込む。
このとき、PCIバス310の制御権はCPU330が有しており、DMA制御装置300はターゲットデバイスとして振る舞う。即ち、CPU330がイニシエータデバイスとして発行するメモリライトサイクルに対し、ターゲットシーケンサ301が応答することになる。
In step S5, the descriptor generated in step S4 is written in the
At this time, the
ステップS6では、ステップS5でCPU330により発行されたメモリライトサイクルにターゲットシーケンサ301が応答することにより、図2に示したディスクリプタ(転送情報)がディスクリプタ格納メモリ304に書き込まれ、また、総ページ数がDMAコントロール/ステータスレジスタ3022に書き込まれる。
In step S6, when the
ステップS7では、CPU330がDMAコントロール/ステータスレジスタ3022にDMA開始命令を書き込む。
In step S 7, the
ステップS8において、イニシエータシーケンサ303に対してDMA開始命令が発行され、DMA制御装置300はPCIバス310の制御権を要求、獲得してイニシエータデバイスとして振る舞うようになる。
図5のステップS8からステップS15までが、本発明のDMA転送制御装置のメインとなる部分である。そこで以下、図5のステップS8からステップS15までの詳細について、図6のタイミングチャートを用いて説明する。
In step S8, a DMA start command is issued to the
Steps S8 to S15 in FIG. 5 are the main part of the DMA transfer control device of the present invention. Therefore, the details from step S8 to step S15 in FIG. 5 will be described below with reference to the timing chart in FIG.
まず、図6(a)のクロックaでDMA開始命令を示すDMA_STARTがアサートされる。 First, DMA_START indicating a DMA start instruction is asserted at clock a in FIG.
クロックbでは、PCIバス310の制御権を要求するためにREQ#(リクエスト信号)をアサートすると共に、外部データ格納メモリ305に対してアドレス(MEM_ADDR)0x0番地を、残り転送サイズとして1ページ目の転送サイズである0xFB8を、残りページとして総ページ数である0x6をセットする。また、DMA_STARTをディアサートする。
At clock b, REQ # (request signal) is asserted to request control of the PCI bus 310, and the address (MEM_ADDR) address 0x0 is set to the external
外部データ格納メモリ305の0x0番地のデータは、クロックc以降から出力される。
The data at address 0x0 in the external
クロックdでは、バスアービタによってGNT#(グラント信号)がアサートされ(バスの使用が許可され)、DMA制御装置300はPCIバス310の制御権を獲得する。 At clock d, GNT # (grant signal) is asserted by the bus arbiter (use of the bus is permitted), and the DMA controller 300 acquires control of the PCI bus 310.
クロックeでは、既にGNT#がアサートされているので、PCIバス310の制御権を要求するREQ#をディアサートする。
また、1ページ目のアドレスフェーズを発行するために、FRAME#(フレーム信号)をアサートすると共に、ADバスに1ページ目の先頭物理アドレス0x12792048を出力し、C/BE#にメモリライトコマンド0x7を出力する。
Since GNT # is already asserted at clock e, REQ # requesting the control right of PCI bus 310 is deasserted.
In order to issue the address phase of the first page, FRAME # (frame signal) is asserted, the first physical address 0x12792048 of the first page is output to the AD bus, and the memory write command 0x7 is output to C / BE #. Output.
クロックfでは、イニシエータ(DMA制御装置300)のデータ転送準備は整っているため、IRDY#(イニシエータレディ信号)をアサートすると共に、外部データ格納メモリ305の0x0番地から読み出したデータD(0)をADバスに出力する。
At clock f, since the initiator (DMA controller 300) is ready for data transfer, IRDY # (initiator ready signal) is asserted, and data D (0) read from address 0x0 in the external
クロックgでは、クロックfでADバスに出力したアドレスをデコードして自分が選択されていることを認識したターゲットデバイス(つまり、チップセット320)がDEVSEL#(デバイスセレクション信号)をアサートする。 At the clock g, the target device (that is, the chipset 320) that recognizes that it has selected by decoding the address output to the AD bus at the clock f asserts DEVSEL # (device selection signal).
クロックhでは、データの受信準備が完了したターゲットデバイスがTRDY#(ターゲットレディ信号)をアサートする。 At clock h, the target device that is ready to receive data asserts TRDY # (target ready signal).
そして、クロックiにおいて初めてIRDY#とTRDY#が共にアサートされてデータ転送が成立し、ADバスのデータD(0)がターゲットデバイスに渡される。 Then, IRDY # and TRDY # are both asserted for the first time at clock i to establish data transfer, and AD bus data D (0) is passed to the target device.
続くクロックjのタイミングで外部データ格納メモリ305のアドレス0x1番地に格納されているデータD(1)をターゲットデバイスに渡したいのであるが、外部データ格納メモリ305のアドレス0x1番地のデータを読み出すためには、クロックjよりも前のタイミングでアドレス0x1を確定しておく必要がある。
しかし、イニシエータであるDMA制御装置300としては、ターゲットデバイスがデータの受信準備を完了するタイミングを前もって知ることは不可能である。ターゲットデバイスが常にクロックhのタイミングでデータの受信準備を完了するとは限らない。したがって、クロックjよりも前のタイミングでアドレス0x1を確定しておくことも不可能である。
I want to pass the data D (1) stored at the address 0x1 of the external
However, it is impossible for the DMA controller 300 as an initiator to know in advance the timing at which the target device completes preparation for receiving data. The target device does not always complete preparations for receiving data at the timing of the clock h. Therefore, it is impossible to determine the address 0x1 at a timing before the clock j.
そこで、クロックiでIRDY#をディアサートしてデータ転送が成立しないようにする一方で、外部データ格納メモリ305のアドレス0x1番地を指定する。
Therefore, IRDY # is deasserted at clock i to prevent data transfer, and address 0x1 of external
すると、クロックjのタイミングでアドレス0x1が確定するので、クロックkのタイミングで外部データ格納メモリ305の0x1番地に格納されたデータD(1)が読み出し可能となる。
Then, since the address 0x1 is determined at the timing of the clock j, the data D (1) stored at the address 0x1 of the external
よって、クロックiでディアサートしたIRDY#を、クロックjで再びアサートすることで、クロックkのタイミングにてデータD(1)をADバスに出力することができる。
つまり、TRDY#が初めてアサートされた次の1クロック分だけIRDY#をディアサートしておくことによって、同期読み出し方式の外部データ格納メモリ305に格納されているデータを適切なタイミングでADバスに出力できるようになる。
Therefore, data D (1) can be output to the AD bus at the timing of clock k by reasserting IRDY # deasserted at clock i at clock j.
In other words, by deasserting IRDY # for the next one clock after TRDY # is asserted for the first time, the data stored in the external
また、イニシエータシーケンサ303が、外部データ格納メモリ305のアドレスMEM_ADDRをインクリメントする条件は、FRAME#とTRDY#がアサートされていることとすればよい。
The condition for the
さらに、残り転送サイズREMAIN_SIZEを(1回当たりのデータ転送容量である)4バイトずつデクリメントするための条件としては、IRDY#とTRDY#がアサートされていることとすればよい。 Further, as a condition for decrementing the remaining transfer size REMAIN_SIZE by 4 bytes (which is a data transfer capacity per time), IRDY # and TRDY # may be asserted.
そして、クロックoでは、次のクロックpでデータフェーズが終了するのでFRAME#をディアサートする。次のクロックpでデータフェーズが終了することは、残り転送サイズREMAIN_SIZEが8になっていることでわかる。 At clock o, since the data phase ends at the next clock p, FRAME # is deasserted. The end of the data phase at the next clock p can be seen from the fact that the remaining transfer size REMAIN_SIZE is 8.
クロックpでは、FRAME#をハイインピーダンスにし、IRDY#をディアサートする。ターゲットデバイスにより、DEVSEL#、TRDY#もディアサートされ、データフェーズが完了する。
つまり、1ページ目の転送が完了するので、次のページの転送情報をディスクリプタ格納メモリ304から要求するため、NEXT_PAGEをアサートする。
もちろん、残りページ数REMAIN_PAGEが1より大きいことをNEXT_PAGEをアサートするための条件に含む。
さらに、ディスクリプタ格納メモリ304の、次ページの転送情報が格納されているアドレスを指定しておく。これにより、次のクロックqでアドレスが確定し、その次のクロックrから次ページの転送情報を読み出すことが可能となる。
なお、ここでは、FRAME#がディアサートされているので外部データ格納メモリ305のアドレスMEM_ADDRはインクリメントしない(0x3EEのまま)。
At clock p, FRAME # is set to high impedance and IRDY # is deasserted. The target device also deasserts DEVSEL # and TRDY #, completing the data phase.
That is, since the transfer of the first page is completed, NEXT_PAGE is asserted in order to request transfer information of the next page from the
Of course, the condition for asserting NEXT_PAGE includes that the number of remaining pages REMAIN_PAGE is greater than one.
Further, an address in the
Here, since FRAME # is deasserted, the address MEM_ADDR of the external
クロックqでは、IRDY#をハイインピーダンスにし、NEXT_PAGEをディアサートする。 At clock q, IRDY # is set to high impedance, and NEXT_PAGE is deasserted.
クロックrでは、NEXT_PAGEのアサート、つまり、全ページ分のDMA転送が完了していないことを認識し、ディスクリプタ格納メモリ304から読み出される2ページ目の転送サイズ0x1000を残り転送サイズREMAIN_SIZEにセットし、残りページ数REMAIN_PAGEを6から5にデクリメントする。また、REQ#をアサートしてPCIバス310の制御権を要求する。
At clock r, NEXT_PAGE is asserted, that is, it is recognized that DMA transfer for all pages has not been completed, transfer size 0x1000 of the second page read from
クロックs、tでは、GNT#のアサートを待つ。 At clocks s and t, it waits for GNT # to be asserted.
クロックuで、GNT#のアサートを認識し、2ページ目のアドレスフェーズを発行するためにFRAME#をアサートすると共に、ディスクリプタ格納メモリ304から読み出される2ページ目の先頭物理アドレス0x12B94000をADバスに出力し、C/BE#にメモリライトコマンド0x7を出力する。
Recognizes assertion of GNT # at clock u, asserts FRAME # to issue the address phase of the second page, and outputs the first physical address 0x12B94000 of the second page read from the
クロックpにおいて、外部データ格納メモリ305のアドレスMEM_ADDRをインクリメントせず、0x3EEのままにしておいたので、0x3EEに格納されているデータD(3EE)は、クロックqから読み出し可能となる。
つまり、1ページ目の場合と同様に、最初のデータ転送が成立するIRDY#とTRDY#の両方が初めてアサートされるタイミングで、最初に転送するべきデータD(3EE)は前もってADバスに出力する準備はできているが、その次のクロックで次のデータD(3EF)をADバスに出力することはできないので、TRDY#が初めてアサートされた次の1クロックだけIRDY#をディアサートし、その間にMEM_ADDRに0x3EFを書き込んでおくようにする。
Since the address MEM_ADDR of the external
That is, as in the case of the first page, data D (3EE) to be transferred first is output to the AD bus in advance at the timing when both IRDY # and TRDY # at which the first data transfer is established are asserted for the first time. Although ready, the next data D (3EF) cannot be output to the AD bus at the next clock, so IRDY # is deasserted only for the next clock when TRDY # is asserted for the first time. 0x3EF is written to MEM_ADDR.
以上が、1ページ目のデータ転送開始から1ページ目のデータ転送終了まで、また、1ページ目のデータ転送終了から2ページ目のデータ転送開始までのバスプロトコルの詳細である。 The above is the details of the bus protocol from the start of data transfer on the first page to the end of data transfer on the first page, and from the end of the data transfer on the first page to the start of data transfer on the second page.
続いて、最後の6ページ目のデータ転送についてのバスプロトコルについて、図6(b)を用いて説明する。 Next, a bus protocol for data transfer on the last sixth page will be described with reference to FIG.
クロックAでは、NEXT_PAGEのアサート、つまり、全ページ分のDMA転送が完了していないことを認識し、ディスクリプタ格納メモリ304から読み出される6ページ目の転送サイズ0x0048を残り転送サイズREMAIN_SIZEにセットし、残りページ数REMAIN_PAGEを2から1にデクリメントする。また、REQ#をアサートしてPCIバス310の制御権を要求する。
At clock A, NEXT_PAGE is asserted, that is, it is recognized that DMA transfer for all pages has not been completed, transfer size 0x0048 of the sixth page read from
クロックB、Cでは、GNT#のアサートを待つ。 At clocks B and C, GNT # is waited for.
クロックDで、GNT#のアサートを認識し、6ページ目のアドレスフェーズを発行するためにFRAME#をアサートすると共に、ディスクリプタ格納メモリ304から読み出される6ページ目の先頭物理アドレス0x12922000をADバスに出力し、C/BE#にメモリライトコマンド0x7を出力する。
At clock D, it recognizes the assertion of GNT #, asserts FRAME # to issue the address phase of the sixth page, and outputs the first physical address 0x12922000 of the sixth page read from the
クロックEからクロックQまでは説明が重複するので割愛する。 Since the description from clock E to clock Q is duplicated, it is omitted.
クロックRで、最後のページの、最後のデータ転送が完了する。ここでは、残りページ数REMAIN_PAGEが1なので、NEXT_PAGEがアサートされることはなく、ディスクリプタ格納メモリ304に格納された全ページ分のデータ転送が完了したことを示すDMA_DONEをアサートすると共に、図示しないINTA#(インタラプトA信号)をアサートする(図5ではステップS15)。
At clock R, the last data transfer of the last page is completed. Here, since the number of remaining pages REMAIN_PAGE is 1, NEXT_PAGE is not asserted, DMA_DONE indicating that the data transfer for all pages stored in the
以上がDMA制御装置300の、イニシエータとしてのバスプロトコルの説明であり、図5のステップS8からステップS15までの詳細である。 The above is the description of the bus protocol as the initiator of the DMA control device 300, and the details from step S8 to step S15 in FIG.
図5のステップS16は、ディスクリプタ格納メモリ304に格納された全ページ分のDMA転送が完了したことをCPU330が認識するためのステップであり、ソフトウェアフローとしては、DMA_DONEの値を定期的に監視してもよいし、INTA#のアサートに対応する割り込みルーチンをデバイスドライバに記述してもよい。
ソフトウェアの開発負荷の観点からは、DMA_DONEの値を定期的に監視する方が簡便であるが、DMA制御装置300がDMA転送のためにPCIバス310の制御権を獲得している最中に、CPU330がPCIバス310の制御権を定期的に要求することになるので、DMA制御装置300のデータ転送速度が遅くなる可能性がある。
よって、DMA_DONEの値を定期的に監視する方法は、DMA制御装置300のロジックのテスト、デバッグを簡便に行なうための非機能要件として捉えるのが妥当である。
転送速度が重要視されるアプリケーションでは、INTA#のアサートに対応する割り込みルーチンをデバイスドライバに記述しておく方が好ましい。
Step S16 in FIG. 5 is a step for the
From the viewpoint of software development load, it is easier to periodically monitor the value of DMA_DONE. However, while the DMA controller 300 acquires the control right of the PCI bus 310 for DMA transfer, Since the
Therefore, it is reasonable to regard the method of periodically monitoring the value of DMA_DONE as a non-functional requirement for simply testing and debugging the logic of the DMA controller 300.
In applications where transfer speed is important, it is preferable to describe an interrupt routine corresponding to INTA # assertion in the device driver.
ステップS17では、全ページ分のデータがステップS1で確保したメインメモリ領域に格納されている。
CPU330は、このメインメモリ領域に適宜アクセスすることで、所定のアプリケーションソフトウェア処理を行うことができる。
In step S17, the data for all pages is stored in the main memory area secured in step S1.
The
ところで、図6の最下行には「図7のステート」と記しているが、ここで、イニシエータシーケンサ303の状態遷移図である図7について説明する。
Incidentally, “state of FIG. 7” is described in the bottom line of FIG. 6, but FIG. 7 which is a state transition diagram of the
イニシエータシーケンサ303は、パワーONリセットを受けて(1)IDLEステートに初期化される。
(1)IDLEステートは、DMA転送開始、あるいは、再開の命令を待ち、これらの命令を検出したらトランザクションを開始する。トランザクションを開始するには、コンフィグレーションレジスタのコマンドレジスタに割り当てられているマスタイネーブルビットが有効であることと、バスの制御権が獲得できている(GNT#がアサートされている)ことと、バスがアイドル状態(FRAME#とIRDY#が共にディアサート)であることの確認が必要となる。
GNT#のアサート、FRAME#とIRDY#のディアサートを確認できた場合には、(3)ADDRESS_FASEステートに遷移するが、確認できない場合にはバスの制御権を要求するREQ#をアサートして(2)WAIT_GNTステートに遷移する。
さらに、DMA転送開始、あるいは、再開の命令を検出していないにもかかわらずGNT#がアサートされた場合には、バスパーキング処理を行う。
バスパーキング処理では、どんな値でもかまわないので、ADバスやC/BE#信号を出力状態にしてバスを安定させる。GNT#がディアサートされたら、信号のドライブを解放し、バスパーキング処理を終了する。さらに、エラー処理として、マスタイネーブルビットが無効であるにもかかわらずDMA転送開始、あるいは、再開の命令を検出した場合には、(5)MST_TURN_AROUNDステートに遷移する。
The
(1) The IDLE state waits for a DMA transfer start or resume command, and starts transaction when these commands are detected. To start a transaction, the master enable bit assigned to the command register of the configuration register is valid, the bus control right has been acquired (GNT # is asserted), and the bus Must be confirmed to be idle (both FRAME # and IRDY # are deasserted).
If GNT # assertion and FRAME # and IRDY # deassertion are confirmed, (3) transition to the ADDRESS_FASE state, but if it cannot be confirmed, REQ # requesting the control right of the bus is asserted ( 2) Transition to the WAIT_GNT state.
Furthermore, if GNT # is asserted even though a DMA transfer start or restart instruction is not detected, a bus parking process is performed.
Since any value may be used in the bus parking process, the bus is stabilized by setting the AD bus or C / BE # signal to the output state. When GNT # is deasserted, the signal drive is released and the bus parking process is terminated. Further, as error processing, when a DMA transfer start or restart command is detected even though the master enable bit is invalid, the state transits to (5) MST_TURN_AROUND state.
DMA転送開始、あるいは、再開の命令には、以下の場合があり得る。
即ち、(A)最初の1ページ目のDMA開始命令を示すDMA_STARTがアサートされた場合、(B)2ページ目以降のDMA開始命令を示すNEXT_PAGEがアサートされた場合、(C)リトライ(ターゲットデバイスが何らかの理由でトランザクションに対して一時的に対応できない場合に要求される処理)、または、ディスコネクト(何度かデータ転送が成立した後に、何らかの理由でデータ転送が継続できない場合、後でトランザクションを再開してほしいときに要求される処理)により、DMA転送がページ途中で打ち切られ、ページ途中からDMA転送を再開する場合である。
The DMA transfer start or restart command can have the following cases.
That is, (A) DMA_START indicating a DMA start instruction for the
(A)、(B)の場合、ディスクリプタ格納メモリ304からページ単位の転送情報を読み出してセットする。
In the case of (A) and (B), transfer information in units of pages is read from the
(C)の場合、残り転送サイズとしては、REMAIN_SIZEの値をそのままセットし、残りページとしてはREMAIN_PAGEの値をそのままセットする。
しかし、ページ途中からDMA転送を再開することになるので、転送先メインメモリの物理アドレスについては、ディスクリプタ格納メモリ304の情報をそのまま使うことはできない。
In the case of (C), the value of REMAIN_SIZE is set as it is as the remaining transfer size, and the value of REMAIN_PAGE is set as it is as the remaining pages.
However, since the DMA transfer is resumed from the middle of the page, the information in the
データ転送が1回成立する毎に転送先メインメモリの物理アドレスは0x4だけインクリメントされるはずなので、ディスクリプタ格納メモリ304から読み出した転送サイズと、現在の残り転送サイズであるREMAIN_SIZEの差を取ることで、転送先メインメモリの物理アドレスを求めることができる。
例えば、ディスクリプタ格納メモリ304から読み出した先頭物理アドレスが0x10000000、転送サイズが0x1000バイトで、REMAIN_SIZEが0x400バイトであるなら、0x1000−0x400=0xC00バイト分のデータ転送が成立した時点でDMA転送が打ち切られたことになる。
したがって、DMA転送再開時の転送先メインメモリの物理アドレスは、0x10000000+0xC00=0x10000C00となる。この値をアドレスフェーズでADバスに出力できるようにDMAコントロール/ステータスレジスタ3022に記録しておけばよい。
Since the physical address of the transfer destination main memory should be incremented by 0x4 every time data transfer is established, by taking the difference between the transfer size read from the
For example, if the first physical address read from the
Therefore, the physical address of the transfer destination main memory when the DMA transfer is resumed is 0x10000000 + 0xC00 = 0x10000C00. This value may be recorded in the DMA control /
(2)WAIT_GNTステートでは、GNT#がアサートされるのを待つステートである。但し、直前のトランザクションが完全には終わっていない場合があるため、GNT#がアサートされたからといって、直ちにFRAME#信号などのアサートを開始することはできない。
そこで、このステートでは、GNT#のアサートだけではなく、FRAME#とIRDY#が共にディアサートされていてバスがアイドル状態にあることを条件に含めている。
この条件が成立したら、REQ#をディアサートし、FRAME#、AD、C/BE#のドライブを開始して(3)ADDRESS_FASEステートに遷移する。
(2) The WAIT_GNT state is a state waiting for GNT # to be asserted. However, since the immediately preceding transaction may not be completely completed, the assertion of the FRAME # signal or the like cannot be started immediately even if GNT # is asserted.
Therefore, this state includes not only the assertion of GNT # but also that FRAME # and IRDY # are both deasserted and the bus is in an idle state.
When this condition is satisfied, REQ # is deasserted, FRAME #, AD, and C / BE # drive is started, and (3) the state transitions to the ADDRESS_FASE state.
(3)ADDRESS_FASEステートは、アドレスフェーズを発行するステートである。
最後のデータ転送が成立する1クロック前にFRAME#をディアサートする必要があるので、残り転送サイズREMAIN_SIZEを参照し、この値が0x4以下の場合にはFRAME#をディアサートする。
また、IRDY#をアサートして(4)MST_DATA_FASEに遷移する。
また、本発明の主旨から外れるが、データ転送方向がリード(メインメモリが転送元、DMA制御装置300が転送先)の場合には、ADバスのドライブを解放しておく。
(3) The ADDRESS_FASE state is a state for issuing an address phase.
Since it is necessary to deassert FRAME # one clock before the last data transfer is established, the remaining transfer size REMAIN_SIZE is referred to, and if this value is 0x4 or less, FRAME # is deasserted.
Also, IRDY # is asserted (4) and the process transits to MST_DATA_FASE.
Although not within the spirit of the present invention, if the data transfer direction is read (the main memory is the transfer source and the DMA control device 300 is the transfer destination), the AD bus drive is released.
(4)MST_DATA_FASEは、データフェーズを発行するステートである。
残り転送サイズREMAIN_SIZEを参照し、この値が0x4以下の場合には、FRAME#をハイインピーダンスにし、さらに、DEVSEL#、TRDY#のアサートを確認した場合にはIRDY#をディアサートし、AD、C/BE#のドライブを解放して(5)MST_TURN_AROUNDステートに遷移する。
(4) MST_DATA_FASE is a state for issuing a data phase.
Referring to the remaining transfer size REMAIN_SIZE, when this value is 0x4 or less, FRAME # is set to high impedance, and when DEVSEL # and TRDY # are asserted, IRDY # is deasserted, and AD, C The / BE # drive is released (5) and the state transits to the MST_TURN_AROUND state.
DEVSEL#(デバイスセレクション信号)はアサート、TRDY#はディアサートである場合には、STOP#(ストップ信号)の値を確認し、STOP#がアサートされていたら、FRAME#をディアサートして(6)RETRY_OR_DISCONNECTステートに遷移する。STOP#がディアサートであれば、このステートでTRDY#のアサートを待つ。 When DEVSEL # (device selection signal) is asserted and TRDY # is deasserted, the value of STOP # (stop signal) is confirmed. If STOP # is asserted, FRAME # is deasserted (6 ) Transition to RETRY_OR_DISCONNECT state. If STOP # is deasserted, it waits for TRDY # to be asserted in this state.
DEVSEL#がディアサートの場合には、DEVSEL#応答のタイムアウトを検出するためのカウンタ値(初期値は(1)IDLEステートで0x3にセットしておく)を確認し、この値が0x0になっていれば、DEVSEL#応答タイムアウトと判断して、マスタアボートビットを有効にし、FRAME#をディアサートして(7)ABORTステートに遷移する。
カウンタ値が0x0よりも大きければ、カウンタを0x1だけデクリメントして、このステートでDEVSEL#のアサートを待つ。
If DEVSEL # is deasserted, check the counter value for detecting the timeout of the DEVSEL # response (initial value is (1) set to 0x3 in the IDLE state), and this value is 0x0 If this is the case, it is determined that the DEVSEL # response has timed out, the master abort bit is enabled, FRAME # is deasserted, and the state transitions to (7) ABORT state.
If the counter value is greater than 0x0, the counter is decremented by 0x1 and waits for DEVSEL # to be asserted in this state.
残り転送サイズREMAIN_SIZEを参照し、この値が0x4よりも大きい場合で、DEVSEL#、TRDY#がアサートされていて、残り転送サイズREMAIN_SIZEが0x8である場合には、次のクロックでデータ転送が完了するのでFRAME#をディアサートすると共に、残り転送サイズREMAIN_SIZEを0x4だけデクリメントし、外部データ格納メモリ305のアドレスMEM_ADDRを0x1だけインクリメントする。
さらに、TRDY#の初めてのアサート状態である可能性を確認し、もしそうである場合にはIRDY#をディアサートする。
TRDY#が初めてアサートされたことを確認するためには、TRDY#の立ち下がりエッジを検出すればよい。
STOP#がアサートされている場合には、FRAME#をディアサートして(6)RETRY_OR_DISCONNECTステートに遷移する。
DEVSEL#はアサート、TRDY#はディアサートされている場合においても、STOP#がアサートされていたら、FRAME#をディアサートして(6)RETRY_OR_DISCONNECTステートに遷移する。
When the remaining transfer size REMAIN_SIZE is referred to and this value is larger than 0x4, and DEVSEL # and TRDY # are asserted and the remaining transfer size REMAIN_SIZE is 0x8, the data transfer is completed at the next clock. Therefore, FRAME # is deasserted, the remaining transfer size REMAIN_SIZE is decremented by 0x4, and the address MEM_ADDR of the external
Furthermore, the possibility of the first asserted state of TRDY # is confirmed, and if so, IRDY # is deasserted.
In order to confirm that TRDY # is asserted for the first time, the falling edge of TRDY # may be detected.
If STOP # is asserted, FRAME # is deasserted (6), and a transition is made to the RETRY_OR_DISCONNECT state.
Even when DEVSEL # is asserted and TRDY # is deasserted, if STOP # is asserted, FRAME # is deasserted (6) and a transition is made to the RETRY_OR_DISCONNECT state.
DEVSEL#がディアサートの場合、TRDY#がディアサートでSTOP#がアサートされていたら、ターゲットアボートビットを有効にし、FRAME#をディアサートして(7)ABORTステートに遷移する。
STOP#がディアサートされていたら、DEVSEL#応答のタイムアウトを検出するためのカウンタ値を確認し、この値が0x0になっていれば、DEVSEL#応答タイムアウトと判断して、マスタアボートビットを有効にし、FRAME#をディアサートして(7)ABORTステートに遷移する。
カウンタ値が0x0よりも大きければ、カウンタを0x1だけデクリメントして、このステートでDEVSEL#のアサートを待つ。
When DEVSEL # is deasserted and TRDY # is deasserted and STOP # is asserted, the target abort bit is enabled, FRAME # is deasserted, and the state transitions to (7) ABORT state.
If STOP # is deasserted, check the counter value for detecting the timeout of the DEVSEL # response. If this value is 0x0, it is determined that the DEVSEL # response has timed out, and the master abort bit is enabled. , FRAME # is deasserted (7), and transitions to the ABORT state.
If the counter value is greater than 0x0, the counter is decremented by 0x1 and waits for DEVSEL # to be asserted in this state.
残り転送サイズREMAIN_SIZEを参照し、この値が0x4よりも大きい場合で、DEVSEL#、TRDY#がアサートされていて、残り転送サイズREMAIN_SIZEが0x8でない場合には、外部データ格納メモリ305のアドレスMEM_ADDRを0x1だけインクリメントする。
さらに、TRDY#の初めてのアサート状態である可能性を確認し、もしそうである場合にはIRDY#をディアサートする。
そうではない場合には残り転送サイズREMAIN_SIZEを0x4だけデクリメントする。
また、STOP#がアサートされている場合には、FRAME#をディアサートして(6)RETRY_OR_DISCONNECTステートに遷移する。
STOP#がディアサートされている場合には、このステートに留まる。
When the remaining transfer size REMAIN_SIZE is referred to and this value is larger than 0x4, and DEVSEL # and TRDY # are asserted and the remaining transfer size REMAIN_SIZE is not 0x8, the address MEM_ADDR of the external
Furthermore, the possibility of the first asserted state of TRDY # is confirmed, and if so, IRDY # is deasserted.
Otherwise, the remaining transfer size REMAIN_SIZE is decremented by 0x4.
If STOP # is asserted, FRAME # is deasserted (6), and the state transits to the RETRY_OR_DISCONNECT state.
If STOP # is deasserted, it remains in this state.
DEVSEL#はアサート、TRDY#はディアサートされている場合に、STOP#がアサートされていたら、FRAME#をディアサートして(6)RETRY_OR_DISCONNECTステートに遷移する。 When DEVSEL # is asserted and TRDY # is deasserted, if STOP # is asserted, FRAME # is deasserted (6), and a transition is made to the RETRY_OR_DISCONNECT state.
DEVSEL#がディアサートの場合、TRDY#がディアサートでSTOP#がアサートされていたら、ターゲットアボートビットを有効にし、FRAME#をディアサートして(7)ABORTステートに遷移する。
STOP#がディアサートされていたら、DEVSEL#応答のタイムアウトを検出するためのカウンタ値を確認し、この値が0x0になっていれば、DEVSEL#応答タイムアウトと判断して、マスタアボートビットを有効にし、FRAME#をディアサートして(7)ABORTステートに遷移する。
カウンタ値が0x0よりも大きければ、カウンタを0x1だけデクリメントして、このステートでDEVSEL#のアサートを待つ。
When DEVSEL # is deasserted and TRDY # is deasserted and STOP # is asserted, the target abort bit is enabled, FRAME # is deasserted, and the state transitions to (7) ABORT state.
If STOP # is deasserted, check the counter value for detecting the timeout of the DEVSEL # response. If this value is 0x0, it is determined that the DEVSEL # response has timed out and the master abort bit is enabled. , FRAME # is deasserted (7), and transitions to the ABORT state.
If the counter value is greater than 0x0, the counter is decremented by 0x1 and waits for DEVSEL # to be asserted in this state.
(5)MST_TURN_AROUNDステートでは、IRDY#をハイインピーダンスにし、(1)IDLEステートに遷移する。
また、リトライ、または、ディスコネクトによってこのステートに遷移してきたわけではない、つまり、ページ単位の転送を完了することによってこのステートに遷移してきた場合には、残りページREMAIN_PAGEを参照し、0x1よりも大きければ、次ページの転送情報を要求するためにPAGE_NEXTをアサートすると共に、REMAIN_PAGEを0x1だけデクリメントする。
なお、PAGE_NEXTは(1)IDLEステートでディアサート状態にセットされる。
REMAIN_PAGEが0x1であれば、最後のページのデータ転送が完了したことになるので、全ページ分のDMA転送完了を示すDMA_DONEをアサートする。また、INTA#をアサートする。
(5) In the MST_TURN_AROUND state, IRDY # is set to high impedance, and (1) transitions to the IDLE state.
In addition, when the transition to this state is not made by retry or disconnection, that is, when the transition is made to this state by completing the transfer in units of pages, the remaining page REMAIN_PAGE is referred to and should be larger than 0x1. For example, PAGE_NEXT is asserted to request transfer information of the next page, and REMAIN_PAGE is decremented by 0x1.
PAGE_NEXT is set to the deasserted state in (1) IDLE state.
If REMAIN_PAGE is 0x1, the data transfer of the last page has been completed. Therefore, DMA_DONE indicating the completion of DMA transfer for all pages is asserted. Also, INTA # is asserted.
(6)RETRY_OR_DISCONNECTステートでは、FRAME#をハイインピーダンス、IRDY#をディアサート、ADバス、C/BE#のドライブを解放する。
そして、リトライ、または、ディスコネクトにより、ページ途中でデータ転送が打ち切られたことを識別できるようにしておくため、所定の内部レジスタにその旨を記録して、(5)MST_TURN_AROUNDステートに遷移する。
(6) In the RETRY_OR_DISCONNECT state, FRAME # is set to high impedance, IRDY # is deasserted, and the AD bus and C / BE # drive are released.
Then, in order to be able to identify that the data transfer has been interrupted in the middle of the page by retry or disconnection, the fact is recorded in a predetermined internal register, and (5) the state transits to the MST_TURN_AROUND state.
(7)ABORTステートでは、RAME#をハイインピーダンス、IRDY#をディアサート、ADバス、C/BE#のドライブを解放し、(5)MST_TURN_AROUNDステートに遷移する。 (7) In the ABORT state, RAME # is in a high impedance state, IRDY # is deasserted, the AD bus and C / BE # drive are released, and (5) the state transits to the MST_TURN_AROUND state.
以上のように、本発明のDMA転送制御装置によれば、同期読み出し方式のメモリに格納されているデータを、PCIバスを介して、ユーザー空間で確保されたメインメモリ領域であって、物理アドレス空間においては離散的にマッピングされるメインメモリ領域に高速に取り溢しなくデータを転送することができる。 As described above, according to the DMA transfer control device of the present invention, the data stored in the synchronous read type memory is the main memory area secured in the user space via the PCI bus, and the physical address In space, data can be transferred to a main memory area that is discretely mapped at high speed without overflowing.
100……メインメモリ、101……転送情報領域、102……データ領域、12……DMA転送制御装置、13……バス、300……MA転送制御装置、301……ターゲットシーケンサ、302……レジスタインターフェース、3021……コンフィグレーションレジスタ、3022……MAコントロール/ステータスレジスタ、303……イニシエータシーケンサ、304……ディスクリプタ格納メモリ、305……外部データ格納メモリ、306……パリティチェッカ/ジェネレータ、310……PCIバス、320……チップセット、3201……モリコントロールハブ(MCH)、3202……/Oコントロールハブ(ICH)、330……CPU、340……メインメモリ。 DESCRIPTION OF SYMBOLS 100 ... Main memory, 101 ... Transfer information area, 102 ... Data area, 12 ... DMA transfer control device, 13 ... Bus, 300 ... MA transfer control device, 301 ... Target sequencer, 302 ... Register Interface, 3021 ... Configuration register, 3022 ... MA control / status register, 303 ... Initiator sequencer, 304 ... Descriptor storage memory, 305 ... External data storage memory, 306 ... Parity checker / generator, 310 ... PCI bus, 320 ... chipset, 3201 ... Mori control hub (MCH), 3202 ... / O control hub (ICH), 330 ... CPU, 340 ... main memory.
Claims (3)
ユーザー空間でデータの転送先となるメモリ領域を確保した時点でその領域に対応する物理アドレスをカーネル空間で取得する手段と、
前記DMA転送制御装置が具備するメモリに予め総ページ数、各ページの先頭物理アドレス、各ページの転送サイズ情報を前記データの転送に必要な転送情報として記録してからDMA転送を開始する手段と、
を備えることを特徴とするDMA転送制御装置。 A DMA transfer control device that operates under an OS environment employing a virtual storage system,
Means for acquiring a physical address corresponding to the area in the kernel space when a memory area as a data transfer destination is secured in the user space;
Means for starting the DMA transfer after recording the total number of pages, the start physical address of each page, and the transfer size information of each page as transfer information necessary for the data transfer in a memory included in the DMA transfer control device; ,
A DMA transfer control device comprising:
前記PCIバスのターゲットレディ信号(TRDY#)がアサートされた次の1クロックだけ前記PCIバスのイニシエータレディ信号(IRDY#)をディアサートする手段と、
前記イニシエータレディ信号(IRDY#)をディアサートしている1クロックの間に前記同期読み出しメモリのアドレスを確定しておく手段と、
を備えることを特徴とするDMA転送制御装置。 A DMA transfer control device having a synchronous read memory and transferring data stored in the synchronous read memory to a main memory via a PCI bus,
Means for deasserting the PCI bus initiator ready signal (IRDY #) for the next one clock after the PCI bus target ready signal (TRDY #) is asserted;
Means for determining an address of the synchronous read memory during one clock in which the initiator ready signal (IRDY #) is deasserted;
A DMA transfer control device comprising:
ことを特徴とする請求項2記載のDMA転送制御装置。 The transfer of the data to the main memory is performed by the DMA transfer control device operating as an initiator device and a chipset including the main memory operating as a target device.
3. The DMA transfer control device according to claim 2, wherein:
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009220526A JP2011070372A (en) | 2009-09-25 | 2009-09-25 | Dma transmission control device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009220526A JP2011070372A (en) | 2009-09-25 | 2009-09-25 | Dma transmission control device |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011070372A true JP2011070372A (en) | 2011-04-07 |
Family
ID=44015610
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009220526A Pending JP2011070372A (en) | 2009-09-25 | 2009-09-25 | Dma transmission control device |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011070372A (en) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016134018A (en) * | 2015-01-20 | 2016-07-25 | 富士通株式会社 | Dma control device, microcontroller, and dma control method |
CN107273312A (en) * | 2016-04-04 | 2017-10-20 | 罗伯特·博世有限公司 | The direct memory access (DMA) control device of computing unit with working storage |
CN113127391A (en) * | 2021-05-13 | 2021-07-16 | 西安微电子技术研究所 | Design method of DMA data transmission engine compatible with multiple devices |
JP2022510919A (en) * | 2018-11-28 | 2022-01-28 | マーベル アジア ピーティーイー、リミテッド | Network switch with endpoint and direct memory access controller for in-vehicle data transfer |
-
2009
- 2009-09-25 JP JP2009220526A patent/JP2011070372A/en active Pending
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2016134018A (en) * | 2015-01-20 | 2016-07-25 | 富士通株式会社 | Dma control device, microcontroller, and dma control method |
US10031871B2 (en) | 2015-01-20 | 2018-07-24 | Fujitsu Limited | DMA control device, micro control unit, and DMA control method |
CN107273312A (en) * | 2016-04-04 | 2017-10-20 | 罗伯特·博世有限公司 | The direct memory access (DMA) control device of computing unit with working storage |
JP2022510919A (en) * | 2018-11-28 | 2022-01-28 | マーベル アジア ピーティーイー、リミテッド | Network switch with endpoint and direct memory access controller for in-vehicle data transfer |
US11822494B2 (en) | 2018-11-28 | 2023-11-21 | Marvell Asia Pte, Ltd. | Network switch with DMA controller for independent direct memory access of host system |
JP7414365B2 (en) | 2018-11-28 | 2024-01-16 | マーベル アジア ピーティーイー、リミテッド | Network switch with endpoints and direct memory access controller for in-vehicle data transfer |
CN113127391A (en) * | 2021-05-13 | 2021-07-16 | 西安微电子技术研究所 | Design method of DMA data transmission engine compatible with multiple devices |
CN113127391B (en) * | 2021-05-13 | 2023-03-14 | 西安微电子技术研究所 | Design method of DMA data transmission engine compatible with multiple devices |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6085278A (en) | Communications interface adapter for a computer system including posting of system interrupt status | |
US7263572B2 (en) | Bus bridge and data transfer method | |
US8874959B2 (en) | Information processing apparatus, image forming apparatus, and information processing program | |
US9003091B2 (en) | Flow control for a Serial Peripheral Interface bus | |
WO2013080027A2 (en) | Interrupt handling systems and methods for pcie bridges with multiple buses | |
JP5578713B2 (en) | Information processing device | |
US20150046616A1 (en) | Peripheral registers with flexible data width | |
TW202240413A (en) | Pcie device and operating method thereof | |
US6678838B1 (en) | Method to track master contribution information in a write buffer | |
US8918680B2 (en) | Trace queue for peripheral component | |
JP2024515055A (en) | Seamlessly integrated microcontroller chip | |
JP2011070372A (en) | Dma transmission control device | |
US20040122994A1 (en) | AMBA slave modular bus interfaces | |
EP1746497B1 (en) | Apparatus and method for sparse line write transactions | |
JP4097883B2 (en) | Data transfer apparatus and method | |
US7774513B2 (en) | DMA circuit and computer system | |
US7698494B2 (en) | Access control device and access control method | |
US7543094B2 (en) | Target readiness protocol for contiguous write | |
JP2001256179A (en) | Processor system | |
US8560748B2 (en) | Information processing system including interrupt processing function | |
JP5146796B2 (en) | Host controller | |
JP2010140440A (en) | Bus arbitration device | |
JP4538054B2 (en) | Data transfer apparatus and method | |
WO2016053146A1 (en) | Computer system | |
JP2006092077A (en) | Bus system |