7 Replies Latest reply on Feb 14, 2019 3:31 AM by HirotakaT_91

    AN65974 SF_loopback.imgでの通信ミスについて

    user_2424341

      SF_loopback.imgのサンプルデザインを用いた通信において、稀にIN転送データがAll0に化ける現象があります。

       

       

       

      当方の検証しているシステムは以下になります。

      ・CYUSB3KIT-003にSF_loopback.imgをプログラムし、USB3.0で通信
      ・GPIF2にAlteraFPGA評価ボードを接続し、AN65974のloopbackデザインを書き込み
      ・ホストPC上でVisual studio2012 (C#)からコマンドを連続送受(Out転送→IN転送を繰り返し)

       

       

      ここで、FPGAのHDLデザインがデフォルトのままだと問題ないのですが、
      ループバック前にFPGA内でデータ加工を施すなど、何かしら追加の処理時間が生じると
      稀に通信ミスが発生し、IN転送のコードがAll0に変化する場合があります。
      (デフォルト時:200k回以上ミス無く送信データがループバック、
      処理時間有り時:0.5k-1k回に1回程度の頻度で、All0データがホストPCに返る)

       

      単純化のために、デフォルトのHDLコードに記述追加し、loop_back_wait_flagaのステート時に
      待ち時間(100msec程度)を設けるのみの変更で現象は再現しており、BulkInEndPtの受信待ち状態で
      待機しているうちにデータ化けが発生しているように見受けられます。

       

      なお、GPIF2部をロジックアナライザでモニタした結果、およびCYUSB3KIT-003のJTAGデバッグモードにて
      CyFxSlFifoPtoUDmaCallback内のbuffer_pが指すメモリ番地(バッファ)を見に行った結果では、異常発生時にも
      データの化け(ALL0)は無いように見受けられるため、FPGA->FX3への転送は成功したうえで、

      FX3->HOST-PCへの転送時にデータが化けているかのように見えるのですが、

      何か原因は考えられますでしょうか?

       

       

      田中

        • 1. Re: AN65974 SF_loopback.imgでの通信ミスについて
          HirotakaT_91

          loop_back_wait_flagaステート時に100msを設けるという変更を試したそうですが、その際に、FX3でバッファオーバーランエラーは発生していませんか?

           

          buffer_pの指すメモリ番地を見に行った上で問題がないように見えたということですので、FPGA->FX3の転送はうまくいっているように思われます。そうするとALL0が出力されているのはFX3->Host側であるとは思います。(また、FPGA側でデータの欠落がないことをご確認いただいていると思いますし、バッファオーバーランエラーなどは起きていない気がします)

          こちらでも同じような環境を用意して確認し、ご連絡致します。

           

          引き続きよろしくお願い致します。

          Hirotaka Takayama

          • 2. Re: AN65974 SF_loopback.imgでの通信ミスについて
            user_2424341

            高山様

             

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

            バッファオーバーランエラーですが、発生していないと思われます。

            All0受信発生時にVisual Studio上で確認すると、

            BulkInEndPt.XferDataの戻り値はTrueであり、メンバ変数を確認したところ、

            NtStatusやUsbdStatusは0のままとなっております。

            確認方法に問題あればご指摘お願いします。

             

            一点気になることとして、LastErrorが997になっている点ですが、

            今回のAll0受信発生とは関係なく、正常受信していると思われる際にも

            常にLastErrorが997になるのは正しいでしょうか?

             

            現象の再現性をご確認いただけるとのことで、お手数をお掛けします。

            念のため、こちらでFPGAのVerilogコード(slaveFIFO2b_loopback.v)を

            修正した点は以下になります。

             

             

            ----------------252行目辺りのコードを以下に修正-------------------------

            loop_back_wait_flaga :begin

              if ((flaga_d == 1'b1) && (wait_count[31:0] >= 32'd10000000))begin

               next_loop_back_state = loop_back_wait_flagb;

              end else begin

               next_loop_back_state = loop_back_wait_flaga;

              end

            end

            ----------------以下を追記-----------------------------------------------------

            reg [31:0]wait_count;

            always @(posedge clk_100, negedge reset_)begin
            if(!reset_)begin
              wait_count[31:0] <= 32'd0;
            end else if(current_loop_back_state == loop_back_wait_flaga) begin
              wait_count[31:0] <=  wait_count[31:0] + 32'd1;
            end else begin
              wait_count[31:0] <= 32'd0;
            end
            end

            ------------------------------------------------------------------------------------------

             

             

            もう一点、以下スレッドが今回の現象と関連しているかが

            気になっているのですが、確認して原因切り分けする方法はございますでしょうか?

             

            https://community.cypress.com/thread/37169

             

            田中

            • 3. Re: AN65974 SF_loopback.imgでの通信ミスについて
              HirotakaT_91

              田中様

               

              ご返信遅くなり大変申し訳ございません。

              社内で確認を進めているのですが、こちらでは現在まだ現象を確認できておりません。

              Xilinx Spartan 6 SP601, Altera Cyclone V GX Starter KitにてBulkloopアプリケーションを実行し、データを取得し続けましたが、IN転送のデータが正しく送れないといった現象は確認できませんでした。

               

              確認方法としては良いと思いますが、Last Error 997が常に発生するというのが気になります。

              使用しているホストアプリケーションのベースはBulkloopでしょうか?

              Error 997はタイムアウト発生時に起こるものなのですが、正常に通信できていてもこれが出るのは妙です。

               

              CYUSB.NETのissueとの関連性についてはまた後ほど回答させていただければと思います。

               

              ご質問ばかりで恐縮ですが、以下の点を追加で教えていただけますか?

              ・使用しているホストアプリケーション(Bulkloopや他のアプリケーションをベースにしている、またはそのまま使っているなど)

              ・ご使用のAltera FPGA評価ボード、及びその設定(sdc, ピン配置などもご提供可能であれば)

              ・その他気になること

               

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

              Hirotaka Takayama

              • 4. Re: AN65974 SF_loopback.imgでの通信ミスについて
                user_2424341

                Takayama様

                 

                ご確認を進めていただき誠にありがとうございます。

                ご質問の件にご回答差し上げます。

                 

                >・使用しているホストアプリケーション(Bulkloopや他のアプリケーションをベースにしている、またはそのまま使っているなど)

                この点に関しまして、社内のソフトウェア部門に一任しているため実装方法には明るくないのですが、VisualStudio2012 Express上にて、CyUSB.dllを取り込んでAPIを実行していると認識しています。今回、検証用のホストアプリケーション(0xA5…をOut転送→LoopBack→In転送のループをし、受信データが0x00にヒットするとエラー停止)を作成させましたので、添付致します。本ホストアプリでも現象が再現することは確認できました。

                 

                >・ご使用のAltera FPGA評価ボード、及びその設定(sdc, ピン配置などもご提供可能であれば)

                ボードはSodia(Cyclone V SoC)を使用しております。sdc制約はAN65974そのままを使用しております。

                ピン配置(csv)、デフォルトから変更したコード(.v)を添付致します。

                 

                >・その他気になること

                数点ございます。

                1, 本日上記検証時に、ホストとして使用するPCを変えると現象が出ないものがあることに気づきました。

                 そこで、何らかのタイミングが関係していることを疑い、FPGA側で用意していた待ち時間を固定値ではなく、パラメータとして通信毎に

                 カウントアップしていくようFPGA側のファイルを修正しました(添付:SlaveFIFO2b_loopback.v)。

                 結果として、固定の待ち時間時は再現しなかったPCでも、エラー再現させることができましたが、程度の差があり、確実に発生させる

                 条件はまだ見つけられていません。

                 OSはWindows7(64bit)または10(64bit)のもの3台で試して3台ともエラー発生しました。

                 

                2, 今回の通信エラーと関係するかわかりませんが、USB(kit)のエニミュレーション時に、先にFPGAが接続されているとUSBを認識しないです。

                 イメージ書き込み後にFPGAの電源を入れて回避しています。

                • 5. Re: AN65974 SF_loopback.imgでの通信ミスについて
                  HirotakaT_91

                  田中様

                   

                  1. ご提供いただきました検証用ホストアプリケーションについて

                  こちらの環境でも、ご用意いただいた検証用ホストアプリケーションを用いることで、0x00を受け取ることがあることを確認できました。

                   

                  2. Altera FPGA評価ボード環境について

                  ご連絡いただきありがとうございます。

                  "1."にて現象が確認できたため、ハードウェアに依存するものではないように思えます。

                   

                  3. ホストとして使用するPCを変えると現象が出ないものがある

                  このverilogファイルを使わない場合でも"1."の通りこちらで現象は確認されました。

                   

                  4. CYUSB3KIT-003のEnumerationよりも先にFPGAが接続されていると認識されない件

                  これはAN65974の使用手順にもございます。CYUSB3KIT-003に電源を印加後、FPGAの電源をお入れください。

                   

                   

                  さて、田中様のほうでもBulkloopアプリケーションを試してみていただきたく思います。

                  Bulkloopは、シンプルにOUT転送->loopback->IN転送 をし、OUT dataとIN dataを比較しています。0x00が返ってくればFailureとなります。

                   

                  こちらの環境では、サイプレスの用意しているBulkloopアプリケーションではエラーが起こっておりません。

                  (実行ファイルのあるフォルダはこちらです。C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\cpp\bulkloop\x86\Release

                   

                  Bulkloopを実行し、問題が起きたかどうかご連絡いただけますか?

                   問題が起きなかった場合:ご用意いただいているホストアプリケーションが問題の可能性があります。

                   問題が起きた場合:まだ問題の所在が明らかではありません。こちらでもより多くの環境で調べてみます。Sodiaボードも可能であれば入手し検証します。

                   

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

                  Hirotaka Takayama

                  • 6. Re: AN65974 SF_loopback.imgでの通信ミスについて
                    user_2424341

                    高山様

                     

                    ご返信ありがとうございます。

                     

                    >1,

                    現象が再現したとのことで、ご確認ありがとうございました。

                     

                    >2, 3

                    承知しました。

                     

                    >4,

                    確認不足失礼いたしました。

                     

                    Bulkloopでの確認結果ですが、このホストアプリを用いる限り、こちらの環境でも現象は再現しませんでした。

                    (Out転送とIn転送の値が同じように増加し続けます。Fixコード、Incrementalコードどちらも試しました)

                     

                    このため、ご指摘いただいた内容から、ホストアプリケーション因の可能性が高いということになると思いますが、

                    原因の切り分け方法や、安全な実装とするために試すべきことなどあればご教授いただけますでしょうか。

                     

                    田中

                    • 7. Re: AN65974 SF_loopback.imgでの通信ミスについて
                      HirotakaT_91

                      田中様

                       

                      Bulkloopでの確認ありがとうございます。

                      問題が起こらない件、承知しました。

                       

                      サイプレス側としては、Bulkloopアプリケーションのソースコードを参照しながら問題を探していくことを推奨致します。

                       

                      C#のbulkloopアプリケーションも以下にございますので、ソースコードをご覧いただけます。

                      C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\application\c_sharp\bulkloop

                      Form1.cs 等を参照しながら、CommunicationTest(ご提供いただいたプロジェクト)との違いを検証していくのが良いと思います。

                       

                      安全な実装を目指す点では、CyUSB.dllを活用し実装をすることをお勧めします。

                      Cypress CyUSB .NET Programmer's Referenceを必要に応じてご参照ください。

                      C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\doc\SuiteUSB\CyUSB.NET.pdf

                       

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

                      Hirotaka Takayama