R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用...

40
XAPP463 (v1.1.2) 2003 7 23 www.xilinx.co.jp 1 © 2003 Xilinx, Inc. All rights reserved. すべての Xilinx の商標、 登録商標、 特許、 免責条項は、 http://www.xilinx.com/legal.htm に リ ス ト されています。 他のすべての商標および登録商標 は、 それぞれの所有者が所有し ています。 すべての仕様は通知な しに変更される可能性があ り ます。 保証否認の通知 : Xilinx ではデザイン、 コード、 その他の情報を 「現状有姿の状態」 で提供しています。 この特徴、 アプリケーシ ョ ンまたは規格の一実施例と してデザイン、 コード、 そ の他の情報を提供しておりますが、 Xilinx はこの実施例が権利侵害のクレームを全 く 受けないという こ と を表明するものではあり ません。 お客様がご自分で実装される場合には、 必要な 権利の許諾を受ける責任があ り ます。 Xilinx は、 実装の妥当性に関するいかなる保証を行な う ものではありません。 この保証否認の対象となる保証には、 権利侵害のクレームを受けない こ との保証または表明、 および市場性や特定の目的に対する適合性についての黙示的な保証も含まれます。 概要 Spartan-3FPGA には、 チップ上で大規模な メ モ リ を必要とするアプ リ ケーシ ョ ンで使用でき る効率 のよい SelectRAMメモリ ブロ ッ クが多数搭載されています。 さまざまなコンフィギュレーション プ シ ョ ン を 使用す る こ と で、 SelectRAM は、 多様なデータ幅と ワード数の RAMROMFIFO、 大き LUT、 データ幅コンバータ、 循環バッファおよびシフ ト レジスタとして使用できます。 このアプリ ケーシ ョ ン ノ ー ト では、 ブ ロ ッ ク SelectRAM の特長と機能について説明し、 Xilinx CORE Generator システムを使用して、または VHDL Verilog インスタンシエーションによって、ブロック RAM のオ プシ ョ ンを指定する方法について明らかにします。 さ らに、 ツール、 アプ リ ケーシ ョ ン ノートなどを参 考に、 ブ ロ ッ ク RAM を使用できるさまざまなアプリケーションについても説明します。 はじめに すべての Spartan-3 デバイ スには、 縦に並んだ複数のブロ ッ ク RAM メ モ リ あ り ま す。 1 に示すよ う に、 ブ ロ ッ ク RAM メ モ リ の総数は Spartan-3 デバイスの大きさによって異なります。 各ブ ロ ッ ク RAM は、 18,432 ビ ッ ト の高速 ス タ テ ィ ッ ク RAM で構成され、 メモリ コンフィギュレー ションによって、 16K ビッ トはデータ領域に割り当てられます。 また、 残りの 2K ビットはパリティ ビ ッ ト あ る いは追加のデータ ビ ッ ト と し て使用でき ます。 ブロック RAM メ モ リ には、 完全に独立 し た 2 つのアクセス ポー ト (ポート A およびポート B) があ り 、 その構造は対称で、 2 つのポー ト は交換可 能です。 また、 両ポー ト でデータの書き込み/読み出しを行う こ とができます。 各メモリ ポー ト は、 そ れぞれの ク ロ ッ ク 、 ク ロ ッ ク イネーブル、およびライ ト イ ネーブルに同期し ます。 読み出し も同期で実 行されるため、 クロック エッジとクロック イ ネーブルが必要です。 アプリケーション ノート : Spartan-3 FPGA ファミリ XAPP463 (v1.1.2) 2003 7 23 Spartan-3 FPGA でのブロック RAM の使用 R 1: Spartan-3 デバイスのブロック RAM Spartan-3 バイス RAM 列数 列ごとのブロッ RAM 総ブロック RAM RAM 総ビット RAM K ビット XC3S50 1 4 4 73,728 72K XC3S200 2 6 12 221,184 216K XC3S400 2 8 16 294,912 288K XC3S1000 2 12 24 442,368 432K XC3S1500 2 16 32 589,824 576K XC3S2000 2 20 40 737,280 720K XC3S4000 4 24 96 1,769,472 1,728K XC3S5000 4 26 104 1,916,928 1,872K メモ : 1. 1K ビット = 1,024 ビット ( メモリ仕様)

Transcript of R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用...

Page 1: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 1

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

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

概要 Spartan-3™ FPGA には、 チ ッ プ上で大規模な メ モ リ を必要とする アプ リ ケーシ ョ ンで使用でき る効率

のよい SelectRAM™ メ モ リ ブロ ッ クが多数搭載されています。 さ まざ まなコ ンフ ィ ギュ レーシ ョ ン オプシ ョ ンを使用する こ と で、 SelectRAM は、 多様なデータ幅と ワード数の RAM、 ROM、 FIFO、 大き

な LUT、 データ幅コ ンバータ、 循環バッ フ ァおよびシフ ト レジス タ と し て使用でき ます。 こ のアプ リ

ケーシ ョ ン ノ ー ト では、 ブロ ッ ク SelectRAM の特長と 機能について説明し、 Xilinx CORE Generatorシステムを使用し て、 または VHDL や Verilog イ ンス タ ンシエーシ ョ ンによ って、ブロ ッ ク RAM のオ

プシ ョ ンを指定する方法について明らかにし ます。 さ らに、 ツール、 アプ リ ケーシ ョ ン ノ ー ト などを参

考に、 ブロ ッ ク RAM を使用でき る さ まざまなアプ リ ケーシ ョ ンについて も説明し ます。

はじめに すべての Spartan-3 デバイ スには、 縦に並んだ複数のブロ ッ ク RAM メ モ リ あ り ます。 表 1 に示すよ う

に、 ブロ ッ ク RAM メ モ リ の総数は Spartan-3 デバイ スの大き さによ って異な り ます。

各ブロ ッ ク RAM は、 18,432 ビ ッ ト の高速ス タ テ ィ ッ ク RAM で構成され、 メ モ リ コ ンフ ィ ギュ レー

シ ョ ンに よ って、 16K ビ ッ ト はデータ領域に割 り 当て ら れます。 ま た、 残 り の 2K ビ ッ ト はパ リ テ ィ

ビ ッ ト あ るいは追加のデータ ビ ッ ト と し て使用でき ます。 ブロ ッ ク RAM メ モ リ には、 完全に独立し た

2 つのア ク セス ポー ト (ポー ト A およびポー ト B) があ り 、 その構造は対称で、 2 つのポー ト は交換可

能です。 また、 両ポー ト でデータの書き込み/読み出し を行 う こ と ができ ます。 各 メ モ リ ポー ト は、 そ

れぞれのク ロ ッ ク、 ク ロ ッ ク イネーブル、 およびラ イ ト イ ネーブルに同期し ます。 読み出し も同期で実

行されるため、 ク ロ ッ ク エッ ジ と ク ロ ッ ク イ ネーブルが必要です。

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

XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

表 1: Spartan-3 デバイスのブロック RAM

Spartan-3 デバイス RAM 列数

列ごとのブロック RAM 数

総ブロック RAM 数

RAM の総ビッ ト

RAM の総 K ビッ ト

XC3S50 1 4 4 73,728 72K

XC3S200 2 6 12 221,184 216K

XC3S400 2 8 16 294,912 288K

XC3S1000 2 12 24 442,368 432K

XC3S1500 2 16 32 589,824 576K

XC3S2000 2 20 40 737,280 720K

XC3S4000 4 24 96 1,769,472 1,728K

XC3S5000 4 26 104 1,916,928 1,872K

メモ : 1. 1K ビッ ト = 1,024 ビッ ト (メモリ仕様)

Page 2: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

2 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

ブロ ッ ク RAM は物理的にデュ アル ポー ト メ モ リ ですが、 図 1 に示すよ う に、 1 つのアプ リ ケーシ ョ

ンではシングル ポー ト メ モ リ と し て も使用でき ます。 さ ら に、 各ブロ ッ ク メ モ リ はい く つかのアスペ

ク ト 比にコ ンフ ィ ギュ レーシ ョ ンでき ます。 表 2 に SelectRAM の特長を示し ます。

また、 複数のブロ ッ ク RAM をカ スケード接続する こ と で、 ビ ッ ト 数およびワード数の多い メ モ リ を作

成し、 特別な配線 リ ソース を使用し てタ イ ミ ング遅延を最小限にする こ と ができ ます。

図 1: デュアル ポート (a) およびシングル ポート (b) の SelectRAM 18K ブロック

X463_01_040403

WEAENA

SSRACLKA

ADDRA[rA–1:0]DIA[wA–1:0]

DIPA[3:0]

DOPA[pA–1:0]

DOA[wA–1:0]

RAM16_wA_wB

(a) Dual-Port (b) Single-Port

DOPB[pB–1:0]

DOB[wB–1:0]

WEBENB

SSRBCLKB

ADDRB[rB–1:0]DIB[wB–1:0]

DIPB[3:0]

WEEN

SSRCLK

ADDR[r–1:0]DI[w–1:0]

DIP[p–1:0]

DOP[p–1:0]

DO[w–1:0]

RAM16_Sw

メモ : 1. wA および wB は、 ポート A、 ポート B それぞれでの総データ パス幅 (パリテ ィ ビッ ト を加えたデータ ビッ ト )を示す整数

2. pA および pB は、 パリテ ィ ビッ ト と して機能するデータ パス幅を示す整数

3. rA および rB は、 ポート A とポート B それぞれのアドレス バス幅を示す整数

4. 両ポートにある制御信号 CLK、 WE、 EN および SSR は、 極性を反転できます。

表 2: SelectRAM 18K ブロック メモリ特性およびアプリケーシ ョ ン

パ リ テ ィ を含む RAM の総ビ ッ ト 数 18,432 (16K データ + 2K パ リ テ ィ )

メ モ リ 構造 16Kx18Kx24Kx4

2Kx8 ( パ リ テ ィ なし )2Kx9 (x8 + パ リ テ ィ )1Kx16 ( パ リ テ ィ な し )

1Kx18 (x16 + 2 パ リ テ ィ )512x32 ( パ リ テ ィ なし )

512x36 (x32 + 4 パ リ テ ィ )256x72 ( シングル - ポー ト のみ )

パ リ テ ィ データ幅が、 1 バイ ト よ り 大きい場合のみオプシ ョ ン と し て

使用でき、 データ ビ ッ ト と し て も使用可能

パフ ォーマンス 200 MHz ( 概算 )

Page 3: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 3

R

ザイ リ ン ク ス CORE Generator シス テムは、 Spartan-3 用のブロ ッ ク RAM を含む多様なモジュールを

サポー ト し ます。 以下は、 その例です。

• エンベデッ ド デュ アルまたはシングル ポー ト RAM モジュール

• ROM モジュール

• 同期および非同期 FIFO モジュール

• CAM (連想 メ モ リ ) モジュール

さ らに、ザイ リ ン ク ス デザイ ン ラ イブラ リ にあ る適切な RAMB16 モジュールを使用する と、合成ベー

スのどのデザイ ンでもブロ ッ ク RAM を使用でき ます。

こ のアプ リ ケーシ ョ ン ノ ー ト では、 Spartan-3 ブロ ッ ク RAM で使用でき る信号と属性についてだけで

な く 、 ブロ ッ ク RAM アプ リ ケーシ ョ ンについて も説明し ます。

ブロック RAM 配置

前述し た よ う に、 ブロ ッ ク RAM は縦に並べられ、 図 2 に示す XC3S200 には、 デバイ スの左エ ッ ジに

あ る CLB 2 列の隣にブロ ッ ク RAM が1 列あ り ます。 XC3S50 よ り 大き な Spartan-3 デバイ スには、 ダ

イの左右、 各エ ッ ジにあ る I/O から CLB 2 列分離れた位置にブロ ッ ク RAM が 1 列ずつあ り ます。 各エ ッ ジにあ るブロ ッ ク RAM に加えて、 XC3S4000 および XC3S5000 では、 エ ッ ジ間を均等に分割す

る よ う に 2 列のブロ ッ ク RAM があ り 、 合計 4 列にな り ます。 表 1 にデバイ ス ご と の列数およびブロ ッ

ク RAM 数を示し ます。 このよ う に、 ブロ ッ ク RAM 列が各エ ッ ジにあ るために、 バッ フ ァ リ ング また

はデバイ スにつながるバスの再同期に非常に有効です。

タ イ ミ ング イ ン ターフ ェ イ ス 単純な同期イ ン ターフ ェ イ ス。 書き込みにはセ ッ ト ア ッ プ時

間、 読み出しには clock-to-output 遅延があ り 、 レジス タから

の読み出し /書き込みと同様。

シングル ポー ト 可能

True デュ アル ポー ト 可能

ROM、 初期値を持つ RAM 可能

複数のデータ ポー ト 幅設定 可能

電源投入時の状態 ユーザー定義データ ( デフ ォル ト ではゼロ )

可能なアプ リ ケーシ ョ ン ローカル データ ス ト レージ、 FIFO、 エラ ステ ィ ッ ク保存、

レジス タ フ ァ イル、 バッ フ ァ、 循環バ ッ フ ァ、 シフ ト レジス

タ、 遅延ラ イ ン、 データの波形保存と生成、 ダ イ レ ク ト デジ

タル合成、 CAM、 連想 メ モ リ 、 フ ァ ン ク シ ョ ン テーブル、

フ ァ ン ク シ ョ ン ジェネレータ、 多入力ロジ ッ ク フ ァ ン ク シ ョ

ン、 コード コ ンバータ、 エン コーダ、 デコーダ、 カ ウ ン タ、

ステー ト マシン、 マイ ク ロシーケンサ、 エンベデッ ド プロ

セ ッ サ用プロ グ ラ ム ス ト レージ

表 2: SelectRAM 18K ブロック メモリ特性およびアプリケーシ ョ ン (Continued)

Page 4: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

4 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

各ブロ ッ ク RAM に隣接し ているのは、 18x18 エンベデッ ド乗算器です。 ブロ ッ ク RAM と エンベデッ

ド乗算器を隣 り 合わせに配置する こ と によ って、 デジタル信号処理機能を向上させる こ と ができ ます。

ブロ ッ ク RAM と周囲のブロ ッ ク を相互接続させる こ と によ って、 ア ド レ スおよびデータへの信号分配

を効果的に行 う こ と ができ、 さ らに、 複数のブロ ッ ク RAM をカ スケード接続する と、 ワード数、 ビ ッ

ト 数の大き な メ モ リ を作成でき ます。

データ フロー Spartan-3 ブロ ッ ク RAM は完全なデュ アル ポー ト メ モ リ であ り 、 図 3 に示すデータ フ ローのすべて

を同時にサポー ト し ます。 両ポー ト は、 同じ メ モ リ ビ ッ ト にア ク セス し ますが、 ポー ト のデータ幅に

よ ってア ド レ ス設定仕様は異なる場合があ り ます。

1. ポー ト A は、 1 セ ッ ト のア ド レ ス ラ イ ンを使用し、 同時に読み出し / 書き込みを行 う 独立し たシン

グル ポー ト RAM と し て機能し ます。

2. ポー ト B は、 1 セ ッ ト のア ド レ ス ラ イ ンを使用し、 同時に読み出し / 書き込みを行 う 独立し たシン

グル ポー ト RAM と し て機能し ます。

3. ポー ト A は書き込みポー ト 、 ポー ト B は読み出し ポー ト であ り 、 個別のア ド レ ス を持ちます。 ポー ト A と ポー ト B のデータ幅は異な る こ と があ り ます。

4. ポー ト B は書き込みポー ト 、 ポー ト A は読み出し ポー ト であ り 、 個別のア ド レ ス を持ちます。

ポー ト B と ポー ト A のデータ幅は異な る こ と があ り ます。

図 2: XC3S200 のブロック RAM 配置

Block RAM Columns

2 CLBs 2 CLBsEmbedded Multipliers

XC3S200XC3S400

XC3S1000XC3S1500XC3S2000

XC3S4000XC3S5000

XC3S50

X463_02_062503

Page 5: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 5

R

信号 ブロ ッ ク RAM プ リ ミ テ ィ ブに接続される信号は、 次に示すよ う に 4 つに分類されます。 表 3 には、 ブ

ロ ッ ク RAM イ ン ターフ ェ イ ス信号、 シングル ポー ト とデュ アル ポー ト メ モ リ に使用する信号名、 お

よび信号方向を示し ます。

1. データ入力および出力

2. パ リ テ ィ 入力および出力 ( データ ポー ト 幅が 1 バイ ト 以上の場合に使用可能 )

3. 特定の メ モ リ 位置を選択するためのア ド レ ス入力

4. 読み出し、 書き込み、 またはセ ッ ト / リ セ ッ ト 処理に機能する さ まざまな制御信号

データ入力および出力図 4 に示す例では、 データ ポー ト 幅全体にデータ バス と パ リ テ ィ バスの両方を含みます。 た と えば、

512x36 の場合、 36 ビ ッ ト データ ポー ト 幅には MSB と し て 4 パ リ テ ィ ビ ッ ト が含まれ、 それに LSBと し て 32 データ ビ ッ ト が続き ます。

データおよびパ リ テ ィ 出入力信号は、 常にバスです。 つま り 、 1 ビ ッ ト 幅のコ ンフ ィ ギュ レーシ ョ ンで、

データ入力信号は DI[0] と な り 、 データ出力信号は DO[0] と な り ます。

図 3: シングルおよびデュアル ポート ブロック RAM でのデータ転送

X463_03_020503

Spartan-3Dual Port

Block RAM

Read 3

Read

Write

Write

Read

Write

Write

Read

Por

t A

Por

t B

21

4

表 3: ブロック RAM インターフェイス信号

信号 シングルポート

デュアル ポート

方向ポート A ポート B

データ入力バス DI DIA DIB 入力

パ リ テ ィ データ入力バス (データ幅が 1 バイ ト 以上の場合)

DIP DIPA DIPB 入力

データ出力バス DO DOA DOB 出力

パ リ テ ィ データ出力バス (データ幅が 1 バイ ト 以上の場合のみ)

DOP DOPA DOPB 出力

ア ド レ ス バス ADDR ADDRA ADDRB 入力

ラ イ ト イ ネーブル WE WEA WEB 入力

ク ロ ッ ク イ ネーブル EN ENA ENB 入力

同期セ ッ ト / リ セ ッ ト SSR SSRA SSRB 入力

ク ロ ッ ク CLK CLKA CLKB 入力

Page 6: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

6 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

データ入力バス — DI[#:0] (DIA[#:0]、 DIB[#:0])データ入力バスは、 RAM に書き込まれるデータ ソースです。 DI 入力バスにあ るデータは、 ク ロ ッ ク イネーブル EN および ラ イ ト イネーブル WE が High の と き、

ク ロ ッ ク入力が Low から High への立ち上が り エ ッ ジでア ド レ ス入力バス ADDR によ って指定された

RAM の位置に書き込まれます。

図 4: Data Organization and Mapping Between Modes

Byte 0Byte 1Byte 2Byte 3

Byte 0Byte 1

Byte 2Byte 3

Byte 0

Byte 1

Byte 2

Byte 3

0123

4567Byte 3

0

01

0123

01

67

01

23

45

67

Byt

e 0

01

2345

67

Byt

e 3

0123

P0

P2

P0P1P2P3

P2P3

P0P1

P3

P1

0

1

2

3

Byt

e 0

4

5

6

7

Byt

e 3

0123

CDEF

1C1D1E1F

1617 815

08162432333435 31 23 15 7

07

078

23

0123

4567yte 0

01

01

0

Address

512x36

1Kx18

2Kx9

4Kx4

8Kx2

16Kx1

Parity Data

B

X463_04_062503

No

Par

ity

(16K

bits

dat

a)

Parity Optional

(16Kbits data,

2Kbits parity)

Page 7: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 7

R

データ出力バス — DO[#:0] (DOA[#:0]、 DOB[#:0])読み出し処理では、ア ク テ ィ ブな ク ロ ッ ク エ ッ ジでア ド レ ス バス ADDR が指定し た メ モ リ セルの内容

が、 データ出力バス DO に送信されます。 同時に実行されている書き込みでは、 データ出力のラ ッチは

WRITE_MODE 属性によ って制御されています (同時書き込み中の読み出し — WRITE_MODE、 ペー

ジ 14 を参照し て く ださい)。

パリテ ィ入力および出力パ リ テ ィ はデータ パスが 1 バイ ト 以上の場合のみ使用でき ます。

パ リ テ ィ ビ ッ ト は、 そ こ に適切なデータがあ る こ と を示す役割を果た し ますが、 パ リ テ ィ 入力および出

力が特定の機能を持つわけではあ り ませんので、追加のデータ ビ ッ ト と し て も使用でき ます。 た と えば、

コード またはデータ、 正負、 新旧などの情報をデータにタ グ付けする よ う なデータ ワード に関する追加

情報のために、 こ のパ リ テ ィ ビ ッ ト を使用する こ と が可能です。

ブ ロ ッ ク RAM にはパ リ テ ィ を生成ま たはチェ ッ ク する ための特別な回路はあ り ません。 アプ リ ケー

シ ョ ンでこ のよ う な機能を使用する場合には、 CLB ロジ ッ ク リ ソース を使用し、 作成し て く だ さい。

データ入力パリテ ィ バス — DIP[#:0] (DIPA[#:0]、 DIPB[#:0])DIP 入力バスにあ るデータは、 ク ロ ッ ク イ ネーブル EN およびラ イ ト イ ネーブル WE 入力が High のと き、 ク ロ ッ ク入力が Low から High への立ち上が り エ ッ ジでア ド レ ス入力バス ADDR によ って指定

された RAM の位置に書き込まれます。

データ出力パリテ ィ バス — DOP[#:0] (DOPA[#:0]、 DOPB[#:0])読み出し処理では、ア ク テ ィ ブな ク ロ ッ ク エ ッ ジでア ド レ ス バス ADDR が指定し た メ モ リ セルの内容

が、 データ出力バス DOP に送信されます。 同時に実行されている書き込みでは、 データ出力の ラ ッ チ

は WRITE_MODE 属性に よ っ て制御 さ れてい ます (同時書き込み中の読み出し — WRITE_MODE、

ページ 14 を参照し て く ださい)。

アドレス入力デュ アル ポー ト RAM の 2 つのポー ト は、独立し て同一の 18K ビ ッ ト メ モ リ セルにア ク セスでき ます。

アドレス バス — ADDR[#:0] (ADDRA[#:0]、 ADDRB[#:0])ア ド レ ス バスは、読み出し または書き込みを行 う メ モ リ セルを選択し ます。 表 5 に示すよ う に、 ア ド レ

ス バス入力によ って、 必要なア ド レ ス バスの幅は異な り ます。

制御入力

クロック — CLK (CLKA、 CLKB)各ポー ト は、 それぞれの ク ロ ッ ク ピンに完全に同期し ます。 すべてのポー ト の入力ピンにはセ ッ ト ア ッ

プ タ イ ムがあ り 、 CLK ピ ンを基準 と し ます。 また、 データ バスの clock-to-out タ イ ム も、 そのポー ト

の CLK ピンを基準と し ます。 ク ロ ッ クの極性は変更でき、 デフ ォル ト では、 立ち上が り エ ッ ジです。

こ のデフ ォル ト 設定では、 ク ロ ッ ク (CLK) 入力の Low から High で読み出し、書き込み、および リ セ ッ

ト が制御されます。

イネーブル — EN (ENA、 ENB)イ ネーブル入力 EN は、 読み出し、 書き込み、 セ ッ ト / リ セ ッ ト を制御し ます。 EN が Low の と き は、

データは書き込まれず、出力 DO と DOP は前の状態の値を維持し ます。 EN の極性は設定でき、デフ ォ

ル ト ではア ク テ ィ ブ High です。

EN がアサー ト され、 ア ク テ ィ ブな同期セ ッ ト / リ セ ッ ト 入力やラ イ ト イ ネーブル入力がない場合、 ブ

ロ ッ ク RAM は、 ク ロ ッ クの立ち上が り エ ッ ジでア ド レ ス バス ADDR が指定し た位置にあ るデータ を

メ モ リ から読み出し ます。

Page 8: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

8 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

ライ ト イネーブル — WE (WEA、 WEB)ラ イ ト イ ネーブル入力 WE は RAM へのデータの書き込みを制御し ます。 ク ロ ッ ク の立ち上が り エ ッ

ジで EN および WE がアサー ト される と、 ア ド レ ス バスで指定された メ モ リ セルにデータおよびパ リ

テ ィ 入力の値が書き込まれます。

出力ラ ッチにデータが送信されるかど う かは、 WRITE_MODE 属性によ って異な り ます。

WE の極性は設定可能で、 デフ ォル ト ではア ク テ ィ ブ High です。

同期セッ ト /リセッ ト — SSR (SSRA、 SSRB)同期セ ッ ト / リ セ ッ ト 入力 SSR に よ って、 データ出力ラ ッ チは SRVAL 属性が指定し た値にな り ます。

SSR と イ ネーブル信号 EN が High の状態になる と、 SRVAL 属性によ って DO と DOP のデータ出力

ラ ッチは、 0 または 1 に同期設定されます。

こ の同期セ ッ ト / リ セ ッ ト のために RAM メ モ リ セルが変化する こ と はな く 、 も う 一方のポー ト での書

き込みにも影響を与えません。

SSR の極性は設定可能でデフ ォル ト ではア ク テ ィ ブ High です。

グローバル セッ ト /リセッ ト — GSRグ ローバル セ ッ ト / リ セ ッ ト 信号 GSR は、デバイ スのコ ンフ ィ ギュ レーシ ョ ン直後に自動的にアサー ト

されます。 STARTUP プ リ ミ テ ィ ブを イ ン ス タ ンシエー ト し、 GSR をアサー ト する と Spartan-3 の初期

状態に常に戻すこ と ができ ます。 GSR 信号を使用する と、出力ラ ッ チは INIT の値に初期化されますが、

内部 メ モ リ の内容には影響を与えません。

GSR はグ ローバル信号であ り 、自動的にデバイ ス全体に接続される ため、ブロ ッ ク RAM プ リ ミ テ ィ ブ

の GSR 入力ピンはあ り ません。

制御ピンの反転

各ポー ト の 4 つの制御ピ ン - CLK、 EN、 WE および SSR - は、 それぞれ個別に反転でき ます。 制御信

号はア ク テ ィ ブ High と ア ク テ ィ ブ Low のどち らに も設定でき、ク ロ ッ クの立ち上が り /立ち下が り エ ッ

ジでア ク テ ィ ブにでき ます。 反転するためのロ ジ ッ ク リ ソースの追加は必要あ り ません。

未使用の入力

未使用のデータ またはア ド レ ス入力は、 ロ ジ ッ ク 1 にする必要があ り ます。 未使用の入力を High に接

続する と、 Low に接続する場合よ り も、 使用する ロジ ッ ク と配線 リ ソースが少な く な り ます。

属性 表 4 に示すよ う に、ブロ ッ ク RAM には VHDL または Verilog で使用でき る多 く の属性があ り ます。 ただし、 CORE Generator システムで使用する値は、 次に示すもの と わずかに異な り ます。

表 4: ブロック RAM 属性および VHDL/Verilog 属性名

機能 VHDL または Verilog 属性 デフォルト値

ポー ト 数 適切な RAMB16 プ リ ミ テ ィ ブを イ ン

ス タ ンシエー ト する こ と で定義

なし

メ モ リ 構造 適切な RAMB16 プ リ ミ テ ィ ブを イ ン

ス タ ンシエー ト する こ と で定義

なし

コ ンフ ィ ギュ レーシ ョ ン中にデータ メ モ リ の内容を初期化

INIT_xx 0 に初期化

コ ンフ ィ ギュ レーシ ョ ン中にパ リ テ ィ メ モ リ の内容を初期化

INITP_xx 0 に初期化

データ出力ラ ッチの初期化 INIT (シングル ポー ト )

INIT_A、 INIT_B (デュ アル ポー ト )

0 に初期化

Page 9: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 9

R

ポート数ブロ ッ ク RAM は物理的にデュ アル ポー ト メ モ リ ですが、シングル ポー ト またはデュ アル ポー ト メ モ

リ と し て使用でき ます。 ポー ト 数の指定方法は、 デザイ ン入力に使用する ツールによ って異な り ます。

CORE Generator システム

図 5 に示すよ う に、 CORE Generator を使用し、 さ まざまなタ イプの メ モ リ ブロ ッ ク用のモジュールを

生成でき ます。 シングルまたはデュ アル ポー ト ブロ ッ ク メ モ リ を選択するか、 ハイ レベルの機能を使

用し、 FIFO、 CAM (連想 メ モ リ ) など を生成し ます。

VHDL または Verilog のインスタンシエーシ ョ ン

ザイ リ ン ク スのデザイ ン ラ イブラ リ には、図 1 に示されている もの と類似し たシングルおよびデュ アル

ポー ト メ モ リ プ リ ミ テ ィ ブがあ り ます。 メ モ リ 構造、 アスペク ト 比だけでな く 、 シングル ポー ト また

はデュ アル ポー ト メ モ リ かを決定し、 適切なプ リ ミ テ ィ ブを選択し ます。 シングル ポー ト およびデュ

アル ポー ト のブロ ッ ク RAM プ リ ミ テ ィ ブについては、 表 5 と表 6 を参照し て く ださ い。

メモリ構成/アスペク ト比ブロ ッ ク RAM の メ モ リ 構成やアスペク ト 比は、表 5 に示すよ う に設定でき ます。 データ パス幅が 1 バイ ト 以上の場合、ブロ ッ ク RAM には、パ リ テ ィ をサポー ト する追加ビ ッ ト が各バイ ト ご と にあ り ます。

し たがって、1Kx18 の メ モ リ では、16 ビ ッ ト (2 バイ ト )のデータ と各バイ ト ご と に 1 ビ ッ ト のパ リ テ ィ

ビ ッ ト があ るため、 ビ ッ ト 幅が 18 と なっています。 また、 ポー ト から ア ク セスでき る メ モ リ の物理的な

大き さは、 メ モ リ 構造によ って異な り ます。 1 バイ ト 以上の メ モ リ では、 18K ビ ッ ト がア ク セス可能で

あ り 、 幅がそれ以下の場合は、 パ リ テ ィ ビ ッ ト がないため 16 K ビ ッ ト のみにア ク セスでき ます。 基本

的に、 18k ビ ッ ト のブロ ッ ク RAM では、 16K ビ ッ ト がデータに割 り 当て られ、 2K ビ ッ ト がパ リ テ ィ

データ出力ラ ッチ同期セ ッ ト / リ セ ッ ト SRVAL (シングル ポー ト )

SRVAL_A、 SRVAL_B (デュ アル ポー ト )

0 に リ セ ッ ト

書き込み中のデータ出力ラ ッチ WRITE_MODE WRITE_FIRST

ブロ ッ ク RAM 配置 LOC なし

表 4: ブロック RAM 属性および VHDL/Verilog 属性名 (Continued)

機能 VHDL または Verilog 属性 デフォルト値

図 5: CORE Generator システムでのブロック RAM 機能の選択

Page 10: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

10 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

に割 り 当て られます。 各 メ モ リ 構成での、 データ マ ッ ピングについての詳細は、 図 4 を参照し て く ださ

い。

CORE Generator システム — メモリ サイズ

CORE Generator を使用する こ と によ って、 さ まざまなアスペク ト 比で使用でき る メ モ リ を作成する こ

と がで き ます。 実際のブ ロ ッ ク RAM プ リ ミ テ ィ ブ と は異な り 、 CORE Generator シ ス テムはデータ

ビ ッ ト と パ リ テ ィ ビ ッ ト を区別せずにすべてのビ ッ ト をデータ ビ ッ ト と判断し ます。 そ し て、デュ アル

ポー ト メ モ リ の場合、 各ポー ト にぞれぞれの構成 と アスペク ト 比を設定でき ます。

CORE Generator では図 6 に示すよ う に、 望ま しい メ モ リ サイ ズを指定し ます。

VHDL または Verilog のインスタンシエーシ ョ ン

適切な SelectRAM コ ンポーネン ト を指定またはイ ン ス タ ンシエー ト し、アスペク ト 比と定義し ます。表

5 にシングル ポー ト RAM 用の SelectRAM コ ンポーネン ト を示し ます。 シングル ポー ト RAM の場

合、 適切なコ ンポーネン ト 名は RAMB16_Sn と な り ます。 こ こ で、 n はデータ ビ ッ ト と パ リ テ ィ ビ ッ ト

を 含むデー タ 幅です。 た と えば、 1Kx18 シ ン グ ル ポー ト RAM が使用す る コ ン ポーネ ン ト は

RAMB16_S18 です。 こ こ では、 16 データ ビ ッ ト と 2 パ リ テ ィ ビ ッ ト あ る ため、 n=18 と な り ます。

デュ アル ポー ト メ モ リ では、 2 つの メ モ リ ポー ト のアスペク ト 比が異なる場合があ る ため、 シングル

ポー ト の場合 よ り わずかに複雑にな り ます。 デ ュ アル ポー ト RAM の適切な コ ン ポーネ ン ト 名は、

RAMB16_Sm_Sm と な り ます。 こ こ で m および n は、 ポー ト A、 B それぞれのデータ パス幅を表し ま

す。 た と えば、表 6 に示されているサフ ィ ッ ク ス を使用する と、2Kx9 のポー ト A と 1Kx18 のポー ト Bを持つ適当なデ ュ アル ポー ト RAM コ ン ポーネ ン ト は RAMB16_S9_S18 にな り ま す。 こ の例では、

m=9、 n=18 と な り ます。

表 5: ブロック RAM データ構成/アスペク ト比

構成 ワード数 データ幅 パリテ ィ DI/DO DIP/DOP ADDRシングル ポート プリ ミテ ィブ

RAM の総 K ビッ ト数

512x36 512 32 4 (31:0) (3:0) (8:0) RAMB16_S36 18K

1Kx18 1024 16 2 (15:0) (1:0) (9:0) RAMB16_S18 18K

2Kx9 2048 8 1 (7:0) (0:0) (10:0) RAMB16_S9 18K

4Kx4 4096 4 - (3:0) - (11:0) RAMB16_S4 16K

8Kx2 8192 2 - (1:0) - (12:0) RAMB16_S2 16K

16Kx1 16384 1 - (0:0) - (13:0) RAMB16_S1 16K

図 6: CORE Generator システムでのメモリ幅とワード数の指定

Memory Size

Width 16

Depth 256

Valid Range 1..256

Valid Range 2..16384

Page 11: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 11

R

ポート間のアドレスおよびデータ マッピング

デュ アル ポー ト モード では、 2 つのポー ト で同時に同じ メ モ リ セルにア ク セスする こ と が可能ですが、

メ モ リ 構成やアスペク ト 比は必ずし も同じではあ り ません。 図 4 にアスペク ト 比の異なるデータ セ ッ ト

を示し ます。

データ幅が、 1 バイ ト 以上の場合、 過剰なビ ッ ト を メ モ リ のパ リ テ ィ ビ ッ ト と し て使用でき ます。 パ リ

テ ィ ビ ッ ト は、 特定のバイ ト に関連し て使用され、 データ ポー ト の MSB にあ り ます。 た と えば、 x36データ ワード (32 データ と 4 パ リ テ ィ ) が 2 つの x18 ハーフ ワード (16 データ と 2 パ リ テ ィ ) でア ド

レ ス指定されている と、 各データ バイ ト に関連し たパ リ テ ィ ビ ッ ト は、 ブロ ッ ク RAM 内で適切なパ

リ テ ィ ビ ッ ト にマ ッ ピ ング されます。 x36 データ ワード を 4 つの x9 ワード と し てマ ッ プし た場合も同

様ですが、 x4、 x2 または x1 と し て使用する と パ リ テ ィ ビ ッ ト は使用でき ません。

2 つのポー ト が異なる メ モ リ 構造の場合に、 開始ア ド レ スおよび終了ア ド レ ス を求める式は、 次のよ う

にな り 、 ポー ト Y のア ド レ スおよびポー ト 幅 と ポー ト X のポー ト 幅から、 それら のア ド レ スがわか り

ます。

ただし、デュ アル ポー ト で一方のポー ト にのみパ リ テ ィ ビ ッ ト が含まれている場合には、 こ の式は当て

はま り ません。データ ビ ッ ト のみを含む値を使用し て計算し て く ださ い。 8 ビ ッ ト 以下のポー ト 幅では、

パ リ テ ィ ビ ッ ト は使用でき ません。

メモリ内容の初期化デフ ォル ト では、 ブロ ッ ク RAM メ モ リ は、 デバイ スのコ ンフ ィ ギュ レーシ ョ ン シーケン ス中にすべて

ゼロに初期化されますが、 メ モ リ 内容も ユーザー定義のデータに初期化する こ と が可能です。 さ ら に、

RAM の内容は、 コ ンフ ィ ギュ レーシ ョ ン中に誤って書き込まれる こ と がないよ う に保護されています。

CORE Generator システム — Init ファイルの取り込み

CORE Generator ブ ロ ッ ク RAM フ ァ ン ク シ ョ ン用に RAM の初期内容を指定する には、 coefficients(.coe) フ ァ イルを作成し ます。 こ の coefficients (.coe) フ ァ イルの簡単な例を図 7 に示し ます。 データ を

表 6: RAMB16 デュアル ポート RAM コンポーネン ト サフ ィ ッ クス

ポート A

16Kx1 8Kx2 4Kx4 2Kx9 1Kx18 512x36

ポー

ト B

16Kx1 _S1_S1

8Kx2 _S1_S2 _S2_S2

4Kx4 _S1_S4 _S2_S4 _S4_S4

2Kx9 _S1_S9 _S2_S9 _S4_S9 _S9_S9

1Kx18 _S1_S18 _S2_S18 _S4_S18 _S9_S18 _S18_S18

512x36 _S1_S36 _S2_S36 _S4_S36 _S9_S36 _S18_S36 _S36_S36

START_ADDRESSX INTEGERADDRESSY WIDTHY•

WIDTHX--------------------------------------- =

END_ADDRESSX INTEGERADDRESSY 1+( ) WIDTHY•( ) 1–

WIDTHX------------------------------------------------------------------- =

Page 12: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

12 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

初期化するには、 まず 2、 10、 16 のよ う な基数を指定し、 0 の位置にあ るデータから順次、 RAM の内

容を指定し ます。

COE フ ァ イルを含むには、 CORE Generator で適切な画面を開き、 図 8 に示すよ う に、 Load Init Fileにチェ ッ ク を入れます。 次に Load File を ク リ ッ ク し、 COE フ ァ イルを選択し て く だ さい。

VHDL または Verilog のインスタンシエーシ ョ ン — INIT_xx、 INITP_xxVHDL および Verilog イ ン ス タ ンシエーシ ョ ンには、 2 タ イ プの属性を使用し ます。 INIT_xx 属性は

データ メ モ リ 位置の初期内容を指定し ます。 INITP_xx 属性はパ リ テ ィ メ モ リ 位置の初期内容を指定

し ます。

INIT_xx 属性はデータ メ モ リ の初期内容を指定し、 INIT_00 から INIT_3F の 64 個の初期化属性が

あ り ます。 INIT_xx 属性は 64 桁 (256 ビ ッ ト ) のビ ッ ト ベク ト ルです。 一部の メ モ リ 内容を初期化する

こ と も可能で、 初期値を指定し ない部分は、 自動的にゼロにな り ます。

次に各 INIT_xx 属性のビ ッ ト 位置を求める式を示し ます。

yy が 16 進数 (xx) を 10 進数に変換し た値の場合、 INIT_xx は、 次のよ う な メ モ リ セルに対応し ます。

• 開始位置 : [(yy + 1) * 256] -1

• 終了位置 : (yy) * 256

た と えば、 INIT_1F 属性 は次のよ う に変換されます。

• yy = 16 進数 (0x1F) を 10 進数に変換し た値 = 31

• 開始位置 : [(31+1) * 256] -1 = 8191

• 終了位置 : 31 * 256 = 7936

INITP_xx 属性は、 DIP/DOP バスに接続し ている よ う なパ リ テ ィ ビ ッ ト に対応し た メ モ リ セルの内容

を初期化し ます。 デフ ォル ト では、 これらの メ モ リ セルもすべてゼロに初期化されます。

図 7: 簡単な COE ファイル例

図 8: CORE Generator 使用した RAM の内容の初期化

表 7: ブロック RAM の VHDL/Verilog RAM インスタンシエーシ ョ ン属性

属性 開始 終了

INIT_00 255 0

INIT_01 511 256

INIT_02 767 512

... ... ...

INIT_3F 16383 16128

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

Initial Contents

Global Init Value:

ff0001 (Hex Value)

Load Init File

C:\MyProject\my_ram_init.coe

Load File ...

(.coe File)

Page 13: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 13

R

INITP_00 から INITP_07 の 8 つの初期化属性は、パ リ テ ィ ビ ッ ト の メ モ リ 内容を表し、各 INITP_xxは、INIT_xx 属性 と同様に機能する 16 進数の 64 桁 (256 ビ ッ ト ) ベク タ ビ ッ ト です。 特定の INITP_xx属性で初期化される ビ ッ ト 位置も、 同じ式で計算でき ます。

データ出力ラッチの初期化コ ン フ ィ ギ ュ レーシ ョ ン後、 またはグ ローバル セ ッ ト / リ セ ッ ト 信号 GSR がアサー ト さ れた後に、 ブ

ロ ッ ク RAM 出力ラ ッチをユーザー指定の値に初期化でき ます。 各ポー ト に異なる初期値を設定する こ

と も可能ですが、 値を設定し ない場合はゼロにな り ます。

CORE Generatorシステム — グローバル Init 値図 9 は CORE Generator でのデータ出力ラ ッ チの初期値指定画面です。 16 進数で指定する値は、データ

幅 と同じ ビ ッ ト 数でなければな らず、 デュ アル ポー ト メ モ リ では、 各ポー ト で別々の初期値を設定で

き ます。

VHDL または Verilog インスタンシエーシ ョ ン — INIT (INIT_A および INIT_B)VHDL または Verilog では、 INIT 属性 (デュ アル ポー ト メ モ リ では INIT_A と INIT_B) で、 コ ンフ ィ

ギュ レーシ ョ ン後の出力ラ ッチの値を指定し ます。 INIT (または INIT_A と INIT_B) 属性は、 データの

初期値と、 場合によ ってはパ リ テ ィ ビ ッ ト を指定し ます。 図 4 にパ リ テ ィ ビ ッ ト を含む各 メ モ リ 構成

のビ ッ ト フ ォーマ ッ ト を示し ます。 こ こ で、 パ リ テ ィ ビ ッ ト はデータ ビ ッ ト の前、 MSB にあ り ます。

た と えば、 2Kx9 メ モ リ の初期値は 1 パ リ テ ィ ビ ッ ト と それに続 く 8 データ ビ ッ ト の 9 ビ ッ ト 幅であ

り 、 これらの属性は 16 進数のビ ッ ト ベク タ、 デフ ォル ト 値はゼロにな り ます。

データ出力ラッチ同期セッ ト /リセッ ト同期セ ッ ト / リ セ ッ ト 入力 SSR がアサー ト される と、 セ ッ ト / リ セ ッ ト 属性によ って、 データ出力ラ ッチ

が設定され、 デュ アル ポー ト メ モ リ では、 各ポー ト でそれぞれの初期値を設定でき ます。

設定し ない場合は、 有効な同期セ ッ ト / リ セ ッ ト 中に、 出力ラ ッチがゼロに リ セ ッ ト されます。

CORE Generatorシステム — Init 値 SINIT)図 10 に CORE Generator での、データ出力ラ ッ チ同期セ ッ ト / リ セ ッ ト 値の指定方法を示し ます。 SINITpin のチェ ッ ク ボ ッ ク ス をオンにし、 16 進数で、 同期セ ッ ト / リ セ ッ ト 値を設定し ます。 こ の値は、 デー

タ幅と 同じ ビ ッ ト 数でなければな らず、 デュ アル ポー ト メ モ リ では、 各ポー ト で別々の初期値を設定

でき ます。

図 9: ブロック RAM データ出力ラッチの初期値指定

図 10: データ出力ラッチ セッ ト /リセッ ト値の設定

Initial Contents

Global Init Value:

ff0001 (Hex Value)

Load Init File

C:\MyProject\my_ram_init.coe

Load File ...

(.coe File)

Output Register Options

0Additional Output Pipe Stages

SINIT pin (sync. reset of output registers)

a5a50fInit Value (Hex)

Page 14: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

14 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

VHDL または Verilog インスタンシエーシ ョ ン — SRVAL (SRVAL_A および SRVAL_B)VHDL または Verilog では、 SRVAL 属性 (デュ アル ポー ト メ モ リ では SRVAL_A と SRVAL_B ) で、

コ ン フ ィ ギ ュ レーシ ョ ン後の出力ラ ッ チの値を指定し ます。 SRVAL (ま たは SRVAL_A と SRVAL_B)属性は、 データの初期値と、 場合によ ってはパ リ テ ィ ビ ッ ト を指定し ます。 図 4 にパ リ テ ィ ビ ッ ト を

含む各 メ モ リ 構成のビ ッ ト フ ォーマ ッ ト を示し ます。 こ こ で、 パ リ テ ィ ビ ッ ト はデータ ビ ッ ト の前、

MSB にあ り ます。 これらの属性は、 16 進数のビ ッ ト ベク タで、 デフ ォル ト 値は 0 です。

同時書き込み中の読み出し — WRITE_MODEブロ ッ ク RAM の各ポー ト での書き込みには 3 つのモード があ り 、各ク ロ ッ ク エ ッ ジでのデータ処理能

力 と 使用率を最大に し ます。 こ の 3 つのモー ド によ って、 有効な書き込みク ロ ッ ク エ ッ ジの後の出力

ラ ッチのデータは異な り ます。 デフ ォル ト の WRITE_FIRST を使用する と、Virtex™/E および Spartan-IIE FPGA アーキテ クチャ と互換性を持たせる こ と ができ、 これは Virtex-II/Pro デバイ スでもデフ ォル

ト の設定と なっています。 ク ロ ッ ク サイ クルご と のブロ ッ ク RAM の効率を上げ、 デザイ ンで最大のバ

ン ド幅を使用でき る点から、READ_FIRST モード が最も有用です。 こ の READ_FIRST モード では、タ

イ ミ ングの問題なしに、 1 つのク ロ ッ ク エッ ジで同一ア ド レ スの読み出し と書き込みを行えます。

表 8 に WRITE_MODE 設定と同一ポー ト の出力ラ ッチのデータについて、 および同時に同じ ア ド レ ス

にア ク セス し た場合の、 も う 一方のポー ト での出力ラ ッチのデータについて簡潔に示し ます。

これらの書き込みモード は、 コ ンフ ィ ギュ レーシ ョ ンで設定し、 属性を使用する こ と で各ポー ト に個別

に設定でき ます。 デフ ォル ト では WRITE_FIRST に設定されています。

WRITE_FIRST または ト ランスペアレン ト モード (デフォルト )以前のデザイ ン と 互換性を持たせる こ と ができ る ため WRITE_FIRST モー ド がデフ ォル ト 設定 と なっ

ていますが、 新規のデザイ ンには READ_FIRST モード を設定する こ と をお奨めし ます。

WRITE_FIRST モード では、入力データ を RAM に書き込むの と同時にデータ出力ラ ッチに送信する た

め、図 11 に示すよ う に ト ラ ンスペアレ ン ト 書き込みにな り ます。 このモード に設定する と、 Virtex/E お

表 8: 書き込み WRITE_MODE と出力ラッチのデータ

書き込みモード 同一ポートへの影響もう一方のポートへの影響 (デュアル ポートで

同一アドレスにアクセスする場合のみ)

WRITE_FIRST書き込み後に読み出し (デフ ォル ト )

DI、 DIP の入力データ を RAM の指定された位置に

を書き込むの と同時に、 DO、 DOP に出力

DO、 DOP 出力データは無効

READ_FIRST書き込み前に読み出し (推奨)

RAM の指定された位置にあ るデータ を DO、 DOP に出力

DI、 DIP 入力のデータの書き込み

RAM の指定された位置にあ るデータ を DO、 DOP に出力

NO_CHANGE書き込み中の読み出し

な し

DO、 DOP 出力のデータは変化せず

DI、 DIP 入力のデータの書き込み

DO、 DOP 出力データは無効

Page 15: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 15

R

よび Spartan-II/E FPGA の 4K ビ ッ ト ブロ ッ ク RAM と 互換性があ り 、 さ ら に Virtex-II/Pro ブロ ッ ク

RAM ではデフ ォル ト 設定と なっています。

図 12 に書き込まれた有効なデータが、 同時にデータ出力に送信される書き込み処理を示し ます。

READ_FIRST または 書き込み前に読み出しモード

図 13 に示すよ う に、 READ_FIRST モード では、 書き込み前に読み出し処理を実行し ます。 この場合、

書き込みア ド レ スに保存されているデータ を出力ラ ッチに送信する と同時に、 入力データ を メ モ リ に保

存し ます。 こ こ では、 以前の RAM データが出力され、 新しいデータが指定されたア ド レ スに保存され

ます。 書き込みモード と し ては、 こ の READ_FIRST を推奨し ています。

図 11: WRITE_FIRST モード書き込みのデータ フロー

図 12: WRITE_FIRST モード波形

図 13: READ_FIRST モード書き込みのデータ フロー

RAM Location

Data_in Data_out

WRITE_MODE = WRITE_FIRST

Address

WE

EN

CLK

X463_11_062503

CLK

WE

Data_in

Address

Data_out

ENABLE

DISABLED READ

XXXX 1111 2222 XXXX

aa bb cc dd

0000 MEM(aa) 1111 2222 MEM(dd)

READWRITEMEM(bb)=1111

WRITEMEM(cc)=2222

X463_12_020503

Data_in Data_out

WRITE_MODE = READ_FIRST

Address

WE

EN

CLK

RAM Location

X463_13_062503

Page 16: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

16 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

図 14 は、 同時に書き込みが行われているに もかかわらず、 それ以前の RAM データが読み出されてい

る こ と を示し ます。

こ のモード は、特に循環バッ フ ァおよび大規模でブロ ッ ク RAM ベースのシフ ト レジス タ を作成する場

合に役立ち、 DSP アプ リ ケーシ ョ ンで FIR フ ィ ルタ タ ッ プを保存する際に も有用です。 古いデータは

RAM から コ ピー され、 新規データが RAM に書き込まれます。

NO_CHANGE モード

図 15 に示すよ う に、 NO_CHANGE モード では、 同時に実行されている書き込み中に出力ラ ッ チは変

化し ません。 これは、 1 ク ロ ッ ク サイ クルで読み込み/書き出しのどち らかを実行する簡単な同期 メ モ リ

に類似し ています。

NO_CHANGE モード は、 ブロ ッ ク RAM に波形、 フ ァ ン ク シ ョ ン テーブル、 係数などが含まれる アプ

リ ケーシ ョ ンで使用する と有効です。 また、 出力に影響を与えずに メ モ リ を更新でき ます。

図 14: READ_FIRST モード波形

図 15: NO_CHANGE モード書き込みのデータ フロー

CLK

WE

Data_in

Address

Data_out

ENABLE

DISABLED READ

XXXX 1111 2222 XXXX

aa bb cc dd

0000 MEM(aa) old MEM(bb) old MEM(cc) MEM(dd)

READWRITEMEM(bb)=1111

WRITEMEM(cc)=2222

X463_14_020503

RAM Location

Data_in Data_out

WRITE_MODE = NO_CHANGE

Address

WE

EN

CLK

X463_15_062503

Page 17: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 17

R

データ出力は、 同じ ポー ト での書き込みの影響を受けず、 最後に読み出されたデータが維持されている

こ と を 図 16 に示し ます。

CORE Generator システム — 書き込みモード

CORE Generator シ ス テムでは、 図 17 の よ う な書き込みモー ド 設定画面を表示し、 Read After Write(WRITE_FIRST)、 Read Before Write (READ_FIRST)、 または No Read On Write (NO_CHANGE) から選択し ます。

VHDL または Verilog のインスタンシエーシ ョ ン — WRITE_MODEブロ ッ ク RAM を イ ン ス タ ンシエーシ ョ ンする と きに WRITE_MODE 属性を使用し、 書き込みモード

を指定し ます。 WRITE_FIRST、 READ_FIRST および NO_CHANGE のよ う な使用可能な値について

は、 付録の例に示し ます。

配置制約 (LOC)通常は、 ザイ リ ン ク ス ISE ソ フ ト ウ ェ アを使用し てブロ ッ ク RAM を配置するのが最も よい方法です

が、 LOC プ ロ パテ ィ を適用し、 Spartan-3 デバ イ ス上での配置を制約する こ と も で き ます。 ブ ロ ッ ク

RAM の配置ロ ケーシ ョ ンの表記方法はデバイ ス ご と に異な り 、 CLB 配置の命名方法 と も異なる ため、

ほかのアレ イでも容易に LOC プロパテ ィ を使用でき ます。

LOC プロパテ ィ は、 次の形式で使用し ます。

LOC = RAMB16_X#Y#

図 18 に示すよ う に、RAMB16_X0Y0 は、 デバイ スの左下にあ るブロ ッ ク RAM の位置です。 右上にあ る

ブロ ッ ク RAM の位置は、表 1 に示されているブロ ッ ク RAM の列数 n およびその行数 m によ って決定

されます。

図 16: NO_CHANGE モード波形

図 17: CORE Generator での書き込みモード選択

CLK

WE

Data_in

Address

Data_out

ENABLE

DISABLED READ

XXXX 1111 2222 XXXX

aa bb cc dd

0000 MEM(aa) MEM(dd)

READWRITEMEM(bb)=1111

WRITEMEM(cc)=2222

X463_16_020503

Write Mode

Read After Write Read Before Write No Read On Write

Page 18: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

18 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

CORE Generator で、 ロ ケーシ ョ ンを制約する属性を直接、 指定する こ と はでき ませんが、 VHDL また

は Verilog イ ンス タ ンシエーシ ョ ンでは追加可能です。

ブロック RAM 表 9 にブロ ッ ク RAM のビヘイ ビアを示し ます。 こ こ では、 すべての制御信号はデフ ォル ト のア ク テ ィ

ブ High で動作する と い う 前提ですが、 制御信号は、 必要に応じ て反転でき ます。 次に、 シングル メ モ

リ ポー ト について説明し ます。 デュ アル ポー ト モー ド では、 両ポー ト がそれぞれに独立し たシングル

ポー ト メ モ リ と し て機能し ます。

ブロ ッ ク RAM に対するすべての読み出し /書き込みは同期で、すべての入力にク ロ ッ クへのセ ッ ト ア ッ

プ タ イ ムがあ り 、 すべての出力には clock-to-output タ イ ムがあ り ます。

図 18: ブロック RAM での LOC 座標

LowerLeft

LowerRight

UpperRight

UpperLeft

RAMB16_X0Y0

RAMB16_X0Y(m-1) RAMB16_X(n-1)Y(m-1)

XC3S200XC3S400XC3S1000XC3S1500XC3S2000

XC3S4000XC3S5000

RAMB16_X(n-1)Y(m-1)

n = total columnsm = total rows

XC3S50

X463_18_062503

表 9: ブロック RAM の機能

入力信号 出力信号 RAM 内容

GSR EN SSR WE CLK ADDR DIP DI DOP DO パリテ ィ Data

コンフ ィギュレーシ ョ ン直後

コンフ ィギュレーシ ョ ン中の送信 X X INITP_xx2 INIT_xx2

コンフ ィギュレーシ ョ ン直後のグローバル セッ ト /リセッ ト

1 X X X X X X X INIT3 INIT No Chg No Chg

RAM ディスエーブル

0 0 X X X X X X No Chg No Chg No Chg No Chg

同期セッ ト /リセッ ト

0 1 1 0 ↑ X X X SRVAL4 SRVAL No Chg No Chg

RAM 書き込み中の同期セッ ト /リセッ ト

0 1 1 1 ↑ addr pdata Data SRVAL SRVAL RAM(addr) pdata

RAM(addr) data

Page 19: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 19

R

コンフ ィギュレーシ ョ ン中の RAM 内容の初期化Spartan-3 コ ン フ ィ ギ ュ レーシ ョ ン実行中に RAM の内容を初期化する こ と がで き、 指定のない場合、

RAM セルはゼロにな り ます。 さ らに、 RAM の内容は、 コ ンフ ィ ギュ レーシ ョ ン中に誤って書き込まれ

る こ と がないよ う に保護されています。

グローバル セッ ト /リセッ ト を使用した出力ラッチの初期化コ ンフ ィ ギュ レーシ ョ ン終了後に、 Spartan-3 デバイ スはス ター ト ア ッ プを開始し、 グ ローバル セ ッ ト /リ セ ッ ト 信号、 GSR をアサー ト し て、 フ リ ッ プフ ロ ッ プおよびレジス タの状態を初期化し ます。 ブロ ッ

ク RAM 出力ラ ッ チの値、 INIT は非同期で初期化されます。 また、 GSR 信号が RAM の内容に影響を

与えた り 、 再初期化を行 う こ と はあ り ません。

イネーブル入力た と えば、EN が Low のよ う にブロ ッ ク RAM がデ ィ スエーブルであ る場合、 ブロ ッ ク RAM は現在の

値を維持し ます。 イ ネーブル入力を使用し て処理を実行する ためには、 High にする必要があ り ます。

同期セッ ト /リセッ トによるデータ出力ラッチの初期化ブロ ッ ク RAM がイ ネーブル (EN が High) で、 同期セ ッ ト / リ セ ッ ト 信号が High にアサー ト されてい

る場合、 データ出力ラ ッチは、 次の立ち上が り ク ロ ッ ク エ ッ ジで初期化されます。 SRVAL 属性を使用

し て、 データ出力ラ ッチの同期セ ッ ト / リ セ ッ ト を指定し ますが、 これはグ ローバル セ ッ ト / リ セ ッ ト 信

号、GSR を使用する場合と は異な り ます。 GSR 信号はデバイ ス全体を制御し ますが、同期セ ッ ト / リ セ ッ

ト 入力は、 特定の RAM ブロ ッ ク のみに影響を与えます。

RAM の読み出しのみ (書き込みなし )

0 1 0 0 ↑ addr X X RAM(pdata) RAM(data) No Chg No Chg

同時に行われる RAM の読み出し /書き込み

0 1 0 1 ↑ addr pdata Data WRITE_MODE = WRITE_FIRST5 ( デフォルト )

pdata data RAM(addr) pdata

RAM(addr) data

WRITE_MODE = READ_FIRST6 ( 推奨 )

RAM(data) RAM(data) RAM(addr) pdata

RAM(addr) pdata

WRITE_MODE = NO_CHANGE7

No Chg No Chg RAM(addr) pdata

RAM(addr) pdata

メモ : 1. No Chg = 変化なし、 addr = RAM へのアドレス、 data = RAM データ、 pdata = RAM パリテ ィ データ

2. メモリ内容の初期化、 ページ 11 を参照

3. データ出力ラッチの初期化、 ページ 13 を参照

4. データ出力ラッチ同期セッ ト / リセッ ト、 ページ 13 を参照

5. WRITE_FIRST または ト ランスペアレン ト モード ( デフォルト )、 ページ 14 を参照

6. READ_FIRST または 書き込み前に読み出しモード、 ページ 15 を参照

7. NO_CHANGE モード、 ページ 16 を参照

表 9: ブロック RAM の機能 (Continued)

入力信号 出力信号 RAM 内容

GSR EN SSR WE CLK ADDR DIP DI DOP DO パリテ ィ Data

Page 20: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

20 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

同時書き込みおよび同期セッ ト /リセッ ト同期セ ッ ト / リ セ ッ ト の実行中に同時書き込みを実行する と、 DI および DIP 入力が ADDR 入力によ っ

て指定された RAM のア ド レ スに保存されますが、 上記し た よ う に、 データ出力ラ ッチは SRVAL 属性

で指定された値に初期化されます。

信号がアサート されている場合、 クロック エッジごとに読み出しを実行読み出しは同期で実行される ため、 ク ロ ッ ク エ ッ ジ と ク ロ ッ ク イ ネーブルが必要です。 データ出力は、

書き込みおよび読み出し を同時に実行するかによ って異な り ます。

読み出し と 同時に書き込みが実行されている場合、 読み出し ポー ト のア ド レ スが取 り 込まれ、 RAM へのア ク セス時間後にそのア ド レ スに保存されているデータが、 出力ラ ッチに送信されます。

しかし、 データの出力と同時に書き込みサイ クルが実行されている ため、 次に示す 3 つの書き込みモー

ド によ って、 その出力は変化し ます。

書き込み中の読み出しはデータ出力ラッチに影響書き込み と 同時に読み出し を行 う 場合、 WRITE_MODE 属性を使用し て、 出力ラ ッ チのデータ を決定

し ま す (同時書き込み中の読み出し — WRITE_MODE、 ページ 14 を 参照) 。 デ フ ォ ル ト の

WRITE_MODE は WRITE_FIRST であ り 、 書き込むの と同時に、 入力データで出力ラ ッチ と ア ド レ ス

指定された RAM のデータ を更新し ます。 WRITE_MODE が READ_FIRST の場合、ア ド レ スに保存さ

れてい るデータ を出力 ラ ッ チに送信 し、 DI お よび DIP の新し い入力データ を RAM に保存 し ます。

NO_CHANGE モード では、 出力ラ ッチは書き込みの影響は受けず、 データはそのま ま維持されます。

一般的な特性

• 書き込み 1 回につき、 ク ロ ッ ク エ ッ ジが 1 つ必要です。

• 読み出し 1 回につき、 ク ロ ッ ク エ ッ ジが 1 つ必要です。

• すべての入力はポー ト ク ロ ッ クに同期し て取 り 込まれ、 setup-to-clock タ イ ミ ング仕様があ り ま

す。

• すべての出力は、 WE ピ ンの状態によ って、 読み出し または書き込み中に読み出す 3 つのモード の

う ちのいずれかにな り ます。 また、 ポー ト ク ロ ッ ク に関連し た出力は、 clock-to-out タ イ ミ ング後

に有効です。

• ブロ ッ ク RAM セルは、 同期 RAM メ モ リ であ り 、 ア ド レ スから出力間に組み合わせパスはあ り ま

せん。

• 各ポー ト は完全に独立し、 それぞれのク ロ ッ ク、 制御、 ア ド レ ス、 読み出し /書き込み、 初期化機

能、 およびデータ幅を持ちます。

• 出力ポー ト には、 タ イ ミ ングを自己調整する回路のあ る ラ ッチがあ り 、 読み出しにグ リ ッチは発生

し ません。 また、 別の読み出し /書き込みを実行する までは、 出力ポー ト の値は一定です。

ザイリンクス FPGA ファ ミ リでの機能Spartan-3 FPGA のブ ロ ッ ク RAM の機能は、 ザ イ リ ン ク ス Virtex-II/Pro FPGA フ ァ ミ リ のブ ロ ッ ク

RAM と 類似し ているため、 Virtex-II および Virtex-II Pro ブロ ッ ク RAM をサポー ト する ツールは、 同

様に Spartan-3 もサポー ト し ます。

デュアル ポート RAM の競合とその解消

デュ アル ポー ト のブロ ッ ク RAM は、 2 つのポー ト で、 同時に同じ メ モ リ セルにア ク セスでき ますが、

次のよ う な状況では、 競合が発生する場合があ り ます。

1. 2 つのポー ト へのク ロ ッ ク入力が非同期で、 セ ッ ト ア ッ プ タ イ ムに違反があ る と、 競合が発生し ま

す。

2. 書き込みサイ クル中に、 2 つの メ モ リ ポー ト から RAM の同じ位置に異なるデータ を書き込んだ場

合、 競合が発生し ます。

Page 21: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 21

R

3. 1 つのポー ト の WRITE_MODE を NO_CHANGE または WRITE_FIRST に設定し、書き込みを実

行する と、 も う 一方のポー ト での出力データが無効にな り ます。

構成や幅の異なる ポー ト A およびポー ト B で競合が発生し た場合、 重複する ビ ッ ト のみが無効にな り

ます。

タイ ミ ング違反競合Spartan-3 データ シー ト に指定されている clock-to-clock セ ッ ト ア ッ プ ウ ィ ン ド ウ内では、 一方のポー

ト で、 あ る メ モ リ セルに書き込みを行 う と きに、 も う 一方のポー ト で、 書き込みまたは読み出しのア ド

レ ス を指定し てはいけません。 図 19 に、 両ポー ト が非同期ク ロ ッ ク で動作する例を示し ます。

CLK_B のク ロ ッ ク エ ッ ジから の時間が短いため、 CLK_A の最初の立ち上が り エ ッ ジはセ ッ ト ア ッ プ

パラ メ ータに違反し ます。 Data_in_B、 Address_B、 および WE_B は、 CLK_B の立ち上が り エ ッ ジの

前に、 セ ッ ト ア ッ プ タ イ ムを満たし、 ポー ト B での書き込みは有効にな り ますが、 ポー ト A での読み

出 し は無効です。 こ れは、 Address_B に書 き 込ま れたデー タ に よ っ て異な る 上、 書 き 込み ク ロ ッ ク

CLK_B から読み出し ク ロ ッ ク CLK_A までの時間が短すぎ る ためです。

CLK_B の 2 つ目の立ち上が り エ ッ ジでは、ポー ト B への別の書き込みが有効で、 メ モ リ ア ド レ ス (bb)に 4444 があ り ます。 CLK_A は、 まだ立ち上が り エ ッ ジになっていないので、 Data_out_A ポー ト の

データは無効ですが、 CLK_A の 2 番目の立ち上が り エ ッ ジでは、 (bb) にあ る新しいデータ 4444 が読

み出されます。 こ の際、 CLK_B と CLK_A 間に十分なセ ッ ト ア ッ プ タ イ ムがあ るため、 実行された読

み出しは有効です。

両ポートから同時に異なるデータを書き込む場合の競合表 10 に示し ている よ う に、 両ポー ト で同時に同じ メ モ リ セルに異なるデータ を書き込む場合、 そのセ

ルに書き込まれたデータは無効にな り ます。

図 19: Clock-to-Clock タイ ミング競合

CLK_B

Data_in_B

Address_B

WE_B

aa bb

44443333

UNKNOWN 4444

aa bb

CLK_A

Data_out_A

Address_A

WE_A

MEM(aa)=3333

Clock-to-clocksetup violation

MEM(bb)=4444

MEM(cc)=2222

X463_19_020503

B A B A

cc

2222

READ Port

WRITE Port

Page 22: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

22 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

出力ラッチでの書き込み競合一方のポー ト が書き込み、 も う 一方ポー ト が読み出し を実行する と競合が発生する場合があ り ます。 こ

の場合、 書 き 込みは常 に成功 し ま すが、 書 き 込み ポ ー ト の出力 ラ ッ チ に送信 さ れ る デー タ は、

WRITE_MODE 属性によ り 変化し ます。 WRITE_MODE を NO_CHANGE または WRITE_FIRST に設定し ている場合、 出力ラ ッチのデータは無効にな り ます。 表 11 を参照し て く だ さい。

また、 書き込みが READ_FIRST モード の場合は、 読み出し ポー ト に影響を与えません。

競合の解消両ポー ト が同じ ア ド レ スにア ク セス し た際に、 その調整を行 う ための専用のモニ タはあ り ません。 2 つのク ロ ッ クは、 アプ リ ケーシ ョ ンで適切に設定されなければな り ませんが、 同時に同一のア ド レ スに書

き込みを行 う こ と で、 物理的な破損はあ り ません。

ブロック RAM デザイン入力

ザ イ リ ン ク ス CORE Generator シ ス テムおよび適切な ラ イ ブ ラ リ プ リ ミ テ ィ ブを使用し た VHDL やVerilog イ ン ス タ ンシエーシ ョ ンを含め、 Spartan-3 ブロ ッ ク RAM の設計には、 さ まざ まなツールを使

用でき ます。

表 10: 同一アドレスへ書き込む場合の RAM 競合

入力信号

RAM 内容ポート A ポート B

WEA CLKB DIPA DIA WEB CLKA DIPB DIB パリテ ィ Data

1 ↑ DIPA DIA 1 ↑ DIPB DIB ? ?

メモ : 1. ADDRA=ADDRB、 ENA=1、 ENB=1、 DIPA … DIPB、 DIA … DIB、 ?=不明または無効な

データ

表 11: WRITE_MODE による出力ラッチでの競合

入力信号 出力信号

ポート A ポート B ポート A ポート B

WEA CLKB DIPA DIA WEB CLKA DIPB DIB DOPA DOA DOPB DOB

WRITE_MODE_A=NO_CHANGE

1 ↑ DIPA DIA 0 ↑ DIPB DIB No Chg No Chg ? ?

WRITE_MODE_B=NO_CHANGE

0 ↑ DIPA DIA 1 ↑ DIPB DIB ? ? No Chg No Chg

WRITE_MODE_A=WRITE_FIRST

1 ↑ DIPA DIA 0 ↑ DIPB DIB DIPA DOA ? ?

WRITE_MODE_B=WRITE_FIRST

0 ↑ DIPA DIA 1 ↑ DIPB DIB ? ? DIPB DIB

WRITE_MODE_A=WRITE_FIRST、 WRITE_MODE_B=WRITE_FIRST

0 ↑ DIPA DIA 1 ↑ DIPB DIB ? ? ? ?

メモ : 1. ADDRA=ADDRB、 ENA=1、 ENB=1、 ?=不明または無効なデータ

Page 23: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 23

R

ザイリンクス CORE Generator システム図 5 に示すよ う に、ザイ リ ン ク ス CORE Generator システムは、シングルおよびデュ アル ポー ト ブロ ッ

ク メ モ リ モジュールの両方を作成でき る ツールです。 どち らのモジュールを作成し た場合でも、選択し

た制御信号によ って RAM、 ROM、 書き込みのみのフ ァ ン ク シ ョ ンをサポー ト し、 そのアーキテ クチャ

で作成可能なすべての メ モ リ をサポー ト し ます。

これらモジュールは、 ほ と んどの CORE Generator モジュール と同様にパラ メ ータ を指定する こ と がで

き ます。 モジ ュールを作成する際は、 コ ンポーネン ト 名を指定し、 制御信号の有無を選択し た後、 制御

信号の極性を決定し ます。 また、 デュ アル ポー ト ブロ ッ ク メ モ リ を作成する際に、 メ モ リ 構成やポー

ト A のアスペク ト 比を決定する と、 ポー ト B に対し て有効なオプシ ョ ンのみが表示されます。

オプシ ョ ン と し て メ モ リ の初期値を指定でき ますが、 特に指定のない場合はゼロにな り ます。 メ モ リ 初

期化フ ァ イルで、 その初期値を指定し ますが、 こ のフ ァ イルでは、 各 メ モ リ ア ド レ ス ご と に 1 行のバイ

ナ リ データ を記述し ます。 デフ ォル ト のフ ァ イルが CORE Generator システムによ って生成される代わ

り に、 COE フ ァ イ ル (.coe) を作成する必要があ り ます。 こ の COE フ ァ イ ルでは、 初期値の基数 (2、

10、 16) だけでな く 、 CORE Generator 用のその他の制御パラ メ ータ をすべて定義し ます。

CORE Generator からの出力は、 選択し たオプシ ョ ンおよび必要なデバイ ス リ ソースについてのレポー

ト を含みます。 また、 ワード 数の非常に多い メ モ リ を作成する と、 外部にマルチプレ ク サが必要な場合

があ り 、 これらの リ ソースは必要なロ ジ ッ ク ス ラ イ ス と し てレポー ト されます。 さ ら に、 まだ 100% は使用されていないブロ ッ ク RAM にあ る使用可能なビ ッ ト 数もわか り ます。 CORE Generator を使用し

て、 シ ミ ュ レーシ ョ ン用に VHDL または Verilog ビヘイ ビア モデルを作成でき ます。

• CORE Generator: シングル ポー ト ブロ ッ ク メ モ リ モジュール (RAM または ROM)

• CORE Generator: デュ アル ポー ト ブロ ッ ク メ モ リ モジュール (RAM または ROM)

VHDL および Verilog のインスタンシエーシ ョ ンVHDL および Verilog で記述された合成を基本とするデザイ ンは、 ブロ ッ ク RAM を推論または直接イ

ン ス タ ンシエー ト でき ますが、 これは使用し た ロ ジ ッ ク合成ツールによ って異な り ます。

ブロック RAM の推論

ザイ リ ン ク ス合成ツール (XST) または Synplicity Synplify のよ う な VHDL および Verilog ロ ジ ッ ク合

成ツールは、 記述されたハード ウ ェ アに基づいてブロ ッ ク RAM を推論し ます。 ザイ リ ン ク ISE ProjectNavigator には、 ブロ ッ ク RAM 推論用のテンプレー ト が含まれます。 Project Navigator で こ のテンプ

レー ト を使用するには、 まず メ ニ ューで Edit から Language Templates を選択し ます。 次に VHDL または Verilog を選択し、 その下に表示される Synthesis Templates から RAM を展開表示し、 適切なブ

ロ ッ ク RAM テンプレー ト を選択し ます。

デザイ ンに推論し たブロ ッ ク RAM があ る場合でも、 直接イ ン ス タ ンシエー ト する こ と も可能です。

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

デザイ ンのス ピード を向上するために、 VHDL および Verilog で記述されたデザイ ンで使用でき る、 さ

ま ざ まな イ ン ス タ ンシエーシ ョ ン テンプレー ト があ り ます。 ザイ リ ン ク ス ISE Project Navigator の メ

ニ ューで Edit から Language Templates を選択し ます。 次に VHDL または Verilog を選択し、 その下

に表示される Component Instantiation を展開表示し Block RAM を選択し ます。

付録に VHDL および Verilog でブロ ッ ク RAM を推論する ためのコード例を示し ます。

VHDL には、各テンプレー ト にコ ンポーネン ト 宣言 と アーキテ クチャ セ ク シ ョ ンが含まれます。 VHDLデザイ ン フ ァ イルに、 テンプレー ト の各パー ト を挿入する必要があ り ます。 アプ リ ケーシ ョ ンで使用さ

れる信号名は、 アーキテ クチャ セ ク シ ョ ンのポー ト マ ッ プにあ る必要があ り ます

SelectRAM_Ax テンプレー ト (x = 1、 2、 4、 9、 18、 36) はシングル ポー ト モジュールであ り 、 対応す

る RAMB16_Sx モジュールを イ ン ス タ ンシエー ト し ます。

SelectRAM_Ax_By テンプレー ト (x = 1、 2、 4、 9、 18、 36 および y = 1、 2、 4、 9、 18、 36) はデュ

アル ポー ト モジュールであ り 、 対応する RAMB16_Sx_Sy モジ ュールを イ ン ス タ ンシエー ト し ます。

Page 24: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

24 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

VHDL および Verilog コードの初期化

ブロ ッ ク RAM メ モ リ は、合成およびシ ミ ュ レーシ ョ ン用に VHDL または Verilog コード で初期化でき

ます。 合成を行 う 場合、 ブロ ッ ク RAM のイ ン ス タ ンシエーシ ョ ンに属性を指定する と、 その属性は、

ザ イ リ ン ク ス Alliance シ リ ーズ ツールで コ ンパ イ ル さ れ る EDIF 出力フ ァ イ ルに コ ピー さ れます。

VHDL コード シ ミ ュ レーシ ョ ンは、 generic パラ メ ータ を使用し て属性を渡し ます。 Verilog コード

シ ミ ュ レーシ ョ ンは、 defparam パラ メ ータ を使用し て属性を渡し ます。

これらの例は、 付録の VHDL および Verilog コード に示されています。

ブロック RAM アプリケーシ ョ ン

一般的に、 ブロ ッ ク RAM はローカルで保存アプ リ ケーシ ョ ン と し て使用されますが、 次のセク シ ョ ン

では、 あ ま り 知られてはいませんが、 使用方法によ っては非常に有効と なるブロ ッ ク RAM の追加機能

について紹介し ます。

大型 RAM 構造の作成ブロ ッ ク SelectRAM の列は特別な方法で配線される ため、 最小の配線遅延でカ ス ケード 接続する こ と

が可能です。 し たがって、 少ない遅延で、 ビ ッ ト 数およびワード数の多い RAM を作成でき ます。

Read-Only Memory (ROM) と してのブロック RAMラ イ ト イ ネーブル入力を Low にする と、 オプシ ョ ン と し て、 ブロ ッ ク RAM を レジス タ付きブロ ッ ク

ROM と し て使用でき ます。 同期し、 ク ロ ッ ク入力を必要と する ROM の出力は、 ブロ ッ ク RAM の読

み出し と ほぼ同様に動作し ます。 ROM の内容はデザイ ンの初期値によ って指定され、 デザイ ンのコ ン

パイル後に Data2BRAM ユーテ ィ リ テ ィ を使用し て更新でき ます。

FIFOエラ ス テ ィ ッ ク にデータ を保存する もの と し て知られている First-In First-Out (FIFO) は、 任意にデー

タ を保存する以外の目的で使用するブロ ッ ク RAM の最も一般的なアプ リ ケーシ ョ ンです。 FIFO は、 2つの異なる ク ロ ッ ク ド メ イ ン間のデータ、 または、 同じ ク ロ ッ ク で動作し ていますが、 レー ト の異なる

データ を再同期するのが一般的です。 ザイ リ ン ク ス CORE Generator システムでは、 パラ メ ータ指定可

能な 2 つの FIFO モジュールを作成でき ます。 1 つは読み出し /書き込みク ロ ッ ク が互いに同期し ている

同期 FIFO であ り 、 も う 1 つは読み出し /書き込みク ロ ッ クが異なる非同期 FIFO です。 アプ リ ケーシ ョ ン ノー ト XAPP261 では、FIFO の読み出し /書き込みポー ト への異なるデータ幅の設定

について説明し ています。

アプ リ ケーシ ョ ン ノ ー ト XAPP291 では、 連続し たデータ ス ト リ ームでのデータ ス ロ ッ ト リ ングに有

効な自動ア ド レ ッ シング FIFO について説明し ています。

• CORE Generator: 同期 FIFO モジュール

• CORE Generator: 非同期 FIFO モジュール

• XAPP258: ブロ ッ ク RAM を使用し た FIFO ( リ フ ァ レ ン ス デザイ ンを含む)

• XAPP261: ブロ ッ ク RAM を使用し たデータ幅変換 FIFO ( リ フ ァ レ ン ス デザイ ンを含む)

• XAPP291: 自動ア ド レ ッ シング FIFO

エンベデッ ド プロセッサ向けストレージ機能ブロ ッ ク RAM は、 エンベデッ ド プロセ ッ サで次に示すよ う な機能を果た し、 アプ リ ケーシ ョ ンを よ り

効果的にする こ と ができ ます。

• プロセ ッ サ レジス タ セ ッ ト 用のレジス タ フ ァ イル ス ト レージ (分散 RAM の方が適し ているプロ

セ ッ サも あ り )

• ス タ ッ ク ベースのアーキテ クチャおよびス タ ッ ク コール用のス タ ッ ク または LIFO

• 高速ローカル コード ス ト レージ (内部ブロ ッ ク RAM に高速にア ク セスする こ と によ って、 エン

ベデッ ド プロセ ッ サの処理能力は向上。 ただし、 チッ プ上で使用でき るブロ ッ ク RAM 数には制

Page 25: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 25

R

限あ り )

• 外部プロセ ッ サまたは DSP デバイ ス と共有し て使用される大型のデュ アル ポー ト メールボ ッ ク

ス メ モ リ

• アプ リ ケーシ ョ ンのデバッ グを容易にする一時的な ト レース バ ッ フ ァ (循環バッファ、 シフ ト レジスタ、 および遅延ライン を参照)

ビッ トスト リームの直接修正によるブロック RAM/ROM の内容更新一般的なデータ フ ローでは、 デザイ ンの段階でブロ ッ ク RAM/ROM の内容が決定し、 デバイ スのビ ッ

ト ス ト リ ームにコ ンパイルされ、 そのビ ッ ト ス ト リ ームが Spartan-3 FPGA にダウ ン ロードおよびコ ン

フ ィ ギュ レーシ ョ ン されます。

しかし、 アプ リ ケーシ ョ ンによ っては、 ビ ッ ト ス ト リ ームが作成される段階では実際の メ モ リ 内容が不

明な場合や後に変更される場合があ り ます。 Spartan-3 に組み込まれたプロセ ッ サが、 プロ グ ラ ム コー

ド を格納するためにブロ ッ ク RAM を使用する場合が、その一例です。 ザイ リ ン ク スの Data2BRAM を使用する と、 既存の FPGA ビ ッ ト ス ト リ ームを新しいブロ ッ ク RAM/ROM 内容で更新でき、 コード の

変更のために FPGA デザイ ンすべてを再コ ンパイルする必要がな く な り ます。

図 20 に示すよ う に、 Data2BRAM への入力は、 エンベデッ ド プロセ ッ サ コ ンパイ ラ / リ ンカか らの出

力、 現在の FPGA ビ ッ ト ス ト リ ーム、 およびシステム ア ド レ ス スペース と各ブロ ッ ク RAM で使用さ

れる ア ド レ ッ シング間のマ ッ ピング情報と各ブロ ッ ク RAM の物理的な位置などの RAM に関する新し

いデータ を含みます。

1 ブロック RAM を 2 つの独立したシングル ポート RAM と して使用 アプ リ ケーシ ョ ンに よ っ ては、 デバ イ ス上にあ る RAM ブ ロ ッ ク よ り さ ら に多 く のシ ン グル ポー ト

RAM が必要な場合があ り ますが、 シングル ブロ ッ ク RAM を 2 つの完全に独立し たシングル ポー ト

メ モ リ と し て使用する こ と で、 デバイ ス上の RAM ブロ ッ ク数を効果的に 2 倍にでき ます。 ただし、 各

RAM ブロ ッ クのサイ ズは、 元のブロ ッ クの半分にな り 、 最大で 9K ビ ッ ト です。

図 20: ビッ トスト リームで Data2BRAM ユーティ リテ ィ を使用したブロック RAM の更新

Data2BRAMUtility

New Block RAM Data (.elf Compiler/Linker output,

or .mem file)

Present FPGA Bitstream

Mapping Between SystemAddress Space and BlockRAM, Block RAM Location

(.bmm file)

(.bit file)

(.bit file)

New FPGA Bitstream withUpdated Block RAM Contents

X463_20_062503

Page 26: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

26 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

図 21 に 1 ブロ ッ ク RAM から 2 つの独立し たシングル ポー ト RAM を作成する方法を示し ます。 1 つのポー ト のア ド レ ス MSB を High に、 も う 一方のポー ト は Low に接続し、 ポー ト 間で RAM を均等に

分割し ます。

両ポー ト には、 それぞれの メ モ リ 構成、 データ出入力、 ク ロ ッ ク入力、 および制御信号があ り 、 完全に

独立し ています。 た と えば、 ポー ト A が 256x36 で、 ポー ト B が 2Kx4 の メ モ リ を作成でき ます。

図 21 では使用可能な メ モ リ を 2 つのポー ト で均等に分割し ています。 上のア ド レ ス ラ イ ンにロジ ッ ク

を追加する と、 異なる比率で メ モ リ を分割でき ます。

1 ブロック RAM を使用して 256x72 シングル ポート RAM を作成図 22 にブロ ッ ク RAM を使用し た、 256×72 シングル ポー ト RAM の作成方法を示し ます。 前述し た

例と同様に、 メ モ リ アレ イは二分割されます。 それぞれが 36 ビ ッ ト であ り 、 効果的に 72 ビ ッ ト 幅の メ

モ リ を作成し ます。

図 21: 1 ブロック RAM から 2 つの独立したシングル ポート RAM を作成

SSRACLKA

CLKBSSRB

ENA

ENB

WEA

WEB

DIA DOA

DIB DOB

ADDR[m -1:0]

ADDR[n -1:0]

ADDR[m]

ADDR[n]

X463_21_062503

Sin

gle

-Po

rt A

Sin

gle

-Po

rt B

Page 27: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 27

R

ア ド レ ス ラ イ ンの MSB であ る ADDR[8] は、 1つのポー ト で High に接続され、 も う 一方では Low に接続されます。 また、 両ポー ト は、 ア ド レ ス入力、 制御入力、 およびク ロ ッ ク入力を共有し ます。

循環バッファ、 シフ ト レジスタ、 および遅延ライン循環バッ フ ァは、 Finite Impulse Response (FIR) フ ィ ルタ、 マルチ チャネル フ ィ ルタ、 さ らに相関関数

や相互相関関数のよ う な多様なデジ タル信号処理アプ リ ケーシ ョ ンに使用されます。 また、 データ を遅

らせ、 ほかのデータ と再同期するために循環バッ フ ァ を使用する こ と も可能です。

図 23 は循環バ ッ フ ァ の概図です。 データ がバ ッ フ ァ に書き込まれた n ク ロ ッ ク サ イ ク ル後に、 その

データが送信され、 同じ位置に新しいデータが書き込まれます。

図 24 に、 ブ ロ ッ ク RAM を使用し て循環バ ッ フ ァ を作成する場合のハー ド ウ ェ ア イ ンプ リ メ ンテー

シ ョ ンを示し ます。 モジュ ロ n 計算器によ って、 シングル ポー ト ブロ ッ ク RAM にア ド レ スが入力さ

れ、 単純なデータ遅延ラ イ ンを使用し て、 ブロ ッ ク RAM はク ロ ッ ク サイ クルご と に新しいデータ を書

き込みます。

また、 循環バッ フ ァは、 ク ロ ッ ク エ ッ ジご と に遅延データ を読み出し ます。 ブロ ッ ク RAM の書き込み

モード を READ_FIRST に設定する と、同じ ク ロ ッ ク入力およびク ロ ッ ク エ ッ ジで入力データが書き込

まれ、 出力データが送信される ため、 デザイ ンが簡潔化し、 全体のパフ ォーマン ス も向上し ます。 実際

の書き込み/読み出しについては図 17 に示し ます。

図 22: 1 ブロック RAM を使用して 256x72 シングル ポート RAM を作成

図 23: 循環バッファ

SSRACLKA

CLKBSSRB

ENA

ENB

WEA

WEB

DIA DOA

DIB DOB

ADDRA[7:0]

ADDRB[7:0]

ADDR[8]

ADDRB[8]

DO[71:36]

DO[35:0]

DI[71:36]

DI[35:0]

ADDR[7:0]

WEENASSRCLK

X463_22_062403

0

1 2

3

n

n-1 n-2

OUT

X463_20_020503

IN

Page 28: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

28 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

図 24 では IN および OUT データ ポー ト 幅は一致し ていますが、必ずし も同一であ る必要はな く 、デュ

アル ポー ト モード では各ポー ト 幅が異なる場合があ り ます。 図 25 には、 1 バイ ト のデータがブロ ッ ク

RAM に入 り 、 32 ビ ッ ト ワード のデータ と し て出力される例を示し ています。 なお、 最大 2,048 ク ロ ッ

ク サイ クルまでデータ を遅らせて送信でき ます。

シングル ブロ ッ ク RAM はデュ アル ポー ト メ モ リ と し て も使用でき ます。 1 バイ ト の入力データが、2k×9 にコ ンフ ィ ギュ レーシ ョ ン されたポー ト B に入 り 、 ポー ト A には 32 ビ ッ ト の出力データが送信さ

れるため、 結果と し て、 ポー ト A は 512x36 メ モ リ にコ ンフ ィ ギュ レーシ ョ ン されます。

図 24: ブロック RAM およびカウンタを使用した循環バッファのインプリ メンテーシ ョ ン

図 25: シングル ブロック RAM で使用する循環バッファ とポート幅変換器

SSR

CLK

ENWE

DI DO

ADDR

WRITE_MODE=READ_FIRST

IN OUT

X463_24_020503

Co

un

ter

Block RAMCircular Buffer/

Delay BufferData delayed up to2,048 clock cycles

IN

OUT

Byte 0

Byte 1

Byte 2

Byte 3

Byte 0Byte 1Byte 2Byte 3X463_25_020503

Page 29: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 29

R

両ポー ト に入力される ア ド レ ス を操作する こ と によ って、 4n バイ ト ク ロ ッ ク遅れて出力でき ます。 32ビ ッ ト の出力ワード ご と に 4 つの 1 バイ ト 入力が必要であ り 、 4 分割カ ウ ン タは、 2 つの下位ア ド レ ス

ビ ッ ト ADDRB[1:0] を入力し ます。 4 バイ ト が保存された後、 下にあ る カ ウ ン タからのター ミ ナル カウ ン ト (TC) がポー ト A と n 分割カ ウ ン タ を イ ネーブルにし ます。 イ ネーブル信号によ って、 ポー ト Bでは 32 ビ ッ ト の出力データがラ ッ チに送信され、上部のカ ウ ン タはイ ン ク リ メ ン ト されます。 こ のよ う

う に、 4 分割カ ウ ン タ と n 分割カ ウ ン タ を組み合わせる と、 効果的に 4n 分割カ ウ ン タ と し て使用でき

ます。 n 分割カ ウ ン タからの出力は、 ポー ト B のア ド レ ス ビ ッ ト の MSB であ る ADDRB[11:2] および

ポー ト A のア ド レ ス全体のビ ッ ト であ る ADDRA[9:0] にな り ます。

高速で複雑なステート マシンおよびマイクロシーケンサブロ ッ ク RAM の初期値は任意に指定でき るため、 この メ モ リ を使用し、 ステー ト マシーン と し て機能

するデュ アル ポー ト のレジス タ付き ROM を作成でき ます。 た と えば、 図 27 に示すよ う に、 1 つのブ

ロ ッ ク RAMを使用し、 128 ステー ト および 8 ブラ ンチで、 38 ステー ト 出力の有限ステー ト マシンを作

成でき ます。

図 26: 1 バイ ト幅のデータが 4n クロッ ク サイクル後に 32 ビッ ト データに変換

CLKA

CLKB

ENA

ENB

WEA

WEB

DOA[31:0]

DIB[7:0]

ADDRA[8:0]

ADDRB[1:0]

OUT

TC

÷4

EN÷n

IN

512x36

2Kx9

ADDRB[11:2]

X463_26_062503

Page 30: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

30 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

図 21 と同様に、 デュ アル ポー ト ブロ ッ ク RAM メ モ リ は、 1 つのポー ト のア ド レ ス ビ ッ ト の MSB をHigh に接続し、 も う 一方を Low に接続する こ と で、 サイ ズが半分の、 完全に独立し た 2 つのシングル

ポー ト メ モ リ と し て使用でき ます。 ポー ト A は、 2Kx9 にコ ンフ ィ ギュ レーシ ョ ン され、 1K x 9 シング

ル ポー ト ROM と し て使用でき ます。 こ こ で、 7 出力がア ド レ ス と し て再入力し、 128 のステー ト を持

ちますが、 1Kx9 ROM にあ る 10 ア ド レ ス ラ イ ンの う ち、 7 つが現在のステー ト 入力と な り 、 残 り の 3ア ド レ ス入力は 8 つのブ ラ ンチを決定し ます。 128 ステー ト は、 これら の 3 ア ド レ ス入力に制御され、

一定条件の下で 8 つの新しいステー ト の う ち、 どのステー ト にも進むこ と ができ ます。 ポー ト B は、 512 x 36 にコ ンフ ィ ギュ レーシ ョ ン され、 256 x 36 シングル ポー ト ROM と し て使用で

き ます。 ポー ト A から現在のステー ト ア ド レ スが 7 ビ ッ ト で入力され、 36 ビ ッ ト が出力されます。 出

力は各ステー ト によ って任意に定義され、異な り ますが、ブロ ッ ク ROM は本来同期 メ モ リ であ る ため、

256x36 ROM からの 36 出力は 1 ク ロ ッ ク サイ クル遅れています。 また、 8 ア ド レ ス入力になる と、 36出力も変化し ます。 1Kx9 ブロ ッ ク から 2 ステー ト ビ ッ ト を追加でき ますが、 これら ビ ッ ト は 1 ク ロ ッ

ク サイ クル分の遅延はあ り ません。 同様の基本的なアーキテ クチャ を使用する と、 4 ブラ ンチの 256 ステー ト の有限ステー ト マシン、 また

は 16 ブラ ンチの 64 ステー ト のステー ト マシンを作成でき、 ブラ ンチ制御信号が さ らに必要な場合は、

マルチプレ ク サを使用でき ます。 こ のデザイ ンの利点と し ては、 低コ ス ト (シングル ブロ ッ ク RAM) であ る こ と、 高性能であ る こ と (125+MHz)、 配置配線の問題がない こ と、 および任意に設計でき る こ と

が考え られます。

RAM を使用した高速カウンタカ ウ ン タは、 現在のステー ト によ って次のステー ト が変化する単純なステー ト マシンの一例です。 た と

えば、 バイナ リ カ ウ ン タは現在のス テー ト を イ ン ク リ メ ン ト し、 次のステー ト を生成し ます。 図 28 にク ロ ッ ク イネーブル と同期 リ セ ッ ト がシングル ブロ ッ ク RAM にイ ンプ リ メ ン ト されている 20 ビ ッ ト

バイナ リ カ ウ ン タ を示し ます。

図 27: シングル ブロック RAM で作成できる 128 ステートおよび 38 出力の有限ステート マシン

36 bits

1Kx9State Machineor Sequencer

256x36State Outputs

7+2 bits7 bits

7 bits

7 State Bits38 Output Bits

X463_27_062503

Out

put

Con

trol

Bra

nch

Con

trol

Page 31: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 31

R

20 ビ ッ ト のバイナ リ カ ウ ン タは、 2 つの同一 10 ビ ッ ト バイナ リ カ ウ ン タから作成でき ます。 これら

のカ ウ ン タは、 1024 ク ロ ッ ク サイ クルご と に下位の 10 ビ ッ ト カ ウ ン タが上位の 10 ビ ッ ト カ ウ ン タ

を イ ネーブルにする も のです。 こ の例では、 ポー ト B は下位の 10 ビ ッ ト カ ウ ン タ を作成する 1Kx18ROM (WEB は Low) で、現在のステー ト に対応し た 10 LSB データ出力は、 そのま ま 10 ビ ッ ト のア ド

レ ス入力 ADDRB[9:0] にな り ます。 ROM では、 ア ド レ ス ピ ンに送信された現在のス テー ト を使用し

て、 次のス テー ト が固定されます。 11 番目のデータであ る D[10] が、 カ ウ ン タか ら のター ミ ナル カ ウ

ン ト 出力にな り 、 こ の例では、 データ ビ ッ ト DOB[17:11] は使用されません。

表 12 にバイナ リ カ ウ ン タのステー ト ロジ ッ ク を示し ます。 カ ウ ン タは、0 または INIT や SRVAL 属性

で指定し た値から開始し、 ター ミ ナル カ ウ ン ト がア ク テ ィ ブで、 コ ン ト ローラが 0 に戻る 0x3FF (102310進) までカ ウ ン ト し ます。

ポー ト A は、 ポー ト B から のター ミ ナル カ ウ ン タ出力によ って イ ネーブルになる点 と その 10 ビ ッ ト

カ ウ ン タのイ ン ク リ メ ン ト 率がポー ト B の 1/1024 番目 であ る点を除いて、 ポー ト B と同様です。

図 28: シングル ブロック RAM を使用し、 2 つの 10 ビッ ト カウンタから 1 つの 20 ビッ ト バイナリ カウンタを作成

SSRACLKA

CLKB

SSRB

ENA

ENB

WEA

WEB

DOA[9:0]

DOB[9:0]

ADDRB[9:0]

COUNT[19:11]

COUNT[9:0]

ENA

SSRCLK

DOB[10]DOB[17:11]

ADDRB[9:0]

DOA[10]DOA[17:11]

TERM_COUNT

1Kx18

1Kx18

(unused)

(unused)

Terminal Countfrom Port B enablesPort A every 1024clock cycles.

TC

CNT[9:0]

EN

TC

CNT[9:0]

EN

X463_28_062503

表 12: バイナリ アップ カウンタの次のステート ロジック

現在のステート ステート出力 次のステート

TC COUNT

ADDR[9:0](Hex) D[10]

D[9:0](Hex)

0 0 1

1 0 2

2 0 3

... ... ...

3FFF 1 0

Page 32: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

32 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

こ の例に簡単な修正を加え る こ と で、 20 ビ ッ ト ア ッ プカ ウ ン タから 18 ビ ッ ト ア ッ プ/ダウ ン カウ ン タ

を作成でき ます。 ア ド レ ス信号の MSB を方向制御に使用する と、 表 13 に示すよ う に、 同様のカウ ン タ

アーキテ クチャで、 イ ン ク リ メ ン ト またはデク リ メ ン ト でき ます。 こ の場合、 カ ウ ン タは、 ア ッ プ/ダウ

ン コ ン ト ロール信号が Low でイ ン ク リ メ ン ト し、 High でデク リ メ ン ト し ます。 ROM メ モ リ は、 次の

ステー ト ロジ ッ クのイ ン ク リ メ ン ト とデク リ メ ン ト の間で分割されます。

次に例を示すよ う なカ ウ ン タ と し て も使用でき ます。

• ポー ト A および B でイ ンプ リ メ ン ト されたカ ウ ン タのモジ ュ ロ を組み合わせたバイナ リ ア ッ プお

よびア ッ プ/ダウ ン カ ウ ン タ

• 高速グレ イ コード カ ウ ン タ を含む、 その他のイ ン ク リ メ ン ト とデク リ メ ン ト パターンを持ったカ

ウ ン タ

• 512x36 ブロ ッ ク ROM と 1 つの CLB にコ ンフ ィ ギュ レーシ ョ ン された 6 桁の BCD カ ウ ン タ

4 ポート メモリ各ブロ ッ ク RAM は物理的にデュ アル ポー ト メ モ リ ですが、 ブロ ッ ク RAM のア ク セス ス ピード は高

速であ る ため、 メ モ リ への出入力信号を時分割処理し、 複数ポー ト の メ モ リ を作成でき ます。 ブロ ッ ク

RAM にい く つかの ロ ジ ッ ク を追加する と 4 ポー ト までサポー ト する こ と ができ ますが、 各ポー ト は、

さ らにア ク セス レ イ テンシを持つこ と にな り ます。 詳細および リ フ ァ レ ンス デザイ ンについては、次の

アプ リ ケーシ ョ ン ノー ト を参照し て く だ さい。

• XAPP228: Virtex デバイ スでの 4 ポー ト メ モ リ ( リ フ ァ レ ン ス デザイ ンを含む)

CAM (連想メモリ )連想 メ モ リ と し て も知られる Content-Addressable Memory (CAM) は、多様なネ ッ ト ワークおよびデー

タ プロセ ッ シング アプ リ ケーシ ョ ンで使用されます。 ほ と んどの場合、 メ モ リ アプ リ ケーシ ョ ンの内

容はア ド レ スによ って参照されますが、 CAM アプ リ ケーシ ョ ンでは、 メ モ リ 内容が入力 と な り 、 その

出力によ って メ モ リ 内にデータがあ るかど う かがわか り 、 あ る場合にはロ ケーシ ョ ン も出力されます。

こ こ で CAM の動作について よ り 理解する ために、 本のイ ンデッ ク ス を思い浮かべてみて く だ さい。 ある ア イ テムを検索する場合に、 まず、 これがイ ンデッ ク スに含まれているかを確認し ます。 あ る場合に

は、 そ こ に記載されているページ番号などから内容を参照し ます。

表 13: バイナリ アップ/ダウンカウンタのステート ロジック

アップ/ダウン制御 現在のステート ステート出力 次のステート

TC COUNT

ADDR[9]ADDR[8:0]

(Hex) D[10]D[9:0](Hex)

0(Up)

0 0 1

1 0 2

2 0 3

... ... ...

1FFF 1 0

1(Down)

1FFF 0 1FFE

1FFE 0 1FFD

1FFD 0 1FFC

... ... ...

0 1 1FFF

Page 33: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 33

R

• CORE Generator: Content-Addressable Memory モジュール

• XAPP260: 『ブロ ッ ク RAM を使用し た高性能読み出し /書き込み CAM』

• XAPP201: 『CAM デザイ ンの概要』 こ のアプ リ ケーシ ョ ン ノー ト は Virtex/E および Spartan-II/E アーキテ クチャ用に書かれていますが、 Spartan-3 でも有用な手法が記載されています。

ブロック RAM を使用したロジック ファンクシ ョ ンすべての Spartan-3 ロ ジ ッ ク セルには、 ルッ ク ア ッ プ テーブル (LUT) と呼ばれる 4 入力 RAM/ROMがあ り 、 こ の 4 入力のロ ジ ッ ク フ ァ ン ク シ ョ ン と し て機能する LUT が、 Spartan-3 アーキテ クチャの

基本と な り ます。 また、 RAM は入力数の多い LUT と し て別の使用方法があ り ます。 メ モ リ 構成の 1 つと し て、 RAM をROM と し て使用し、14 入力 1 出力のブロ ッ ク RAM も作成でき ます。 こ のよ う に、ブロ ッ ク RAM は、

入力信号の複雑さや反転機能に関係な く 、 14 入力までの任意のロ ジ ッ ク フ ァ ン ク シ ョ ンを イ ンプ リ メ

ン ト でき ますが、 その際に、 い く つかの制限があ り ます。

• ロ ジ ッ ク内では、 ラ ッチを作成する よ う な非同期フ ィ ード バッ ク パス を使用でき ません。

• 出力は、 ク ロ ッ ク入力と必ず同期であ る必要があ り ます。 ブロ ッ ク RAM は、 非同期読み出し出力

をサポー ト し ません。

これらの条件を満た し た ロ ジ ッ ク フ ァ ン ク シ ョ ンでは、 シングル ブロ ッ ク RAM で次のよ う な機能を

イ ンプ リ メ ン ト でき ます。

• 最大 14 入力までのブール ロ ジ ッ ク関数

• 11 入力を共有し て使用する 9 つのブール ロ ジ ッ ク関数

• その他の組み合わせも可能ですが、 入力数、 共有入力数、 またはロ ジ ッ ク フ ァ ン ク シ ョ ンの複雑

さ などに制限があ る場合があ り ます。

CLB ロジ ッ ク の柔軟性と ス ピード を考慮する と、 ブロ ッ ク RAM は、複数入力を AND ゲー ト で接続す

る ア ド レ ス デコーダのよ う な単純な ロジ ッ ク フ ァ ン ク シ ョ ンには、 必ずし も効果的ではあ り ませんが、

主要なデコーダ、 相関器のよ う な複雑なロ ジ ッ ク フ ァ ン ク シ ョ ンに と っては、 高速で非常に有効です。

ファジー マッチ回路例

図 29 に、 正確に一致し た回路 と ほぼ一致し た回路例を示し ています。 各入力ビ ッ ト は必要な MATCHパターンに一致し、 ロジ ッ ク的に必要ではないビ ッ ト はマス ク オフする ため、 特定のビ ッ ト は常に一致

し ている こ と にな り ます。 こ のよ う に一致し たビ ッ ト 数はカ ウ ン ト および起動し きい値と比較され、 こ

の数がし きい値よ り 大きい場合、 入力データはほぼ必要なパターンに一致し、 MATCH 出力は High にな り ます。

新規の一致パターンや異な る ロ ジ ッ ク フ ァ ン ク シ ョ ンが必要な場合は、 も う 一方の メ モ リ ポー ト を使

用し て取 り 込むこ と ができ ます。

図 29: シングル ブロック RAM での 14 入力 ファジー マッチング回路

1

0

•••

0

1 MATCH

Thr

esho

ld Is number ofmatching bitsgreater than threshold?

•••

MASK any don't

Number of bits that must match

care bitsCompare bit toMATCH pattern

>

Σ

X463_29_040403

Page 34: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

34 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

CLB ロ ジ ッ ク で使用される ため、 こ のフ ァ ン ク シ ョ ンには多 く のロ ジ ッ ク セル と複数レ イ ヤが必要 と

な り ますが、 MATCH、 MASK、 およびし きい値はあ らかじめわかっている ため、 フ ァ ン ク シ ョ ンを事

前に計算し、 ブロ ッ ク RAM に置 く こ と が可能です。 た と えば、 各入力がア ド レ ス 0 から開始し、 メ モ

リ 全体にイ ン ク リ メ ン ト される場合、 こ の出力はあ らかじめ計算でき ます。 14 入力のフ ァ ジーマ ッチン

グ回路には、 シングル ブロ ッ ク RAM が必要であ り 、 1 ク ロ ッ ク サイ クルで実行されます。

MAP -bp オプシ ョ ンを使用したブロック RAM へのロジック マッピング

ザイ リ ン ク ス ISE ソ フ ト ウ ェ アでは、 ロ ジ ッ ク フ ァ ン ク シ ョ ンはブロ ッ ク RAM に自動的にマ ッ プ さ

れないため、 マ ッ ピング オプシ ョ ンを使用し ます。

こ のブロ ッ ク RAM のマ ッ ピングに有効なオプシ ョ ンが、MAP -bp オプシ ョ ンです。 オプシ ョ ンが有効

な場合、 ザイ リ ン ク ス ISE のロジ ッ ク マ ッ ピ ング ツールは、 LUT およびそれに接続されたフ リ ッ プフ

ロ ッ プを 1 出力のシングル ポー ト ブロ ッ ク RAM に配置し ます。 最終的なフ リ ッ プフ ロ ッ プ出力は、ブ

ロ ッ ク RAM が同期であ る ため、 レジス タ付きの出力にな り ます。 また、 マ ッ ピ ング ソ フ ト ウ ェ アは、

フ リ ッ プフ ロ ッ プ と LUT ロジ ッ ク が駆動する ものをパッ ク し ます。 LUT ロジ ッ ク な しで、 レジス タ を

ブロ ッ ク RAM にパッ クする こ と はできず、 逆に LUT ロ ジ ッ クがあ る場合は、 必ずパッ ク されます。

ブロ ッ ク RAM 出力に変換される レジス タ出力を指定するには、 レジス タ出力に接続されたネ ッ ト 名の

リ ス ト を含むフ ァ イ ルを作成し ます。 環境変数 XIL_MAP_BRAM_FILE を フ ァ イ ル名に設定する こ と

で、 マ ッ ピング ソ フ ト ウ ェ アは作成し たフ ァ イルを使用し、 オプシ ョ ンが指定される と、 こ の環境変数

を検索し MAP が実行されます。 フ ァ イルにあ る出力ネ ッ ト のみがブロ ッ ク RAM 出力に変換されます。

• PC の場合: set XIL_MAP_BRAM_FILE=file_name

• UNIX の場合:setenv XIL_MAP_BRAM_FILE file_name

ブロック RAM を使用した波形スト レージ、 ファンクシ ョ ン テーブル、Direct Digital Synthesis (DDS)サイ ンやコサイ ン と い う 三角関数のよ う な関数を含む波形ス ト レージ もブロ ッ ク RAM のすぐれたアプ

リ ケーシ ョ ンの 1 つです。 サイ ンおよびコサイ ンは、 DDS のよ う なアプ リ ケーシ ョ ンの出力波形を作

成する際の基本波形と な り ます。 ザイ リ ン ク ス CORE Generator システムには、 次の 2 つのパラ メ ータ

指定可能なモジュールがあ り ます。

• CORE Generator: Sine/Cosine Look-Up Table モジュール

• CORE Generator: Direct Digital Synthesizer (DDS) モジュール

波形ス ト レージは、 さ まざまな信号コ ンパンダ (コ ンプレ ッ サ/エキ スパンダ) および正規化回路内で、必

要なバン ド 幅で重要な信号をブース ト する ために使用される アプ リ ケーシ ョ ン と し て も利用可能です。

例と し て、 直線データ、 u-Law でエン コード されたデータおよび A-Law でエン コード されデータ間の

変換器があ り 、 一般にテレ コ ミ ュニケーシ ョ ンで使用されます。

デュ アル ポー ト のブロ ッ ク RAM によ って、 波形ス ト レージが容易になるだけでな く 、 完全な新規デー

タ、 または修正や正規化されたデータで波形を更新する こ と ができ ます。 図 30 の例では、 ポー ト A に現在ア ク テ ィ ブな波形があ り 、 ポー ト B で新しい波形を取 り 込みます。

Page 35: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 35

R

エンジニア リ ングの世界で、 答えを導き出すよ り も探す方が容易な場合があ る よ う に、 デジタル デザイ

ンでも同様のこ と が言えます。 ブロ ッ ク RAM は、 出力 y が 入力 x または y=f(x) の関数であ る場合、

あ らかじめ計算された関数テーブルの保存に役立ちます。

た と えば、次の多項式を イ ンプ リ メ ン ト する CLB ロ ジ ッ ク を作成する代わ り に、 こ の関数を計算し、ブ

ロ ッ ク RAM に保存でき ます。

Y = Ax3 - Bx2 + Cx + D

A、 B、 C、 および D の値は、 すべて定数であ り 、 出力 y は、 入力 x によ ってのみ変化し ます。 し たがっ

て、 出力値は各入力値 x ご と にあ らかじめ計算でき、 メ モ リ に保存されます。 ただし、 入力 x の範囲ま

たは出力 y の大き さ によ っては、 1 つのロ ジ ッ ク ブロ ッ ク では十分でない場合があ り ます。 512x36 ブロ ッ ク RAM を使用し、 入力が 0 から 511 の範囲で、 上の等式を イ ンプ リ メ ン ト する場合、 x の値は指

数乗で y に影響を与え る ため、 その範囲に限界があ り ます。 こ の例で、 x が最大値を と る と、 y は少な

く と も 28 出力ビ ッ ト が必要にな り ます。

同様に、 シングル ブロ ッ ク RAM では、 次のよ う なフ ァ ン ク シ ョ ンを実現でき ます。

• log(x) や平方根(x) のよ う な関数の組み合わせを含む、 1 入力の複雑な関数。 2 つの値の乗算器も可

能ですが、 一般にブロ ッ ク RAM 入力数によ る制限があ り 、 単純な乗算関数には、 Spartan-3 の 18x18 エンベデッ ド乗算器がよ り すぐれた ソ リ ューシ ョ ンです。

• 1Kx18 ブロ ッ ク RAM を使用し た 11 ビ ッ ト バイナ リ から 4 桁 BCD への 2 つの独立し た変換器。 各コ ンバータの LSB は、 ROM をバイパス し、 その結果が偶数か奇数か と いったオ リ ジナルの値

と同一かを示し ます。

• 2Kx9 ブロ ッ ク RAM を使用し た 2 つの独立し た 3 桁 BCD から 10 ビ ッ ト バイナ リ へのコ ンバー

タ。 LSB は変換器をバイパス し ます。

• 一方のポー ト をサイ ンに、 も う 一方を コサイ ンに使用し、 90 度シフ ト し たア ド レ ス、 18 ビ ッ ト の

振幅、 10 ビ ッ ト の角度を もつサイ ン-コサイ ン LUT。

• 1Kx18 ブロ ッ ク RAM での 10 ビ ッ ト バイナ リ から 3 桁、7 セグ メ ン ト LED 出力への 2 つの独立

し た変換器。 ただし、 ゼロはブラ ン クで表示されます。 入力が、 1023 までに限定されている ため、

LED の表示は 0 から 3FF まで と な り 、 MSB のロジ ッ ク には、 4 入力 (セグ メ ン ト a=d=g、 セグ メ

ン ト f はつねに High) のみが必要と な り ます。

図 30: デュアル ポート ブロック RAM を使用した波形ストレージおよび更新

ADDRA

DOA

DIB

ADDRB

Port AActive Waveform

Port BUpdate Waveform X463_30_062503

Page 36: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

36 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

関連文献および情報

• ìUsing Leftover Multipliers and Block RAM in Your Designî Peter Alfke, Xilinx, Inc.http://www.xilinx.co.jp/support/techxclusives/leftover-techX11.htm

• ìThe Myriad Uses of Block RAMî Jan Gray, Gray Research, LLC.http://www.fpgacpu.org/usenet/bb.html

• ザイ リ ン ク ス ISE 5.2i ライブラリ ガイド

- Adobe Acrobat [PDF]

http://toolbox.xilinx.com/docsan/xilinx5/pdf/docs/lib/lib.pdf、 1593 ・ 640 ページ

ISE 5.2i をデフ ォル ト のデ ィ レ ク ト リ にイ ンス ト ールし ている場合、 こ のラ イブラ リ ガ イ ド

は、 次のパス または、 Project Navigator でヘルプからオンライン マニュアルを選択する と参照

でき ます。 Acrobat で ド キ ュ メ ン ト が表示された ら、 左側にあ る目次で Libraries Guide を ク

リ ッ ク し て く ださ い。

C:\Xilinx\doc\usenglish\docs\lib\lib.pdf

- RAMB16_Sn プ リ ミ テ ィ ブ [HTML]

http://toolbox.xilinx.com/docsan/xilinx5/data/docs/lib/lib0371_355.html

- RAMB16_Sm_Sn プ リ ミ テ ィ ブ [HTML]

http://toolbox.xilinx.com/docsan/xilinx5/data/docs/lib/lib0372_356.html

おわりに Spartan-3 FPGA には、 豊富、 高速、 かつ柔軟なブロ ッ ク RAM があ り 、 これは、 オンチ ッ プのス ト レー

ジ と し て、 ス ク ラ ッ チパ ッ ド メ モ リ 、 FIFO、 バ ッ フ ァ、 LUT などに非常に有益です。 ブロ ッ ク RAM独自の機能を使用する と、 シフ ト レ ジス タ、 遅延ラ イ ン、 カ ウ ン タ、 および他入力で複雑な ロ ジ ッ ク

フ ァ ン ク シ ョ ンを イ ンプ リ メ ン ト でき ます。

ブロ ッ ク RAM は、 CORE Generator を含むザイ リ ン ク ス ISE 開発ソ フ ト ウ ェ アの広域スペク ト ルを使

用する アプ リ ケーシ ョ ンでサポー ト され、 合成の際に、 VHDL または Verilog で推論や直接イ ン ス タ ン

シエー ト する こ と ができ ます。

付録 A: VHDL インスタンシエーシ ョ ン例

次は、Synopsys FPGA Express システムの場合の、VHDL イ ン ス タ ンシエーシ ョ ン例です。 こ の例にあ

る XC3S_RAMB_1_PORT モジュールは、 SelectRAM_A36.vhd VHDL テンプレー ト を使用し ます。

ま た、 こ のテンプレー ト を含むその他のテンプレー ト は、 次のウ ェブ サ イ ト か ら ダ ウ ン ロー ド 可能で

す。 こ こ で示し ている VHDL コード は、 断片的であ り 、 完全な ものではあ り ません。

• ftp://ftp.xilinx.com/pub/applications/xapp/xapp463_vhdl.zip

-- Module: XC3S_RAMB_1_PORT-- Description: 18Kb Block SelectRAM example-- Single Port 512 x 36 bits-- Use template “SelectRAM_A36.vhd"---- Device: Spartan-3 Family---------------------------------------------------------------------library IEEE;use IEEE.std_logic_1164.all;---- Syntax for Synopsys FPGA Express-- pragma translate_offlibrary UNISIM;use UNISIM.VCOMPONENTS.ALL;-- pragma translate_on--entity XC3S_RAMB_1_PORT isport (

DATA_IN : in std_logic_vector (35 downto 0);ADDRESS : in std_logic_vector (8 downto 0);ENABLE : in std_logic;WRITE_EN : in std_logic;SET_RESET : in std_logic;

Page 37: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 37

R

CLK : in std_logic;DATA_OUT : out std_logic_vector (35 downto 0)

);end XC3S_RAMB_1_PORT;--architecture XC3S_RAMB_1_PORT_arch of XC3S_RAMB_1_PORT is---- Components Declarations:--component BUFGport (

I : in std_logic;O : out std_logic

);end component;---- Syntax for Synopsys FPGA Expresscomponent RAMB16_S36-- pragma translate_offgeneric (-- "Read during Write" attribute for functional simulationWRITE_MODE : string := "READ_FIRST" ; -- WRITE_FIRST(default)/ READ_FIRST/NO_CHANGE-- Output value after configurationINIT : bit_vector(35 downto 0) := X"000000000";-- Output value if SSR activeSRVAL : bit_vector(35 downto 0) := X"012345678";-- Initialize parity memory contentINITP_00 : bit_vector(255 downto 0) :=X"000000000000000000000000000000000000000000000000FEDCBA9876543210";INITP_01 : bit_vector(255 downto 0) :=X"0000000000000000000000000000000000000000000000000000000000000000";... (snip)INITP_07 : bit_vector(255 downto 0) :=X"0000000000000000000000000000000000000000000000000000000000000000";-- Initialize data memory contentINIT_00 : bit_vector(255 downto 0) :=X"000000000000000000000000000000000000000000000000FEDCBA9876543210";INIT_01 : bit_vector(255 downto 0) :=X"0000000000000000000000000000000000000000000000000000000000000000";... (snip)INIT_3F : bit_vector(255 downto 0) :=X"0000000000000000000000000000000000000000000000000000000000000000");-- pragma translate_onport (

DI : in std_logic_vector (31 downto 0);DIP : in std_logic_vector (3 downto 0);ADDR : in std_logic_vector (8 downto 0);EN : in STD_LOGIC;WE : in STD_LOGIC;SSR : in STD_LOGIC;CLK : in STD_LOGIC;DO : out std_logic_vector (31 downto 0);DOP : out std_logic_vector (3 downto 0)

);end component;---- Attribute Declarations:attribute WRITE_MODE : string;attribute INIT: string;attribute SRVAL: string;-- Parity memory initialization attributesattribute INITP_00: string;attribute INITP_01: string;... (snip)attribute INITP_07: string;-- Data memory initialization attributes

Page 38: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

38 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

attribute INIT_00: string;attribute INIT_01: string;... (snip)attribute INIT_3F: string;---- Attribute "Read during Write mode" = WRITE_FIRST(default)/ READ_FIRST/NO_CHANGEattribute WRITE_MODE of U_RAMB16_S36: label is "READ_FIRST";attribute INIT of U_RAMB16_S36: label is "000000000";attribute SRVAL of U_RAMB16_S36: label is "012345678";---- RAMB16 memory initialization for Alliance-- Default value is "0" / Partial initialization strings are padded-- with zeros to the leftattribute INITP_00 of U_RAMB16_S36: label is"000000000000000000000000000000000000000000000000FEDCBA9876543210";attribute INITP_01 of U_RAMB16_S36: label is"0000000000000000000000000000000000000000000000000000000000000000";... (snip)attribute INITP_07 of U_RAMB16_S36: label is"0000000000000000000000000000000000000000000000000000000000000000";--attribute INIT_00 of U_RAMB16_S36: label is"000000000000000000000000000000000000000000000000FEDCBA9876543210";attribute INIT_01 of U_RAMB16_S36: label is"0000000000000000000000000000000000000000000000000000000000000000";... (snip)attribute INIT_3F of U_RAMB16_S36: label is"0000000000000000000000000000000000000000000000000000000000000000";---- Signal Declarations:---- signal VCC : std_logic;-- signal GND : std_logic;signal CLK_BUFG: std_logic;signal INV_SET_RESET : std_logic;--begin-- VCC <= ’1’;-- GND <= ’0’;---- Instantiate the clock BufferU_BUFG: BUFGport map (

I => CLK,O => CLK_BUFG

);---- Use of the free inverter on SSR pinINV_SET_RESET <= NOT SET_RESET;-- Block SelectRAM InstantiationU_RAMB16_S36: RAMB16_S36port map (

DI => DATA_IN (31 downto 0), -- insert 32 bits data-in bus (<31 downto 0>)DIP => DATA_IN (35 downto 32), -- insert 4 bits parity data-in bus (or <35

-- downto 32>)ADDR => ADDRESS (8 downto 0), -- insert 9 bits address busEN => ENABLE, -- insert enable signalWE => WRITE_EN, -- insert write enable signalSSR => INV_SET_RESET, -- insert set/reset signalCLK => CLK_BUFG, -- insert clock signalDO => DATA_OUT (31 downto 0), -- insert 32 bits data-out bus (<31 downto 0>)DOP => DATA_OUT (35 downto 32) -- insert 4 bits parity data-out bus (or <35

-- downto 32>));--

end XC3S_RAMB_1_PORT_arch;

Page 39: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

Spartan-3 FPGA でのブロック RAM の使用

XAPP463 (v1.1.2) 2003 年 7 月 23 日 www.xilinx.co.jp 39

R

付録 B: Verilog インスタンシエーシ ョ ン例

次は、 Synopsys FPGA Express システムの場合の、 Verilog イ ン ス タ ンシエーシ ョ ン例です。 こ の例に

あ る XC3S_RAMB_1_PORT モジュールは、SelectRAM_A36.v Verilog テンプレー ト を使用し ます。 また、 こ のテンプレー ト を含むその他のテンプレー ト は、 次のウ ェブ サイ ト か ら ダ ウ ン ロード可能です。

こ こ で示し ている Verilog コード は、 断片的であ り 、 完全な ものではあ り ません。

• ftp://ftp.xilinx.com/pub/applications/xapp/xapp463_verilog.zip

// Module: XC3S_RAMB_1_PORT// Description: 18Kb Block SelectRAM-II example// Single Port 512 x 36 bits// Use template "SelectRAM_A36.v"//// Device: Spartan-3 Family//-------------------------------------------------------------------module XC3S_RAMB_1_PORT (CLK, SET_RESET, ENABLE, WRITE_EN, ADDRESS, DATA_IN, DATA_OUT);

input CLK, SET_RESET, ENABLE, WRITE_EN;input [35:0] DATA_IN;input [8:0] ADDRESS;output [35:0] DATA_OUT;wire CLK_BUFG, INV_SET_RESET;

//Use of the free inverter on SSR pinassign INV_SET_RESET = ~SET_RESET;// initialize block ram for simulation// synopsys translate_offdefparam //Read during Writeî attribute for functional simulationU_RAMB16_S36.WRITE_MODE = READ_FIRSTî, //WRITE_FIRST(default)/ READ_FIRST/ NO_CHANGE//Output value after configurationU_RAMB16_S36.INIT = 36'h000000000,//Output value if SSR activeU_RAMB16_S36.SRVAL = 36'h012345678,//Initialize parity memory contentU_RAMB16_S36.INITP_00 =256'h0123456789ABCDEF000000000000000000000000000000000000000000000000,U_RAMB16_S36.INITP_01 =256'h0000000000000000000000000000000000000000000000000000000000000000,... (snip)U_RAMB16_S36.INITP_07 =256'h0000000000000000000000000000000000000000000000000000000000000000,//Initialize data memory contentU_RAMB16_S36.INIT_00 =256'h0123456789ABCDEF000000000000000000000000000000000000000000000000,U_RAMB16_S36.INIT_01 =256'h0000000000000000000000000000000000000000000000000000000000000000,... (snip)U_RAMB16_S36.INIT_3F =256'h0000000000000000000000000000000000000000000000000000000000000000;// synopsys translate_on//Instantiate the clock BufferBUFG U_BUFG ( .I(CLK), .O(CLK_BUFG));//Block SelectRAM InstantiationRAMB16_S36 U_RAMB16_S36 (

.DI(DATA_IN[31:0]),

.DIP(DATA_IN-PARITY[35:32]),

.ADDR(ADDRESS),

.EN(ENABLE),

.WE(WRITE_EN),

.SSR(INV_SET_RESET),

.CLK(CLK_BUFG),

.DO(DATA_OUT[31:0]),

.DOP(DATA_OUT-PARITY[35:32]));// synthesis attribute declarations/* synopsys attribute WRITE_MODE "READ_FIRST"INIT "000000000"

Page 40: R Spartan-3 FPGA でのブロック RAM の使用...Spartan-3 FPGA でのブロック RAM の使用 XAPP463 (v1.1.2) 2003 年 7 月 23 日 5 R 信号 ブロック RAM プリミティブに接続される信号は、次に示すように

40 www.xilinx.co.jp XAPP463 (v1.1.2) 2003 年 7 月 23 日

Spartan-3 FPGA でのブロック RAM の使用R

SRVAL "012345678"INITP_00"0123456789ABCDEF000000000000000000000000000000000000000000000000"INITP_01"0000000000000000000000000000000000000000000000000000000000000000"... (snip)INITP_07"0000000000000000000000000000000000000000000000000000000000000000"INIT_00"0123456789ABCDEF000000000000000000000000000000000000000000000000"INIT_01"0000000000000000000000000000000000000000000000000000000000000000"... (snip)INIT_3F"0000000000000000000000000000000000000000000000000000000000000000"*/endmodule

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

日付 バージョ ン 改訂内容

04/05/03 1.0 初版 リ リ ース

05/12/03 1.1 XC3S50 デバイ スに関するブロ ッ ク RAM 情報の更新

表 1、 図 2、 図 18、 図 26 および はじめに と ブロック RAM 配置 に関連し

た文章の更新

表 2 にシングル ポー ト モード を追加

関連文献および情報、 付録 A: VHDL インスタンシエーシ ョ ン例、 および

付録 B: Verilog インスタンシエーシ ョ ン例 のハイパーテキス ト リ ン ク の

更新

図 22 の修正。 DIB および ADDRB の変更

06/25/03 1.1.1 マイナー編集改正

07/23/03 1.1.2 図 5 の更新