Media-independent interface

**MII** (*Media-independent Interface* または *Medium-independent Interface*, 「伝送媒体に依存しないインタフェース」の意）は、イーサネットにおいてMAC (データリンク層デバイス)とPHY (物理層デバイス)との接続部分を指す。本稿では以下の拡張版を含めて記述する。

* MII - 100Mbps通信用途
* RMII (reduced MII) - 100Mbps通信用途
* GMII (gigabit MII) - 1Gbps通信用途
* RGMII (reduced gigabit MII) - 1Gbps通信用途
* SGMII (serial gigabit MII) - 1Gbps通信用途
* QSGMII (quad serial gigabit MII) - 5Gbps通信用途
* XGMII (10-gigabit MII) - 2.5Gbps・5Gbps・10Gbps通信用途

## 概要
MIIはさまざまなタイプのPHYをMACに接続するのに使われる。MIIがあることで、MAC側の回路を再設計や交換せずとも、ツイストペアケーブル・光ファイバーなどの多種多様な伝送媒体を接続するPHYを使用できる。名称に"Media-independent" (媒体に依存しない)とあるように、MIIによって伝送媒体とは無関係に、任意のMACを任意のPHYと組み合わせて使える。MIIとは対照的に、伝送媒体を接続する部分にはMedium-dependent interface (MDI)が設けられている。

MIIの仕様は1995年に100Mbps通信規格であるIEEE 802.3u (ファーストイーサネット)で初めて規定された。当時は主流のPHY規格が複数あり、初期には外部PHYにMII配線したコネクタを接続するために、マザーボードにCNRスロット（CNRコネクタ Type B）が備え付けられているものがあった。現在はMACとPHYが同一基板上に実装されることが一般的であり、MIIは機器内部における回路基板上のチップ間インタフェースとして扱われる。

イーサネットの高速化に伴い、1998年に1Gbps通信規格が登場した際も同様の目的のインタフェースとしてGMIIなどが用いられている。さらに高速通信になると、PHYとMACの接続を切り離してPHYを差し替えることが現実的でなくなり、MIIの代わりにPHYの一部のみを置き換える要求が高まった。10Gbps以上の通信ではこのような目的のインタフェースとして、10Mbps通信の時代にPHYの延伸として使われていたAttachment Unit Interface (AUI)の名称が再び用いられるようになっている。

## 初期 MII

IEEE 802.3uによる初期のMIIでは、送受4ビットずつの送受バスを25 MHzのクロックで動作させ、合計100 Mbpsで通信する。また、10Mbps通信との後方互換性も考慮されている。

MIIには下表の18個の信号が必要である。このうちMDCとMDIOは複数のPHYで共有できるが、それ以外の16配線はポートごとに必要である。これは特に多ポート機器では問題となり、例えば8ポートスイッチでは、8つのPHYに対して 8×16 + 2 = 130本を配線することになる。

それぞれのピンについて概説する。

* TXD[3..0], RXD[3..0]では、イーサネットの主信号を送受する。信号はイーサネットフレームとして伝送され、データとしてプリアンブル、開始フレーム識別子(SFD)、イーサネットヘッダ、ペイロード、巡回冗長検査(CRC)を含んだ形をとる。

* TX_CLK (送信クロック)はPHYからMACにクロックを与えるもので、100Mbps通信の場合は25MHz、10Mbps通信の場合は2.5MHzのクロック信号が供給される。TX_CLKの立ち上がりエッジのタイミングでMACがTXD[3..0]にデータを送る。この構成により、MACはリンク速度を意識せずに動作することができる。

* TX_EN (送信中)ピンは、フレーム送信中はハイに、アイドル状態のときはローに保持される。

* TX_ER (送信エラー)は、フレーム送信中に発生することがある。これは、PHYにフレームを故意に破棄するよう要求して、有効なフレームとして受信されるのを防止するためのものである。これはオプションのため MAC にその機能がないこともあり、その場合はローに固定する必要がある。さらに、主信号の送信データTXD[3..0]を特殊な用途に使っていることを示すために、このTX_ERを故意に発生させる方法をとるものがある。例えばEEE対応のPHYでは、特殊シンボル`0b0001`を使って低電力モードに入るように要求するときに「TX_ENをロー、TX_ERをハイ」とするように規定されている。

* RX_ER (受信エラー)は、オプションではなく必須ピンであり、受信信号が有効データとして復号できなかったことを示す。またTX_ERと同様、特殊シンボル`0b0001`(対向がEEE低電力モードにある)と`0b1110`(false carrier)が定義されており、これらの受信時にRX_ERをハイにする。

* RX_CLK (受信クロック)は、フレーム受信中に入力信号から復元される。伝送媒体に信号が流れていないときは、PHYが代わりに自身のクロックを供給する。

* RX_DV (受信中)は、フレーム受信中にハイを維持する。受信開始直後からハイになる必要はないが、遅くともプリアンブル後のSFDが届くまでにはハイを示す必要がある。

* CRS (キャリア検知)・COL (衝突検出)は、半二重通信(CSMA/CD)でのみ用いるもので、RX_CLK とは無関係に動作する。CRSは、送受信中または他機器による伝送路占有の検出時にハイにする。COLは、衝突検出や衝突継続中にハイにする。また、MAC側はCOLに弱いプルアップを接続しており、COLハイとCRSローとの組み合わせ（PHY側がこのパターンで動作することはない）をPHYの接続検出に使っている。

* MDIO (管理データI/O)・MDC (管理データ用クロック) は 2線シリアルバスで、MDIOレジスタへアクセスして状態取得や設定をするために使う。詳細は次節。

## MDIO レジスタ

MDIO (Management Data Input/Output)は、PHYの各種設定や状態取得が可能な管理用インタフェース。I2Cに似た2線シリアルバス(MDIO・MDC)を用いて、内蔵の16ビットレジスタにアクセスする。

100Mbps・1Gbps通信用のPHYは、下表のような32個のレジスタを備えている。前半のアドレス0～15のレジスタはその書式が規定されているが、後半のアドレス16～31のレジスタはPHY固有となっている。

10Gbps通信および後発規格用のPHYにもMDIOレジスタが用意されているが、初期のものから大きく拡張されており、管理用に65536個の16ビットレジスタが実装可能となっている。

## RMII
**RMII** (*Reduced MII*) は、100Mbps通信用途のMIIの一種で、配線数を減らしたもの。下表の9本の配線からなる。この仕様は、1998年にRMIIコンソーシアムによるベンダ間合意によって規定された。

初版 MII から以下の4点が変更された。

* TXCLKとRXCLKを共通のクロックREF_CLKに置き換える。このクロックはPHYへの入力になるため、スイッチなどの多ポート機器内の全てのPHYでクロック信号を共有できる。
* クロックを25MHzから50MHzと倍速にし、主信号を4本から2本に減らす。
* RXDVとCRSを1ピンにまとめる。100Mbps通信では1クロックごと、10Mbps通信では10クロックごとに交互にCRS_DVピンに出力する。
* COLを削除する。

これにより、MIIの18本に対してRMIIでは9本となったが、多ポート機器ではさらに MDIO, MDC, REF_CLKの3本を各PHYで共有できるので、PHYごとに必要なのは6～7本となる。

RMIIでは50MHzのクロックを必要とし、データは1クロックに対し2ビットずつ出力される（MIIでは25MHzで4ビット）。入力信号は立ち上がりエッジでのみ読み取る。

100M・10Mbpsのいずれの通信でも REF_CLK は 50MHz で動作する。そのため10Mbps通信では、送受の出力信号の値を10クロック分維持しておき、入力信号は10クロックに1度だけ読み取る。

### 制限事項
通信が全二重・半二重のいずれか、また10M・100Mbpsの速度のいずれかを示す信号がなく、これらはMDIO/MDCで設定する必要がある。RMIIの第1.2版では MDIO/MDCはIEEE 802.3u-1995の仕様と同一のものと規定しているが、後のIEEE 802.3改版時にMDIOによるオートネゴシエーション設定が追加されており、旧版規格に基づいた古い設計のPHYには速度と二重通信モードを独自の方法で設定しているものがある。

RX_ER信号をサポートしないMACと接続する場合は、MAC側で受信データのCRCをしないようにエラー時にPHYがデータを置き換えて対処するものがある。

RMIIには COL (衝突検出)がないが、CRS_DV信号からCRS (キャリア検知)だけを取り出して、論理演算 `COL = CRS and TX_EN`によって求められる。ただし、この方法では MIIと動作が若干異なり、MIIでは送受両方でキャリア検知ができるが、RMIIでは受信のみとなる。その結果、RMIIでは「キャリアなし」「キャリア損失」の2つのエラーを検出できず、10BASE2や10BASE5などのバス共有型の規格に対応できない。

RMIIでは CRS_DVが交互出力である一方で、TX_ENは交互出力ではなく対称的ではないため、2つのPHYをRMIIで背中合わせに直接接続してリピータにすることはできない。National DP83848を使えば、RX_DVだけを取り出して補助信号として出力できる。

### 信号レベル
TTL信号レベルは5Vまたは3.3Vロジックが使用され、入力の0/1しきい値は0.8V・2.0Vである。入力に5V耐性の規定があるが、実際は5V耐性がないチップがほとんどであり、MAC実装に必要なFPGAにも一般的に5V耐性がない。5V駆動は主に古いMII専用デバイスにのみ見られ、半導体業界のトレンドや、PHYとMACが通常同一基板上にある点を考えると、チップでの対応はおそらく稀である。新しいものでは2.5Vと1.8Vの両方のロジックに対応するチップもある。

RMIIでは、少なくとも規格上は主信号配線を伝送線路ではなく集中定数回路として扱っており、終端処理やインピーダンスの制御は不要である。しかし、初期 MIIでは 68Ωの特性インピーダンスが規定されている。ナショナルセミコンダクタは、MII・RMIIのいずれでもインピーダンス50Ωと直列抵抗33Ωを設けるよう推奨しており、さらにスキューの低減のために配線長は150cm未満、配線長の差を50cm未満に収めたほう良いとしている。

## GMII

**GMII** (*gigabit MII*) は MII の一種で、1Gbps通信用途のもの。下表の27本の配線からなる。送受それぞれ8本の配線が125MHzで動作し、合計1Gbpsで通信する。10M/100Mbps通信も可能である。
この仕様は、IEEE 802.3z-1998 (1000BASE-X) の Clause 35 で初めて規定された。

送信クロックは2種類の方式がある。1Gbps通信では、GTXCLKがMACからPHYに供給され、TXD, TXEN, TXER信号はこれに同期する。10M/100Mbps通信の場合は、TXCLK がPHYからMACに供給され、100 Mbps接続では25 MHz、10 Mbps接続では2.5 MHzで動作する。一方で受信クロックはシンプルであり、受信データから復元した RXCLK のみである。その結果として、GTXCLK と RXCLKとが同じタイミングをとるとは限らない。

## RGMII
**RGMII** (*reduced gigabit MII*)は、1Gbps通信用途の MIIの1つで、配線数を減らしたもの。下表の12本の配線からなる。この仕様は2000年にヒューレット・パッカードが中心となってまとめた規定に基づいている。

GMIIと比べると、送受の主信号配線を半減させ、さらに半二重通信用の不要なCSとCOLを削除している。

主信号は、1Gbps通信では立ち上がり・立ち下がりの両方のエッジで読み取ることで実現している。10M・100Mbps通信では従来どおり立ち上がりエッジのみで入力信号を読み取る。

TXC (送信クロック信号)は、GMIIとは異なり常にMAC側から供給される。データとクロックを同時に出力しているため、初期仕様ではこれを読み取る側のセットアップ時間とホールド時間を確保するために、基板配線の引き回しでクロック信号を1.5～2ナノ秒ほど遅延させる必要があった。RGMII 第2.0版では内部遅延(RGMII-ID)のオプションが追加されたため、基板設計でこれを考慮する必要がなくなった。

RX_CTL (受信中・受信エラー)は、立ち上がりエッジでRXDVを、立ち下がりエッジで`RXDV [[排他的論理和|xor]] RXER` を示す。TX_CTL (送信中・送信エラー)も同様に、立ち上がりエッジでTXENを、立ち下がりエッジで`TXEN xor TXER`を示す。これらは1G・100M・10Mbps通信で共通仕様である。

電圧レベルは、RGMII 第1.3版は2.5V CMOSを使用し、RGMII第2版では1.5V を使用する。

## SGMII
**SGMII** (*serial gigabit MII*)は、1Gbps通信用途の MIIの1つ。低消費電力な差動シリアルバス(LVDS)を利用して信号数を10に減らしている。この仕様は、1999年にシスコ・システムズが規定したものに基づく。主にSFPトランシーバとの接続において使われる。

データ・クロックとしてそれぞれ1対ずつ差動配線を使うため4配線となり、これが送受で8配線、さらにMDIO/MDCを加えた10配線で構成される。

データ用の差動配線バスは一般にSerDesと呼ばれ、主信号に8b/10b符号を用い、クロック周波数625MHz、データレート1.25Gbpsで動作する。これは1000BASE-Xの伝送路符号と同じものをそのまま基板上に流してMACに引き渡す形になる。GMIIに備えられているTXEN, TXER, RXDV, RXER, COL, CSはPHYの機能の一部をMACが受け持って処理する。クロックは常に625MHzであるため、10M・100Mbps用途では16ビットデータをそれぞれ100回・10回反復して送る。

クロックは出力側で生成する必要があるが、入力のオプションもある。また、CDRによる受信信号からの復元クロックを使うこともできる。

## QSGMII
**QSGMII** (*quad serial gigabit MII*)は、5 Gbps通信用途のMII。2005年にシスコ・システムズが規定したものに基づく。

SGMIIを4つ組み合わせたものであるが、配線数はSGMIIバス4つ分よりもはるかに少なく、4対のLVDS送受信号と1対のLVDSクロック信号のみで済む。

## XGMII
**XGMII** (*10 gigabit MII*, "X"はローマ数字で10を意味する) は、10Gbps通信用途の MII。2002年に IEEE 802.3ae で規定された。

72本の配線からなり、156.25MHz (2エッジで312.5 Mbps)で動作する主信号 TXD/RXD 各32本と、制御フロー RXC/TXC 各4本が送受方向にそれぞれ用意されている。配線数の多さから、ほとんどXAUIに置き換えられている。

## nGMII
**nGMII** は、25Gbps以上の高速通信用途のMIIの総称。以下のものが規定されている。

* 25GMII - 25Gbps通信用途
* XLGMII - 40Gbps通信用途 ("XL"はローマ数字で40)
* 50GMII - 50Gbps通信用途
* CGMII - 100Gbps通信用途 ("C"はローマ数字で100)
* 200GMII - 200Gbps通信用途
* 400GMII - 400Gbps通信用途
* 800GMII - 800Gbps通信用途

10GbpsのXGMIIまでは物理的な配線が規定されたものの実装上は内部バスとして扱われたことを反映し、25Gbps以上のMIIはすべて論理インタフェースとして規定された。PHYとMAC間で64ビット単位のデータ送受が規定の速度で可能でさえあれば任意の実装ができるような柔軟性を持たせている。

## 関連項目
* Attachment Unit Interface (AUI) - 10Mbps通信でMIIとほぼ同様の目的のもの
* XAUI - 10Gbps通信でMIIとほぼ同様の目的のもの
*  - データリンク層と物理層との間のインタフェースを指すのにMIIという用語を使用するITU-T勧告
* デバイス帯域幅の一覧
* SFPトランシーバ
* XFPトランシーバ

## 出典

## 外部リンク
* Texas Instruments AN-1405 DP83848 RMII
* Texas Instruments DP83848C PHY Data Sheet
* hp.com RGMIIv2_0_final_hp.pdf RGMII 2002-04-01 Version 2.0 
* 
* CEVA implementation documentation
* Altera 10Gb Ethernet IP with XGMII and XAUI interfaces 
*  GMII Timing and Electrical Specification 
*Ethernet Media Converter