1 プロトコルの概要
この記事は主に最新の AMBA 5 AHB プロトコル仕様の分析に基づいており、実際の使用経験に基づいたシミュレーションの紹介をリストしています。
AMBA AHB は、高性能の統合設計に適したバス インターフェイスです。マスター コンポーネント、相互接続コンポーネント、スレーブ コンポーネントなどのコンポーネント間のインターフェイスを定義します。
AMBA AHB は、高性能、高クロック周波数システムに必要な以下の機能を実装します。
- バースト送信
- シングルクロックエッジ動作
- 非タイトステート実験
- データ ビット幅は 64、128、256、512、1024 をサポートします。
最も一般的な AHB スレーブ デバイスは、内部メモリ デバイス、外部メモリ インターフェイス、および高帯域幅のペリフェラルです。低帯域幅のペリフェラルは AHB スレーブとして機能できますが、システム パフォーマンス上の理由から、通常は AMBA Advanced Peripheral Bus (APB) 上に常駐します。高性能 AHB と APB 間のブリッジングは、APB ブリッジングと呼ばれる AHB スレーブを使用して行われます。
図 1 は、3 つの AHB スレーブに接続された AHB マスターを示しています。バス相互接続ロジックには、アドレス デコード モジュールとスレーブからマスターへのマルチプレクサが含まれています。アドレス デコード モジュールは、マスターから送信されたアドレスを適切な SEL 信号選択に変換します。スレーブ デバイス、マルチプレクサは、各スレーブのマスターへの出力データを合理的に選択します。AHB バスは複数のマスターを持つことができることに注意してください。
1.1 マスター
一般的なマスターを例として、インターフェイス信号を紹介します。
INPUT信号:
- HREADY : スレーブによって与えられ、送信が完了したことを示します。次の転送の準備ができました。
- HRESP : 成功、失敗など、スレーブによって提供される追加のステータス情報。
- HRESETn : グローバル リセット信号、ロー有効、リセットはシステム バス リセットに直接接続できます。
- HCLK、 : グローバルクロック信号。
- HRDATA[31:0] : スレーブポートから送信されたデータを読み取ります。
OUTPUT信号:
- HADDR[31:0] : AHB バスのアドレス。
- HWRITE : 読み取りおよび書き込みインジケータ信号。1 は書き込み、0 は読み取りです。
- HSIZE[2:0] : 各転送のデータサイズを示すために使用されます。
- HBURST[2:0] : バースト送信回数とアドレスインクリメント方法を指定します。
- HPROT[3:0] : 保護制御信号。この送信のタイプを示すために使用されます。
- HTRANS[1:0] : 送信の種類を示すもので、アイドル送信、ビジー送信、ノンシーケンシャル送信、連続送信の IDLE/BUSY/NONSEQUENTIAL/SEQUENTIAL の合計 4 種類があります。
- HMASTERLOCK : マスター送信をロックします。ロック期間中はマスターを中断できません。
- HWDATA[31:0] : データを書き込みます。最大サポートは 1024 ビットで、32 ~ 256 ビットの間であることが推奨されます。
- HNONSEC : 現在の送信が安全かどうかを示します。
- HEXCL : 転送が排他的転送 (Exclusive Access) であるかどうかを示すために使用されます。
- HWSTRB : 書き込みデータ バイト イネーブル。ビット幅は HWDATA ビット幅を 8 で割ったもので、最大値は 128 です。
1.2 スレーブ
スレーブ側はアドレスデコーダから送られるHSELx選択信号を用いてバス送信に応答します。
slave端输出信号:
- HRDATA : 読み取りデータ。最大ビット幅は 1024 ビットで、32 ~ 256 ビットの間であることを推奨します。
- HREADYOUT : スレーブ デバイスの準備完了信号。使用法は APB の PREADY と似ています。
- HRESP : 現在の送信が成功したかどうかを示すスレーブ側デバイスの応答信号。「1」は誤りです。
- HEXOKAY : 排他転送が成功したかどうかを示します。
译码器信号:
- HSELx : スレーブデバイス選択信号。用途は APB の PSEL と同様です。スレーブが選択され、非 IDLE 送信の場合、HSELx はアドレスおよび制御信号と同時に有効でなければなりません。
多路选择器信号:
- HREADY : この信号は、最後の送信が終了し、バスが次の送信の準備ができていることをマスターとスレーブに通知するためにバスによって内部的に生成されます。
2 転送
2.1 基本的な送信
AHB传输分两个阶段:地址阶段和数据阶段:
- アドレス ステージ: HWRITE、HADDR、およびその他の制御信号が同時に有効になり、HREADY が High になり、現在のアドレスが有効になったことを示します。
- データ ステージ: HWDATA、HRDATA、およびその他のデータ関連信号は有効であり、データの読み取りおよび書き込みの開始を示します。データ ステージは、送信されるデータのサイズに応じて、複数の HCLK クロック サイクルにわたる場合があります。
HWRITE信号控制数据传输方向:
- HWRITE=1 は書き込み転送を意味し、マスターはデータを HWDATA[31:0] バスに書き込みます。
- HWRITE=0 は読み取り転送を意味し、スレーブはデータを HRDATA[31:0] バスに送信します。
- 以下の図は、即時読み取りと即時書き込みを含む、AHB バス上の単一の読み取りおよび書き込み転送を示しています。
リード転送:
ライト転送:
待機状態のない単純な転送では、次のようになります。
- HCLK の立ち上がりエッジに続いて、マスターはアドレス信号と制御信号をバス上に駆動します。
- 次に、スレーブは、HCLK の次の立ち上がりエッジでアドレスと制御情報をサンプリングします。
- スレーブはアドレス信号と制御信号をサンプリングした後、READYOUT 応答を駆動できます。応答は HCLK の 3 番目の立ち上がりエッジでサンプリングされます。
この簡単な例は、転送のアドレス フェーズとデータ フェーズが異なるクロックでどのように発生するかを示しています。どのような転送でも、アドレス フェーズはデータ フェーズの前に発生します。この重複するアドレスとデータはバス パイプラインの基礎となり、高性能の動作を可能にし、スレーブが転送に応答するのに十分な時間を提供します。
スレーブは、追加の完了時間を得るために、任意の転送に待機状態を挿入できます。各スレーブには、転送のデータ フェーズ中に駆動される HREADYOUT 信号があります。コネクタはすべてのスレーブからの HREADYOUT 信号を結合して制御 HREADY 信号を生成し、それによって送信プロセス全体を制御します。
次の図は、待機中の読み取り転送と書き込み転送の挿入を示しています。
2 つの待機中
の読み取り転送を挿入します。 1 つの待機中の書き込み転送を挿入
します。 注: アドレス ステージとデータ ステージは、複数の連続した転送が異なるアドレスを持つ場合、パイプライン化できます。以下の図に示すシーケンスで動作が完了し、A のデータから B のアドレスフェーズを開始できます。
2.2 伝送方式
HTRANS[1:0]:
次の図は、NONSEQ、BUSY、および SEQ の転送タイプを示しています。
- T0-T1、NONSEQ 送信から 4 ビート読み取りを実行します。
- T1 ~ T2 では、マスターは 2 番目のバーストを実行できず、BUSY 転送を挿入して 2 番目のバーストを遅延させ、スレーブ側は最初のバースト読み取りデータを返します。
- T2 ~ T3、マスターは 2 番目のバースト操作を開始する準備ができているため、SEQ 送信が開始され、マスターはスレーブから返された読み取りデータを無視します。
- T3 ~ T4、マスター エンドは 3 番目のバーストを実行し、スレーブ エンドは 2 番目のバーストのデータを返します。
- T4 ~ T5 では、マスターが最後のバーストを実行しますが、スレーブ エンドは送信を完了できないため、HREADYOUT を使用してサイクル待機を挿入します。
- T5 ~ T6、スレーブ側は 3 番目のバーストの読み取りデータを返します。
- T6 ~ T7、スレーブ側は最後のバーストの読み取りデータを返します。
3.3 ロックされた転送
マスターがアクセスをロックする必要がある場合は、HMASTLOCK 信号も使用する必要があります。この信号は、現在の転送シーケンスが分割不可能であるため、他の転送を処理する前に処理する必要があることをスレーブに示します。
通常、ロックされた転送は信号の完全性を維持するために使用され、スレーブ デバイスが読み取りと書き込みの間に他の操作を実行しないようにします。HMASTLOCK 信号を次の図に示します
注: ロック転送後、マスター側で IDLE 転送を挿入することをお勧めします。
ほとんどのスレーブは HMASTLOCK 機能を実装する必要はありませんが、受信した命令を順番に実行するだけで済みます。スレーブは複数のマスターからアクセスできます。たとえば、マルチポート メモリ コントローラ (MPMC) は HMASTLOCK 信号を実装する必要があります。
また、IDLE データ送信の開始時に、マスタは HMASTERLOCK をプルアップし、非 IDLE 状態では HMASTLOCK 信号をプルダウンすることもできます。
3.4 転送サイズ
HSIZE[2:0] はデータ転送のサイズを表します。次の表に転送サイズを示します。
HSIZE[2:0] | サイズビット | 説明 |
---|---|---|
000 | 8 | バイト |
001 | 16 | 半分になる |
010 | 32 | 言葉 |
011 | 64 | ダブルワールド |
100 | 128 | 4ワードライン |
101 | 256 | 8ワードライン |
110 | 512 | - |
111 | 1024 | - |
注:
転送サイズは HSIZE によって決まります。HSIZE はバス データ ビット幅以下である必要があります。たとえば、32 ビット データ ビット幅の場合、HSIZE は 0b000、0b001、または 0b010 を使用する必要があります。HSIZE と組み合わせて使用します
。 HBURST を使用してアドレス境界を決定します。
3.5 バースト操作
Bustrt トランスポートは、インクリメンタルおよびラッピング Busrt の 2 つのタイプをサポートします。
- インクリメントバーストは連続した位置にアクセスし、バースト内の各転送のアドレスはインクリメントアドレスです。
- ラッピング Busrts バーストの数は HBURST と HSIZE によって制御されます。たとえば、4 ビート バーストの場合、送信開始アドレスは 0x34 で、送信アドレスは 0x34、0x38、0x3c、0x30 になります。
- バースト信号のエンコードは次のとおりです。
HbURST[2:0] | タイプ | 説明 |
---|---|---|
000 | 独身 | 単一転送バースト |
001 | 増額 | 不定の長さのインクリメントバースト |
010 | ラップ4 | 4ビートラッピングバースト |
011 | INCR4 | 4ビートインクリメントバースト |
100 | ラップ8 | 8ビートラッピングバースト |
101 | INCR8 | 8ビートインクリメントバースト |
110 | ラップ16 | 16ビートのラッピングバースト |
111 | INCR16 | 16ビートインクリメントバースト |
注: すべてのバースト転送はアドレス エッジに揃えられた転送である必要があります。たとえば、ワード転送はワード アドレス エッジ HADDR[1:0] == 0b00 に揃えられる必要があります。