FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

FPGA開発日記 カテゴリ別インデックス

RISC-VにおけるRVWMOの仕様について読み直す

続きを読む

AMBA CHIプロトコルの勉強 (6. Readのトランザクションについて)

AMBA CHIについて今更勉強している。

まずは基本的な読み込みリクエストについて。マニュアルを読んでいく。

B5.1 読み出しトランザクションフロー

この節では、読み出しトランザクションのインターコネクトプロトコルフローの例を示す。

B5.1.1 DMTを使用するReadトランザクションとスヌープを使用しないReadトランザクション

スヌープを使用しないReadトランザクションでは、DMTを使用することを推奨する。 - Direct Memory Transfer (DMT): Subordinateが直接データを送信することが許されている転送形態のこと。

図B5.1に、ReadSharedトランザクションを使用したDMTトランザクションフローの例を示す。 図B5.1では、RequesterからのCompAckがHomeでのリクエストの割り当て解除に使用される ため、SN-FからHN-Fへの応答は必要ない。

図B5.1のReadSharedトランザクションフローの手順は以下の通りである:

  1. RN-FはHN-FにReadShared要求を送る。
  2. HN-FはSN-FにReadNoSnp要求を送る。
  3. SN-Fは、CompData_UCを使用して、データ応答を直接RN-Fに送る。
  4. RN-Fは、要求がReadSharedであり、トランザクションを完了するために CompAckを必要とするので、HN-FにCompAckを送る。

B5.1.2 DMTとスヌープを使用するReadトランザクション

スヌープとメモリからのデータを使用するReadトランザクションでは、DMTを推奨する。

図B5.2に、ReadSharedトランザクションを使用したDMTトランザクションフローの例を示す。 SN-FからHN-Fへは、RequesterからのCompAckがHomeでのリクエストの割り当て解除に使用 されるため、応答は必要ない。

図B5.2のReadSharedトランザクションフローの手順は以下の通りである:

  1. RN-F0はHN-FにReadShared要求を送る。
  2. HN-FはRN-F1にSnpShared要求を送信する。RN-F1はSnpResp_I応答をHN-Fに返す。
  3. HN-FはRN-F1からSnoop応答を受信した後、SN-FにReadNoSnp要求を送信する。これはRN-F1がデータで応答していないことを保証する。
  4. SN-FはCompData_UCを使用して、RN-F0に直接データ応答を送信する。
  5. RN-F0は、要求がReadSharedであり、トランザクションを完了するために CompAckを必要とするので、HN-FにCompAckを送信する。

AMBA CHIプロトコルの勉強 (5. CHIのResponse / Snoop / Data Fieldsについて)

AMBA CHIについて今更勉強している。

TXのReqインタフェースについて。マニュアルを読んで必要な信号線をチェックする。

Response fields

  • QoS:サービス品質の優先順位。表B2.2で定義されている。
  • TgtID:ターゲット識別子。表B2.2で定義されている。
  • SrcID:ソース識別子。表B2.2で定義されている。
  • TxnID:トランザクション識別子。表B2.2で定義されている。
  • Opcode:応答オペコード。応答タイプを指定する。
  • RespErr: 応答エラー状態。表B2.5で定義されている。
  • Resp: 応答状態。表B2.5で定義されている。
  • FwdState: 転送状態。表B2.5で定義されている。
  • DataPull: データプル。表B2.5で定義されている。
  • CBusy: 完了者ビジー。表B2.5で定義されている。
  • DBID: データバッファ識別子。表B2.5で定義されている。
  • PGroupID: 持続性グループ識別子。表B2.2で定義されている。
  • StashGroupID: Stashグループ識別子。表B2.2で定義されている。
  • TagGroupID: タググループ識別子。表B2.2で定義されている。
  • PCrdType: プロトコルクレジットタイプ。
  • TagOp: タグ操作。表B2.2で定義されている。
  • TraceTag: トレースタグ。表B2.2で定義されている。

Snoop Request Fields

  • QoS:サービス品質の優先順位。表B2.2で定義されている。
  • SrcID:ソース識別子。表B2.2で定義されている。
  • TxnID:トランザクション識別子。表B2.2で定義されている。
  • FwdNID:フォワードノード識別子。最初の要求者のノード識別子。
  • PBHA:ページベースのハードウェア属性。実装定義のハードウェア制御に使用できる変換テーブルからの4ビット。
  • FwdTxnID:転送トランザクション識別子。最初の要求者による要求で使用されるトランザクション識別子。
  • StashLPIDValid:Stash論理プロセッサ識別子有効。表B2.2で定義されている。
  • StashLPID:Stash論理プロセッサ識別子。表B2.2で定義されている。
  • VMIDExt:仮想マシン識別子拡張。
  • Opcode:スヌープ命令コード。
  • Addr:アドレス。 スヌープ要求でアクセスされるメモリーロケーションのアドレス。
  • NS:非セキュア。 表B2.2で定義されている。
  • NSE:非セキュア拡張。表B2.2で定義されている。
  • DoNotGoToSD:SD状態への移行禁止。SnoopeeによるSD状態の使用を制御する。
  • RetToSrc:ソースへの復帰。スヌープの受信者に、スヌープ応答とともにデータを返すよう指示する。
  • TraceTag:トレースタグ。表B2.2で定義されている。
  • MPAM:メモリシステムリソースのパーティショニングおよびモニタリング。表B2.2で定義されている。
  • MECID:メモリ暗号化コンテキスト識別子。外部メモリ暗号化に寄与する暗号化コンテキスト(キーまたは調整)のテーブルへのインデックスとして、メモリ暗号化エンジンによって使用される。

Data Fields

  • QoS:サービス品質の優先順位。表B2.2で定義されている。
  • TgtID:ターゲット識別子。表B2.2で定義されている。
  • SrcID:ソース識別子。表B2.2で定義されている。
  • TxnID:トランザクション識別子。表B2.2で定義されている。
  • HomeNID:ホームノード識別子。リクエスタから送信される CompAck 応答の対象のノード識別子。
  • PBHA:ページベースのハードウェア属性。実装定義のハードウェア制御に使用できる変換テーブルの 4 ビット。
  • Opcode:データオペコード。例えば、データパケットがReadトランザクション、Writeトランザクション、またはSnoopトランザクションに関連するものであるかどうかを示す。
  • RespErr:応答エラーステータス。データ転送に関連するエラーステータスを示す。
  • Resp:レスポンス・ステータス。データ転送に関連するキャッシュラインの状態を示す。
  • DataSource:データソース。この値は、Read Data レスポンスのデータソースを示し、システムのデータ状態に関する追加情報を提供できる。
  • FwdState:転送状態。スヌープの受信者からリクエスタへのデータ転送に関連するキャッシュラインの状態を示す。
  • DataPull:データプル。データ応答に暗黙のリード要求が含まれていることを示す。
  • CBusy:コンプリータビジー。コンプリータの現在のアクティビティレベルを示す。
  • MECID:メモリ暗号化コンテキスト識別子。外部メモリ暗号化に寄与する暗号化コンテキスト(キーまたは調整)のテーブルへのインデックスとして、メモリ暗号化エンジンによって使用される。
  • DBID:データバッファ識別子。データメッセージへの応答でTxnIDとして使用される識別子。
  • CCID:クリティカルチャンク識別子。オリジナルのトランザクション要求のアドレスオフセットを複製する。
  • DataID:データ識別子。パケットで提供されるデータのアドレスオフセットを提供する。
  • TagOp:タグ操作。表B2.2で定義されている。
  • Tag:メモリタグ。4ビットのタグのセットを提供する。各タグは、整列された16バイトのデータに関連付けられている。
  • TU:タグ更新。どのアロケーションタグを更新する必要があるかを指示する。
  • TraceTag:トレースタグ。表B2.2で定義されている。第B11章「システム制御、デバッグ、トレース、およびモニタリング」を参照のこと。
  • CAH:CopyAtHome。ホームまたはSnoopからの応答で、リクエスタに提供された回線のコピーをホームが保持しているかどうかを示す。表B2.2でも定義されている。
  • NumDat:限定データ省略を使用している場合、転送されたパケットで表される追加のDATパケットの数を表す。
  • Replicate:NumDatと組み合わせて使用し、省略されたDATパケットのフィールド値を確立する。
  • RSVDC:ユーザー定義。B13.10.62 ユーザー定義用予約、RSVDCを参照。
  • BE:バイトイネーブル。データの書き込み、またはスヌープへの応答として提供されたデータについて、有効なバイトを示す。
  • Data:データペイロード。
  • DataCheck:データチェック。DATパケット内のデータエラーを検出する。
  • Poison:ポイズン。データバイトのセットが以前に破損していたことを示す。

AMBA CHIプロトコルの勉強 (4. CHIのReqインタフェースについて)

AMBA CHIについて今更勉強している。

TXのReqインタフェースについて。マニュアルを読んで必要な信号線をチェックする。

B2.2.1 Transaction request fields

  • DoDWT: 直接書き込み転送を行う。直接書き込みデータ転送と複合書き込みの処理をサポートする。
    • 通常、リクエストデータはホームノード (Home Node) を経由してスレーブノードに送信されるが、DoDWTが有効になっている場合、リクエストノードからスレーブノードに直接データを送信することが可能である。
  • PGroupID: 永続グループ識別子。要求が適用されるCleanSharedPersistSepトランザクションのセットを示す。
    • 永続性を伴うトランザクションをグループ化し、その一貫性を維持しつつ効率的に管理するための識別子である。
  • StashGroupID: Stashグループ識別子。要求が適用されるStashOnceSepトランザクションのセットを示す。
  • TagGroupID: タググループ識別子。正確な内容は実装で定義される。通常、例外レベル、TTBR(Translation Table Base Register)値、CPU識別子を含むと予想される。
  • LPID: 論理プロセッサ識別子。リクエストを生成したLPを一意に識別するためにSrcIDフィールドと共に使用される。
    • トランザクションを生成した論理プロセッサを一意に識別するための識別子である。
  • Excl: 排他的アクセス。対応するトランザクションが排他アクセストランザクションであることを示す。
  • SnoopMe: Atomicトランザクションの間に、HomeがRequesterにスヌープを送るかどうかを決定しなければならないことを示す。
  • CAH: CopyAtHome。CopyBack要求において、CAHは、Homeが行のコピーを保持することを示した後に、Requesterが行またはMTEタグを変更したかどうかをHomeに示す。
  • ExpCompAck: CompAckを期待する。トランザクションが完了確認メッセージを含むことを示す。
  • TagOp: タグ操作。対応する DAT チャネルに存在するタグに対して実行される操作を示す。
  • TraceTag: トレースタグ(Trace Tag)。システムのデバッグ、トレース、パフォーマンス測定のための特別なサポートを提供する。
  • MPAM: Memory System Resource Partitioning and Monitoring (メモリシステムリソースパーティショニングおよびモニタリング)。ユーザ間でメモリ資源を効率的に利用し、その使用を監視する。
  • PBHA: Page-based Hardware Attributes (ページベースハードウェア属性)。IMPLEMENTATION DEFINED ハードウェア制御に使用できる変換テーブルからの4ビット。
  • MECID: Memory Encryption Context Identifier(メモリ暗号化コンテキスト識別子)。メモリ暗号化エンジンが、外部メモリ暗号化に寄与する暗号化コンテキスト(キーまたはTweak)のテーブルへのインデックスとして使用する。

AMBA CHIプロトコルの勉強 (3. CHIのReqインタフェースについて)

AMBA CHIについて今更勉強している。

TXのReqインタフェースについて。マニュアルを読んで必要な信号線をチェックする。

B2.2.1 Transaction request fields

リクエストに使用するフィールド:

  • QoS : サービス品質優先度(Quality of Service priority)。トランザクションに可能な16の優先レベルの1つを指定し、QoSの値が高いほど優先レベルが高いことを示す。
  • TgtID: ターゲット識別子。パケットのターゲットとなるコンポーネント上のポートのノード識別子。
    • これはターゲットの識別子をあらかじめリクエスト発信元が知っていなければならないという意味なんだろうか?
  • SrcID: 送信元識別子。パケットを送信したコンポーネント上のポートのノード識別子。
  • TxnID: トランザクション識別子。トランザクションは送信元ノードごとに一意のトランザクション識別子を持つ。
    • トランザクションリクエストは、与えられたRequesterからのトランザクションを識別するために使用されるTxnIDを含んでいる。
    • TxnIDは、PrefetchTgtを除き、与えられたRequesterで一意でなければならな い。
    • RequesterはSrcIDによって識別される。これにより、返される読み取りデータまたは応答情報が、 正しいトランザクションと関連付けられることが保証される。
    • TxnIDには12ビットのフィールドが定義され、未処理のトランザクション数は1024に制限される。Requesterは、以下のいずれかを受け取った後、TxnID値を再利用することが許される。
  • ReturnNID: リターンノード識別子。Data レスポンス、Persist レスポンス、または TagMatch レスポンスの受信ノード識別子。
  • StashNID: Stashノード識別子。Stashターゲットのノード識別子。
    • Stashというのは、キャッシュの特定の領域にデータを配置する操作のことを言うらしい。
  • DataTarget: データターゲット。リクエスタからインターコネクト内のキャッシュに配置と使用のヒントを転送する。
    • Requesterがインターコネクト内のキャッシュに配置と使用のヒン トを提供することは許可されているが、必須ではない。
    • 通常、Requesterはキャッシュラインの有用性に関する最良の知識を持っている。
    • この知識を知らされているシステムレベルキャッシュ(SLC)は、自身のキャッシュレベルの配置および置換アルゴリズムにバイアスをかけるために、この知識を使用することができる。
  • StashNIDValid: StashNIDが有効であることを示す。
  • Endian: エンディアン。Atomicトランザクションのデータパケット内のデータのエンディアンを示す。
  • Deep: 深いPersistence。Persist応答が、それ以前のすべての書き込みが最終宛先に書き込まれるまで送信されてはならないことを示す。
    • Deepフィールドがアサート (有効化) されているとき:
      • 「すべての以前の書き込み操作が最終的な保存先に書き込まれるまでレスポンスを返さない」という条件を意味する。
      • これにより、データが最終的に指定された永続性レベル(例えば、電源を切った際にも保持される不揮発性メモリなど)に完全に保存されることを保証する。
  • PrefetchTgtHint: PrefetchTgtヒント。元のリクエストが関連するPrefetchTgtリクエストを持っていたことを示す。Chip-to-Chipリンクのレシーバーは、オリジナルのPrefetchTgtがChip-to-Chipリンクのトランスミッターでドロップされたことが分かっていれば、PrefetchTgtリクエストを再作成するためにこのフィールドを使用できる。
  • ReturnTxnID:リターントランザクション識別子。下位からのデータ応答のTxnIDの値を伝える一意のトランザクション識別子。
  • StashLPIDValid: Stash論理プロセッサ識別子が有効であることを示す。StashLPIDフィールド値がStash対象であることを示す。
  • StashLPID: Stash 論理プロセッサ識別子。Stashターゲットの論理プロセッサ(LP)の識別子。
  • Opcode: リクエストオペコード。トランザクションタイプを指定し、トランザクショ ン構造を決定する主要フィールドである。
  • Size: データサイズ。トランザクションに関連付けられたデータのサイズを指定し、トランザクショ ン内のデータパケット数を決定する。
  • Addr: アドレス。ReadおよびWriteリクエストでアクセスされるメモリ位置のアドレス。
  • NS: Non-secure(非セキュア)。NSE と組み合わせて、アクセスの物理アドレス空間(PAS)を確立する。
  • NSE: 非セキュア拡張。NS と組み合わせてアクセスの PAS を確立する。
  • LikelyShared: 共有の可能性が高い。下流キャッシュへの割り当てヒントを提供する。B2.7.5 Likely Shared」参照。
  • AllowRetry: 再試行を許可する。ターゲットが Retry 応答を許可されるかどうかを決定する。
  • Order: オーダー要求(Order requirement)。同じエージェントからの他のリクエストに対するリクエストの順番付けの要 件を決定する。
  • PCrdType: プロトコルクレジットタイプ: プロトコルクレジットタイプ(Protocol Credit Type)。
  • MemAttr: メモリ属性。トランザクションに関連付けられたメモリ属性を決定する。
  • SnpAttr: スヌープ属性: Snoop 属性。トランザクションに関連するスヌープ属性を指定する。

AMBA CHIプロトコルの勉強 (2. CHIのReqインタフェースについて)

AMBA CHIについて今更勉強している。

TXのReqインタフェースについて。マニュアルを読んで必要な信号線をチェックする。

勘違いしそうだが、ReqインタフェースはRead/Writeなどのコマンドを含むすべてのHostからのリクエストを含んでいる。 AW/ARチャネルなどのコマンドごとに異なるチャネルを使用するAXIと異なり、CHIはReqインタフェースがこれらの送信コマンドを管理する。

AMBA CHIプロトコルの勉強 (1. CHIのポート構成について)

AMBA CHIについて今更勉強している。

チャネルについて

RN-Fからは、TXインタフェースとRXインタフェースが存在している。TXチャネルはRN-Fノードからの発信用。RXチャネルはRN-Fノードへの受信用。

TXインタフェース

RN-Fノードからの発信用のインタフェース。TXインタフェースは以下のチャネルから構成されている。

  • REQチャネル:RN-Fからのリクエスト送信用のチャネル。Read Request や Write Requestなどのリクエストが送信される。
  • RSPチャネル:RN-Fがレスポンス応答をするためのチャネル。RN-F外部からのリクエストに応答するためのチャネルと考えて良い。
  • DATチャネル:RN-Fからデータを送信するためのチャネル。REQチャネルからWrite Requestを送信するときに、実際のデータを送信するために使用するものと思われる。

RXインタフェース

RN-Fノードの受信用のインタフェース。RXインタフェースは以下のチャネルから構成されている。

  • RSPチャネル:RN-Fがレスポンスを受け取るためのチャネル。REQチャネルから送信されたRead Requestの結果はこのチャネルを経由して戻されるものと思われる。
  • DATチャネル:RN-Fがレスポンスを受け取るためのチャネル。REQチャネルから送信されたRead Requestの結果のデータなどはこのチャネルを経由して戻されるものと思われる。
  • SNPチャネル:RN-Fに対するスヌープリクエストを受け取るためのチャネルだと思われる。

RN-Fのポート構成

読み込みリクエストの場合

  1. TXチャネルを使ってRead Requestが送出される。
  2. TXチャネルのリクエストがスレーブに処理されると、クレジットが戻される?

それぞれのチャネルのFlitの構成について

各チャネルにはFILTPEND / FLITV / FLIT / CRDVなる信号が定義されているが、それぞれの意味は以下の通りである。

  • FLITPEND: 次のサイクルから有効なFLITVが送信されることを示す。クロックゲーティング用に使用される?
    • Request Flit Pending. Early indication that a request flit could be transmitted in the following cycle.
  • FLITV: フリットが有効であることを示す。
  • FLIT: フリット本体
  • CRDV: クレジットが返却されるときに有効化される。