...

ブロック RAM を使用した高速読み出し/書き 込み CAM

by user

on
Category: Documents
2

views

Report

Comments

Transcript

ブロック RAM を使用した高速読み出し/書き 込み CAM
アプリケーション ノート: Virtex シリーズ
R
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き
込み CAM
著者 : Jean-Louis Brelet
概要
CAM (Content Addressable Memory) を使用すると、データの検索速度が向上します。データの編成
と読み出し/書き込み速度についての必要条件は、アプリケーションによって異なります。このアプリ
ケーション ノートで説明する革新的なデザインは、高速な比較と書き込みを必要とする小規模な組み込
み型 CAM に適しています。参照用 のデザインは、Virtex™ FPGA の True Dual-Port™ Block
SelectRAM+ 機能を使用して作成されています。アプリケーション ノート XAPP201『Virtex デバイス
における各種の CAM デザインの概要』では、CAM をインプリメントするときに利用できる各種のソ
リューションについて触れ、このアプリケーション ノートで説明するソリューションを紹介しています。
はじめに
このアプリケーション ノートで説明する革新的なデザイン手法を使用すると、Virtex デバイスに組み込
まれている Block SelectRAM+™ メモリを深さが 16 ワード、幅が 8 ビット (16 X 8) の CAM として使
用できます。参照用のデザイン (付録 A 参照) として、16 X 8 の CAM としてコンフィギュレーションし
た複数のブロック RAM をカスケードできる、パラメータ化可能な Verilog コードと VHDL コードが提
供されています。1 または 2 クロック サイクルの書き込みと 1 クロック サイクルの比較 (読み出し) の場
合、CAM の速度は Virtex のブロック RAM のアクセス時間と等しくなります。
中規模サイズの CAM は、異なるデザイン手法によって Virtex スライスでインプリメントできます。
Virtex デバイスで CAM をデザインする 3 つの方法、および CAM のサイズと速度の比較については、
XAPP201 を参照してください。
CAM16X8 マクロ
CAM16X8 には、次のような特徴があります。
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
128 ビット
16 ワード X 8 ビットの構成
比較 (読み出し) と書き込みのデータ入力バスが独立
デコードされたアドレス出力 (16 ビット ワンホット デコードされたアドレス)
完全な同期比較ポート (読み出しポート)
完全な同期書き込みポート
1 クロック サイクルの比較 (1 つまたは複数の比較)
1 クロック サイクルの書き込み (および 1 クロック サイクルの消去)
比較イネーブル入力
書き込みイネーブル入力
書き込みまたは消去モード (書き込みの場合は 1、消去の場合は 0 にアサート)
比較リセット ポート (出力バスを同期して強制的にゼロに設定)
カスケード可能
デバイス コンフィギュレーション時に初期化 (デフォルトは空)
1 個の Virtex Block SelectRAM+ メモリにフィット
図 1 に、True Dual-Port Block SelectRAM+ メモリに組み込まれている CAM16X8 マクロを示します。
書き込みポート A は、読み出しポート B から独立しています。どちらのポートも、それぞれのクロッ
クに対して完全に同期が取られています。
© 2000 Xilinx, Inc. All rights reserved.Xilinx のすべての商標、登録商標、特許、免責事項は、
http://www.xilinx.co.jp/legal.htm に記載されています。他のすべての商標および登録商標は、それぞれの所有者に属します。
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
1
ブロック RAM を使用した高速読み出し/書き込み CAM
R
ライト ポート (A)
DATA_WRITE[7:0]
ADDR[3:0]
ERASE_WRITE
WRITE_ENABLE
CLK_WRITE
リード ポート (B)
DATA_MATCH[7:0]
MATCH_ENABLE
MATCH_RST
CLK_MATCH
MATCH [15:0]
X204_01_091099
図 1: CAM16X8 マクロ
Virtex FPGA では、各デバイスのブロック RAM の数に基づいて、異なるサイズの CAM を簡単に実現
できます。表 1 に、カスケード可能な CAM16X8 マクロを使用して Virtex デバイスで実現できる CAM
の編成の組み合わせを示します。
表 1: Virtex デバイスにおける最大の CAM の幅と深さ
2
Virtex デバイス
Block SelectRAM
の数
最大の
CAM サイズ
最大の
CAM の幅
最大の
CAM の深さ
XCV50
8
1,024 ビット
16 X 64 ビット
128 X 8 ビット
XCV100
10
1,280 ビット
16 X 80 ビット
160 X 8 ビット
XCV150
12
1,536 ビット
16 X 96 ビット
192 X 8 ビット
XCV200
14
1,792 ビット
16 X 112 ビット
224 X 8 ビット
XCV300
16
2,048 ビット
16 X 128 ビット
256 X 8 ビット
XCV50E
16
2,048 ビット
16 X 128 ビット
256 X 8 ビット
XCV400
20
2,560 ビット
16 X 160 ビット
320 X 8 ビット
XCV100E
20
2,560 ビット
16 X 160 ビット
320 X 8 ビット
XCV600
24
3,072 ビット
16 X 192 ビット
384 X 8 ビット
XCV800
28
3,584 ビット
16 X 224 ビット
448 X 8 ビット
XCV200E
28
3,584 ビット
16 X 224 ビット
448 X 8 ビット
XCV1000
32
4,096 ビット
16 X 256 ビット
512 X 8 ビット
XCV300E
32
4,096 ビット
16 X 256 ビット
512 X 8 ビット
XCV400E
40
5,120 ビット
32 X 160 ビット
640 X 8 ビット
XCV600E
72
9,216 ビット
32 X 288 ビット
1,152 X 8 ビット
XCV1000E
96
12,288 ビット
64 X 192 ビット
1,536 X 8 ビット
XCV405E (EM)
140
17,920 ビット
64 X 280 ビット
2.240 X 8 ビット
XCV1600E
144
18,432 ビット
64 X 288 ビット
2,304 X 8 ビット
XCV2000E
160
20,480 ビット
128 X 160 ビット
2,560 X 8 ビット
XCV2600E
184
23,552 ビット
128 X 184 ビット
2,944 X 8 ビット
XCV3200E
208
26,624 ビット
128 X 208 ビット
3,328 X 8 ビット
XCV812E (EM)
280
35,840 ビット
128 X 280 ビット
4480 X 8 ビット
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き込み CAM
R
CAM の出力は、16 ビット ワンホット デコードされたアドレスと同じようにデコードされたアドレス
なので、ロジックを追加しなくても深さを拡張できます。各ロケーションには、1 個のアドレス ビット
出力があります。特定のアドレスにデータがある場合、対応するアドレス ラインが High になります。
データがない場合、アドレス ラインは Low になります。デコードされたアドレスの出力によって、複
数の比較、つまり、1 クロック サイクルで複数のロケーションにある同じデータを検出することができ
ます。書き込みモードは、16 ワード X 8 ビットのメモリ ブロックのいずれかに 8 ビットのデータを書
き込むことと同様です。
図 2 に、4 個の Block SelectRAM+ プリミティブで作成した 64 ワード X 8 ビットの CAM の読み出し
モードを示します。64 ビットのデコードされたアドレス バスは、4 個のデコードされた 16 ビット アド
レスをマージして生成されます。
8
8
8
8
CAM (16 × 8)
CAM (16 × 8)
CAM (16 × 8)
CAM (16 × 8)
MATCH [63:0]
DATA_MATCH [7:0]
[63:48]
64
[47:32]
[31:16]
[15:0]
CLK_MATCH
48
32
16
X204_02_091099
図 2: 読み出しモードの 64 ワード X 8 ビット CAM
書き込みモードでは、6 ビットのバスが 64 X 8 の CAM のアドレスとして使用されます。このアドレス
バスは、各 CAM16X8 のアドレス入力に対する 4 ビット バスと、いずれかの CAM ブロックを選択す
るためにデコードされる 2 ビット バスから構成されます。
8 ビットのデータを 64 のロケーション (6 ビット アドレス バス) のいずれかに書き込むには、6 ビット
アドレス バスの上位 2 ビットで 4 個の CAM16X8 ブロックのいずれかを選択します。最下位 4 ビット
は、各ブロックの通常のアドレス入力 ADDR[3:0] に接続されます。
デザインの幅も、AND ゲートを追加することで拡張できます。各 CAM16X8 には、合計で 8 ビットの
ワード幅のみが含まれています。2 個の CAM16X8 を使用すると 16 ビット幅が可能になり、8 ビット
は 1 番目の CAM16X8 ブロックに、残りの 8 ビットは 2 番目の CAM16X8 ブロックに格納されます。
データが検出されるのは、両方の 8 ビット ロケーションの内容と指定した 16 ビット データが一致する
場合のみです。それぞれの CAM の出力信号に 2 入力 AND ゲートを接続すると、最終的なデコードさ
れたアドレスが得られます。図 3 に、2 個の Block SelectRAM+ プリミティブで作成した読み出しモー
ドの 16 ワード X 16 ビット CAM を示します。
基本となる CAM16X8 マクロのアドレスはワンホット デコードされるので、CAM の深さと幅の両方を
同時に拡張して、入出力機能は同じままで必要なサイズの CAM を作成できます。
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
3
ブロック RAM を使用した高速読み出し/書き込み CAM
R
[15:8]
CAM (16 × 8)
[7:0]
CAM (16 × 8)
MATCH [15:0]
DATA_MATCH [15:0]
[15]
[15]
[15]
[1]
[0]
[0]
[15:0]
CLK_MATCH
[1]
[1]
[15:0]
[0]
X204_03_091099
図 3: 読み出しモードの 16 ワード X 16 ビット CAM
CAM16X8 ブロックをカスケードして最適な速度を達成するには、Virtex 列ごとの Block SelectRAM+
メモリの数を考慮しなければなりません。各 Virtex デバイスには、2 つの Block SelectRAM+ 列があり
ます。1 列のブロック数は、Virtex デバイスによって異なります。
表 2 に、
1 つの Virtex 列だけを使用して高速な組み込み型 CAM ブロックを作成した、いくつかの CAM
サイズを示します。
表 2: 一部の Virtex デバイスの CAM サイズ
Virtex デバイス 列ごとのブロック RAM の数
アプリケーション
列の数
列ごとの
CAM サイズ
列ごとの
CAM ブロック
XCV50
4
2
512 ビット
64 X 8 ビット
XCV50E
4
4
512 ビット
64 X 8 ビット
XCV300
8
2
1,024 ビット
128 X 8 ビット
XCV300
8
2
1,024 ビット
64 X 16 ビット
XCV300E
8
4
1,024 ビット
64 X 16 ビット
XCV405E
10
14
1,792 ビット
64 X 28 ビット
XCV812E
14
20
2,560 ビット
80 X 32 ビット
XCV1000
16
2
2,048 ビット
128 X 16 ビット
XCV1000
16
2
2,048 ビット
64 X 32 ビット
XCV1000E
16
6
2,048 ビット
64 X 32 ビット
XCV1600E
18
8
2,304 ビット
72 X 32 ビット
XCV2000E
20
8
2,560 ビット
80 X 32 ビット
組み込み型 CAM ブロックは、ネットワーク デザインやデータ処理など、多くのアプリケーションで役
立ちます。小規模な CAM は、瞬間的なプロトコル検出や並列処理の選択、ネットワークとルータの
フィルタ処理などを可能にします。
通常、複数プロトコル アプリケーションでは、1 つの入力データ ストリームに異なる扱いが必要になり
ます。選択は、そのデータ ヘッダにエンコードされているプロトコル タイプに基づいて行われます。組
み込み型 CAM は、可能な一連のプロトコルを検索することによって正しいプロトコルを 1 クロック サ
イクルで検出します。設計者は、これらのすべてのプロトコルを CAM ブロックに格納する必要があり
ます。また、このリストは、動的に変更できます。CAM 内にプロトコルが検出されると、対応するア
ドレスによって以後の動作が選択されます。
4
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き込み CAM
R
並列処理またはデータ認識にも、組み込み型 CAM ブロックを利用できます。一致するデータの検索は
1 クロック サイクルで行われるので、複数のデータが検出された場合でも、CAM ブロックによってこ
れらのアプリケーションを高速化できます。
大きいデータ幅を使用するアプリケーションでも、多くの場合、一部のデータ ビット (小さいデータ幅)
だけで十分 CAM ブロックを検索できます。データ全体は、ブロック RAM を接続して格納および検索
できます。Virtex デバイスの CAM ブロックは、サイズが拡張可能であり機能が柔軟なので、多くのソ
リューションを設計者に提供します。1 クロック サイクルで同時にアクセスしてデータを検索すること
によって、高速な結果が保証されます。
全般的な説明
Virtex のブロック RAM によるユニークなアプローチを使用して、CAM16X8 ブロックを作成します。
この手法は、Block SelectRAM+ メモリの True Dual-Port 機能に基づいています。ポート A と B は、
4096 ワード X 1 ビットから 256 ワード X 16 ビットの範囲で独立してコンフィギュレーションできま
す。各ポートには、別々のクロック入力および制御信号があります。Block SelectRAM+ メモリの内部
アドレス マッピングは、True Dual-Port ブロック RAM で CAM をデザインするための主要な特徴で
す。各ポートは、ポート幅に依存するアドレス指定方法を使用して、同じ 4096 のメモリ ロケーション
にアクセスします。特定の幅について物理的な RAM ロケーションをアドレス指定する方法は、アプリ
ケーション ノート XAPP130『Virtex Block SelectRAM+ の使い方』で詳しく説明されています。表 3
に、ポート幅が 1 ビットおよび 16 ビットの場合の低位アドレス マッピングを示します。
表 3: Block SelectRAM+ のポート アドレス マッピング
ポート アドレス
ポート幅
1
4095...
16
255...
15 14 13 12 11 10
9
8
7
6
5
4
3
2
1
0
00
このデザイン手法では、ポート A を 4096 ワード X 1 ビット幅、ポート B を 256 ワード X 16 ビット幅
としてコンフィギュレーションします。このコンフィギュレーションにおける Block SelectRAM+ プリ
ミティブを、RAMB4_S1_S16 と呼びます。各ポートには、独立した制御信号が含まれています。ポー
ト A は CAM の書き込みポート、ポート B は CAM の読み出しまたは比較ポートです。CAM の読み出
しポートと書き込みポートはどちらも完全な同期処理で、専用のクロックおよび制御信号があります。
ブロック RAM のデコードされた 8 ビット データ
8 ビットのデータでは、28 (256) 種類の値が可能です。従来の RAM の場合、8 ビット データは 8 ビッ
トのロケーションに格納されます。しかし、8 ビット データは、256 ビット ワードとしても表現できま
す。この場合、n 番目のロケーションだけが 1 で、他はすべて 0 になり、n はデコードされた 8 ビット
データによって与えられる位置に対応します。たとえば、データが 0000....0111 (10 進数の 7) である場
合、デコードされた 256 ビット ワードは 0000....000010000000 になり、0 から数えて 7 番目のロケー
ションが 1 になります。16 の 256 ビット ワードには、16 のデコードされた 8 ビット ワードを格納でき
ます。図 4 に示すように、16 X 256 のアレイは 0 から 15 までの 16 種類のアドレスを表します。
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
5
ブロック RAM を使用した高速読み出し/書き込み CAM
R
ADDR[3:0]
0
1
2
3
4
5
6
7
15
0
0
0
0
0
0
0
0
14 13 12 11 10 9
0 0 0 0 0 0
0
0
0
0
0
0
0
254
255
0
0
DATA[7:0]
ワンホット
デコードされた
8 ビット データ
8
0
7
0
6
0
5
0
4
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
x204_04_092299
図 4: CAM16X8 のポート アドレス マッピング
データの検索
ポート幅が 16 ビット (ポート B) の 4K ビット RAMB4_S1_S16 は、同時に 16 の値を生成します。図 5
で示されているように、検索される 8 ビット データ (DATA_MATCH) がポート B の 8 ビット アドレ
ス (ADDRB) に接続されいる場合、16 ビットのポート B で同時に比較が実行されます。デコードされた
8 ビット データに特定のロケーションが対応するので、比較動作は特定の 8 ビット データを 16 のロ
ケーションで同時に検索することと同じです。図 5 に、CAM のリード ポートとしてコンフィギュレー
ションした RAMB4_S1_S16 のポート B を示します。
RAMB4_S1_S16
ライト ポート (A)
(1 × 4096)
リード ポート (B)
(16 × 256)
DATA_MATCH[7:0]
CLK_MATCH
ADDRB
CLKB
DOB
MATCH [15:0]
X204_05_091699
図 5: SelectRAM+ ブロックの CAM16X8 の読み出しポート
CAM16X8 への読み出しの例
CAM16X8 のアドレス 0010 に 0000 0111 というデータが書き込まれている場合、ポート B のアドレス
入力 (ADDRB[7:0]) に 0000 0111 という 8 ビット データを設定してブロック RAM を読み出すと、比較
動作を行ったことになります。図 6 に示すように、ポート B の 16 ビット出力は「0000 0000 0000 0100」
になり、ロケーション 2 で一致が検出されたことを示します。ポート B の出力は、デコードされた CAM
のアドレス バスです。一致が検出されない場合、出力は「0000 0000 0000 0000」になります。1 つまた
は複数のデータが検出されると、対応する各ロケーションが「1」になります。この場合、複数の同じ 8
ビット データが異なるアドレスに格納されており、CAM16X8 の出力は複数の一致を表しています。
6
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き込み CAM
0
1
2
3
4
5
6
7
15
0
0
0
0
0
0
0
0
254
255
0
DATA_IN[7:0]
= "0000 0111"
アドレス ポート
読み出し:
14 13 12 11 10 9
0 0 0 0 0 0
0
0
0
0
0
0
0
R
8
0
7
0
6
0
0
5
0
4
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
0
2
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
MATCH[15:0]
= "0000 0000 0000 0100"
DATA_IN がアドレス 2 で
検出される
DATA_IN = "0000 0111"
MATCH[15:0] = "0000 0000 0000 0100" (一致が検出される)
x204_06_092299
図 6: CAM16X8 ブロックへの読み出しの例
CAM16X8 への書き込み
CAM の書き込みポートへの入力には、8 ビット データ バス、16 のロケーションをアドレスする 4 ビッ
ト アドレス バス、制御信号、およびクロックがあります。4 ビットのアドレス バスは、メモリのロケー
ションを選択します。このロケーションに新しいデータを書き込むことは、8 ビット データを 256 ビッ
トの ワン ホッ ト ワ ード にデ コー ドし て 256 ビ ット ワ ード を格 納す るこ とと 同じ です。し かし、
CAM16X8 マクロを 0 に初期化する場合、256 ビット ワード中の 1 ビットだけを 1 に切り替えなければ
なりません。1 にするロケーションは、ワンホット デコードされた 8 ビット値によって決定されます。
Block SelectRAM+ プリミティブのアドレス ポートがアドレス バスをデコードすることを考慮すると、
上記の 2 つの動作を組み合わせてブロック RAM への単純な書き込みにすることができます。
4096 X 1 としてコンフィギュレーションしたポート A には、1 ビットのデータ入力と 12 ビットのアド
レス入力があります。データ入力は 1 にアサートされ、8 ビットのデータおよび 4 ビットのアドレスは
1 個の 12 ビット アドレス入力になります。
8 ビット データを MSB 側、4 ビット アドレスを LSB 側に取った 12 ビット アドレス入力は、同時に 8
ビット データをデコードして 16 のメモリ ロケーションの 1 つを選択します。クロック エッジで、対応
するロケーションに「1」が格納されます。図 7 に、Block SelectRAM+ プリミティブによる CAM16X8
の書き込みポートを示します。
RAMB4_S1_S16
DATA_WRITE[7:0]
ADDR[3:0]
WRITE_ERASE
8
4
ライト ポート (A)
(1 × 4096)
DIA
12
ADDRA
DOA
N.C.
CLK_WRITE
リード ポート (B)
(16 × 256)
X204_07_091699
図 7: SelectRAM+ ブロックによる CAM16X8 の書き込みポート
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
7
ブロック RAM を使用した高速読み出し/書き込み CAM
R
データの消去
以前に格納したデータを消去するには、選択したロケーションを「0」に初期化しなければなりません
(256 ビット ワード)。基本的な選択肢は、アドレス入力の上位 8 ビットを 0 から 255 までインクリメン
トして 256 クロック サイクルで「0」を書き込むことです。アドレス入力の下位 4 ビットは固定されて
おり、CAM ロケーションの選択に使用されます。
参照用のデザインで提供されるソリューションで必要なのは、1 クロック サイクルだけです。消去動作
は、
「1」の代わりに「0」を格納すること以外は、書き込み動作と同様です。この場合も、ポート A の
アドレス入力は、消去する 8 ビット データと 4 ビットのアドレス バスの組み合わせです。正しく選択
するには、8 ビット データを独立した RAM ブロックに格納しなければなりません。参照用のデザイン
には、8 個の SelectRAM+ ブロック (8 個の LUT で 16 X 1 RAM) を使用して 16 ワードを格納する手法
が示されています。
CAM のデータを削除する消去モードのオン/オフは、任意に選択できます。消去モードをオンにした場
合は、速度と Virtex のスライス使用率が引き換えになります。
CAM16X8 のパフォーマンス
1 クロック サイクル中には、16 ビットのデコードされたアドレスが生成されます。CAM16X8 ブロック
の比較動作は、SelectRAM+ ブロックへの読み出し動作を行うだけで、パフォーマンスは読み出し動作
と同じです。書き込み動作では、SelectRAM+ の標準的な書き込みモードを使用します。SelectRAM+
のタイミング特性の詳細については、Virtex シリーズのデータシートを参照してください。図 8 に、
RAMB4_S1_S16 プリミティブで作成した CAM16X8 マクロの基本的なインプリメンテーションを示し
ます。
CAM (16 × 8)
RAMB4_S1_S16
DATA_WRITE[7:0]
ADDR[3:0]
ポート A (1× 4096)
8
4
12
ADDRA[11:0]
ERASE_WRITE
DINA[0]
WEA
ENA
WRITE_ENABLE
"0"
CLK_WRITE
RSTA
CLKA
DOA[0]
N.C.
ポート B (16 × 256)
"0000 ... 0000"
DATA_MATCH[7:0]
"0"
MATCH_ENABLE
MATCH_RST
CLK_MATCH
DINB[15:0]
ADDRB[7:0]
WEB
ENB
RSTB
CLKB
DOB[15:0]
MATCH [15:0]
X204_08_091699
図 8: RAMB4_S1_S16 プリミティブで作成した CAM16X8 マクロ
デザインの概要
このアプリケーション ノートで説明する参照用のデザインは、ワード幅を調節できます。基本となる
CAM16X8 マクロの出力は、1 クロック サイクルで生成されるデコードされたアドレスです。出力ライ
ンの数は、CAM のワード数です。これは 16 の倍数で、各 CAM16X8 マクロのワード数を表します。
この参照用のデザインは、エンコードされた出力アドレスを生成するモジュールの例を示しています。
VHDL コードの構造は階層的なので、設計者の要求に応じてさまざまなサイズの CAM にこのモジュー
ルを容易に使用でき、LUT と TBUF のインプリメンテーションを選択できます。デコードされたアド
レスをすべてワイド OR ゲートに接続すると、一致が検出されたときに 1 にアサートされる一致フラグ
を生成できます。
8
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き込み CAM
R
書き込み動作
この参照用のデザインは、消去と書き込みがそれぞれ 1 クロック サイクルで行われるソリューションを
インプリメントします。CAM に格納されるデータは、RAM16X1 プリミティブにも格納され、CAM を
消去するためにリードバックされます。図 9 に、書き込みと消去のコンフィギュレーションを示します。
書き込み/消去
DATA_IN[7:0]
書き込み
/消去
"1"
8
"0"
RAM_ERASE
8 × RAM16x1s
ADDR[3:0]
8
8
ADDR[3:0]
CLK
RAMB4_S1_S16
12
4
DIA[0]
ライト ポート A
(1 × 4096)
ADDRA[11:0]
CLK
4
リード ポート B
(16 × 256)
x204_09_091699
図 9: CAM16X8 の 1 クロック サイクルの消去と書き込み
読み出し動作
読み出しおよび比較動作は、ポート B で行われます。デコードされたアドレスは、LUT のフル ロジッ
ク インプリメンテーションまたはトライステート バッファの TBUF インプリメンテーションのいずれ
かでエンコードされます。
参照用のデザインの CAM16X8 マクロの出力では、一致信号を生成する方法と CAM のアドレス出力を
エンコードする方法が示されています。図 10 に、一致フラグを生成するワイド OR ゲートを接続した
CAM16X8 を示します。MATCH_SIGNAL は、1 つ以上のデータが検出されるとアサートされます。
16 ビットのデコードされたアドレス バス (MATCH) は、4 ビットのアドレス バス (MATCH_ADDR)
にエンコードされます。これは、1 個の一致が検出された場合のみ有効なアドレスを表します。参照用
のデザインには、1 個の一致が検出された場合に「1」にアサートされる追加信号を生成する方法が示さ
れています。
RAMB4_S1_S16
ライト ポート A
(1 × 4096)
リード ポート B
(16 × 256)
DOB[15:0]
8
DATA_IN[7:0]
16
16
ADDRB[7:0]
D Q
MATCH_SIGNAL
CLK
CLK
16
一致した場合は
2 進アドレス
(MATCH[15:0])
ENCODE
4
MATCH_ADDR [3:0]
x204_10_091699
図 10: 一致フラグとエンコードされた出力がある CAM16X8
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
9
ブロック RAM を使用した高速読み出し/書き込み CAM
R
Virtex Block
SelectRAM +
プリミティブに
よる CAM16X8 の
デザイン
このアプリケーション ノートと参照用のデザイン ファイル XAPP204.zip を使用すると、読み出しと書
き込みが高速な CAM モジュールをインプリメントできます。VHDL コードまたは Verilog コードに
よって、この例を特定のアプリケーションに適用できる可能性が広がります。
特徴
• 高速な 1 クロック サイクルの比較 (読み出し)
• 高速な 1 クロック サイクルの書き込みと消去
• CAM16X8 マクロの数を定義するジェネリックな nb_cam16X8s。CAM の深さは、16 の倍数で
す。デザインに必要な Virtex デバイスの数は、Block SelectRAM+ メモリの数によって決まりま
す (表 1 参照)。
•
nb_cam16X8s に直接接続されているアドレス ラインの数を定義するジェネリックな
addr_width。たとえば、32 ワードの CAM では 5 本のアドレス ラインが、64 ワードの CAM で
は 6 本のアドレス ラインが必要になります。
基本的な構成要素 : CAM
基本的な構成要素である CAM16X8 は、全般的な説明で示したように Block SelectRAM+ プリミティ
ブに基づいています。このデザインでは、書き込みポートと読み出しポート (DATA_IN[7:0]) の両方
で 1 個の 8 ビット データ バスだけが使用されており、どちらのポートも同じクロックを共有します。
Block SelectRAM+ プリミティブをインスタンシエートする VHDL コードまたは Verilog コードは
Init_RAMB4_S1_S16 という名前で、初期化の例を提供します。デフォルトでは CAM は空で、0 に初
期化されます。
この 1 番目のモジュールに接続される 2 番目の基本的な構成要素は、Init_8_RAM16X1s です。このモ
ジュールは標準的な RAM に 16 ワードを格納する 8 個の RAM16X1 プリミティブをインスタンシエー
トし、参照用のデザインでは CAM16X8 のロケーションを 1 クロック サイクルで消去するために使用
されています。
Init_RAMB4_S1_S16 モジュールの場合と同じように、VHDL コードまたは Verilog コー
ドは初期化を提供します (デフォルトですべて 0)。正しく動作させるには、両方のモジュールを同じデー
タで初期化する必要があります。
CAM_RAMB4 モジュールは、上記の 2 個のモジュールをインスタンシエートして完全な構成要素を作
成します。CAM_RAMB4 は、1 クロック サイクルでデータを検索でき、2 クロック サイクルで消去と
書き込みを行うことができます。この VHDL モジュールまたは Verilog モジュールは、どの HDL デザ
インでも構成要素として使用できます。
図 11 に、1 個の SelectRAM+ ブロックと 8 個の RAM16X1s から作成した CAM_RAMB4 モジュール
を示します。このインプリメンテーションでは、書き込む DATA_IN と消去する DATA_WRITE の間
にマルチプレクサがあります(図 9 を参照してください)。初めのクロック サイクルは消去モードなので、
古いデータが Init_8_RAM16X1s の出力 DATA_WRITE から読み込まれます。これは、入力 ADDRA
の上位 8 ビットのアドレスになります。新しいデータ (DATA_IN) は、Init_8_RAM16X1s に書き込ま
れ、出力 DATA_WRITE に反映されます。2 番目のクロック サイクルは書き込みサイクルで、新しい
データは上位 8 ビットのアドレスとして自動的に使用されます。図 12 を参照してください。入力
ADDR[3:0] は 2 クロック サイクルの間は変更されず、最下位 4 ビットのアドレスとして使用されます。
10
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き込み CAM
R
CAM_RAMB4
INIT_8_RAM16x1s
WRITE_RAM
WRITE_RAM
ADDR
ADDR[3:0]
DATA_IN[7:0]
DATA_IN
CLK
DATA_WRITE
INIT_RAMB4_S1_S16
8
12
4
ADDRA
ADDR_WRITE
DIA
ERASE_WRITE
WRITE_ENABLE
WEA
ENA
8
MATCH_ENABLE
ADDRB
ENB
RSTB
MATCH_RST
CLK
DOB
MATCH [15:0]
CLK
X204_11_092299
図 11: 1 個の Block SelectRAM+ メモリと 8 個の RAM16X1s による 16 ワード X 8 ビットの CAM
(RAM16x1s に書き込む
新しいデータ)
新
DATA_IN[7:0]
(RAMB4 に書き込み)
ADDR[3:0]
WRITE_ENABLE
ERASE_WRITE
WRITE_RAM
(RAM16x1s に書き込み)
CLK
内部バス
ADDR_WRITE
消去
書き込み
DATA_WRITE
旧
新
x204_12_092199
図 12: 消去と書き込みの波形
モジュール :CAM_generic_8s
必要なサイズの CAM を作成するには、複数の CAM_RAMB4 を図 13の CAM_generic_8s モジュール
でインスタンシエートします。CAM の深さは nb_cam16X8s というジェネリックな値で、使用する
CAM16X8s の数を定義します。CAM の深さは、16 の倍数です。1 個の CAM_RAMB4 につき、4 ビッ
トの エンコードされたアドレス出力が 1 つずつ必要になります。ジェネリック値 addr_width は、CAM
の幅に対応します。32 ワードの CAM では 5 本のアドレス ラインが、64 ワードの CAM では 6 本のア
ドレス ラインが必要に なります。MATCH バス (CAM_RAMB4 の 出力) は、一致アドレス出力
MATCH_ADDR と MATCH_OK 信号 (一致が検出された場合に High) の両方を生成するためにエン
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
11
ブロック RAM を使用した高速読み出し/書き込み CAM
R
コードされます。このモジュールは、XAPP203 の参照用のデザイン (CAM_generic_word モジュール)
に似ています。XAPP203 の参照用のデザインでは、基本となる構成要素が SelectRAM+ ブロックでは
なく Virtex スライスに基づいています。どちらの場合も基本モジュールの CAM の深さは 16 ワードで、
エンコーダ モジュールと最上位デザインを共有しています。
CAM_generic_8s (読み出しモード)
CAM_RAMB4
(ジェネリック: nb_cam_16x8s)
ENCODE_4_LSB
DATA_IN [7:0]
4
MATCH_OK
ADDR
BINARY_ADDR
MATCH_ADDR
R_MATCH_ADDR
(ジェネリック: addr_width)
D Q
R_MATCH_OK
4
BINARY_ADDR
MATCH_OK
BINARY_ADDR
MATCH_OK
ADDR
INST_2
MATCH
16
FF
D Q
ADDR_LSB_1
INST_1
MATCH
16
ENCODE_X_MSB
ADDR_LSB_0
BINARY_ADDR
_X
_2
CAM_RAMB4_1
CAM_RAMB4_0
16
ADDR
INST_0
MATCH
4
ADDR_LSB_2
BINARY_ADDR
CLK
MATCH_OK
BINARY_ADDR
MATCH_ENABLE
x (nb_cam_16x8s)
MATCH_RST
x204_13_091699
図 13: CAM_generic_8s の読み出しパス
モジュール :CAM_top
このモジュールは、ジェネリックな CAM の最上位ラッパーです (図 14)。すべての入力および出力信号
を登録します。
CAM_Top
CAM_generic_8s
(ジェネリック: nb_cam_16x8s)
FF
I_DATA_IN [7:0]
DATA_IN
CLK
FF
I_ADDR
(ジェネリック: addr_width)
FF
MATCH_ADDR
ADDR
CLK
FF
FF
I_WRITE_ENABLE
MATCH_OK
WRITE_ENABLE
CLK
0_MATCH_OK
CLK
FF
I_MATCH_ENABLE
FF
ADDR_VALID
MATCH_ENABLE
CLK
CLK
I_MATCH_RST
MATCH_RST
I_CLK
(オプション)
DLL
BUFGDLL
GLOBAL_RST
0_MATCH_ADDR
(ジェネリック: addr_width)
CLK
0_ADDR_VALID
(オプション)
CLK
グローバル非同期リセット
x204_14_092299
図 14: CAM デザインの最上位レベル ブロック図
12
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き込み CAM
R
ピン配置 :(I_XXX 信号はすべて入力、O_XXX はすべて出力)
• I_DATA_IN は、読み出し動作と書き込み動作の両方で使用する 8 ビットのデータ入力バスです。
• I_ADDR は、選択したロケーションに新しいデータを書き込むためにのみ使用するジェネリック
な入力アドレス バスです。
•
•
•
•
•
•
I_WRITE_ENABLE は、2 クロック サイクルのアクティブ High 信号です (消去してから書き込み)。
I_MATCH_ENABLE は、読み出しアクセスをイネーブルにします (アクティブ High)。
I_CLK は、クロックです。オプションとして、DLL を通して配線できます。
O_MATCH_ADDR は、読み出しモードのみで有効なジェネリックな出力アドレスです。
O_MATCH_OK は、データが検出されると High になります (読み出し動作)。
O_ADDR_VALID は、複数のデータが検索された場合のオプションの信号です。1 つのデータが
検出された場合は、アクティブ High です。
この参照用のデザインを合成するときは、その後のフロアプランのために階層を維持し、スタティック
タイミング解析を行うとよいでしょう。クロック周期は、制約ファイル (UCF) で定義します。パフォー
マンスを最適化するには、各 Block SelectRAM+メモリのロケーションを 1 列に、8 個の RAM16X1s プ
リミティブを隣接するスライス列に配置するよう、UCF ファイルで制約します。
この参照用のデザインは、幅が異なる CAM にも容易に適合できます。たとえば、4 つの CAM16X8 マ
クロから 16 ワード X 32 ビット の CAM を作成できます。この CAM に 16 個の 4 入力 AND ゲートを
追加すると、16 LUT に収まるような全体的にデコードされたアドレスが生成されます。
おわりに
Virtex Block SelectRAM+ のユニークな True Dual-Port 機能によって、高速な組み込み型 CAM をイ
ンプリメントする革新的な手法が可能になります。複数のマクロをカスケードして深さや幅がより大き
い CAM ブロックを作成した場合でも、CAM16X8 マクロは 1 クロック サイクルの ワンホット デコー
ドされたアドレスを提供します。基本となる CAM16X8 マクロはサイズが小さいので (16 ワード X 8
ビット)、CAM のサイズを柔軟に選択できます。
参照用のデザインは、エンコードされたアドレス出力、一致フラグ、高速な読み出しアクセス、高速な
2 クロック サイクルの消去/書き込みアクセスが含まれる完全なソリューションを示しています。CAM
の深さを拡張できるので、真の柔軟性が得られます。
CAM は、メモリ データの検索を高速にします。CAM ベースのアプリケーションにはさまざまな必要
条件があるので、ソリューションは柔軟でなければなりません。Block SelectRAM+ によるソリューショ
ンの他にも、Virtex ファミリのスライスに基づくアプローチとして XAPP202『ATM アプリケーション
CAM (Content Adderssable Memory)』と XAPP203『Virtex ファミリ FPGA による柔軟で高速な
CAM のデザイン』があります。
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
13
ブロック RAM を使用した高速読み出し/書き込み CAM
R
付録 A :
合成可能な VHDL コードと Verilog コードの参照用のデザイン
付録 A では、ワード幅が 8 ビットでメモリの深さがパラメータ化された CAM を Virtex デバイスでイ
ンプリメントする階層的で合成可能なデザインを示します。完全な VHDL コードと Verilog コードは、
参照用のデザインとして用意されています (ファイル : xapp204.zip または xapp204.tar.z)。
モジュール :CAM_top.vhd
---
Module:
CAM_Top / Top Level
--
Design:
CAM_Top
--
VHDL code:
--
Hierarchical wrapper
Instantiate CAM_generic_8s (depth variable by 16X8bits word)
---
Synthesis Synopsys FPGA Express ver.3.2 - Option = Preserve Hierarchy
--
Use of "pragma synthesis_off/on" and attributes
---
Description:Instantiate a CAM implementation
--
Registered inputs and outputs (CAM internal timing analysis)
---
Device:
VIRTEX Families
---
Created by:Jean-Louis BRELET / XILINX - VIRTEX Applications
--
Date:July 29, 1999
--
Version: 1.0
---
History:
--
1.
--- Disclaimer:THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY
-- WHATSOEVER AND XILINX SPECIFICALLY DISCLAIMS ANY
-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.
---
Copyright (c) 1999 Xilinx, Inc.
All rights reserved.
---------------------------------------------------------------
モジュール :CAM_generic_word.vhd
--- Module:
CAM_generic_8s
-- Design:
CAM_Top
-- VHDL code: Hierarchical RTL
14
--
Instantiate CAM_RAMB4
--
Instantiate INIT_RAMB4_S1_S16
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き込み CAM
R
--
Instantiate INIT_8_RAM16X1s
--
Instantiate ENCODE_4_LSB
--
Instantiate DECODE_X
--
Instantiate ENCODE_X_MSB
--
Choice the right ENCODE and DECODE modules according to the
number of CAM16X8s
--
If "nb_cam16X8s" = 2 then ENCODE_1_MSB and DECODE_1 must be
used:1 bit to decode 2 CAM16X8s
--
If "nb_cam16X8s" = 4 then ENCODE_2_MSB and DECODE_2 must be
used:2 bits to decode 4 CAM16X8s
--
If "nb_cam16X8s" = 8 then ENCODE_3_MSB and DECODE_3 must be
used:3 bits to decode 8 CAM16X8s
--
If "nb_cam16X8s" = 16 then ENCODE_4_MSB and DECODE_4 must be
used:4 bits to decode 16 CAM16X8s
--
Note:Configuration is not supported by synthesis tools
--- Synthesis Synopsys FPGA Express ver.3.2 - Option = Preserve Hierarchy
--
Use of "pragma synthesis_off/on" and attributes
--- Description:Instantiate "nb_cam16X8s" CAM_RAMB4 (see generic)
--
"nb_cam16X8s" X 16 words depth X 8 bits width
--
1 clock cycle Read (or Match),
--
2 clock cycles Write (Erase on the first clock then Store on the second)
--
If only 1 clock cycle => Erase Only.
--
MATCH_OK indicates one or more matches is/are found.
--
MATCH_ADDR ouput the address of the match, if ONLY ONE is found
--
ADDR_VALID indicates when MATCH_ADDR is a valid address (Optional)
--- Device:VIRTEX Families
--
modules CAM_RAMB4 fits in 1 BlockRAM column (+ CLB)
--
If "nb_cam16X8s" = 4 then CAM64X8s (fits in 1 XCV50 BlockRam Column)
--
If "nb_cam16X8s" = 8 then CAM128X8s (fits in 1 XCV300 BlockRam Column)
--
If "nb_cam16X8s" = 16 then CAM256X8s (fits in 1 XCV1000 BlockRam Column)
...
---------------------------------------------------------------
モジュール :CAM_RAMB4.vhd
--- Module:
CAM_RAMB4
-- Design:
CAM_Top
-- VHDL code:
Hierarchical RTL
--
Instantiate INIT_RAMB4_S1_S16
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
15
ブロック RAM を使用した高速読み出し/書き込み CAM
R
--
Instantiate INIT_8_RAM16X1s
--- Synthesis
Synopsys FPGA Express ver. 3.2
--
Use of "pragma synthesis_off/on" and attributes
--- Description:Basic building block of a CAM using Select BlockRAM
--
16 words depth X 8 bits width
--
1 clock Read (or Match),
2 clock Write (Erase on the first clock then Store on the second)
--
If NO match is found the output MATCH<15:0> = "0000000000000000"
--
MATCH bus gives on 16 signals a binary address.
--
Initialized RAM16X1s and RAMB4 in low level module
--- Device:
VIRTEX Families
...
---------------------------------------------------------------
モジュール :INIT_RAMB4_S1_S16.vhd
--- Module:
INIT_RAMB4_S1_S16
-- Design:
CAM_Top
-- VHDL code: VIRTEX primitives instantiation
--- Synthesis Synopsys FPGA Express ver. 3.2
--
Use of "pragma synthesis_off/on" and attributes
--- Description:
Basic building block of a CAM using Select BlockRAM
--
16 words depth X 8 bits width
--
Instantiation RAMB4_S1_S16
--
Initialization of RAMB4:attributes to constraint PAR and
simulation
--- Device:
VIRTEX Families
--
1 RAMB4
...
---------------------------------------------------------------
モジュール :INIT_8_RAM16X1s.vhd
--- Module:
INIT_8_RAM16X1s
-- Design:
CAM_Top
-- VHDL code: VIRTEX primitives instantiation
16
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
ブロック RAM を使用した高速読み出し/書き込み CAM
R
--- Synthesis Synopsys FPGA Express ver. 3.2
--
Use of "pragma synthesis_off/on" and attributes
--- Description:Basic building block of a CAM using Select BlockRAM & SelectRAM
--
Instantiate 8 RAM16X1s_1 for ERASE operation
--
Initialization of RAM16X1s:attributes to constraint PAR and simulation
--- Device:
VIRTEX Families
--
8 X SelectRAM16X1s_1
...
---------------------------------------------------------------
モジュール :ENCODE_4_LSB.vhd
---------------
Module:
ENCODE_4_LSB
Design:
CAM_Top
VHDL code: RTL / Combinatorial
Synthesis Synopsys FPGA Express ver. 3.2
Use of "pragma synthesis_off/on" and attributes
Description:Encode a 16 bits binary address into 4 bits and find if a
match occurs
if BINARY_ADDR = "0000000000100000" => MATCH_ADDR = "0101"/ MATCH_OK = 1
Optional ADDR_VALID = 1 when only one Match (If simultaneous matches can
occur)
However, the ADDR_VALID generation double the size of the combinatorial
logic !
if no match found => MATCH_OK = 0 / ADDR_VALID = 0
(MATCH_ADDR is not a valid address)
if 2 or more matches found => MATCH_OK = 1 / ADDR_VALID = 0
(MATCH_ADDR is not valid address)
--- Device:
Virtex Families
-- ...
---------------------------------------------------------------
モジュール :ENCODE_4_MSB.vhd
このモジュールは、1 ビットの ENCODE_1_MSB (CAM 32 ワード)、2 ビットの ENCODE_2_MSB
(CAM 64 ワード)、3 ビットの ENCODE_3_MSB (CAM 128 ワード)、4 ビットの ENCODE_4_MSB
(CAM 256 ワード) で使用できます。このモデルに従えば、深さが異なる CAM についてのモジュール
も容易に作成できます。
--- Module:
ENCODE_4_MSB
-- Design:
CAM_Top
-- VHDL code: RTL / Combinatorial
--- Synthesis Synopsys FPGA Express ver. 3.2
-Use of "pragma synthesis_off/on" and attributes
--
XAPP204 (v1.2) 2000 年 5 月 2 日
www.xilinx.co.jp
17
ブロック RAM を使用した高速読み出し/書き込み CAM
R
-- Description:Encode a 16 bits binary address into 4 bits, map with the LSB
address and find if a match occurs
-if BINARY_ADDR = "0000000000100000" => MATCH_ADDR = "0101"/ MATCH_OK = 1
-Optional ADDR_VALID = 1 when only one Match
(If simultaneous matches can occur)
-However, the ADDR_VALID generation double the size of the
combinatorial logic !
-if no match found => MATCH_OK = 0 / ADDR_VALID = 0
(MATCH_ADDR is not a valid address)
-if 2 or more matches found => MATCH_OK = 1 / ADDR_VALID = 0
(MATCH_ADDR is not valid address)
--Choice between GATES ONLY implementation or BUFT
implementation.(See comments)
-Note:synthesis tools do not support Configuration
--- Device:
Virtex Families
-- ...
---------------------------------------------------------------
モジュール :DECODE_4.vhd
このモジュールは、1 ビットの DECODE_1 (CAM 32 ワード)、2 ビットの DECODE_2 (CAM 64 ワー
ド)、3 ビットの DECODE_3 (CAM 128 ワード)、4 ビットの DECODE_4 (CAM 256 ワード) で使用で
きます。このモデルに従えば、深さが異なる CAM についてのモジュールも容易に作成できます。
--- Module:
DECODE_4
-- Design:
CAM_Top
-- VHDL code: RTL / Combinatorial
--- Synthesis Synopsys FPGA Express ver. 3.2
-Use of "pragma synthesis_off/on" and attributes
--- Description:Decode 4 bits address into 16 binary bits
-Generate an ENABLE bus
--- Device:
Virtex Families
-- ...
--------------------------------------------------------------同様のモジュール ENCODE_3_MSB、ENCODE_2_MSB、ENCODE_1_MSB、DECODE_4、
DECODE_3、DECODE_2、DECODE_1 が参照用のデザイン ファイルに含まれています。
付録 A の終わり
改訂履歴
次の表に、このドキュメントの改訂履歴を示します。
日付
18
バージョン
改訂内容
9/23/99
1.0
初期リリース
10/1/99
1.1
いくつかのテキストの修正
5/2/00
1.2
Virtex-E 拡張メモリ用にアップデート
www.xilinx.co.jp
XAPP204 (v1.2) 2000 年 5 月 2 日
Fly UP