- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
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幅の指定以外に依存することはありますでしょうか。
他に注意すべき点はありますでしょうか。
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
以下の環境で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
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ご認識いただいております通り、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
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ご回答ありがとうございます。
設定は下記です。
#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側で反映されていることは確認しております。
以上です。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
いただいた波形では、PIB_SOCKET_1をP2Uチャネル、PIB_SOCKET_3をU2Pチャネルとして使っていると思いましたが、PIB_SOCKET_0はどのように使われていますでしょうか。
なんにせよ、同様の現象を再現できるかをAN65974 FWと連続的にデータを書き込まないようなFPGA configurationにて確認し、報告させていただきます。
よろしくお願い致します。
Hirotaka Takayama
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
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
いずれの場合もシングルライト
となっています。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
以下の環境で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
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
ご質問いただいた点について回答致します。
Q1. AN65974の"表 3. 同期スレーブ FIFO のタイミング パラメーター"をすべて満たしていますか?特に、SLWR信号がtWRS, tWRH(セットアップタイム、ホールドタイム)を満たしていますか?PCLKは100MHz以下ですか?
A1. はい。タイミング的には問題はありません。
Q2. いかなる場合もsingle write時に4回分余分にWriteされていますか?
A2. はい。常に4回分多くWriteされています。
Q3. PIBエラーはありますか?
A3. ありません。
以上です。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
各質問事項について、ご確認いただきまして誠にありがとうございます。
こちらでは再現できていない現象であるため、まず、元のAN65974のFirmwareでは正しく動作するか確認していただくことは可能でしょうか?
これが問題なく動作した場合、そこから、変更されているFirmwareの項目を一つずつご確認いただき、動作が正しくなくなる状況を見つけていただけますと幸いです。
または、使用しているFX3 FirmwareのソースコードとGPIF-IIのプロジェクトファイルをお送りいただければ、設定に問題がないかどうかを確認致します。
よろしくお願い致します。
Hirotaka Takayama
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
了解しました。
取得が叶うかわかりませんが、ファイル一式が入手できましたら展開致します。
また、ANに付随するリファレンスのFWでの動作確認も可能か否かを見ます。
以上です。