Article #1119

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.
posted by sakurai on September 14, 2026 #1119

10. 順序の正しい手順、B を受け取ってから読む

図1119.1
図1119.1

場面 9 と同じ 0x08 に、今度は順序を守って書いて読みます。1000 で AW と W を出し、1000 で成立します。1020 で B が返り、getB がその握手で受け取ります。regs_2 が 77777777 になるのも 1020 です。getB の次の文が putAR なので、1030 のサイクルに文が実行されて 1040 から arvalid が立ち、1060 の R で 77777777 が返って 1070 で rdReg に入ります。

書いた値を読みたければ B を受け取ってから AR を出す、という責任はマスタにあり、以下のコードのようにgetB の後に putAR を置くことがその手順の記述です。場面 9 との違いは AR を出す位置だけで、スレーブは何も変わっていません。

   Stmt s10 = seq
      mark (10, "RAW ordered: write, wait B, then read");
      par
         putAW (8'h08);
         putW  (32'h77777777, 4'hF);
      endpar
      getB;                                      // ここで書き込みの完了が確定する
      putAR (8'h08);                             // B を受け取った次の文で AR
      getR;                                      // 77777777
   endseq;

putAW
putW → getB → putAR → getR

11. エラー応答

図1119.2
図1119.2

範囲外の 0x10 に書きます。握手は通常どおり 1110 で成立し、1130 の B で bresp が 2、SLVERR になります。regs はどれも変わりません。1170 で 0x10 を読むと、1190 の R で rresp が 2、rdata は 0 です。エラーは握手の失敗として現れるのではなく、握手は成立させたうえで応答コードで伝える、というのが AXI の流儀です。

場面と見どころの対応

場面 出すもの 見るもの
1 AW と W を同時 三つの握手が独立に成立、B は処理の後
2 AR rdata は rvalid と同時にだけ有効
3 W の後に AW スレーブは揃うまで動かない
4 AW の後に W 同上、順序に決まりはない
5 AW を3件連続 awready が落ちる、マスタは保持、B は順に返る
6 bready を下げて書く bvalid と bresp が保持される
7 rready を下げて読む rvalid と rdata が保持される
8 AW、W、AR を同時 読み書きが並行に進む
9 同じ番地へ書きながら読む 古い値が返る、順序は保証されない
10 書いて B を受け取ってから読む 新しい値が返る、順序はマスタの責任
11 範囲外の番地 握手は成立、応答コードで SLVERR

左矢前のブログ 次のブログ右矢

Leave a Comment

Your email address will not be published.

You may use Markdown syntax. If you include an ad such as http://, it will be invalidated by our AI system.

Please enter the numbers as they are shown in the image above.