- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
Q1-1)
AN65974のSF_streamIN.imgのサンプルデザインで、バッファは1個あたり16Kバイトの大きさがあります。このバッファをフルに使わず、例えば3Kバイトまで書き込んだあとにPKTENDで書き込み終了したとします、この状態で書き込みを再開したときに、バッファのどの位置から書き込まれるのでしょうか?(以前のバッファのPKTENDで終了した位置から続いて書き込まれる?もしくは、次のバッファに移って先頭位置から書き込まれるのでしょうか?)
Q1-2)
また、このときのストリームIN転送のデータパケットの送信動作はどうなりますでしょうか?(PKTENDの時点で送信開始もしくは、最大パケットサイズの1024バイト書き込まれる毎に順次送信されるのでしょうか?)
マクニカ/荒井
解決済! 解決策の投稿を見る。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
A1-1)
PKTENDで書き込み終了、というのはPKTEND#がアサート(Low)されて、そこで書き込み終了したと認識しましたが合っていますでしょうか?
WRITEステートで3Kバイト分(つまりはバッファ全域ではない)書き込みを行った後、PKTEND#がアサート(Low)されて書き込みが終了すれば、SHORT_PKTステートに遷移し、COMMIT(データパケット/バッファを転送)します。
その後、IDLEステートに遷移し、再びWRITEをする時にWRITEステートへ遷移します。
ソケットは DMA バッファが一杯(Full)or 空(Empty)になった後、ある DMA ディスクリプタから別の DMA ディスクリプタに切り替えるため、次のバッファに移って先頭位置から書き込まれます。
A1-2)
GPIFのState Machineを御覧ください。
WRITEステートで書き込みをした後、!SLWR&!PKEND 条件がTrueであればSHORT_PKT転送を行います。
WRITEステートで書き込みをした後、(PKEND&SLWR)|SLCS 条件がTrueであればIDLEステートへ遷移します。そしてSLWR&!SLCS&!PKEND&SLRD 条件がTrueであればZLP転送を行います。(後者はフルパケット転送の時に行われます。)
GPIF-II DesignerのAction Listについては"AN87216 - Designing a GPIF II Master Interface"または"GPIF II Designer 1.0"をご参照ください。
http://www.cypress.com/documentation/application-notes/an87216-designing-gpif-ii-master-interface
http://www.cypress.com/system/files/document/files/GPIFII_Designer_User_Guide_001-75664_0.pdf
よろしくお願い致します。
Hirotaka Takayama
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
A1-1)
PKTENDで書き込み終了、というのはPKTEND#がアサート(Low)されて、そこで書き込み終了したと認識しましたが合っていますでしょうか?
WRITEステートで3Kバイト分(つまりはバッファ全域ではない)書き込みを行った後、PKTEND#がアサート(Low)されて書き込みが終了すれば、SHORT_PKTステートに遷移し、COMMIT(データパケット/バッファを転送)します。
その後、IDLEステートに遷移し、再びWRITEをする時にWRITEステートへ遷移します。
ソケットは DMA バッファが一杯(Full)or 空(Empty)になった後、ある DMA ディスクリプタから別の DMA ディスクリプタに切り替えるため、次のバッファに移って先頭位置から書き込まれます。
A1-2)
GPIFのState Machineを御覧ください。
WRITEステートで書き込みをした後、!SLWR&!PKEND 条件がTrueであればSHORT_PKT転送を行います。
WRITEステートで書き込みをした後、(PKEND&SLWR)|SLCS 条件がTrueであればIDLEステートへ遷移します。そしてSLWR&!SLCS&!PKEND&SLRD 条件がTrueであればZLP転送を行います。(後者はフルパケット転送の時に行われます。)
GPIF-II DesignerのAction Listについては"AN87216 - Designing a GPIF II Master Interface"または"GPIF II Designer 1.0"をご参照ください。
http://www.cypress.com/documentation/application-notes/an87216-designing-gpif-ii-master-interface
http://www.cypress.com/system/files/document/files/GPIFII_Designer_User_Guide_001-75664_0.pdf
よろしくお願い致します。
Hirotaka Takayama
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
A1-2)
GPIFのState Machineの質問に関しまして補足させて頂きます。
質問内容の詳細は下記となります。
(質問)
AN65974の同期スレーブFIFOのファームウェアサンプルデザイン(StreamIN.imgなど)の場合、
エンドポイント1INがスレッド0に対応し、スレッド0用のフラグとしてFLAGAがスレッド0専用Full、FLAGBがスレッド0専用部分的Full(ウォーターマーク6)という構成となっています。
この構成のとき、スレッド0のバッファに書き込み開始しようとした時、上記の2つのフラグをチェックすれば、スレッド0のバッファに空きがあるかどうか は分かりますが、
スレッド0のバッファが完全に空いているかどうか(書き込み時にゴミデータが入っていないか、途中から書き込みしようとしていないか) は分かりません。
なのでFLAGBのウォーターマーク設定をバッファと同じサイズ(この場合は16Kbyte)に設定し、スレッド0のバッファに完全に空きがあるときにFLAGBがアサートされるようにしたいと思っています。
FLAGBのウォーターマーク設定をこのような使い方をしてた実例があるか? メーカーが想定している使い方の範囲内なのかどうか?イレギュラーな使い方ではないか? を知りたいです。
マクニカ 荒井
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
あくまで、IN転送時(FPGAからFX3への書き込み時)にはFullまたはPartial Fullであるかどうかを見ていますので、バッファがEmptyかどうかを確認しません。
FLAGBのウォーターマーク値をバッファと同じサイズとすれば、完全に空きがある時にFLAGBをアサートすることは仕様上可能です。
恐らく動作しますが、これまでそういった実例はございません。
こちらでも実験し、動作するか確認してみます。
(2/12/2019更新)社内で協議しましたが、Watermark値を変更することでEmptyかどうかを検出することはできません。
サイプレスが想定する使い方でもございません。
よろしくお願い致します。
Hirotaka Takayama
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- Permalink
- 印刷
- 不適切なコンテンツを報告
前回の投稿をアップデートしました。
想定された使い方ではなく、Watermark値を変更することでIN転送時にバッファがEmptyかは見ることができません。
Hirotaka Takayama