組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:valid/readyハンドシェイクによるデータ受け渡し

設計内容分類FPGA

実現したい仕様・課題

モジュール間でデータを渡す際、受け側の処理が間に合わないタイミングがあると、送りっぱなしの設計ではデータの取りこぼしが発生します。処理レートの異なるブロック同士を、データを失うことなく接続する標準的な作法を確立したいというのが課題です。

設計のポイント

モジュール間のデータ受け渡しには、valid/readyハンドシェイクを標準インターフェースとして採用します。送り側はデータが有効なときvalidをアサートし、受け側は受け取れる状態のときreadyをアサートします。「validとreadyが同時に1のクロックエッジでデータが転送された」と定義することで、双方の都合を尊重した確実な受け渡しが成立します。設計上の要点は3つあります。(1) 送り側は、転送が成立する(valid & ready)までvalidとデータを保持し続けること。readyを待たずにデータを更新すると取りこぼしが発生します。(2) validはreadyに依存させずアサートすること(データがあるなら出す)。互いに相手待ちにするとデッドロックの原因になります。(3) パイプライン中間段でこのインターフェースを中継する場合、readyの逆流(バックプレッシャー)を正しく伝播させること。受け側がreadyを下げたら、上流も停止またはバッファリングが必要です。この作法はAXI-Streamをはじめ業界標準のストリームインターフェースと同じ考え方であり、これに揃えておくことでベンダIPや他設計との接続性も高まります。レート差が大きい箇所は、間にFIFOを挟んでハンドシェイクを緩衝する構成が定石です。

【コード例】
// 転送成立の定義
wire fire = valid & ready;

// 送り側:転送成立までデータとvalidを保持
always @(posedge clk or negedge rst_n) begin
if (!rst_n) valid <= 1’b0;
else if (gen_new) begin valid <= 1’b1; data <= new_data; end
else if (fire) valid <= 1’b0; // 成立したら解除
end

verilog記述のポイント:valid/readyハンドシェイクによるデータ受け渡し | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ