(57)【特許請求の範囲】
【請求項１】
同一バス上のビット幅の異なるデバイス間でＤＭＡによるデータ転送を行うＤＭＡ制御付ＦＩＦＯであって、
入力側ＦＩＦＯと出力側ＦＩＦＯにそれぞれ複数の同容量のセルを持ち、各セルは接続変更手段を備え、
該入力側と出力側の対応するセル同士を接続して、少なくとも入力側ＦＩＦＯの各セルから出力側ＦＩＦＯの対応する各セルへデータ転送を可能とする接続と、
入力側ＦＩＦＯと出力側ＦＩＦＯそれぞれで異なるビット幅でデバイスとデータ転送を可能にする接続とを前記接続変更手段により少なくとも切り換え可能に構成するとともに、
前記入力側ＦＩＦＯと前記出力側ＦＩＦＯのデータ転送、および前記接続変更手段の切り換えを必要に応じて制御する制御部を備え、
前記制御部は、ＤＭＡ転送要求により送られてきたデータを前記入力側ＦＩＦＯで受信させ、出力側ＦＩＦＯが空の場合、前記入力側ＦＩＦＯにたまったデータを前記出力側ＦＩＦＯに転送させ、該出力側ＦＩＦＯからデータをＤＭＡ転送で出力させることを特徴とするＤＭＡ制御付ＦＩＦＯ。
【請求項２】
デバイス間でデータをＤＭＡ転送するＤＭＡコントローラを有するＤＭＡ転送システムにおいて、前記ＤＭＡコントローラと前記デバイスを中継する請求項１に記載のＤＭＡ制御付ＦＩＦＯを備え、同一バス上のビット幅の異なるデバイス間でＤＭＡ転送するようにしたことを特徴とするＤＭＡ転送システム。
【請求項３】
請求項２に記載のＤＭＡ転送システムにおいて、請求項１に記載のＤＭＡ制御付ＦＩＦＯの制御部は、前記ＤＭＡ制御付ＦＩＦＯにおける１回のＤＭＡ転送で転送されるデータの転送バイト数に基づいて、バースト長の変更をプログラマブルに行うようにしたことを特徴とするＤＭＡ転送システム。
【請求項４】
請求項２に記載したＤＭＡ転送システムにおいて、請求項１に記載のＤＭＡ制御付ＦＩＦＯの制御部は、入力側ＦＩＦＯおよび出力側ＦＩＦＯの少なくとも一方のデータ転送のビット幅に基づいた信号を出力し、請求項１に記載のＤＭＡ制御付ＦＩＦＯの接続変更手段は、前記信号に基づいて、データ転送のビット幅をプログラマブルに切り換えるようにしたことを特徴とするＤＭＡ転送システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）によるデータ転送を行うシステムに関し、特に同一バス上のＤＭＡＣ（ＤＭＡ  Ｃｏｎｔｒｏｌｌｅｒ）とデータバス幅が異なるデバイス間でＤＭＡ転送を行う場合に、ＦＩＦＯを使用した転送方式に関するものである。
【０００２】
【従来の技術】
上記のようなＦＩＦＯ及びＤＭＡ転送方式においては、従来は、同一バス上のＤＭＡＣとデータバス幅が異なるデバイス間でＤＭＡ転送を行う場合、２つのバッファメモリを使用して、各バッファメモリに順次データを書込み、その後、同時にそのバッファメモリからデータを読み出すことによって、データバス幅の変換を行っていたが、この方式では、バス幅が広いデータバスのＤＭＡ転送に要する時間が長くなってしまい、高速で効率の良いデータ転送を行うことが困難であった。また、異なる２つのバス間でＤＭＡ転送を行う時にＦＩＦＯを中継する方式があるが、このＦＩＦＯは、２つのバス上にそれぞれＤＭＡＣを必要とするため、本発明のような同一バス上のデバイス間におけるＤＭＡ転送の場合には、使用することができない。
【０００３】
そして、特開平７−１５２６８３号公報には、バス幅が異なるデータバス間に、複数のバッファメモリと、複数のバッファメモリの書込みを制御する書込み制御回路を備え、書込み制御回路によりバス幅が狭い方のデータを複数のバッファメモリに順次書込み、複数のバッファメモリに書込まれたデータが、バス幅の広いデータバスに同時に出力されることを特徴とするバッファメモリ回路が記載されている。
【０００４】
また、特開平１０−２９３７４２号公報には、互いに異なる第１のバスと第２のバスにおいて、ＦＩＦＯのようなバス中継器を介して接続して、双方向にＤＭＡ転送を行うことを特徴とするデータ転送方法及び装置が記載されている。
【０００５】
【発明が解決しようとする課題】
本発明の第１の目的は、上記従来技術において、ＤＭＡ転送を行う場合、バス幅が狭い方のデータを複数のバッファメモリに順次書込んでいる間、バス幅が広いデータバスも、このＤＭＡ転送のためにバスを占有しておく必要があり、高速で効率の良いデータ転送が困難であることを鑑みて、ＤＭＡ制御機能を内蔵したビット幅の変換可能な双方向ＦＩＦＯを使用することにより、各バスのデータ転送速度の違いを吸収して、高速で効率の良いデータ転送を行うことである。
【０００６】
また、第２の目的は、従来技術において、バス幅が狭い方のデータを複数のバッファメモリに順次書込んでいる間、バス幅が広いデータバスにデータを送信することができないことを鑑みて、前記ＤＭＡ制御機能を内蔵したビット幅の変換可能な双方向ＦＩＦＯの内部のＦＩＦＯブロックを複数で構成して、相互のデータ交換を可能にすることにより、送受信同時動作を行って、より高速で効率の良いデータ転送を行うことである。
【０００７】
そして、第３の目的は、上記従来技術において、ＤＭＡ転送を行う場合、ＤＭＡＣの設定が同じであっても転送を開始するアドレスによっては、転送の最初と最後に半端なバイト数を転送する場合があるため、アドレスの調整を行い、半端なバイト数の転送をなくす必要があったことを鑑みて、ＤＭＡ制御機能を内蔵したビット幅の変換可能な双方向ＦＩＦＯを使用し、そのＦＩＦＯの転送バイト数を、ＤＭＡＣの転送バースト長に対応してプログラマブルに設定することにより、任意のＤＭＡＣの転送バースト長に対応することである。
【０００８】
さらに、第４の目的は、上記従来技術において、ＤＭＡ転送を行う場合、任意のバス幅に適したバッファメモリ回路を構成した時、他のバス幅でのデータ転送が困難であることを鑑みて、ＦＩＦＯのビット幅をプログラマブルに設定可能にすることにより、接続するバス幅を指定する必要がなく、回路変更を行うことなく任意のデータバス間のデータ転送を行うことである。
【０００９】
【課題を解決するための手段】
請求項１の発明は、同一バス上のビット幅の異なるデバイス間でＤＭＡによるデータ転送を行うＤＭＡ制御付ＦＩＦＯであって、入力側ＦＩＦＯと出力側ＦＩＦＯにそれぞれ複数の同容量のセルを持ち、各セルは接続変更手段を備え、該入力側と出力側の対応するセル同士を接続して、少なくとも入力側ＦＩＦＯの各セルから出力側ＦＩＦＯの対応する各セルへデータ転送を可能とする接続と、入力側ＦＩＦＯと出力側ＦＩＦＯそれぞれで異なるビット幅でデバイスとデータ転送を可能にする接続とを前記接続変更手段により少なくとも切り換え可能に構成するとともに、前記入力側ＦＩＦＯと前記出力側ＦＩＦＯのデータ転送、および前記接続変更手段の切り換えを必要に応じて制御する制御部を備え、前記制御部は、ＤＭＡ転送要求により送られてきたデータを前記入力側ＦＩＦＯで受信させ、出力側ＦＩＦＯが空の場合、前記入力側ＦＩＦＯにたまったデータを前記出力側ＦＩＦＯに転送させ、該出力側ＦＩＦＯからデータをＤＭＡ転送で出力させるＤＭＡ制御付ＦＩＦＯに関する。
【００１２】
請求項２の発明は、デバイス間でデータをＤＭＡ転送するＤＭＡコントローラを有するＤＭＡ転送システムにおいて、前記ＤＭＡコントローラと前記デバイスを中継する請求項１に記載のＤＭＡ制御付ＦＩＦＯを備え、同一バス上のビット幅の異なるデバイス間でＤＭＡ転送するようにしたＤＭＡ転送システムである。
【００１３】
請求項３の発明は、請求項２に記載のＤＭＡ転送システムにおいて、請求項１に記載のＤＭＡ制御付ＦＩＦＯの制御部は、前記ＤＭＡ制御付ＦＩＦＯにおける１回のＤＭＡ転送で転送されるデータの転送バイト数に基づいて、バースト長の変更をプログラマブルに行うようにしたものである。
【００１４】
請求項４の発明は、請求項２に記載したＤＭＡ転送システムにおいて、請求項１に記載のＤＭＡ制御付ＦＩＦＯの制御部は、入力側ＦＩＦＯおよび出力側ＦＩＦＯの少なくとも一方のデータ転送のビット幅に基づいた信号を出力し、請求項１に記載のＤＭＡ制御付ＦＩＦＯの接続変更手段は、前記信号に基づいて、データ転送のビット幅をプログラマブルに切り換えるようにしたものである。
【００１５】
【発明の実施の形態】
この発明の実施例を図面に基づいて説明する。
図１は、本発明のＤＭＡ転送システムの一実施例を示すブロック図である。
この図において、１０１は、このシステムを制御する中央演算処理装置（ＣＰＵ）である。１０２は、ＣＰＵ１０１と共に、このシステムを構築するシステムコントローラであり、通常、ＣＰＵバスインターフェース，メモリデバイスインターフェースを備えており、ＤＭＡＣを内蔵している場合もある。１０３は、データを記憶しておくメモリであり、通常、ＤＲＡＭが使用される。
【００１６】
１０４は、ＤＭＡ転送を制御するＤＭＡＣである。ＤＭＡ転送は、このＤＭＡＣ１０４がＣＰＵ１０１を介さずに、メモリ１０３とＩ／Ｏデバイス１０８間のデータ転送を行うことである。１０５は、３２ｂｉｔ幅のデータバスであり、３２ｂｉｔのデータバス幅を持つシステムコントローラ１０２，メモリ１０３，ＤＭＡＣ１０４，ＤＭＡ制御付ＦＩＦＯ１０７が接続されている。１０６は、システムコントローラ１０２が生成する各種制御信号であり、アドレスバス，ＲＤ信号，ＷＲ信号，ＣＳ信号等から構成されている。
【００１７】
１０７は、内部に２つの３２バイトのＦＩＦＯとＤＭＡ制御機能を含むＦＩＦＯ制御部を持つＤＭＡ制御付ＦＩＦＯであり、片方のＦＩＦＯが３２ｂｉｔデータバス１０５に、もう片方のＦＩＦＯが１６ｂｉｔデータバス１０９に接続されている。１０８は、１６ｂｉｔのデータバスと、ＤＭＡインターフェースを持つＩ／Ｏデバイスである。１０９は、１６ｂｉｔ幅のデータバスであり、１６ｂｉｔのデータバス幅を持つＩ／Ｏデバイス１０８とＤＭＡ制御付ＦＩＦＯ１０７を接続している。
【００１８】
１１０は、ＤＭＡＣ１０４が、ＤＭＡ制御付ＦＩＦＯ１０７との間でＤＭＡ転送を行う時に出力する信号（ＡＣＫ−Ａ）であり、この信号に同期してデータの送受信を行う。１１１は、ＤＭＡ制御付ＦＩＦＯ１０７がＤＭＡＣ１０４に対してデータの送受信を要求する信号（ＲＥＱ−Ａ）である。１１２は、ＤＭＡ制御付ＦＩＦＯ１０７がＩ／Ｏデバイス１０８との間でＤＭＡ転送を行う時に出力する信号（ＡＣＫ−Ｂ）であり、この信号に同期してデータの送受信を行う。１１３は、Ｉ／Ｏデバイス１０８がＤＭＡ制御付ＦＩＦＯ１０７に対してデータの送受信を要求する信号（ＲＥＱ−Ｂ）である。
【００１９】
以上のシステム構成において、ＤＭＡＣ１０４とＩ／Ｏデバイス１０８間でＤＭＡによるデータ転送を行う場合を想定し、以下にＤＭＡ制御付ＦＩＦＯ１０７を用いたＤＭＡ転送方式を詳細に説明する。
【００２０】
図２は、図１におけるＤＭＡ制御付ＦＩＦＯ１０７の構成を示すブロック図である。
２０１は、ＦＩＦＯ−Ａ２０３，ＦＩＦＯ−Ｂ２０４から構成されるＦＩＦＯ部であり、ＦＩＦＯ−Ａ２０３，ＦＩＦＯ−Ｂ２０４は、互いにデータのロードが可能である。ＦＩＦＯ−Ａ２０３の入力は、３２ｂｉｔデータバス１０５に接続され、ＦＩＦＯ−Ａ２０３の出力は、３ステートバッファ２１０を介して３２ｂｉｔデータバス１０５に接続されている。
【００２１】
また、ＦＩＦＯ−Ｂ２０４の入力は、１６ｂｉｔデータバス１０９に接続され、ＦＩＦＯ−Ｂ２０４の出力は、３ステートバッファ２１１を介して１６ｂｉｔデータバス１０９に接続されている。２０２は、ＦＩＦＯコントロールレジスタ２０５，転送バイト数レジスタ２０６，転送バイトカウンタＡ２０７、及び転送バイトカウンタＢ２０８から構成されるＦＩＦＯ制御部である（詳細は図６を参照）。２０９は、３２ｂｉｔデータバス１０５と１６ｂｉｔデータバス１０９を中継しているバイパススイッチであり、ＦＩＦＯコントロールレジスタ２０５にて制御されるＢｙｐｓＯｅ信号によって、３２ｂｉｔデータバスと１６ｂｉｔデータバスを直結することができる。
【００２２】
また、３ステートバッファ２１０，２１１のイネーブルラインに、ＦＩＦＯコントロールレジスタ２０５にて制御されるＢｙｐｓＯｅ信号とＤｉｒ信号を入力することにより、データの転送方向の制御を行う。
【００２３】
図３は、図２におけるＦＩＦＯ部２０１の内部構成を示すブロック図である。ＦＩＦＯ−Ａ２０３，ＦＩＦＯ−Ｂ２０４は、３２個のラッチからなるメモリセルを８段接続した３２バイトのＦＩＦＯである。各メモリセルは、セレクタ制御信号によって、データバス幅を８ｂｉｔ，１６ｂｉｔ，３２ｂｉｔに変更することができ、またメモリセルの入力を、前段のメモリセルの出力か、受信ＦＩＦＯからのデータのロードかを切り換えることができる（詳細は図４，図５を参照）。
【００２４】
また、各ＦＩＦＯは、データ転送方向によってラッチタイミングが異なっており、データ転送方向がＡ→Ｂの時（Ｄｉｒ＝１）は、ＦＩＦＯ−Ａ２０３は、信号ＡＣＫ−Ａの立ち上がりエッジ、ＦＩＦＯ−Ｂ２０４は、信号ＡＣＫ−Ｂの立ち下がりエッジ、データ転送方向がＢ→Ａの時（Ｄｉｒ＝０）は、ＦＩＦＯ−Ａ２０３は、信号ＡＣＫ−Ａの立ち下がりエッジ、ＦＩＦＯ−Ｂ２０４は、信号ＡＣＫ−Ｂの立ち上がりエッジによってデータをラッチする。
【００２５】
図４は、図３における各メモリセルの内部構造を示すブロック図である。
４０１は、３２個のラッチで構成されたラッチ部であり、ＡＣＫ−Ａ，／ＡＣＫ−Ａ（ＡＣＫ−Ａの反転），ＡＣＫ−Ｂ，／ＡＣＫ−Ｂ（ＡＣＫ−Ｂの反転）の各信号の立ち上がりエッジにて入力データをラッチする。４０２は、ラッチ４０１に入力するデータを選択する入力セレクタ部であり、セレクタ制御信号によって▲１▼〜▲４▼のどのデータをラッチに入力するかを切り換える。４０３は、ラッチ４０１から出力するデータの出力先を選択する出力セレクタ部であり、セレクタ制御信号によって▲１▼〜▲４▼のどの出力先にデータを出力するかを切り換える。
【００２６】
図５は、セレクタ制御信号の設定による図４のメモリセル内部のラッチ構成パターンを示す図である。
ＦＩＦＯ−Ａ２０３からＦＩＦＯ−Ｂ２０４、またはＦＩＦＯ−Ｂ２０４からＦＩＦＯ−Ａ２０３へデータをロードする場合（条件ｃ５０１）は、入力セレクタ部４０２及び出力セレクタ部４０３は、▲１▼が選択され、ラッチ部４０１の入力には、一方のＦＩＦＯからのデータがセットされる。
【００２７】
また、ＦＩＦＯが、３２ｂｉｔデータバスに接続された時に、前段のメモリセルのデータをラッチする場合（条件ｃ５０２）は、入力セレクタ部４０２及び出力セレクタ部４０３は、▲２▼が選択され、ラッチ部４０１の入力には、前段のメモリセルのデータ（ｂｉｔ（３１：０））がセットされる。そして、ＦＩＦＯが１６ｂｉｔデータバスに接続された時に、前段のメモリセルのデータをラッチする場合（条件ｃ５０３）は、入力セレクタ部４０２及び出力セレクタ部４０３は、▲３▼が選択され、ラッチ部４０１の（ｂｉｔ（３１：２４），ｂｉｔ（２３：１６））の入力には、前段のメモリセルのデータ（ｂｉｔ（１５：０））がセットされ、ラッチ部４０１の（ｂｉｔ（１５：８），ｂｉｔ（７：０））の入力には、ラッチ部４０１の（ｂｉｔ（３１：２４），ｂｉｔ（２３：１６））の出力がセットされる。
【００２８】
さらに、ＦＩＦＯが、８ｂｉｔデータバスに接続された時に、前段のメモリセルのデータをラッチする場合（条件ｃ５０４）は、入力セレクタ部４０２及び出力セレクタ部４０３は、▲４▼が選択され、ラッチ部４０１の（ｂｉｔ（３１：２４））の入力には、前段のメモリセルのデータ（ｂｉｔ（７：０））がセットされ、ラッチ部４０１の（ｂｉｔ（２３：１６））の入力には、ラッチ部４０１の（ｂｉｔ（３１：２４））の出力がセットされ、ラッチ部４０１の（ｂｉｔ（１５：８））の入力には、ラッチ部４０１の（ｂｉｔ（２３：１６））の出力がセットされ、ラッチ部４０１の（ｂｉｔ（７：０））の入力には、ラッチ部４０１の（ｂｉｔ（１５：８））の出力がセットされる。
【００２９】
図６は、図２のＦＩＦＯ制御部の各ブロックの動作内容を説明する図である。ＦＩＦＯコントロールレジスタ２０５は、このＦＩＦＯの動作モードを決定するレジスタである。転送バイト数レジスタ２０６は、１回のＤＭＡ転送で行うバースト長を設定するレジスタであり、設定された値をもとに、後述する転送バイトカウンタＡ２０７，転送バイトカウンタＢ２０８を制御して、バースト長の変更をプログラマブルに行う。転送バイトカウンタＡ２０７は、ＤＭＡＣ１０４が出力する信号ＡＣＫ−Ａをカウントするカウンタであり、転送バイトカウンタＢ２０８は、このＦＩＦＯが出力する信号ＡＣＫ−Ｂをカウントするカウンタである。それぞれのカウンタ値を基にＦＩＦＯ−Ａ，ＦＩＦＯ−Ｂの状況を判断し、セレクタ制御信号，信号ＲＥＱ−Ａ、及び信号ＡＣＫ−Ｂの出力タイミングを制御する。
【００３０】
また、転送バイトカウンタＡ２０７，転送バイトカウンタＢ２０８の初期値はデータの転送方向によって異なり、ＦＩＦＯが、データを受信する場合は、受信回数がセットされる。ＦＩＦＯがデータを送信する場合は、初期値は０であり、ＦＩＦＯが、一方のＦＩＦＯから送信データをロードした時に、送信回数がセットされる。受信回数，送信回数は、転送バイト数レジスタ２０６の値をもとに設定する。
【００３１】
図７は、図１の３２ｂｉｔバス上のＤＭＡＣ１０４から１６ｂｉｔバス上のＩ／Ｏデバイス１０８へのＤＭＡ転送におけるフローチャートである。
まず、Ｉ／Ｏデバイス１０８からＤＭＡ制御付ＦＩＦＯ１０７にＤＭＡ要求（信号ＲＥＱ−Ｂを出力）を行う（ステップＳ７０１）。ＤＭＡ制御付ＦＩＦＯ１０７は、信号ＲＥＱ−Ｂを受信した後、ＤＭＡＣ１０４にＤＭＡ要求（信号ＲＥＱ−Ａを出力）を行う（ステップＳ７０２）。
【００３２】
信号ＲＥＱ−Ａを受信したＤＭＡＣ１０４は、ＦＩＦＯ−Ａ２０３にＤＭＡ転送にてデータを送信する（ステップＳ７０３）。ＦＩＦＯ−Ａ２０３は、１回のＤＭＡ転送バースト長分のデータを受信した後、ＦＩＦＯ−Ｂ２０４に受信データをロードする（ステップＳ７０４）。ＦＩＦＯ−Ｂ２０４は、データを受け取った後、Ｉ／Ｏデバイス１０８にＤＭＡ転送にてデータを送信する（ステップＳ７０５）。ＦＩＦＯ−Ｂ２０４が、Ｉ／Ｏデバイス１０８にデータを送信しているのと同時に、ＤＭＡＣ１０４が、ＦＩＦＯ−Ａ２０３に次のデータを送信する（ステップＳ７０１〜７０３）。
【００３３】
図８は、図１のＤＭＡＣ１０４からＩ／Ｏデバイス１０８へのＤＭＡ転送における３２ｂｉｔデータバスから１６ｂｉｔデータバスへのＤＭＡ転送タイミング図である。
まず、初期設定として、転送バイト数レジスタ２０６を、ＤＭＡＣ１０４のバースト長の設定に合わせて設定する（この実施例では３２バイトに設定する）。
【００３４】
また、ＦＩＦＯコントロールレジスタ２０５を、ＦＩＦＯモード切換ビット＝０（コンフィグレーションモード）、Ｄｉｒ＝１（Ａ→Ｂ）、ＢｙｐｓＯｅ＝０（バイパスしない）、ＦＩＦＯ−Ａビット幅変換＝２（３２ｂｉｔ幅）、ＦＩＦＯ−Ｂビット幅変換＝１（１６ｂｉｔ幅）に設定した後、ＦＩＦＯモード切換ビットのみ１（動作モード）に設定する。この初期設定にて、このＤＭＡ制御付ＦＩＦＯ１０７は、Ｒｅａｄｙ状態となり、転送バイトカウンタＡ２０７、転送バイトカウンタＢ２０８のカウント値が、それぞれ８，０にセットされ、Ｉ／Ｏデバイス１０８から信号ＲＥＱ−Ｂのアサートを待つ。
【００３５】
タイミングｔ８０１で、信号ＲＥＱ−Ｂがアサートされ、その時の転送バイトカウンタＡ２０７の値が８（ＦＩＦＯ−Ａが空の状態）であるので、該ＦＩＦＯは、ＤＭＡＣ１０４に対して信号ＲＥＱ−Ａをアサートする（タイミングｔ８０２）。信号ＲＥＱ−Ａを受けたＤＭＡＣ１０４は、信号ＡＣＫ−Ａに同期して、３２ｂｉｔデータバスにデータを出力する。ＦＩＦＯ−Ａ２０３は、信号ＡＣＫ−Ａの立ち上がりエッジで、データをラッチし、転送バイトカウンタＡ２０７は、−１ディクリメントされ７になる（タイミングｔ８０３）。
【００３６】
ＤＭＡＣ１０４は、バースト長が３２バイトあるので、信号ＡＣＫ−Ａを合計８回出力する。ＦＩＦＯ−Ａ２０３は、信号ＡＣＫ−Ａを８回受信するとデータフルの状態になり、転送バイトカウンタＡ２０７は０になる（タイミングｔ８０４）。転送バイトカウンタＡ２０７の値が０になると、その時の転送バイトカウンタＢ２０８の値を確認し、１か０であれば、ＦＩＦＯ−Ｂ２０４が空であるということなので、ＦＩＦＯ−Ｂ２０４の各ラッチの入力は、ＦＩＦＯ−Ａ側に切り換えられ、転送バイトカウンタＢ２０８の値を１６に設定する（タイミングｔ８０５）。転送バイトカウンタＢ２０８の値が１６に設定されたら、信号ＡＣＫ−Ｂの立ち下がりエッジで、ＦＩＦＯ−Ｂ２０４は、ＦＩＦＯ−Ａ２０３のデータをラッチし、１６ｂｉｔデータバスにデータを出力する（タイミングｔ８０６）。
【００３７】
次の信号ＡＣＫ−Ｂの立ち上がりエッジで、転送バイトカウンタＡ２０７の値を８にリセットし、ＦＩＦＯ−Ｂ２０４の各ラッチの入力をＦＩＦＯ−Ｂ２０４の前段側に切り換える（タイミングｔ８０７）。転送バイトカウンタＡ２０７の値が８（ＦＩＦＯ−Ａが空の状態）にリセットされたので、該ＦＩＦＯは、その時の信号ＲＥＱ−Ｂの状態を確認して、もし、まだアサートされていれば、ＤＭＡＣ１０４に対して信号ＲＥＱ−Ａをアサートする（タイミングｔ８０８）。再度、信号ＲＥＱ−Ａを受けたＤＭＡＣ１０４は、信号ＡＣＫ−Ａに同期して次のデータを出力する（タイミングｔ８０９）。
【００３８】
ＦＩＦＯ−Ａ２０３は、信号ＡＣＫ−Ａを８回受信して転送バイトカウンタＡ２０７の値が０（データフルの状態）となるが、この時、転送バイトカウンタＢ２０８の値が０ではない（まだＦＩＦＯ−Ｂにデータが残っている）ため、ＦＩＦＯ−Ｂ２０４の各ラッチの入力はＦＩＦＯ−Ａ側に切り換えられない（タイミングｔ８１０）。転送バイトカウンタＢ２０８の値が１になった時、ＦＩＦＯ−Ｂ２０４の各ラッチの入力は、ＦＩＦＯ−Ａ側に切り換えられ、転送バイトカウンタＢ２０８の値を１６に設定する（タイミングｔ８１１）。転送バイトカウンタＢ２０８の値が１６に設定されたら、信号ＡＣＫ−Ｂの立ち下がりエッジで、ＦＩＦＯ−Ｂ２０４は、ＦＩＦＯ−Ａ２０３のデータをラッチし、１６ｂｉｔデータバスにデータを出力する（タイミングｔ８１２）。
【００３９】
次の信号ＡＣＫ−Ｂの立ち上がりエッジで、転送バイトカウンタＡ２０７の値を８にリセットし、ＦＩＦＯ−Ｂ２０４の各ラッチの入力をＦＩＦＯ−Ｂ２０４の前段側に切り換える（タイミングｔ８１３）。もし、タイミングｔ８１１で、転送バイトカウンタＡ２０７が０でない（ＦＩＦＯ−Ａ２０３がフルではない）場合、転送バイトカウンタＢ２０８の値は０（ＦＩＦＯ−Ｂ２０４が空の状態）になり、転送バイトカウンタＡ２０７が０になるのを待つことになる。タイミングｔ８１４からは、以上の繰り返しである。
【００４０】
図９は、図１の１６ｂｉｔバス上のＩ／Ｏデバイス１０８から３２ｂｉｔバス上のＤＭＡＣ１０４へのＤＭＡ転送におけるフローチャートである。
まず、Ｉ／Ｏデバイス１０８から、ＤＭＡ制御付ＦＩＦＯ１０７にＤＭＡ要求（信号ＲＥＱ−Ｂを出力）を行う（ステップＳ９０１）。信号ＲＥＱ−Ｂを受信したＤＭＡ制御付ＦＩＦＯ１０７は、Ｉ／Ｏデバイス１０８からＦＩＦＯ−Ｂ２０４にＤＭＡ転送にてデータを受信する（ステップＳ９０２）。ＦＩＦＯ−Ｂ２０４は、１回のＤＭＡ転送バースト長分のデータを受信した後、ＦＩＦＯ−Ａ２０３に受信データをロードする（ステップＳ９０３）。ＦＩＦＯ−Ａ２０３がデータを受け取った後、ＤＭＡ制御付ＦＩＦＯ１０７からＤＭＡＣ１０４にＤＭＡ要求（信号ＲＥＱ−Ａを出力）を行う（ステップＳ９０４）。信号ＲＥＱ−Ａを受信したＤＭＡＣ１０４は、ＦＩＦＯ−Ａ２０３からＤＭＡ転送にてデータを受信する（ステップＳ９０５）。ＦＩＦＯ−Ａ２０３がＤＭＡＣ１０４にデータを送信しているのと同時に、Ｉ／Ｏデバイス１０８は、ＦＩＦＯ−Ｂ２０４に、次のデータを送信する（ステップＳ９０１〜９０２）。
【００４１】
図１０は、図１のＩ／Ｏデバイス１０８からＤＭＡＣ１０４へのＤＭＡ転送における１６ｂｉｔデータバスから３２ｂｉｔデータバスへのＤＭＡ転送タイミング図である。
まず、初期設定として、転送バイト数レジスタ２０６をＤＭＡＣのバースト長の設定に合わせて設定する（この実施例では３２バイトに設定）。また、ＦＩＦＯコントロールレジスタ２０５を、ＦＩＦＯモード切換ビット＝０（コンフィグレーションモード），Ｄｉｒ＝０（Ｂ→Ａ），ＢｙｐｓＯｅ＝０（バイパスしない），ＦＩＦＯ−Ａビット幅変換＝２（３２ｂｉｔ幅），ＦＩＦＯ−Ｂビット幅変換＝１（１６ｂｉｔ幅）に設定した後、ＦＩＦＯモード切換ビットのみ１（動作モード）に設定する。
【００４２】
この初期設定にて、このＤＭＡ制御付ＦＩＦＯ１０７は、Ｒｅａｄｙ状態となり、転送バイトカウンタＡ２０７，転送バイトカウンタＢ２０８の初期値が、それぞれ０，１６にセットされ、Ｉ／Ｏデバイス１０８から信号ＲＥＱ−Ｂのアサートを待つ。タイミングｔ１００１で、信号ＲＥＱ−Ｂがアサートされ、その時の転送バイトカウンタＢ２０８の値が１６（ＦＩＦＯ−Ｂが空の状態）であるので、該ＦＩＦＯは、Ｉ／Ｏデバイス１０８に対して信号ＡＣＫ−Ｂを出力し、信号ＡＣＫ−Ｂを受けたＩ／Ｏデバイス１０８は、信号ＡＣＫ−Ｂに同期して、１６ｂｉｔデータバスにデータを出力する。
【００４３】
ＦＩＦＯ−Ｂ２０４は、信号ＡＣＫ−Ｂの立ち上がりエッジでデータをラッチし、転送バイトカウンタＢ２０８は、−１ディクリメントされ１５になる（タイミングｔ１００２）。ＤＭＡＣ１０４のバースト長が３２バイトであるので、該ＦＩＦＯは、ＦＩＦＯ−Ｂ２０４がフルになるまで、信号ＡＣＫ−Ｂを１６回出力し、データを受信する。信号ＡＣＫ−Ｂを１６回出力すると、転送バイトカウンタＢ２０８は０になる（タイミングｔ１００３）。転送バイトカウンタＢ２０８が０になると、その時の転送バイトカウンタＡ２０７の値を確認し、０であればＦＩＦＯ−Ａ２０３が空であるということなので、ＦＩＦＯ−Ａ２０３の各ラッチの入力は、ＦＩＦＯ−Ｂ側に切り換えられ、転送バイトカウンタＡ２０７を８に設定する（タイミングｔ１００４）。転送バイトカウンタＡ２０７の値が８に設定されたら、該ＦＩＦＯは、ＤＭＡＣ１０４に対して信号ＲＥＱ−Ａをアサートする（タイミングｔ１００５）。
【００４４】
信号ＲＥＱ−Ａを受けたＤＭＡＣ１０４は、信号ＡＣＫ−Ａを出力するので、信号ＡＣＫ−Ａの立ち下がりエッジで、ＦＩＦＯ−Ａ２０３は、ＦＩＦＯ−Ｂ２０４のデータをラッチし、３２ｂｉｔデータバスにデータを出力する（タイミングｔ１００６）。次の信号ＡＣＫ−Ａの立ち上がりエッジで、転送バイトカウンタＢ２０８を１６にリセットし、ＦＩＦＯ−Ａ２０３の各ラッチの入力をＦＩＦＯ−Ａの前段側に切り換える（タイミングｔ１００７）。転送バイトカウンタＢ２０８が１６（ＦＩＦＯ−Ｂ２０４が空の状態）にリセットされたので、該ＦＩＦＯは、その時の信号ＲＥＱ−Ｂの状態を確認して、もし、まだアサートされていれば、Ｉ／Ｏデバイス１０８に対して信号ＡＣＫ−Ｂを出力して、次のデータを受信する（タイミングｔ１００８）。
【００４５】
ＦＩＦＯ−Ａ２０３は、信号ＡＣＫ−Ａを８回出力して、転送バイトカウンタＡ２０７が０（データ空の状態）となるが、この時、転送バイトカウンタＢ２０８が０ではない（まだＦＩＦＯ−Ｂ２０４がデータ受信中）ため、すぐにはＦＩＦＯ−Ａ２０３の各ラッチの入力をＦＩＦＯ−Ｂ側に切り換えず、転送バイトカウンタＢ２０８が０になるのを待つことになる（タイミングｔ１００９）。以降は、タイミングｔ１００３からの繰り返しである。
【００４６】
【発明の効果】
本発明によれば、ビット幅の異なるデバイス間において、このＦＩＦＯを中継してＤＭＡ転送することにより、それぞれのデバイスの持つビット幅でデータ転送を行うため、狭い方のビット幅に合わせたデータ転送をする必要がなくなり、高速で効率の良いデータ転送が可能となる。
【００４７】
そして、内部のＦＩＦＯブロックを複数で構成することにより、片方のＦＩＦＯがデータを送信している時に、もう片方のＦＩＦＯがデータを受信することが可能となるため、より高速な効率の良いデータ転送が可能となる。
【００４８】
さらに、ＦＩＦＯの転送バイト数をプログラマブルに設定可能にすることにより、ＤＭＡＣの任意の転送バースト長の設定に対してＤＭＡ転送が可能となる。
【００４９】
また、ＦＩＦＯのビット幅をプログラマブルに設定可能にすることにより、接続するデバイスのビット幅を指定する必要がなく、回路変更を行うことなく任意のデバイス間のＤＭＡ転送が可能となる。
【図面の簡単な説明】
【図１】本発明のＤＭＡ転送システムの一実施例を示したブロック図である。
【図２】図１におけるＤＭＡ制御付ＦＩＦＯのブロック図である。
【図３】図２におけるＤＭＡ制御付ＦＩＦＯに内蔵されているＦＩＦＯ部のブロック図である。
【図４】図３におけるＦＩＦＯ部を構成するメモリセル部の内部構造を示すブロック図である。
【図５】図４におけるＦＩＦＯ部を構成するメモリセル内部のラッチ構成パターンを示す図である。
【図６】図２におけるＤＭＡ制御付ＦＩＦＯに内蔵されているＦＩＦＯ制御部を構成する各ブロックの動作内容を示す図である。
【図７】本発明における３２ｂｉｔデータバスから１６ｂｉｔデータバスへのＤＭＡ転送処理のフローチャート図である。
【図８】本発明における３２ｂｉｔデータバスから１６ｂｉｔデータバスへのＤＭＡ転送を行う場合のタイミング図である。
【図９】本発明における１６ｂｉｔデータバスから３２ｂｉｔデータバスへのＤＭＡ転送処理のフローチャート図である。
【図１０】本発明における１６ｂｉｔデータバスから３２ｂｉｔデータバスへのＤＭＡ転送を行う場合のタイミング図である。
【符号の説明】
１０１…中央演算処理装置（ＣＰＵ）、１０２…システムコントローラ、１０３…メモリ、１０４…ＤＭＡＣ、１０５…３２ｂｉｔ幅データバス、１０６…各種制御信号、１０７…ＤＭＡ制御付ＦＩＦＯ、１０８…Ｉ／Ｏデバイス、１０９…１６ｂｉｔ幅データバス、２０１…ＦＩＦＯ、２０２…ＦＩＦＯ制御部、２０３…ＦＩＦＯ−Ａ、２０４…ＦＩＦＯ−Ｂ、２０５…ＦＩＦＯコントロールレジスタ、２０６…転送バイト数レジスタ、２０７…転送バイトカウンタＡ、２０８…転送バイトカウンタＢ、２０９…バイパススイッチ、２１０，２１１…３ステートバッファ、４０１…ラッチ部、４０２…入力セレクタ部、４０３…出力セレクタ部。
【図１】
0003544146.tif 000002
【図２】
0003544146.tif 000003
【図３】
0003544146.tif 000004
【図４】
0003544146.tif 000005
【図５】
0003544146.tif 000006
【図６】
0003544146.tif 000007
【図７】
0003544146.tif 000008
【図８】
0003544146.tif 000009
【図９】
0003544146.tif 000010
【図１０】
0003544146.tif 000011