LoginSignup
1
1

More than 5 years have passed since last update.

VALID-READYハンドシェーク AXI-Stream風

Last updated at Posted at 2017-10-28

はじめに

 フィルタやパケットなど、ストリームデータを扱うモジュールを開発するにあたって、インターフェースはなやみどころ。
 クロックbyクロックのパラレルインターフェースならラッチするだけで悩みはないのですが、パケットのようなバースト伝送や、非同期サンプリングを行うモジュールでは、有効データが間歇的になります。パケット処理など一旦キューに蓄積しバッチ型の処理を行う場合には、ハンドシェークも必要です。
 いろいろ設計してきましたが、個別設計では間違いを起こしやすいので、定番のAXI-Streamを使うためいろいろ試したメモです。

信号構成

フロー制御を行うため、CLOCK,DATA,VALIDに加えて、READY,LASTを追加することにしました。

出力側(Master)の動作

1)データが完成したら、データ出力と共にVALIDをアサート
2)クロックのエッジで、READYを検査しアサートされていれば、(取り込めるといっているので)出力処理完了。(可能なら)データを更新し連続出力。
 そうでなければ、データとVALIDをホールド
3)LASTは適宜

受信側(Slave)の動作

Clock by Clockで連続受信したい場合
1)連続受信の準備ができたらReadyをアサート
2)クロックのエッジでvalidであればラッチ

受信途中で停止する場合
1)Readyをデアサートしておく
2)データ取り込んだらReadyをアサート

まとめ

Ready信号を受信確認(ACK)と考えると失敗します。
Valid信号は"Here you are." Ready信号は"Next Data please!"という感じでしょうか。

参考記事

VALID 信号と READY 信号によるハンドシェイクの注意点 ikwzmさん

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1