Nios® Vエンベデッド・プロセッサー・デザイン・ハンドブック

ID 726952
日付 10/31/2022
Public
ドキュメント目次

5.7.3.2. ネットワーク・インターフェイスのコンフィグレーション

µC/TCP-IPは、受信および送信されたデータをネットワーク・バッファー (受信バッファーおよび送信バッファーとも呼ばれる) に格納します。これらのネットワーク・バッファーのサイズは、ネットワーク・インターフェイスの最小および最大パケット・フレーム・サイズを満たす必要があります。

µC/TCP-IPアプリケーションの要件に基づいて、software/app/uc_tcp_ip_init.c ソースコードのニーズにより適したネットワーク・バッファーをコンフィグレーションします。コンフィグレーション可能なネットワーク・バッファーは次のとおりです。
  • Receive Large Buffer
  • Transmit Large Buffer
  • Transmit Small Buffer

大きなバッファーのサイズは最大フレームサイズのままにしておくのが最善である一方、小さなバッファーのサイズは小さくしてシステムのRAM使用量を減らし、システム・パフォーマンスをさらに向上させることができます。さらに、デバイスに割り当てられる受信バッファーと送信バッファーの数をコンフィグレーションできます。ネットワークごとに少なくとも1つのバッファーを指定する必要があることに注意してください。

ネットワーク・バッファーをコンフィグレーションしたら、それらを有効なメモリー位置 (メイン・システム・メモリーまたは専用記述子メモリー) にレジスターします。専用の記述子メモリーを使用している場合は、ソースコードで記述子メモリーの開始アドレスとメモリースパンを定義します。

µC/TCP-IPデザイン例におけるデフォルトのコンフィグレーションについては、ネットワーク・バッファーのコンフィグレーションの表を参照してください。ハードウェア・システムに専用の記述子メモリーが用意されており、受信バッファーにレジスターされます。送信バッファーは、メインメモリーに配線されます。

注: インテルは、受信したデータのサイズはデバイスにとって未知であるため、受信バッファーを最大フレームサイズまで保持することをお勧めします。もしくは、送信されるデータのサイズがデバイスに認識されているため、送信されるデータが最大フレームサイズより小さい場合は、小さな送信バッファーを使用することが可能です。したがって、受信バッファーは大きなバッファーのみを使用でき、送信バッファーは大きなバッファーと小さなバッファーの両方を使用することができます。
表 24.  ネットワーク・バッファーのコンフィグレーション
設定 説明 デフォルト値
.RxBufPoolType 受信データバッファーのメモリー位置。 6 7 NET_IF_MEM_TYPE_DEDICATED
.RxBufLargeNbr デバイスに割り当てられた受信バッファーの数。 NUM_RX_BUFFERS 8
.TxBufPoolType 送信データバッファーのメモリー位置。6 7 NET_IF_MEM_TYPE_MAIN
.TxBufLargeNbr デバイスに割り当てられた送信バッファーの数。 5u
.TxBufSmallSize 小さな送信バッファーのサイズ。 60u
.TxBufSmallNbr デバイスに割り当てられた小さい送信バッファーの数。 5u
.MemAddr 専用記述子メモリーの開始アドレス。9 SYS_DESC_MEM_BASE
.MemSize 専用記述子メモリーのサイズ (バイト単位)。 SYS_DESC_MEM_SPAN

uc_tcp_ip_init.c のデフォルトのネットワーク・インターフェイス・コンフィグレーション

static const NET_BUF_QTY NUM_RX_BUFFERS =
    2 * NUM_RX_LISTS * ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE;

static NET_DEV_CFG_ETHER NetDev_Cfg_Ether_TSE = {

    .RxBufPoolType    = NET_IF_MEM_TYPE_DEDICATED,
    .RxBufLargeSize   = 1536u,
    .RxBufLargeNbr    = NUM_RX_BUFFERS,
    .RxBufAlignOctets = 4u,
    .RxBufIxOffset    = 2u,

    .TxBufPoolType    = NET_IF_MEM_TYPE_MAIN,
    .TxBufLargeSize   = 1518u,
    .TxBufLargeNbr    = 5u,
    .TxBufSmallSize   = 60u,
    .TxBufSmallNbr    = 5u,
    .TxBufAlignOctets = 4u,
    .TxBufIxOffset    = 0u,

    .MemAddr    = SYS_DESC_MEM_BASE,
    .MemSize    = SYS_DESC_MEM_SPAN,

    .Flags =  NET_DEV_CFG_FLAG_NONE,

    .RxDescNbr = 8u, // NOTE: Not configurable.
    .TxDescNbr = 1u, // NOTE: Not configurable.
    
    .BaseAddr           = 0,
    .DataBusSizeNbrBits = 0,

    .HW_AddrStr = "",
};
6 このフィールドは、メインメモリーの場合は NET_IF_MEM_TYPE_MAIN に、専用記述子メモリーの場合は NET_IF_MEM_TYPE_DEDICATED に設定する必要があります。
7 NET_IF_MEM_TYPE_DEDICATED に設定できるバッファータイプは1つだけです (受信バッファーまたは送信バッファー)。
8 このフィールドは、NUM_RX_LISTS および ALTERA_TSE_MSGDMA_RX_DESC_CHAIN_SIZE に基づいて導出されます。
9 システムに専用の記述子メモリーがない場合、このフィールドは NULL に設定する必要があります。