19 / 24 · 概念
フラッシュとリセットを通してトランザクション収支を保つ
取り消しと引き渡しを区別し、valid状態を期待値キューと合わせます。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
取り消しは明示的な設計イベント
リセットは制御を既知の状態へ戻し、フラッシュは指定した未完了処理を取り消します。データのクリアだけでは不十分です。validが高いままなら、ゼロが偽のトランザクションになります。validがゼロの古いデータビットは問題ありません。1スロットバッファのfull、FIFOのcountとポインタ、FSM状態と結果validなど、適切な所有状態をクリアします。
この同期式・単一クロックの契約では、両端ともリセットエッジで受け入れと引き渡しを行わず、そこで全未完了処理を取り消します。片端だけリセットし、他方が古いvalidを引き渡しとして数えると契約違反です。リセット範囲とready方針を記述します。リセット後の新入力は新しいトランザクション区間に属します。
| イベント | accepted | delivered | canceled | outstanding |
|---|---|---|---|---|
| A,B,Cを受け入れ | 3 | 0 | 0 | 3 |
| Aを引き渡し | 3 | 1 | 0 | 2 |
| B,Cをフラッシュ | 3 | 1 | 2 | 0 |
| Dを受け入れ | 4 | 1 | 2 | 1 |
| Dを引き渡し | 4 | 2 | 2 | 0 |
取り消しがある場合はaccepted-delivered-canceled=outstandingを使います。未引き渡しの各トランザクションは正確に1回取り消します。参照キューからも取り消した処理を除去し、古い結果が新しい区間へ入らないことを検査します。
外部メモリ要求は内部フラッシュ後も残る場合があります。世代識別子で遅い応答を区別するか、古い要求の完了を待って再開します。小さな世代フィールドを早く再利用すると、古い応答を現在のものと混同する可能性があります。総合課題に外部の遅延応答はなく、内部バッファだけを取り消します。
選択的フラッシュでは分岐より古い処理を残し、新しい誤経路の演算を除去することがあります。順序とコミットの規則を定義する必要があります。無効な処理は記憶を更新したりフォワーディングに参加したりしてはいけません。空、ストール、満杯、同時転送が可能な場合のリセットをテストします。起動時リセットだけでは未完了処理の取り消しを試せません。
自分で考えてみましょう
5件受け入れ、2件引き渡し、残り3件をフラッシュします。次に2件受け入れ、1件引き渡します。累計のaccepted、delivered、canceled、outstandingを求めてください。
解説を見る
Accepted=7、delivered=3、canceled=3、outstanding=1です。収支は7-3-3=1です。取り消した項目は成功した引き渡しではありません。