r spartan-3 シリーズ fpga でルックアップ ram - xilinx...x464_02_070303 特徴 xapp464...

12
XAPP464 (v2.0) 2005 3 1 w ww.xilinx.co .jp 1 © 2003 Xilinx, Inc. All rights reserved. すべての Xilinx の商標、登録商標、特許、免責条項は、http://www.xilinx.co .jp /legal.htm にリストされています。他のすべての商標お よび登録商標は、それぞれの所有者が所有しています。すべての仕様は通知なしに変更される可能性があります。 保証否認の通知 : Xilinx ではデザイン、コード、その他の情報を「現状有姿の状態」で提供しています。この特徴、アプリケーションまたは規格の一実施例としてデザイン、 コード、その他の情報を提供しておりますが、Xilinx はこの実施例が権利侵害のクレームを全く受けないということを表明するものではありません。お客様がご自分で実装 される場合には、必要な権利の許諾を受ける責任があります。Xilinx は、実装の妥当性に関するいかなる保証を行なうものではありません。この保証否認の対象となる保証 には、権利侵害のクレームを受けないことの保証または表明、および市場性や特定の目的に対する適合性についての黙示的な保証も含まれます。 概要 Spartan-3Spartan-3LSpartan-3E CLB には、 最大 64 ビッ トのシングル ポー ト RAM また は最大 32 ビッ トのデュアル ポー ト RAM が含まれています。 この RAM は、 FPGA 全体に分散される ので、 ブ ロ ッ ク RAM と区別するため 「分散 RAM」 と呼ばれています。 分散 RAM は高速で、 関連ロ ジックの近くに配置でき、 小さいデータ バッファ、 FIFO、 またはレジスタ フ ァ イルに最適です。 この アプ リ ケーシ ョ ン ノ ー ト では、 分散 RAM の特徴 と 機能、 CORE Generatorシステムや VHDL また Verilog イ ンス タンシエーシ ョ ンを使用した各種オプシ ョ ンの指定方法について説明し ます。 はじめに Spartan-3 FPGA には、 エンベデッ ド 18Kb ブロック RAM に加え、 CLB 内で分散 RAM を使用できる と い う 特徴が あ り ま す。 CLB リ ソースの SLICEM のファンクション ジェネレータ (LUT) に、オプシ ョ ンで 16 ワード X 1 ビ ッ ト の同期 RAM を イ ン プ リ メ ン ト で き ま す。 ただし、 SLICEL スライスの LUT には、 分散 RAM をインプリメントできません。 分散 RAM では、 書き込みは同期、 読み出しは非同期で行われます。 ただし、 アプ リ ケーシ ョ ンに必要 であれば、 各 LUT に関連付けられたレジスタを使用して同期読み出しをインプリ メン トできます。 16X1 ビット RAM は、 カスケード接続してビッ ト数およびワード数の多いメモリ を作成でき、 タイ ミ ング遅延も特殊ロジック リ ソースによ り最小限に抑えるこ とができます。 Spartan-3 CLB は、 最大 64 ワード X 1 ビットまでのさまざまな RAM プリミティブをサポートして います。 SLICEM スライスの 2 つの LUT を組み合わせる と 、 読み出し /書き込みポー ト を 1 つ、 読み出 し専用ポー ト を 1 つ持つデュアル ポー ト 16X1 RAM を作成できます。 こ の場合、 1 つのポー ト で 2 16X1 LUT RAM 両方に同時に書き込みを行いますが、 も う 1 つのポー ト での読み出しは独立して行 われます。 分散 RAM は、 FIFO や小さいレジスタ フ ァ イルなど、 比較的小さいエンベデッ ド RAM ブロックを使 用するパフォーマンスの高いアプ リ ケーシ ョ ンに必須です。 CORE Generator は、 Spartan-3 アーキテク チャ用に最適化された分散 RAM を自動的に生成し ます。 また、 分散 RAM を使用して非同期および同 FIFO も生成します。 シングル ポー ト RAM およびデュアル ポー ト RAM データ フロー 分散 RAM には、 次のタ イプがあ り ます。 同期書き込みおよび非同期読み出しのシングル ポー ト RAM分散 RAM に関連付け られたフ リ ッ プフロ ップを使用した同期読み出し も可能です。 同期書き込みポー ト 1 つ と 非同期読み出 し ポー ト 2 つを持つデュアル ポー ト RAMシングル ポー ト RAM と 同様、 同期読み出 し も 可能です。 1 に示すよ う に、 デュアル ポー ト の分散 RAM には読み出し /書き込みポートが 1 つ、 独立し た読み 出しポートが 1 つあ り ます。 アプリケーション ノート : Spartan-3 FPGA ファミリ XAPP464 (v2.0) 2005 3 1 Spartan-3 シリーズ FPGA でルックアップ テーブルを分散 RAM と して使用する方法 R

Upload: others

Post on 22-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

  • XAPP464 (v2.0) 2005 年 3 月 1 日 www.xilinx.co.jp 1

    © 2003 Xilinx, Inc. All rights reserved. すべての Xilinx の商標、登録商標、特許、免責条項は、http://www.xilinx.co.jp/legal.htm にリストされています。他のすべての商標および登録商標は、それぞれの所有者が所有しています。すべての仕様は通知なしに変更される可能性があります。

    保証否認の通知 : Xilinx ではデザイン、コード、その他の情報を「現状有姿の状態」で提供しています。この特徴、アプリケーションまたは規格の一実施例としてデザイン、コード、その他の情報を提供しておりますが、Xilinx はこの実施例が権利侵害のクレームを全く受けないということを表明するものではありません。お客様がご自分で実装される場合には、必要な権利の許諾を受ける責任があります。Xilinx は、実装の妥当性に関するいかなる保証を行なうものではありません。この保証否認の対象となる保証には、権利侵害のクレームを受けないことの保証または表明、および市場性や特定の目的に対する適合性についての黙示的な保証も含まれます。

    概要 Spartan™-3、 Spartan™-3L、 Spartan™-3E の CLB には、最大 64 ビッ トのシングル ポート RAM または最大 32 ビッ トのデュアル ポート RAM が含まれています。 この RAM は、 FPGA 全体に分散されるので、 ブロ ッ ク RAM と区別するため 「分散 RAM」 と呼ばれています。 分散 RAM は高速で、 関連ロジッ クの近くに配置でき、 小さいデータ バッファ、 FIFO、 またはレジスタ ファ イルに最適です。 このアプ リケーシ ョ ン ノートでは、 分散 RAM の特徴と機能、 CORE Generator™ システムや VHDL または Verilog インスタンシエーシ ョ ンを使用した各種オプシ ョ ンの指定方法について説明します。

    はじめに Spartan-3 FPGA には、 エンベデッ ド 18Kb ブロ ッ ク RAM に加え、 CLB 内で分散 RAM を使用できるという特徴があ り ます。 CLB リ ソースの SLICEM のファンクシ ョ ン ジェネレータ (LUT) に、オプシ ョンで 16 ワード X 1 ビッ トの同期 RAM をインプ リ メン トできます。 ただし、 SLICEL スライスの LUTには、 分散 RAM をインプリ メン トできません。

    分散 RAM では、 書き込みは同期、 読み出しは非同期で行われます。 ただし、 アプ リ ケーシ ョ ンに必要であれば、 各 LUT に関連付けられたレジス タを使用して同期読み出しをインプ リ メ ン ト でき ます。16X1 ビッ ト RAM は、 カスケード接続してビッ ト数およびワード数の多いメモリ を作成でき、 タイ ミング遅延も特殊ロジッ ク リ ソースによ り最小限に抑えるこ とができます。

    Spartan-3 の CLB は、最大 64 ワード X 1 ビッ ト までのさまざまな RAM プリ ミ ティブをサポート しています。 SLICEM スライスの 2 つの LUT を組み合わせる と、読み出し /書き込みポート を 1 つ、読み出し専用ポート を 1 つ持つデュアル ポート 16X1 RAM を作成できます。 この場合、 1 つのポートで 2 つの 16X1 LUT RAM 両方に同時に書き込みを行いますが、も う 1 つのポートでの読み出しは独立して行われます。

    分散 RAM は、 FIFO や小さいレジスタ ファ イルなど、 比較的小さいエンベデッ ド RAM ブロ ッ クを使用するパフォーマンスの高いアプリケーシ ョ ンに必須です。 CORE Generator は、Spartan-3 アーキテクチャ用に最適化された分散 RAM を自動的に生成します。 また、 分散 RAM を使用して非同期および同期 FIFO も生成します。

    シングル ポート RAM およびデュアル ポート RAM

    データ フロー

    分散 RAM には、 次のタイプがあ り ます。

    • 同期書き込みおよび非同期読み出しのシングル ポート RAM。 分散 RAM に関連付けられたフ リ ップフロ ップを使用した同期読み出しも可能です。

    • 同期書き込みポート 1 つと非同期読み出しポート 2 つを持つデュアル ポート RAM。 シングルポート RAM と同様、 同期読み出しも可能です。

    図 1 に示すよ うに、 デュアル ポートの分散 RAM には読み出し /書き込みポートが 1 つ、 独立した読み出しポートが 1 つあ り ます。

    アプリケーシ ョ ン ノート : Spartan-3 FPGA ファ ミ リ

    XAPP464 (v2.0) 2005 年 3 月 1 日

    Spartan-3 シリーズ FPGA でルックアップ テーブルを分散 RAM と して使用する方法

    R

    http://www.xilinx.co.jp/http:www.xilinx.com/legal.htmhttp://www.xilinx.co.jp/legal.htmhttp://www.xilinx.co.jp/legal.htm

  • 2 www.xilinx.co.jp XAPP464 (v2.0) 2005 年 3 月 1 日

    はじめにはじめにはじめにはじめにR

    D 入力の書き込みと SPO 出力の読み出しは、も う 1 つの読み出し専用ポート DPO の書き込みと同時に独立して行う こ とができます。

    書き込み操作

    書き込みは、 ラ イ ト イネーブル (WE) 入力によ り ク ロ ッ ク エッジに同期して行われます。 WE は、 デフォルトではアクティブ High になっていますが、 分散 RAM 内で反転できます。 WE が High の場合、ク ロ ッ ク エッジで書き込みアドレスが取り込まれ、D 入力のデータが選択された RAM 位置に書き込まれます。

    WE が Low の場合、 データは RAM に書き込まれません。

    読み出し操作

    読み出しは、組み合わせ動作です。 アドレス ポート (シングル ポート またはデュアル ポート モード ) は非同期で、 アクセス時間 (LUT ロジッ ク遅延と同じ ) 後に読み出しが実行されます。

    書き込み中に読み出し

    新しいデータの同期書き込みが実行される と、アド レス入力で指定されたメモリ セルのデータが出力に送信されます。 これは、 Spartan-3 のブロ ッ ク RAM で WRITE_MODE=WRITE_FIRST モードを設定した場合と似ています。 図 2 は、 書き込みのタイ ミ ングを示します。 出力ポートにある前のデータが、ク ロ ッ ク エッジ後に新しいデータに置き換わり ます。

    図 1 : シングル ポートおよびデュアル ポートの分散 RAM

    図 2 : 書き込みタイ ミング図

    D

    WCLK

    Single-Port RAM

    OD

    WCLK

    Dual-Port RAM

    SPO

    DPO

    x464_01_062503

    R/W Port

    Write Read

    Address Address

    Address

    R/W Port

    Read Port

    Write Read

    Read

    treadtwrite

    PreviousData

    d

    d

    aa

    MEM(aa)

    NewData

    tread

    WCLK

    DATA_IN

    ADDRESS

    WRITE_EN

    DATA_OUT

    x464_02_070303

    http://www.xilinx.co.jp

  • 特徴特徴特徴特徴

    XAPP464 (v2.0) 2005 年 3 月 1 日 www.xilinx.com 3

    R

    特徴 • 書き込みは、 ク ロ ッ ク エッジに同期して行われます。

    • 読み出しは、 ロジッ ク アクセス時間後に行われます。

    • 出力は非同期で、 LUT ロジッ ク遅延のみに依存します。

    • データ入力およびアドレス入力は、書き込みクロ ッ クに同期して取り込まれますが、 setup-to-clockタイ ミ ング仕様に従います。 ホールド タイム要件はあ り ません。

    • デュアル ポート RAM の場合、A[#:0] が書き込み/読み出し用のアドレス ポート、DPRA[#:0] が独立した読み出し専用のアドレス ポートにな り ます。

    ほかの FPGA ファ ミ リ との互換性

    Spartan-3 の分散 RAM は、 Virtex™、 Virtex™-E、 Spartan™-II、 Spartan™-IIE、 Virtex™-II、 およびVirtex™-II Pro FPGA の分散 RAM と同じ動作をします。

    表 1 は、 各種 FPGA ファ ミ リの CLB に埋め込まれた基本的なメモリ機能を示します。 Virtex-II およびVirtex-II Pro と同様、 Spartan-3 の CLB には 8 つの LUT があ り、 128 ビッ トの ROM がインプ リ メント されています。 Virtex、 Virtex-E、 Spartan-II、 および Spartan-IIE と同様、 Spartan-3 の CLB には 64ビッ トの分散 RAM があ り ます。 Spartan-3 と Virtex-II および Virtex-II Pro の CLB のロジッ ク機能は同じですが、Spartan-3 の CLB に埋め込まれた分散 RAM のビッ ト幅は、Virtex-II および Virtex-II Proの半分です。

    表 2 は、 各種 FPGA ファ ミ リでサポート されるシングル ポートおよびデュアル ポートの RAM プリ ミティブを リ ス ト しています。 こ こでは、1 つの CLB にインプ リ メン ト可能なプリ ミ ティブのインスタンス数を RAM タイプ別に示しています。 たとえば、Spartan-3 の CLB には、32X1 シングル ポート RAMプリ ミ ティブを 2 つインプ リ メン トできます。 また、 16X1 デュアル ポート RAM プリ ミ ティブは 2 つインプ リ メン トできますが、 32X1 デュアル ポート RAM プリ ミ ティブは 1 つもインプ リ メン トできません。

    表 1 : 分散メモリの特徴 (FPGA ファ ミ リ別)

    特徴

    Spartan-3/Spartan-3L/Spartan-3Eファ ミ リ

    Virtex/Virtex-E、Spartan-II/Spartan-IIE

    ファ ミ リ

    Virtex-II/Virtex-II Pro ファ ミ リ

    CLB ごとの LUT 数 8 4 8

    CLB ごとの ROM ビッ ト幅 128 64 128

    CLB ごとのシングル ポート RAM ビッ ト幅

    64 64 128

    CLB ごとのデュアル ポート RAM ビッ ト幅

    32 32 64

    http://www.xilinx.co.jp

  • 4 www.xilinx.co.jp XAPP464 (v2.0) 2005 年 3 月 1 日

    ライブラリライブラリライブラリライブラリ プリ ミテ ィブプリ ミテ ィブプリ ミテ ィブプリ ミテ ィブR

    ライブラリ プリ ミテ ィブ

    Spartan-3 の分散 RAM をサポートするラ イブラ リ プリ ミ テ ィブには、 ワード数が 16 ビッ トのものから 64 ビッ トのものまで 4 種類あ り ます。 すべてのプリ ミ ティブの幅は 1 ビッ トです。 表 3 に示すよ うに、 プ リ ミ ティブのう ち 3 つがシングル ポート RAM で、 あとの 1 つがデュアル ポート RAM です。

    入力データおよび出力データの幅は 1 ビッ トですが、 複数の分散 RAM を並列接続する と、 ビッ ト数の多いメモ リ ファンクシ ョ ンを簡単にインプリ メン トできます。

    図 3 に、 シングル ポートおよびデュアル ポートの分散 RAM プリ ミ ティブを示します。 A[#:0] 信号および DPRA[#:0] 信号は、 アドレス バスです。

    表 4 に示すよ うに、 2 ビッ トおよび 4 ビッ ト RAM のライブラ リ プリ ミ ティブもあ り ます。

    表 2 : 1 つのCLB にインプリ メン ト可能なシングル ポートおよびデュアル ポートの

    RAM プリ ミテ ィブ数 (ファ ミ リ別)

    ファ ミ リシングル ポート RAM デュアル ポート RAM

    16X1 32X1 64X1 128X1 16X1 32X1 64X1

    Spartan-3 4 2 1 2

    Spartan-II、 Spartan-IIE

    Virtex、 Virtex-E

    4 2 1 2

    Virtex-II、 Virtex-II Pro 8 4 2 1 4 2 1

    表 3 : シングル ポートおよびデュアル ポートの分散 RAM

    プリ ミテ ィブRAM サイズ

    (ワード数 X ビッ ト幅)タイプ アドレス入力

    RAM16X1S 16 X 1 シングル ポート A3, A2, A1, A0

    RAM32X1S 32 X 1 シングル ポート A4, A3, A2, A1, A0

    RAM64X1S 64 X 1 シングル ポート A5, A4, A3, A2, A1, A0

    RAM16X1D 16 X 1 デュアル ポート A3, A2, A1, A0

    図 3 : シングル ポートおよびデュアル ポートの分散 RAM プリ ミテ ィブ

    DPRA[#:0]

    A[#:0]

    D

    WE

    WCLK

    RAMyX1D

    SPO

    DPO

    X464_03_062503

    R/W Port

    Read Port

    RAMyX1S

    O

    A[#:0]

    D

    WE

    WCLK

    http://www.xilinx.co.jp

  • 信号信号信号信号ポートポートポートポート

    XAPP464 (v2.0) 2005 年 3 月 1 日 www.xilinx.com 5

    R

    信号ポート 分散 RAM の各ポートは、同じ メモ リ セルを読み出している場合でも、動作はそれぞれ独立しています。

    クロッ ク - WCLK

    ク ロ ッ クは、同期書き込みに使用します。 データ入力ピンとアドレス入力ピンのセッ ト アップ タイムは、WCLK ピンを基準と しています。

    イネーブル - WE

    イネーブル ピンは、ポートの書き込み機能を制御します。 WE が非アクティブの場合、 メモ リ セルへの書き込みは実行されません。 WE がアクティブの場合、 ク ロ ッ ク エッジに同期して、 アドレス入力信号で指定したメモ リ位置にデータ入力信号を書き込みます。

    アドレス - A0、 A1、 A2、 A3 (A4、 A5)

    アドレス入力は、 読み出しまたは書き込みを行う メモ リ セルを選択します。 必要となるアドレス入力の数は、 ポート幅によって決ま り ます。

    メモ : VHDL または Verilog インスタンシエーシ ョ ンでは、 アドレス入力はバスではあ り ません。

    データ入力 - D

    データ入力は、 RAM に書き込まれる新しいデータ値とな り ます。

    データ出力 - O、 SPO、 DPO

    シングル ポート RAM のデータ出力 O またはデュアル ポート RAM のデータ出力 SPO および DPO には、 アドレス入力で指定したメモリ セルの内容が送信されます。 WE がアクティブになる と、 新し く書き込まれたデータがデータ出力 (O または SPO) に送信されます。

    制御ピンの反転

    2 つの制御ピン (WCLK および WE) は、個別に反転できます。 ク ロ ッ クを含むすべての制御信号は、ほかのロジッ ク リ ソースを使用せずに、アクティブ High またはアクティブ Low にコンフ ィギュレーシ ョンできます。

    グローバル セッ ト /リセッ ト - GSR

    分散 RAM モジュールは、 グローバル セッ ト / リセッ ト (GSR) 信号ではリセッ ト されません。

    グローバル ライ ト イネーブル - GWE

    グローバル ラ イ ト イネーブル (GWE) 信号は、すべての書き込み可能なエレ メン トが有効になるよ うデバイス コンフ ィギュレーシ ョ ンの最後に自動的にアサート されます。 GWE 信号を使用する と、 初期化された分散 RAM の内容がコンフ ィギュレーシ ョ ン中に変更されるこ とはあ り ません。

    表 4 : 2 ビッ トおよび 4 ビッ トのライブラリ プリ ミテ ィブ

    プリ ミテ ィブRAM サイズ

    (ワード数 X ビッ ト幅)データ入力 アドレス入力 データ出力

    RAM16X2S 16 X 2 D1, D0 A3, A2, A1, A0 O1, O0

    RAM32X2S 32 X 2 D1, D0 A4, A3, A2, A1, A0 O1, O0

    RAM16X4S 16 X 4 D3, D2, D1, D0 A3, A2, A1, A0 O3, O2, O1, O0

    http://www.xilinx.co.jp

  • 6 www.xilinx.co.jp XAPP464 (v2.0) 2005 年 3 月 1 日

    属性属性属性属性R

    GWE はグローバル信号で、 デバイス全体に自動的に接続されるため、 分散 RAM プ リ ミ テ ィブにはGWE 入力ピンはあ り ません。

    属性 内容初期化 - INIT

    分散 RAM は、デフォルトではデバイスのコンフ ィギュレーシ ョ ン シーケンス中にすべて 0 に初期化されます。 メモ リの内容を 0 以外の値に初期化するには、 INIT 属性を使用します。 INIT 属性は、 16 進数で表したビッ ト ベク トルで、 最上位ビッ トから最下位ビッ トの順に配列されています。 一番右の 16 進数は、 RAM の位置 (3、 2、 1、 0) を表します。 表 5 に、 INIT 属性の桁数をプリ ミ ティブ別に示します。

    配置ロケーシ ョ ン - LOC

    Spartan-3 の CLB には、図 4 に示すよ うに、位置座標を持つスライスが 4 つ含まれています。 分散 RAMは、 SLICEM スラ イスにのみインプ リ メ ン ト可能です。 SLICEM の M はメモ リ に関連したファンクシ ョ ンがサポート されるこ とを、 SLICEL の L はロジッ クのみがサポート されるこ とを表します。

    LOC プロパティを分散 RAM インスタンスに割り当てる と、ISE によ り インスタンスが指定された位置に配置されます。 図 4 は、 Spartan-3 CLB のスライスの XY 座標を示しています。 メモ リは、 SLICEMスライスのみでサポート されます。

    分散 RAM の配置ロケーシ ョ ンの表記方法は、スライス位置の表記方法と同じなので、LOC プロパティを別のアレイにも簡単に転用できます。

    表 5 : INIT 属性の桁数

    プリ ミテ ィブ テンプレート INIT 属性の桁数

    RAM16X1S RAM_16S 4 桁

    RAM32X1S RAM_32S 8 桁

    RAM64X1S RAM_64S 16 桁

    RAM16X1D RAM_16D 4 桁

    LOC

    図 4 : Spartan-3 CLB 内の SLICEM スライス

    X1Y0

    X1Y1

    Reg

    Reg

    Reg Reg

    RegReg

    Logic/ROMDistributed RAM

    Shift Register

    Logic/ROM only

    X0Y1

    X0Y0

    SLICEM

    LUT

    LUT

    x464_04_070803

    LUT

    LUT

    Configurable Logic Block (CLB)

    SLICEL

    Reg

    RegLUT

    LUT

    LUT

    LUT

    http://www.xilinx.co.jp

  • 属性属性属性属性

    XAPP464 (v2.0) 2005 年 3 月 1 日 www.xilinx.com 7

    R

    たとえば、 シングル ポー ト RAM16X1S プ リ ミ テ ィブは、 SLICEM の LUT を使用します。 スラ イスX0Y0 にインスタンス U_RAM16 を配置するには、 次のよ う な LOC 構文を使用します。

    INST "U_RAM16" LOC = "SLICE_X0Y0";

    図 5 に示すよ うに、 16X1 デュアル ポート RAM16X1D プ リ ミ テ ィブでは、 SLICEM スライス内の 2つの 16X1 LUT RAM を使用します。 出力 SPO を持つ最初の 16X1 LUT RAM には、 読み出し /書き込み共に同じアド レス A[3:0] で、 読み出し /書き込みポー ト がインプ リ メ ン ト されます。 2 つめの LUTRAM では、 アドレス DPRA[3:0] で、 独立した読み出し専用ポートがインプ リ メン ト されます。 データは、 アドレス A[3:0]、 WE、 および WCLK で制御され、 両方の LUT RAM に同時に送られます。

    図 6 に示すよ うに、 32X1 シングル ポート RAM32X1S プ リ ミ テ ィブはスラ イスを 1 つ使用します。RAM の 32 ビッ トは、SLICEM スライス内で 2 つの 16X1 LUT RAM に分割されます。 A4 アドレス線は、スライス内の F5MUX マルチプレクサを介して、アクティブになっている LUT RAM を選択します。

    図 5 : RAM16X1D の配置

    D

    A[3:0]

    WE

    WCLK

    SPO

    DPO

    DPRA[3:0]

    16x1LUTRAM(Read/Write)

    16x1LUTRAM(ReadOnly)

    OptionalRegister

    OptionalRegister

    SLICEM

    x464_05_062603

    http://www.xilinx.co.jp

  • 8 www.xilinx.co.jp XAPP464 (v2.0) 2005 年 3 月 1 日

    分散分散分散分散 RAM のののの デザインデザインデザインデザイン入力入力入力入力R

    64X1 シングル ポート RAM64X1S プリ ミ ティブは、SLICEM スライスを 2 つ使用します。 読み出しパスは、 CLB 内の F5MUX と F6MUX の両方のマルチプレクサを使用します。

    分散 RAM のデザイン入力

    アプリケーシ ョ ンで分散 RAM を指定するには、CORE Generator、VHDL、 または Verilog などのデザイン入力ツールを使用できます。

    CORE Generator

    CORE Generator を使用する と、 シングル ポートおよびデュアル ポート RAM、 ROM、 および SRL16シフ ト レジスタのファンクシ ョ ンを持つ分散メモリ デザインを作成できます。

    分散メモ リ モジュールには、 パラ メータを指定できます。 モジュールを作成するには、 コンポーネン ト名、 使用する制御入力、 制御入力の極性を指定します。

    オプシ ョ ンで、 初期メモリ内容を指定できます。 指定しない場合は、 各メモリ位置が 0 に初期化されます。 初期値を指定するには、 メモ リ初期化ファイルに、 各メモ リ位置に対して 1 行のバイナリ データを入力します。 デフォルト のファ イルは、 CORE Generator によ り作成されます。 または、 図 7 のよ う な係数ファ イル (拡張子が .coe) を作成して ください。 このファ イルでは、 初期内容を 2、 10、 または 16の基数で定義できるだけでなく、 ほかの制御パラ メータも定義できます。

    CORE Generator では、選択されたオプシ ョ ンと必要となるデバイス リ ソースを示すレポートが出力されます。 ワード数の多いメモ リが生成される と外部マルチプレクサが必要になるこ とがあ り ますが、 これらの リ ソースは必要なロジッ ク スラ イス数と してレポー ト されます。 また、 シ ミ ュレーシ ョ ン用にVHDL または Verilog ビヘイビア モデルも生成されます。

    図 6 : RAM32X1S の配置

    D

    A[3:0]

    WE

    WCLK

    SLICEM

    A4

    O

    F5M

    UX

    16x1LUTRAM

    16x1LUTRAM

    OptionalRegister

    OptionalRegister

    x464_06_062603

    図 7 : バイ ト幅メモリの係数ファイル

    memory_initialization_radix=16;memory_initialization_vector= 80, 0F, 00, 0B, 00, 0C, ..., 81;

    http://www.xilinx.co.jp

  • 分散分散分散分散 RAM のののの デザインデザインデザインデザイン入力入力入力入力

    XAPP464 (v2.0) 2005 年 3 月 1 日 www.xilinx.com 9

    R

    CORE Generator の同期および非同期 FIFO モジュールでは、分散 RAM およびブロ ッ ク RAM がサポート されます。

    • CORE Generator : 分散メモリ モジュールhttp://www.xilinx.co.jp/ipcenter/catalog/logicore/docs/dist_mem.pdf

    • CORE Generator : 同期 FIFO モジュールhttp://www.xilinx.co.jp/ipcenter/catalog/logicore/docs/sync_fifo.pdf

    • CORE Generator : 非同期 FIFO モジュールhttp://www.xilinx.co.jp/ipcenter/catalog/logicore/docs/async_fifo.pdf

    VHDL および Verilog

    VHDL および Verilog ベースのデザインでは、ブロ ッ ク RAM を推論またはインスタンシエートできます (使用する合成ツールによって異なる)。

    ブロック RAM の推論

    ザイ リ ンクスの XST や Synplicity 社の Synplify などの VHDL および Verilog 合成ツールを使用すると、 記述したハード ウェアを基にしてブロ ッ ク RAM を推論できます。 ISE Project Navigator には、 ブロ ッ ク RAM を推論するためのテンプレートが含まれています。 Project Navigator でテンプレート を使用するには、 [Edit] → [Language Templates] をク リ ッ ク して [VHDL] または [Verilog] を選択し、 表示された階層ツ リーから [Synthesis Templates] → [RAM] を展開して、分散 RAM のテンプレート を選択します。 テンプレート を切り取ってアプリケーシ ョ ン用のソース コードに貼り付け、 必要に応じて変更を加えます。

    デザイ ンの一部で分散 RAM が推論さ れていても 、 分散 RAM をイ ンスタ ンシエート する こ と は可能です。

    インスタンシエーシ ョ ン テンプレート

    VHDL および Verilog をベースと したデザインの場合、各種インスタンシエーシ ョ ン テンプレート を使用して開発時間を短縮できます。 ISE Project Navigator で、 [Edit] → [Language Templates] をク リ ッ クし て [VHDL] または [Verilog] を選択し、 表示された階層ツ リ ーから [Component Instantiation] →[Distributed RAM] を選択します。 テンプレート を切り取ってアプリ ケーシ ョ ン用のソース コードに貼り付け、 必要に応じて変更を加えます。

    シングル ポートおよびデュアル ポートのプリ ミ ティブ用の VHDL および Verilog テンプレートは、 ダウンロードするこ と も可能です。 RAM_xS テンプレート (x = 16、 32、 64) はシングル ポート モジュールで、対応する RAMxX1S プリ ミ ティブをインスタンシエート します。 S は、シングル ポート RAM を表します。 RAM_16D テンプレートはデュアル ポート モジュールで、対応する RAM16X1D プリ ミ ティブをインスタンシエート します。 D は、 デュアル ポート RAM を表します。

    • 分散 RAM の VHDL テンプレートftp://ftp.xilinx.com/pub/applications/xapp/xapp464_vhdl.zip

    • 分散 RAM の Verilog テンプレートftp://ftp.xilinx.com/pub/applications/xapp/xapp464_verilog.zip

    次に示すのは、 シングル ポートのテンプレートです。

    • RAM_16S

    • RAM_32S

    • RAM_64S

    次に示すのは、 デュアル ポートのテンプレートです。

    • RAM_16D

    http://www.xilinx.co.jphttp://www.xilinx.co.jp/ipcenter/catalog/logicore/docs/dist_mem.pdfhttp://www.xilinx.co.jp/ipcenter/catalog/logicore/docs/sync_fifo.pdfhttp://www.xilinx.co.jp/ipcenter/catalog/logicore/docs/async_fifo.pdfftp://ftp.xilinx.com/pub/applications/xapp/xapp464_vhdl.zipftp://ftp.xilinx.com/pub/applications/xapp/xapp464_verilog.zip

  • 10 www.xilinx.co.jp XAPP464 (v2.0) 2005 年 3 月 1 日

    分散分散分散分散 RAM のののの デザインデザインデザインデザイン入力入力入力入力R

    VHDL の場合、 テンプレートにコンポーネン ト宣言とアーキテクチャ本体があ り ます。 テンプレートの両方のセクシ ョ ンを VHDL デザイン ファ イルに追加してください。 アーキテクチャ本体のポート マップは、 デザイン信号名に含める必要があ り ます。

    次に、 RAM_16S モジュールの VHDL および Verilog テンプレート例を示します。

    VHDL テンプレート例

    ---- Module: RAM_16S---- Description: VHDL instantiation template-- Distributed RAM-- Single Port 16 x 1-- Can also be used for RAM16X1S_1---- Device: Spartan-3 Family--------------------------------------------------------------------------- Components Declarations:--component RAM16X1S-- pragma translate_offgeneric (-- RAM initialization ("0" by default) for functional simulation:INIT : bit_vector := X"0000");-- pragma translate_onport ( D : in std_logic; WE : in std_logic; WCLK : in std_logic; A0 : in std_logic; A1 : in std_logic; A2 : in std_logic; A3 : in std_logic; O : out std_logic);end component;--------------------------------------------------------------------------- Architecture section:---- Attributes for RAM initialization ("0" by default):attribute INIT: string;--attribute INIT of U_RAM16X1S: label is "0000";---- Distributed RAM InstantiationU_RAM16X1S: RAM16X1Sport map ( D => , -- insert Data input signal WE => , -- insert Write Enable signal WCLK => , -- insert Write Clock signal A0 => , -- insert Address 0 signal A1 => , -- insert Address 1 signal A2 => , -- insert Address 2 signal A3 => , -- insert Address 3 signal O => -- insert Data output signal);-----------------------------------------------------------------------

    http://www.xilinx.co.jp

  • 分散分散分散分散 RAM のののの デザインデザインデザインデザイン入力入力入力入力

    XAPP464 (v2.0) 2005 年 3 月 1 日 www.xilinx.com 11

    R

    Verilog テンプレート例

    //// Module: RAM_16S//// Description: Verilog instantiation template// Distributed RAM// Single Port 16 x 1// Can also be used for RAM16X1S_1//// Device: Spartan-3 Family////-------------------------------------------------------------------//// Syntax for Synopsys FPGA Express// synopsys translate_offdefparam//RAM initialization ("0" by default) for functional simulation:U_RAM16X1S.INIT = 16'h0000;// synopsys translate_on//Distributed RAM InstantiationRAM16X1S U_RAM16X1S ( .D(), // insert input signal .WE(), // insert Write Enable signal .WCLK(), // insert Write Clock signal .A0(), // insert Address 0 signal .A1(), // insert Address 1 signal .A2(), // insert Address 2 signal .A3(), // insert Address 3 signal .O() // insert output signal);// synthesis attribute declarations/* synopsys attributeINIT "0000"*/

    ビッ ト数の多い分散 RAM モジュール

    表 6 に、 n ビッ ト幅のメモ リ をインプ リ メン トする分散 RAM の VHDL および Verilog サブモジュールを示します。

    VHDL または Verilog コードでの初期化

    分散 RAM は、合成およびシ ミ ュレーシ ョ ン用に VHDL または Verilog コードで初期化できます。 合成の場合、 分散 RAM インスタンスに属性を設定し、 EDIF 出力ファイルにコピーして ISE ツールでコンパイルします。 VHDL シ ミ ュレーシ ョ ンの場合は generic パラ メータを使用して属性が渡され、 Verilogシ ミ ュレーシ ョ ンでは defparam パラ メータを使用して属性が渡されます。

    表 6 : VHDL および Verilog サブモジュール

    サブモジュール プリ ミテ ィブ サイズ タイプ

    XC3S_RAM16XN_S_SUBM RAM16X1S 16 ワード X n ビッ ト シングル ポート

    XC3S_RAM32XN_S_SUBM RAM32X1S 32 ワード X n ビッ ト シングル ポート

    XC3S_RAM64XN_S_SUBM RAM64X1S 64 ワード X n ビッ ト シングル ポート

    XC3S_RAM16XN_D_SUBM RAM16X1D 16 ワード X n ビッ ト デュアル ポート

    http://www.xilinx.co.jp

  • 12 www.xilinx.co.jp XAPP464 (v2.0) 2005 年 3 月 1 日

    関連資料関連資料関連資料関連資料およびおよびおよびおよび リファレンスリファレンスリファレンスリファレンスR

    関連資料およびリファレンス

    詳細については、 次の資料を参照してください。

    • Spartan-3 データシート (モジュール 2) 『Spartan-3 FPGA Family: Functional Description』 の「Elements within a Slice」 および 「Function Generator」 : CLB スライスおよび分散 RAM について説明しています。

    http://www.xilinx.co.jp/bvdocs/publications/ds099-2.pdf

    • 6.3i ラ イブラ リ ガイ ドの分散 RAM プリ ミ ティブのセクシ ョ ンhttp://toolbox.xilinx.com/docsan/xilinx6j/books/docs/lib/lib.pdf

    改訂履歴 次の表に、 この文書の改訂履歴を示します。

    日付 バージョ ン 改訂内容

    2003 年 7 月 8 日 1.0 初期リ リース

    2005 年 3 月 1 日 2.0 Spartan-3L および Spartan-3E FPGA を追記。

    http://www.xilinx.co.jp/bvdocs/publications/ds099-2.pdfhttp://www.xilinx.co.jphttp://toolbox.xilinx.com/docsan/xilinx6j/books/docs/lib/lib.pdf

    Spartan-3 シリーズ FPGA でルックアップ テーブルを分散 RAM として使用する方法概要はじめにシングル ポート RAM およびデュアル ポート RAMデータ フロー

    書き込み操作読み出し操作書き込み中に読み出し

    特徴ほかの FPGA ファミリとの 互換性ライブラリ プリミティブ信号ポートクロック - WCLKイネーブル - WEアドレス - A0、A1、A2、A3 (A4、A5)データ入力 - Dデータ出力 - O、SPO、DPO制御ピンの反転グローバル セット/リセット - GSRグローバル ライト イネーブル - GWE

    属性内容初期化 - INIT配置ロケーション - LOC

    分散 RAM の デザイン入力CORE GeneratorVHDL および Verilogブロック RAM の推論インスタンシエーション テンプレートVHDL テンプレート例Verilog テンプレート例ビット数の多い分散 RAM モジュールVHDL または Verilog コードでの初期化

    関連資料および リファレンス改訂履歴