Webサーバ

tcpip_layer1

インターネット・プロトコル・スイート

リンク層とインターネット層を接続するLow-level APIを実装します。Low-level APIは、FPGAに実装されたEthernet MAC CoreとLocal Memoryをアクセスし、Ethernet Frameの送受信を行います。

APIの仕様

Ethernet Frameの送信

  • 説明
    • fbufに格納された、長さflenのByteデータをEthernet Frameとして送信します。
  • 戻り値
    • なし
Ethernet Frameの受信

  • 説明
    • 受信したEthernet Frameを、fbufにByteデータとして格納します。
  • 戻り値
    • fbufに格納したByteデータの長さ。

Ethernet Frameの送信フロー

Ethernet Frameの送信は、以下の手順で行います。

  1. FrameデータをCPUからFPGA内Local Memoryに転送
  2. Ethernet MAC CoreのMode RegisterのTXEN bitを1に設定
  3. Ethernet MAC CoreのTx Buffer DescriptorのTXPNTに、Frameデータを格納したLocal Memoryのアドレスを設定
  4. Tx Buffer DescriptorのRD bitを1に設定
  5. 送信完了のインタラプトを待つ
  6. インタラプトを解除
ether_pic2

Ethernet Frameの送信フロー

FrameのCRCは、Ethernet MAC CoreからPHYへの転送時に計算されて付加されます。Tx Buffer Descriptorが有効化されると、Ethernet MAC CoreはTx Buffer Descriptorレジスタの設定に従って、送信データをLocal Memoryから読み出し、Ethernet FrameとしてPHYに出力します。

送信用API ether_write_frameの実装

コード実装は以下の通りです。

Ethernet Frameの受信フロー

Ethernet Frameの受信は、以下の手順で行います。

  1. Ethernet MAC CoreのMode RegisterのRXEN bitを1に設定
  2. Ethernet MAC CoreのRx Buffer DescriptorのRXPNTに、Frameデータを格納するLocal Memoryのアドレスを設定
  3. Ethernet MAC CoreのRx Buffer DescriptorのE(Empty)bitを1に設定
  4. 受信完了インタラプトを待つ
  5. インタラプトを解除
  6. FrameデータをLocal MemoryからCPUに転送
ether_pic3

Ethernet Frameの受信フロー

PHYからEthernet Frameを受信すると、Ethernet MAC CoreはRx Buffer Descriptorレジスタの設定に従って、Ethernet FrameをLocal Memoryに格納します。受信Frameは、Rx Buffer DescriptorのRXPNTが示すLocal Memoryのアドレスに格納されます。FrameのCRCは、Local Memoryへの格納時に削除されます。

受信用API ether_read_frameの実装

コード実装は以下の通りです。


スポンサーリンク
広告大
広告大
  • このエントリーをはてなブックマークに追加
スポンサーリンク
広告大