説明
インテル® FPGA 10シリーズの EMIF のピン配置はいくつかのルールがあり、適切に配置をしないと Fitter エラーとなります。
このページはインテル® FPGA 10シリーズの EMIF のピン配置ルールと効率的なピン配置方法の理解を目的とします。
(ここで インテル® FPGA 10シリーズとは インテル® Stratix® 10 FPGA, インテル® Arria® 10 FPGA, インテル® Cyclone® 10 GX FPGA を意味します)
概要
EMIF のピン配置をする際、主に下記の点に注意する必要があります。
・I/O カラムと I/O バンクと I/O レーン
・アドレスコマンドピン
・データピン
上記の配置ルールを理解することで効率的に所望の位置にピン配置をすることができます。
I/Oバンクの構成
I/O カラムや I/O バンクの構成は下記となります。
・各 I/O カラムは複数の I/O バンクで構成されている
・各 I/O バンクに最大1つ、メモリ IP を実装できる
・各 I/O バンクは4つの I/O レーンで構成されている
・各 I/O レーンは12個の I/O ピンで構成されている
・1 I/O バンク(48 ピン) = 1 I/O レーン (12 ピン) × 4 となる
下の図を例にすると、I/O バンク 3F は I/O レーン 0~3 で構成されている。
また、I/O バンクの構成や数はデバイスによって変わります。
I/O バンクには LVDS I/O と3V I/O の2種類のバンクがあり、3V I/O バンクには下記の制限があります。
・周波数制限 : 533 MHz まで
・OCT の使用不可 (OCT を無効化することは非推奨)
・3V I/O バンクへのメモリー IP の配置は非推奨 (デバイスによっては配置自体できない)
・上の図では、黄色のバンクは 3V I/O バンクとなり、この I/O バンクへの メモリー IP の配置は非推奨
アドレスコマンドピンについて
アドレスコマンドピンは、実装する I/O バンクは選べますが、I/O バンク内の位置は固定です。
アドレスコマンドピンのみで3レーン (Index 番号 0~35) もしくは 4レーン (Index 番号 0~47) 使います。
下の表は External Memory Interface Pin Information ファイルとなります。
- アドレスコマンドピンは0~47の Index 番号が割り振られている
- この資料とメモリの構成を参照することで使うレーン数を確認可能
各デバイスファミリー毎のファイルは以下となります。
- インテル® Stratix® 10 FPGA : https://www.intel.com/content/dam/altera-www/global/en_US/pdfs/literature/dp/stratix-10/stratix10emif.pdf
- インテル® Arria® 10 FPGA : https://www.intel.com/content/dam/altera-www/global/en_US/pdfs/literature/dp/arria-10/arria10emif.xls
- インテル® Cyclone® 10 GX FPGA : https://www.intel.com/content/dam/altera-www/global/en_US/pdfs/literature/dp/cyclone-10/cyclone10gxemif.pdf
下の表は Device Pin-Out File となります。
URL : https://www.intel.com/content/www/us/en/programmable/support/literature/lit-dp.html
- 各 I/O バンクも0~47の Index 番号が割り振られている
上記の情報から、各バンクの Index 番号とアドレスコマンドの Index 番号が同じになるようにピン配置する必要があります。
データピンについて
データピンは固定ではありませんが、いくつかのルールがあります。
・1つの DQ/DQS グループは1つの I/O レーンに配置する (1レーンに8bit, 1バンクに 32bit まで配置可能)
・DQ/DQS グループ内や DQ/DQS グループ単位であればピンを入れ替えることが可能
・データピンはアドレスコマンドピンが配置されている I/O バンクもしくは隣り合った I/O バンクに配置する
・アドレスコマンドピンとデータピンは同じ I/O バンク内に置くことが可能
・アドレスコマンドピンとデータピンは同じ I/O レーンを共有できない
複数のバンクを使用する場合
アドレスコマンドピンやデータピンの構成によって、単一の I/O バンクに EMIF を配置できるケースと、複数の I/O バンクが必要なケースがあります。
・単一の I/O バンクに EMIF を配置できるケース
- アドレスコマンドピンで3レーン を使う + データ幅が 8bit のとき
・EMIF の配置に複数の I/O バンクが必要なケース
- アドレスコマンドピンで4レーンを使うとき
- アドレスコマンドピンで3レーンを使う + データ幅が16 bit 以上のとき
単一のメモリー IP で複数の I/O バンクを使用する必要がある場合、下記のルールがあります。
・同一カラムの隣り合った I/O バンクに配置する必要がある
・アドレスコマンドピンが配置されている I/O バンクを中心にするようにデータピンを配置
EMIFを複数実装する場合
下記の条件を満たしてる場合、同一 I/O バンクに違う EMIF のデータピンを共有可能です。
・同じメモリープロトコル
・同じ動作周波数
・同じ I/O Standard
・同じ電源電圧
例えば下の図のような DDR3 (データ幅16 bit) × 2 のインターフェイスの場合、
I/O レーンを共有することで、消費 I/O バンクを3つに抑えることが可能です。
(I/O レーンを共有しない場合、4つの I/O バンクを消費してしまいます。)
また、未使用のピンは GPIO として使用できます。
効率的にピン配置する方法
効率的にピン配置を実行する方法は2つあります
①:Fitter フリーでコンパイル
- 所望のピン配置の場所がない場合は、一番確実で簡単な方法
- Fitter フリーでコンパイルすることで自動で適切な位置にピン配置が行われる
- 制約を満たすよう自動配置するが、満たせるような組み合わせがない場合は Fitter エラーになる
② : アドレスコマンドピンを1ピンのみ特定のバンクに指定しコンパイル
- 所望の I/O バンクにEMIFを配置したい場合に有効な方法
- アドレスコマンドピンを1ピンのみ指定すれば指定した位置を基準にして自動でピン配置される
- 例えば、下記のデバイスで72 bit のメモリ IP を3A~3C I/O バンクに実装したい時、アドレスコマンドピンの一つを3Bに指定しコンパイルするのみで3A~3C I/O バンクに自動でピン配置される