AVR32UC3BのHMATRIX(読んでみただけ)

簡単なようでややこしい感じのするHMATRIX(HSB Bus Matrix)。理解していなくても動作しそうであるが、後でバグの原因になると嫌なので、やはり読んでおくことにした。
対象MCUはいつも通りAT32UC3B0256である。ドキュメントは「AT32UC3B Series Preliminary revG」。別シリーズだと、話が異なってくるかもしれないので、今回はAT32UC3Bに限定。



まずはドキュメントの落ち穂拾いから。

  • 「9.3 Bus Matrix Connections」に記述がある「CPU SAB」はどこにも説明がない。しかし「Figure 3-1. Block diagram」におけるマスターの数からすると「NEXUS(OCD)」のことらしい。
  • 「Table 9-4. High Speed Bus slaves」にある「HSB-PB Bridge 0」と「HSB-PB Bridge 1」はそれぞれ「HSB-PB BRIDGE A」と「HSB-PB BRIDGE B」のことである(というかどちらが正しいのかよく判らない)。



次に「Figure 3-1. Block diagram」における確認事項。これもきちんと記述して欲しいものだ。

  • 明記されていないが、「HSB-PB BRIDGE A」から下に伸びるバスが「Peripheral Bus」である。
  • 「HSB-PB BRIDGE B」の上部に「HS」と「B」とあるが単語の「HSB」である(私は「HS」ってなんだろう?と30分悩んだ)。
  • 「HSB-PB BRIDGE A」の「HSB」は「HIGH SPEED BUS」、「PB」は「Peripheral Bus」のことである。一方、「HSB-PB BRIDGE B」の「PB」はPeripheral Busではなく「CONFIGURATION REGISTERS BUS」に接続している。たぶん「BRIDGE A」とインタフェースが同じってだけで「PB」と言っているんだと思う。
  • その「CONFIGURATION REGISTERS BUS」はどこにも説明が無い。
  • 存在するはずの「USBB DPRAM」がどこにもない。スレーブの数からすると、USBの「DMA」に隠れているらしい。本来USB DMAはマスターであり、スレーブではない。USBB DPRAMはスレーブであり、USBB DPRAMとUSB DMAはHMATRIX経由で接続されていないので、矢印1つに「S(slave)」と「M(master)」が割り付けられていること自体おかしい。ちなみにDP(Dual Port)RAMのもう一方が裏でDMAに接続されていると私は推察している。



18.1 Features

  • peripheral busにユーザ・インタフェース(設定レジスタのこと)
  • 構成可能な数のマスター(16まで)
  • 構成可能な数のスレーブ(16まで)

バス・マスターやバス・スレーブの数が16個まで設定できるといっても、モジュールの仕様であり、製品に組み込まれた時点で固定になるはず(だと思う)。

  • 各マスターに1つのデコーダ
  • Three Different Memory Mappings for Each Master (Internal and External boot, Remap)

各マスターに3つのメモリ・マップ(内部/外部(USBブート?)とリマップ)

  • 各マスターに1つのRemap機能
  • 各スレーブにプログラム可能な調停
    • ラウンド・ロビン調停
    • 固定優先度調停
  • 各スレーブ毎にプログラム可能なデフォルト・マスター
    • デフォルト・マスター無し
    • 最終アクセス・デフォルト・マスター
    • 固定デフォルト・マスター
  • バースト・アクセスの先頭では1サイクル待ち時間
  • デフォルト・マスターは待ち時間無し
  • 各スレーブ毎に1つのSpecial Function Register(Not dedicated)



18.2 Description
バス・マトリックスは複数階層バス構造を実装し、複数HSB(High Speed Bus)マスターとスレーブ間で同時アクセスを可能にし、全体の帯域幅を増加させる。
(省略)

18.3 Memory Mapping
バス・マトリックスは、HSBマスター・インタフェース毎にデコーダを1つ備えている。デコーダはいくつかのメモリ・マッピングを各HSB Masterに提供する。実際は製品により、それぞれのメモリ領域はいくつかのスレーブに割り当てられるかもしれない。異なるHSBスレーブ(例えば外部RAM、内部ROMまたは内蔵Flash、その他)を使用する間、同一アドレスにおけるブートが可能である。
バス・マトリックスのユーザ・インタフェースは、MRCR(Master Remap Control Register)を備えており、すべてのマスターのために単独でリマップ動作を実行する。

18.4 Special Bus Granting Mechanism

  • No Default Master:現アクセスの終わりに、他の要求が保留されていないなら、スレーブはすべてのマスターから切断される。No Default Masterは低消費電力モードに適している。
  • Last Access Master:現アクセスの終わりに、他の要求が保留されていないなら、アクセス要求完了後もスレーブは最後のマスターへ接続し続ける。
  • Fixed Default Master:現アクセスの終わりに、他の要求が保留されていないなら、スレーブはFixed Default Masterへ接続する。Last Access Masterと異なり、ユーザがソフトウェアで変更しなければ、固定マスターは変化しない(訳注:「マスターが変更されない」の意味と思われる)。



18.5 Arbitration
バス・マトリックスは、複数マスターが同一スレーブを同時にアクセスするようなケースが発生したとき、待ち時間を低減する調停機構を提供する。
HSBスレーブ当たり1つのアービトレータを備え、従って各スレーブ毎に異なった仲裁となる。
バス・マトリックスは、各スレーブ当たり2つの調停タイプを選択可能性をユーザに提供する。

  1. ラウンド・ロビン調停(デフォルト)
  2. 固定優先度調停

スレーブConfiguration Registers(SCFG)のそのフィールドARBTを通して、これを選択する。
アルゴリズムは、各スレーブのためにデフォルト・マスター構成を選択することによって、補足されるかもしれない。



18.5.1 Arbitration Rules
各アービトレータは、2つ以上の異なるマスター要求の間で調停する能力を持つ。
バースト(・アクセス)破壊を避けるため、またスレーブ・インタフェースに最大スループットを提供するため、調停は以下のサイクルの間だけ行われるかもしれない。

  1. アイドル・サイクル:スレーブがどのマスターにも接続されていないとき、あるいはスレーブが現在アクセスされずマスターに接続されているだけのとき。
  2. シングル・サイクル:スレーブが現在シングル・アクセスされているとき。
  3. バースト最終サイクル:現在のサイクルがバースト転送の最終サイクルであるとき:定義された長さのバーストに対して、予測されたバースト末尾は転送サイズに合致するが、しかし未定義長のバーストに対してバースト末尾は別に管理されている(18.5.1.1を参照)。
  4. スロット・サイクル限界:スロット・サイクル・カウンタが限界値に到達したとき、現在のマスター・アクセスが長すぎて中断されなければならない(18.5.1.2参照)。



18.5.1.1 Undefined Length Burst Arbitration
未定義長バースト(INCR)の間に長いスレーブ対応を避けるために、バス・マトリックスは再度調停するためINCR転送末尾の前に固有のロジックを提供する。バーストの予測された末尾を定義されたバースト転送長として使い、予測末尾を以下の5つの可能性から選択することが出来る。

  1. Infinite:バーストの予測された末尾は発生されず、そのためINCRバースト転送は中断されない。
  2. One beat bursts:バーストの予測された末尾はINCR転送内の単一転送毎に発生する。
  3. Four beat bursts:バーストの予測された末尾はINCR転送内の4ビート境界毎の末尾に発生する。
  4. Eight beat bursts:バーストの予測された末尾はINCR転送内の8ビート境界毎の末尾に発生する。
  5. Sixteen beat bursts:バーストの予測された末尾はINCR転送内の16ビート境界毎の末尾に発生する。

この選択はMCFG(Master Configuration Registers)のULBTフィールドを通して実行できる。



18.5.1.2 Slot Cycle Limit Arbitration
バス・マトリクスは非常に遅いスレーブ(例えば外部低速メモリ)における非常に長いバーストなどの長いアクセスを中断する特別なロジックを持つ。バースト・アクセス開始時に、SCFG(Slave Configuration Register)のSLOT_CYCLEへ事前に書き込まれた値をカウンタにロードし、クロック・サイクル毎に減算する。カウンタがゼロに達したとき、調停機構は現在のバイト、ハーフ・ワードあるいはワード転送の最後に再調停する能力を持つ。

18.5.2 Round-Robin Arbitration
このアルゴリズムはラウンド・ロビン方式で同じスレーブに異なるマスターから要求送信することをバス・マトリックスの調停機構に許可する。もし2つ以上のマスター要求が同時に発生したなら、もっとも小さな番号のマスターが最初に使用可能にし、それからラウンド・ロビン方式でその他のマスターが使用可能になる。
3つのラウンド・ロビン・アルゴリズムが実装されている。

  1. デフォルト・マスター無しのラウンド・ロビン調停
  2. 最後のデフォルト・マスターによるラウンド・ロビン調停
  3. 固定デフォルト・マスターによるラウンド・ロビン調停



18.5.2.1 Round-Robin Arbitration without Default Master
これはバス・マトリックス調停機構で使用されるメイン・アルゴリズムである。バス・マトリックスが純粋なラウンド・ロビン方式で同一スレーブへ異なるマスターからの要求を送ることを許可する。現在のアクセスの最後に、その他の要求が保留中でなければ、スレーブはすべてのマスターから切断される。この設定はバーストの先頭アクセスに対し1遅延サイクルを招く。重要なバーストを実行するマスター向けにデフォルト・マスター無しの調停を使用できる。

18.5.2.2 Round-Robin Arbitration with Last Default Master
これはバス・マトリックス調停機構により使用された偏りのあるラウンド・ロビン・アルゴリズムである。スレーブへアクセスした最後のマスターに1遅延サイクルを取り消すことができる。実際には現在の転送の末尾に、他のマスターの要求が保留されていなければ、スレーブはアクセスした最後のマスターを覚えている。
他の非特権マスターが同じ奴隷にアクセスしたいなら、そのマスターは1サイクル遅延される。このテクニックは主にシングル・アクセスするマスターに使われる。

18.5.2.3 Round-Robin Arbitration with Fixed Default Master
これはもう1つの偏りのあるラウンド・ロビン・アルゴリズムである。バス・マトリックス調停機構は1スレーブ当たり固定デフォルト・マスターへ1遅延サイクルを取り消すことが出来る。現在のアクセスの最後に、スレーブは固定デフォルト・マスターへ接続していたことを覚えている。
この固定デフォルトマスターによって試みられたすべての要求が、少しも遅延を引き起こさないのに対し、他の非特権マスターは1サイクルを遅延するだろう。このテクニックは主にシングル・アクセスするマスターに使われる。

18.5.3 Fixed Priority Arbitration
バス・マトリックス調停機構は、ユーザにより定義された固定優先度を使うことにより異なるマスターから同一スレーブへ要求を送ることができるアルゴリズムである。もし2つ以上のマスター要求が同時にアクティブであるなら、高い優先度番号のマスターが最初にサービスを受ける。もし同じ優先度の2つ以上のマスター要求が同時にアクティブであるなら、最も高い番号のマスターが最初にサービスを受ける。
各スレーブについて、それぞれのマスターの優先度はレジスタPRAS(Priority Registers A for Slaves)とPRBS(Priority Registers B for Slaves)を通して定義されることができる。

18.6 Slave and Master assignation
マスターとスレーブに割り当てられたインデックス番号は「9. Memories」の章に記述されている。