3 Replies Latest reply on Jan 5, 2020 9:42 PM by HirotakaT_91

    FX3 GPIF

    youm_4511561

      AN65974の「5.3 Synchronous Slave FIFO Write Sequence」を参照しています
       DMA バッファ サイズが1024Byte、バッファ数1個の場合

       

      ①PKTEND#信号の扱いについて
       ショートパケット,ZLPではPKTEND#信号をアサートするとすることで転送開始する
       とありますが、1024Byte転送する場合は、FIFOに1024Byteデータを書き込みFULLになると
       自動で転送開始するのでしょうか?それとも、この場合もPKTEND#信号をアサートしないと
       転送は開始されないのでしょうか?

       

      ②1024Byteのデータを転送後、続けて512Byteを転送する場合は、FIFOに1024Byteデータを書き込み
       転送を開始し、FIFO FULLのフラグ(FLAGA)が1(FULLでない)になったら512Byteのデータを
       すこしずつセットしていけばよいですか。
       また、FIFOFULLのフラグ(FLAGA)が1(FULLでない)になるのはどのタイミングでしょうか

       

      ③AN65974の「図11. デュアルソケットにより継ぎ目のない転送を実現する」
       のサンプルコードはあるでしょうか

        • 1. Re: FX3 GPIF
          HirotakaT_91

          Cypress Developer Communityをご利用いただきありがとうございます。

           

          A1: PKTENDをassertするのは、ショートパケットまたはZLPの場合のみでございます。

          バッファが満たされれば(Fullになれば)PKTENDなしに転送がされます。

           

          A2:

          FullになったDMAバッファの内容がコンシューマ側にコミットされれば(または複数バッファが用意された場合はすぐに別のバッファが有効になることで)、FIFO FullのフラグがFullではなくなります。

          FPGA等からSlave FIFOに書き込みを行う場合、FIFO Fullフラグの状態を見ながら書き込んでいくことになります。

          A3回答にも記述していますが、サンプルがございますのでご参照ください。AN65974の"11.4  FPGA Implementation Details "にいくつかの例が記述されております。

           

          A3: すみません、どちらの図に対しての要求でしょうか。文書番号を教えていただけますか?

          AN65974のサンプルコードは https://www.cypress.com/documentation/application-notes/an65974-designing-ez-usb-fx3-slave-fifo-interface

          にございます。FPGA側のサンプルコード(VerilogとVHDL)もございます。

           

          よろしくお願い致します。

          Hirotaka Takayama

          • 2. Re: FX3 GPIF
            youm_4511561

            回答ありがとうございます。

             

            DMA バッファ サイズが1024Byte、バッファ数1個の場合

            A2:

            「コンシューマ側にコミット」とはどういった状態でしょうか。

            FIFOなので1024Byte書き込みFIFO Fullになり転送が開始されるとFIFOのカウンターが1024→1023→1022・・・・→0

            となるイメージがあります。その場合、「1023」でFullで無くなる、又は0でFullで無くなる、それ以外、のどれでしょうか

             

            A3:文書番号: 001-85370 Rev. *Dとなります。

             

             

                 無題.png

            • 3. Re: FX3 GPIF
              HirotakaT_91

              A2 cont'd:

               

              FIFOのFullについてですが、ご認識は正しいです。

              Full信号はFullではなくなった時(1023以下になったら)de-assertされます。

              ただし、通常はAN65974で描かれているように2つ以上のDMAバッファを用意し、DMAバッファがFullになってプロデューサがDMA転送を実施した際、すぐに空のDMAバッファを参照するようにFX3内部で切り替えられます。それにより、Full信号はすぐにde-assertされます。

               

              FYI:

               DMA転送をする際、送信する側はプロデューサ側、受信する側はコンシューマ側と定義されています。

               Slave FIFO Interfaceを使用される際、FPGA等からSlave FIFOを経由してUSBホストにデータが送られる動作(IN転送)を例として以下説明致します。

                FPGA-> Slave FIFOへデータが送られます。その内容がDMAバッファに送られます。この送る側(GPIF II側. FX3内のブロックとしてPIBと定義されています)がプロデューサになります。

                DMAバッファはFullになった段階、またはPKTEND#を受け取った段階で、コミットします。データはUSB側(FX3内のブロックとしてUIBと定義されています)にDMA転送で送られ、最終的にUSB EPと通信するわけですが、このUIB側がコンシューマになります。

               

               (逆に、USB側からデータが送られ、それがSlave FIFOを経由してFPGA等へ送られる場合であれば、UIBがプロデューサ側、PIBがコンシューマ側になります。)

               上記はざっくりとした説明であるため、詳細はTRM等をご参照ください。https://www.cypress.com/documentation/technical-reference-manuals/ez-usb-fx3-technical-reference-manual

               

               

              A3 cont'd:

               

              AN75705「EZ-USB FX3入門」ですね。

              この動作はAN75779のサンプルプロジェクトにて実装されております。

              https://www.cypress.com/documentation/application-notes/an75779-how-implement-image-sensor-interface-using-ez-usb-fx3-us…

               

              よろしくお願い致します。

              Hirotaka Takayama