8 Replies Latest reply on Feb 16, 2020 10:28 PM by TeMa_2997106

    CYUSB3014-BZXIのGPIF2におけるWatermarkの指定

    TeMa_2997106

      FX3を使ってFPGA I/Fを実現するため、GPIF2を使って設計しています。

       

      BULKIN転送において、途中のデータが抜けることがあります。

      USB通信上はデータのWrite自体は問題なく見えるのですが、気になったことがあります。

       

      AN65974の"9.3 General Formulae for Using Partial Flags"を

      拝見すると、FLAGの変化はWatermarkとデータバス幅に依存する記載があります。

       

      現在、Watermark=8、バス幅は32bitで設定していますが、その場合、

      Wartermarkに設定したフラグが立ってから

       

      8*(32/32)-4 = 4

       

      4回Writeがされると本来のReadyに設定したフラグが立つはずなのですが、

      FPGA側の波形を見ると8回Writeができてしまっています。

      これにより、本来の数より多い回数のWriteがされてデータが抜けている

      可能性があります。

       

      FLAGの挙動はWatermarkとReady、それにBus幅の指定以外に依存することはありますでしょうか。

      他に注意すべき点はありますでしょうか。

        • 1. Re: CYUSB3014-BZXIのGPIF2におけるWatermarkの指定
          HirotakaT_91

          ご認識いただいております通り、Watermark = 8, Bus幅 = 32bitで設定された場合、式より、8*(32/32) - 4 = 4 となり、

          4回Writeがされると本来のReadyに設定したフラグが立つと考えられます。

           

          FLAGの挙動は、Watermark、Ready、Bus幅の指定により決まります。

           

          GPIF-II designer上の設定がFX3のprojectに反映されていることを改めてご確認ください。

          また、AN65974をベースにしていると思われますが、CyU3PGpifSocketConfigure() APIの各設定を教えていただけますでしょうか?

           

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

          Hirotaka Takayama

          • 2. Re: CYUSB3014-BZXIのGPIF2におけるWatermarkの指定
            TeMa_2997106

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

             

            設定は下記です。

             

            #define WATER_MARK_VAL 8

             

            CyU3PGpifSocketConfigure (0,CY_U3P_PIB_SOCKET_0,WATER_MARK_VAL,CyFalse,1);

            CyU3PGpifSocketConfigure (1,CY_U3P_PIB_SOCKET_1,WATER_MARK_VAL,CyFalse,1);

            CyU3PGpifSocketConfigure (3,CY_U3P_PIB_SOCKET_3,WATER_MARK_VAL,CyFalse,1);

             

            GPIF2から出力されたヘッダは取り込んでおり、SDK側で反映されていることは確認しております。

             

            以上です。

            • 3. Re: CYUSB3014-BZXIのGPIF2におけるWatermarkの指定
              HirotakaT_91

              いただいた波形では、PIB_SOCKET_1をP2Uチャネル、PIB_SOCKET_3をU2Pチャネルとして使っていると思いましたが、PIB_SOCKET_0はどのように使われていますでしょうか。

               

              なんにせよ、同様の現象を再現できるかをAN65974 FWと連続的にデータを書き込まないようなFPGA configurationにて確認し、報告させていただきます。

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

              Hirotaka Takayama

              • 4. Re: CYUSB3014-BZXIのGPIF2におけるWatermarkの指定
                TeMa_2997106

                PIB_SOCKET_0はPIB_SOCKET_1と同じ設定で使用しています。

                 

                ・PIB_SOCKET_0(thread0) : IN transfer (Host PCのBULKIN,CX3側が送信)

                ・PIB_SOCKET_1(thread1) : IN transfer (Host PCのBULKIN,CX3側が送信)

                ・PIB_SOCKET_2(thread2) : No transfer 未使用

                ・PIB_SOCKET_3(thread3) : OUT transfer (Host PCのBULKOUT,CX3側が受信)

                 

                です。

                 

                また、転送は

                 

                Read時(一番上の波形)が

                - FLAGA,B=11のときは、バーストリード

                - FLAGA=1、FLAGB=0のときは、シングルリード

                 

                Write時(真中の波形)が

                - FLAGA,B=11、FLAGA=1、FLAGB=0

                  いずれの場合もシングルライト

                 

                となっています。

                • 5. Re: CYUSB3014-BZXIのGPIF2におけるWatermarkの指定
                  HirotakaT_91

                  以下の環境でWrite転送(IN転送)を行い、状況を再現しようとしましたが、状況が再現できませんでした。

                  PIB_SOCKET_1 (thread 1) as IN transfer.

                  PCLK: 100 MHz

                  Single Write (バースト転送なし)

                  DMA Buffer Size: 1KB, buffer数: 2

                  FLAGA DMA Flag: Current_Thread_DMA_Ready

                  FLAGB DMA Flag: Current_Thread_DMA_WaterMark

                  API: CyU3PGpifSocketConfigure (1,CY_U3P_PIB_SOCKET_1,8,CyFalse,1);

                  Application Software: C++ Streamer (Cypressで提供しているサンプルソフトウェア)

                   

                  上記環境で、断続的なwriteをするテストを実施しましたが、WaterMarkの計算式通り、4回のWrite後にFLAGAが有効になることが確認されました。

                  過去の様々な情報も確認していますが、こういった事象は現状確認されておらず、お客様の設定や使い方に懸念があります。

                   

                  まず、以下の点についてご確認いただけますでしょうか?

                  Q1. AN65974の"表 3. 同期スレーブ FIFO のタイミング パラメーター"をすべて満たしていますか?特に、SLWR信号がtWRS, tWRH(セットアップタイム、ホールドタイム)を満たしていますか?PCLKは100MHz以下ですか?

                  Q2. いかなる場合もsingle write時に4回分余分にWriteされていますか?

                  Q3. PIBエラーはありますか?

                   

                   

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

                  Hirotaka Takayama

                  • 6. Re: CYUSB3014-BZXIのGPIF2におけるWatermarkの指定
                    TeMa_2997106

                    ご質問いただいた点について回答致します。

                     

                    Q1. AN65974の"表 3. 同期スレーブ FIFO のタイミング パラメーター"をすべて満たしていますか?特に、SLWR信号がtWRS, tWRH(セットアップタイム、ホールドタイム)を満たしていますか?PCLKは100MHz以下ですか?

                    A1. はい。タイミング的には問題はありません。

                     

                    Q2. いかなる場合もsingle write時に4回分余分にWriteされていますか?

                    A2. はい。常に4回分多くWriteされています。

                     

                    Q3. PIBエラーはありますか?

                    A3. ありません。

                     

                    以上です。

                    • 7. Re: CYUSB3014-BZXIのGPIF2におけるWatermarkの指定
                      HirotakaT_91

                      各質問事項について、ご確認いただきまして誠にありがとうございます。

                       

                      こちらでは再現できていない現象であるため、まず、元のAN65974のFirmwareでは正しく動作するか確認していただくことは可能でしょうか?

                      これが問題なく動作した場合、そこから、変更されているFirmwareの項目を一つずつご確認いただき、動作が正しくなくなる状況を見つけていただけますと幸いです。

                       

                      または、使用しているFX3 FirmwareのソースコードとGPIF-IIのプロジェクトファイルをお送りいただければ、設定に問題がないかどうかを確認致します。

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

                      Hirotaka Takayama

                      • 8. Re: CYUSB3014-BZXIのGPIF2におけるWatermarkの指定
                        TeMa_2997106

                        了解しました。

                         

                        取得が叶うかわかりませんが、ファイル一式が入手できましたら展開致します。

                        また、ANに付随するリファレンスのFWでの動作確認も可能か否かを見ます。

                         

                        以上です。