1. はじめに
Intel® SoC FPGA の HPS の SDRAM Controller 内部には、Multi-Port Front End(MPFE)が含まれており、各ポートから SDRAM へのアクセスを調停します。
MPFE の 調停の設定は優先順位と重みのそれぞれにおいて、専用のレジスターによって行われます。
この記事では MPFE の概要と調停の設定について説明します。
尚、この記事では Cyclone® V SoC / Arria® V SoC について説明しています。
2. MPFE の概要
MPFE とは SDRAM Controller 内部に含まれる調停回路です。
FPGA や MPU、L3 Interconnect から SDRAM Controller へ同時アクセスが起こった場合に調停する役割を担っています。
下記参考資料にて MPFE と FPGA / MPU / L3 Interconnect の接続がブロック図で記載されておりますので、ご参考にしてください。
参考資料:
Cyclone® V Hard Processor System Technical Reference Manual
Figure 12-1: SDRAM Controller Subsystem High-Level Block Diagram 参照
具体的な調停の内容としては、優先順位付けと、優先順位が同じ場合におけるラウンドロビン・アクセスの各ポートの重み付けです。
例えば、優先順位を MPU より FPGA に高く設定すると、FPGA の転送が完了するまで MPU は待ち状態となります。
優先順位が同じアクセスが同時に起こった場合、ラウンドロビンによるアクセスになりますが、重みを設定することによりアクセスの比率を設定することができます。
また、MPFE に対するポートは合計 10 本存在し、詳細は下図となります。
- Command Port 0, 2, 4: FPGA fabric AXI read command ports / FPGA fabric Avalon-MM read or write command ports
- Command Port 1, 3, 5: FPGA fabric AXI write command ports / FPGA fabric Avalon-MM read or write command ports
- Command Port 6: L3 AXI read command port
- Command Port 7: MPU AXI read command port
- Command Port 8: L3 AXI write command port
- Command Port 9: MPU AXI write command port
詳細に関しましては下記参考資料をご参照ください。
参考資料:
Cyclone® V Hard Processor System Technical Reference Manual
Table 12-4: HPS SDRAM MPFE Command Port Mapping 参照
3. MPFE の設定レジスター
"2. MPFE の概要" でも簡単に触れた通り、MPFE で優先順位付けと重みの設定を行うことができます。本章ではそれぞれの設定内容についてご紹介します。
3-1. 優先順位設定
優先順位付けは、下記の mppriority レジスターで設定します(図 1 参照)。
- mppriority(0xFFC250AC)
mppriority レジスターの詳細については下記資料を参考にしてください。
参考資料:
Cyclone® V HPS Memory Map - mppriority
mppriority レジスターでは 各ポートにつき 3 bit ずつ優先度の値を設定するビットが割り当てられており、ポートは合計 10 本のため有効ビットは 30 bit となります。
mppriority レジスターの内訳としては下図となります。
【図 1】mppriority レジスター内訳
各ポートに対する優先順位の設定値は次のようになっています。
- 優先順位設定値: 0x0 ~ 0x7(数が大きい方が優先度高)
設定例を下図に示します。
【図 2】mppriority レジスター設定例
3-2. 重み設定
重みは、下記 4 つのレジスターで設定します。
- mpweight_0_4(0xFFC250B0)
- mpweight_1_4(0xFFC250B4)
- mpweight_2_4(0xFFC250B8)
- mpweight_3_4(0xFFC250BC)
各レジスターの詳細については下記資料を参考にしてください。
参考資料:
Cyclone® V HPS Memory Map - mpweight_0_4
Cyclone® V HPS Memory Map - mpweight_1_4
Cyclone® V HPS Memory Map - mpweight_2_4
Cyclone® V HPS Memory Map - mpweight_3_4
尚、重みの設定には、各ポートの重みと、各優先度の重みの合計を設定する必要があります。
各ポートの重みを Static Weight、各優先度の重みの合計を Sum of Weight と呼びます。
3-2-1. Static Weight(各ポートの重み)の設定
[31:0] mpweight_0_4 / [17:0] mpweight_1_4 では、各ポートにつき 5 bit づつ重みを設定するビットが割り当てられており、ポートは合計 10 本あるので有効ビットは 50 bit となります。
各ポートに対する重みの設定値は次のようになっています。
- 重み設定値: 0x0 ~ 0x1F
Static Weight 設定レジスターの内訳としては下図となります。
【図 3】Static Weight の設定レジスター
3-2-2. Sum of Weight(各優先度の重みの合計)の設定
[31:18] mpweight_1_4 / [31:0] mpweight_2_4 / [17:0] mpweight_3_4 では、各優先度につき重みの合計を設定するビットが 8 ビットづつ割り当てられており、優先度は 0x0 ~ 0x7 の 8 つのため有効ビットは 64 bit となります。
Sum of Weight 設定レジスターの内訳としては下図となります。
【図 4】Sum of Weight の設定レジスター
4. 注意点
SDRAM Controller は Controller の内部クロック 10 サイクル毎に、優先度と重みを更新します。
その為、設定直後は更新されていない場合がありますのでご注意ください。
参考資料:
Cyclone® V Hard Processor System Technical Reference Manual
MPFE Multi-Port Arbitration Considerations for Use を参照
<抜粋>
The memory controller commits the priority and weight registers into the MPFE arbiter once every 10 SDRAM clock cycles.
5. おわりに
この記事では MPFE の概要と設定について説明しました。
MPFE による調停の設定をしたい場合には各レジスターの設定が必要となります。
優先度の設定には mppriority、重みの設定には mpweight_0_4 / mpweight_1_4 / mpweight_2_4 / mpweight_3_4 の設定が必要となります。
実際に優先度や重みの設定確認および変更を行う場合にお役に立てていただければ幸いです。