ブロッ ク RAM を使用した高速読み出し/書き込み CAM - Xilinx
ブロッ ク RAM を使用した高速読み出し/書き込み CAM - Xilinx
ブロッ ク RAM を使用した高速読み出し/書き込み CAM - Xilinx
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
R<br />
XAPP204 (v1.2) 2000 年 5 月 2 日<br />
概要 <strong>CAM</strong> (Content Addressable Memory) を使用すると、データの検索速度が向上します。データの編成<br />
と読み出し/<strong>書き込み</strong>速度についての必要条件は、アプリケーションによって異なります。このアプリ<br />
ケーション ノートで説明する革新的なデザインは、高速な比較と<strong>書き込み</strong>を必要とする小規模な組み込<br />
み型 <strong>CAM</strong> に適しています。参照用のデザインは、Virtex FPGA の True Dual-Port Block<br />
Select<strong>RAM</strong>+ 機能を使用して作成されています。アプリケーション ノート XAPP201『Virtex デバイス<br />
における各種の <strong>CAM</strong> デザインの概要』では、<strong>CAM</strong> をインプリメントするときに利用できる各種のソ<br />
リューションについて触れ、このアプリケーション ノートで説明するソリューションを紹介しています。<br />
はじめに このアプリケーション ノートで説明する革新的なデザイン手法を使用すると、Virtex デバイスに組み込<br />
まれている Block Select<strong>RAM</strong>+ メモリを深さが 16 ワード、幅が 8 ビット (16 X 8) の <strong>CAM</strong> として使<br />
用できます。参照用のデザイン (付録 A 参照) として、16 X 8 の <strong>CAM</strong> としてコンフィギュレーションし<br />
た複数の<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> をカスケードできる、パラメータ化可能な Verilog コードと VHDL コードが提<br />
供されています。1 または 2 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの<strong>書き込み</strong>と 1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの比較 (読み出し) の場<br />
合、<strong>CAM</strong> の速度は Virtex の<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> のア<strong>ク</strong>セス時間と等しくなります。<br />
中規模サイズの <strong>CAM</strong> は、異なるデザイン手法によって Virtex スライスでインプリメントできます。<br />
Virtex デバイスで <strong>CAM</strong> をデザインする 3 つの方法、および <strong>CAM</strong> のサイズと速度の比較については、<br />
XAPP201 を参照してください。<br />
<strong>CAM</strong>16X8 マ<strong>ク</strong>ロ<br />
アプリケーション ノート: Virtex シリーズ<br />
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/書き<br />
込み <strong>CAM</strong><br />
著者 : Jean-Louis Brelet<br />
<strong>CAM</strong>16X8 には、次のような特徴があります。<br />
• 128 ビット<br />
16 ワード X 8 ビットの構成<br />
比較 (読み出し) と<strong>書き込み</strong>のデータ入力バスが独立<br />
デコードされたアドレス出力 (16 ビット ワンホット デコードされたアドレス)<br />
完全な同期比較ポート (読み出しポート)<br />
完全な同期<strong>書き込み</strong>ポート<br />
1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの比較 (1 つまたは複数の比較)<br />
1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの<strong>書き込み</strong> (および 1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの消去)<br />
比較イネーブル入力<br />
<strong>書き込み</strong>イネーブル入力<br />
<strong>書き込み</strong>または消去モード (<strong>書き込み</strong>の場合は 1、消去の場合は 0 にアサート)<br />
比較リセット ポート (出力バスを同期して強制的にゼロに設定)<br />
カスケード可能<br />
デバイス コンフィギュレーション時に初期化 (デフォルトは空)<br />
1 個の Virtex Block Select<strong>RAM</strong>+ メモリにフィット<br />
図 1 に、True Dual-Port Block Select<strong>RAM</strong>+ メモリに組み込まれている <strong>CAM</strong>16X8 マ<strong>ク</strong>ロを示します。<br />
<strong>書き込み</strong>ポート A は、読み出しポート B から独立しています。どちらのポートも、それぞれの<strong>ク</strong>ロッ<br />
<strong>ク</strong>に対して完全に同期が取られています。<br />
© 2000 <strong>Xilinx</strong>, Inc. All rights reserved.<strong>Xilinx</strong> のすべての商標、登録商標、特許、免責事項は、<br />
http://www.xilinx.co.jp/legal.htm に記載されています。他のすべての商標および登録商標は、それぞれの所有者に属します。<br />
XAPP204 (v1.2) 2000 年 5 月 2 日 www.xilinx.co.jp 1
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/<strong>書き込み</strong> <strong>CAM</strong><br />
並列処理またはデータ認識にも、組み込み型 <strong>CAM</strong> <strong>ブロッ</strong><strong>ク</strong>を利用できます。一致するデータの検索は<br />
1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルで行われるので、複数のデータが検出された場合でも、<strong>CAM</strong> <strong>ブロッ</strong><strong>ク</strong>によってこ<br />
れらのアプリケーションを高速化できます。<br />
大きいデータ幅を使用するアプリケーションでも、多くの場合、一部のデータ ビット (小さいデータ幅)<br />
だけで十分 <strong>CAM</strong> <strong>ブロッ</strong><strong>ク</strong>を検索できます。データ全体は、<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> を接続して格納および検索<br />
できます。Virtex デバイスの <strong>CAM</strong> <strong>ブロッ</strong><strong>ク</strong>は、サイズが拡張可能であり機能が柔軟なので、多くのソ<br />
リューションを設計者に提供します。1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルで同時にア<strong>ク</strong>セスしてデータを検索すること<br />
によって、高速な結果が保証されます。<br />
全般的な説明 Virtex の<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> によるユニー<strong>ク</strong>なアプローチを使用して、<strong>CAM</strong>16X8 <strong>ブロッ</strong><strong>ク</strong>を作成します。<br />
この手法は、Block Select<strong>RAM</strong>+ メモリの True Dual-Port 機能に基づいています。ポート A と B は、<br />
4096 ワード X 1 ビットから 256 ワード X 16 ビットの範囲で独立してコンフィギュレーションできま<br />
す。各ポートには、別々の<strong>ク</strong>ロッ<strong>ク</strong>入力および制御信号があります。Block Select<strong>RAM</strong>+ メモリの内部<br />
アドレス マッピングは、True Dual-Port <strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> で <strong>CAM</strong> をデザインするための主要な特徴で<br />
す。各ポートは、ポート幅に依存するアドレス指定方法を使用して、同じ 4096 のメモリ ロケーション<br />
にア<strong>ク</strong>セスします。特定の幅について物理的な <strong>RAM</strong> ロケーションをアドレス指定する方法は、アプリ<br />
ケーション ノート XAPP130『Virtex Block Select<strong>RAM</strong>+ の使い方』で詳しく説明されています。表 3<br />
に、ポート幅が 1 ビットおよび 16 ビットの場合の低位アドレス マッピングを示します。<br />
表 3: Block Select<strong>RAM</strong>+ のポート アドレス マッピング<br />
ポート幅 ポート アドレス<br />
1 4095... 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0<br />
16 255... 00<br />
このデザイン手法では、ポート A を 4096 ワード X 1 ビット幅、ポート B を 256 ワード X 16 ビット幅<br />
としてコンフィギュレーションします。このコンフィギュレーションにおける Block Select<strong>RAM</strong>+ プリ<br />
ミティブを、<strong>RAM</strong>B4_S1_S16 と呼びます。各ポートには、独立した制御信号が含まれています。ポー<br />
ト A は <strong>CAM</strong> の<strong>書き込み</strong>ポート、ポート B は <strong>CAM</strong> の読み出しまたは比較ポートです。<strong>CAM</strong> の読み出<br />
しポートと<strong>書き込み</strong>ポートはどちらも完全な同期処理で、専用の<strong>ク</strong>ロッ<strong>ク</strong>および制御信号があります。<br />
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> のデコードされた 8 ビット データ<br />
8 ビットのデータでは、2 8 (256) 種類の値が可能です。従来の <strong>RAM</strong> の場合、8 ビット データは 8 ビッ<br />
トのロケーションに格納されます。しかし、8 ビット データは、256 ビット ワードとしても表現できま<br />
す。この場合、n 番目のロケーションだけが 1 で、他はすべて 0 になり、n はデコードされた 8 ビット<br />
データによって与えられる位置に対応します。たとえば、データが 0000....0111 (10 進数の 7) である場<br />
合、デコードされた 256 ビット ワードは 0000....000010000000 になり、0 から数えて 7 番目のロケー<br />
ションが 1 になります。16 の 256 ビット ワードには、16 のデコードされた 8 ビット ワードを格納でき<br />
ます。図 4 に示すように、16 X 256 のアレイは 0 から 15 までの 16 種類のアドレスを表します。<br />
XAPP204 (v1.2) 2000 年 5 月 2 日 www.xilinx.co.jp 5<br />
R
R<br />
Virtex Block<br />
Select<strong>RAM</strong> +<br />
プリミティブに<br />
よる <strong>CAM</strong>16X8 の<br />
デザイン<br />
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/<strong>書き込み</strong> <strong>CAM</strong><br />
このアプリケーション ノートと参照用のデザイン ファイル XAPP204.zip を使用すると、読み出しと書<br />
き込みが高速な <strong>CAM</strong> モジュールをインプリメントできます。VHDL コードまたは Verilog コードに<br />
よって、この例を特定のアプリケーションに適用できる可能性が広がります。<br />
特徴<br />
高速な 1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの比較 (読み出し)<br />
高速な 1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの<strong>書き込み</strong>と消去<br />
<strong>CAM</strong>16X8 マ<strong>ク</strong>ロの数を定義するジェネリッ<strong>ク</strong>な nb_cam16X8s。<strong>CAM</strong> の深さは、16 の倍数で<br />
す。デザインに必要な Virtex デバイスの数は、Block Select<strong>RAM</strong>+ メモリの数によって決まりま<br />
す (表 1 参照)。<br />
nb_cam16X8s に直接接続されているアドレス ラインの数を定義するジェネリッ<strong>ク</strong>な<br />
addr_width。たとえば、32 ワードの <strong>CAM</strong> では 5 本のアドレス ラインが、64 ワードの <strong>CAM</strong> で<br />
は 6 本のアドレス ラインが必要になります。<br />
基本的な構成要素 : <strong>CAM</strong><br />
基本的な構成要素である <strong>CAM</strong>16X8 は、全般的な説明で示したように Block Select<strong>RAM</strong>+ プリミティ<br />
ブに基づいています。このデザインでは、<strong>書き込み</strong>ポートと読み出しポート (DATA_IN[7:0]) の両方<br />
で 1 個の 8 ビット データ バスだけが使用されており、どちらのポートも同じ<strong>ク</strong>ロッ<strong>ク</strong>を共有します。<br />
Block Select<strong>RAM</strong>+ プリミティブをインスタンシエートする VHDL コードまたは Verilog コードは<br />
Init_<strong>RAM</strong>B4_S1_S16 という名前で、初期化の例を提供します。デフォルトでは <strong>CAM</strong> は空で、0 に初<br />
期化されます。<br />
この 1 番目のモジュールに接続される 2 番目の基本的な構成要素は、Init_8_<strong>RAM</strong>16X1s です。このモ<br />
ジュールは標準的な <strong>RAM</strong> に 16 ワードを格納する 8 個の <strong>RAM</strong>16X1 プリミティブをインスタンシエー<br />
トし、参照用のデザインでは <strong>CAM</strong>16X8 のロケーションを 1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルで消去するために使用<br />
されています。Init_<strong>RAM</strong>B4_S1_S16 モジュールの場合と同じように、VHDL コードまたは Verilog コー<br />
ドは初期化を提供します (デフォルトですべて 0)。正しく動作させるには、両方のモジュールを同じデー<br />
タで初期化する必要があります。<br />
<strong>CAM</strong>_<strong>RAM</strong>B4 モジュールは、上記の 2 個のモジュールをインスタンシエートして完全な構成要素を作<br />
成します。<strong>CAM</strong>_<strong>RAM</strong>B4 は、1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルでデータを検索でき、2 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルで消去と<br />
<strong>書き込み</strong>を行うことができます。この VHDL モジュールまたは Verilog モジュールは、どの HDL デザ<br />
インでも構成要素として使用できます。<br />
図 11 に、1 個の Select<strong>RAM</strong>+ <strong>ブロッ</strong><strong>ク</strong>と 8 個の <strong>RAM</strong>16X1s から作成した <strong>CAM</strong>_<strong>RAM</strong>B4 モジュール<br />
を示します。このインプリメンテーションでは、書き込む DATA_IN と消去する DATA_WRITE の間<br />
にマルチプレ<strong>ク</strong>サがあります(図 9 を参照してください)。初めの<strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルは消去モードなので、<br />
古いデータが Init_8_<strong>RAM</strong>16X1s の出力 DATA_WRITE から読み込まれます。これは、入力 ADDRA<br />
の上位 8 ビットのアドレスになります。新しいデータ (DATA_IN) は、Init_8_<strong>RAM</strong>16X1s に書き込ま<br />
れ、出力 DATA_WRITE に反映されます。2 番目の<strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルは<strong>書き込み</strong>サイ<strong>ク</strong>ルで、新しい<br />
データは上位 8 ビットのアドレスとして自動的に使用されます。図 12 を参照してください。入力<br />
ADDR[3:0] は 2 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの間は変更されず、最下位 4 ビットのアドレスとして使用されます。<br />
10 www.xilinx.co.jp XAPP204 (v1.2) 2000 年 5 月 2 日
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/<strong>書き込み</strong> <strong>CAM</strong><br />
ピン配置 :(I_XXX 信号はすべて入力、O_XXX はすべて出力)<br />
I_DATA_IN は、読み出し動作と<strong>書き込み</strong>動作の両方で使用する 8 ビットのデータ入力バスです。<br />
I_ADDR は、選択したロケーションに新しいデータを書き込むためにのみ使用するジェネリッ<strong>ク</strong><br />
な入力アドレス バスです。<br />
I_WRITE_ENABLE は、2 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルのア<strong>ク</strong>ティブ High 信号です (消去してから<strong>書き込み</strong>)。<br />
I_MATCH_ENABLE は、読み出しア<strong>ク</strong>セスをイネーブルにします (ア<strong>ク</strong>ティブ High)。<br />
I_CLK は、<strong>ク</strong>ロッ<strong>ク</strong>です。オプションとして、DLL を通して配線できます。<br />
O_MATCH_ADDR は、読み出しモードのみで有効なジェネリッ<strong>ク</strong>な出力アドレスです。<br />
O_MATCH_OK は、データが検出されると High になります (読み出し動作)。<br />
O_ADDR_VALID は、複数のデータが検索された場合のオプションの信号です。1 つのデータが<br />
検出された場合は、ア<strong>ク</strong>ティブ High です。<br />
この参照用のデザインを合成するときは、その後のフロアプランのために階層を維持し、スタティッ<strong>ク</strong><br />
タイミング解析を行うとよいでしょう。<strong>ク</strong>ロッ<strong>ク</strong>周期は、制約ファイル (UCF) で定義します。パフォー<br />
マンスを最適化するには、各 Block Select<strong>RAM</strong>+メモリのロケーションを 1 列に、8 個の <strong>RAM</strong>16X1s プ<br />
リミティブを隣接するスライス列に配置するよう、UCF ファイルで制約します。<br />
この参照用のデザインは、幅が異なる <strong>CAM</strong> にも容易に適合できます。たとえば、4 つの <strong>CAM</strong>16X8 マ<br />
<strong>ク</strong>ロから 16 ワード X 32 ビット の <strong>CAM</strong> を作成できます。この <strong>CAM</strong> に 16 個の 4 入力 AND ゲートを<br />
追加すると、16 LUT に収まるような全体的にデコードされたアドレスが生成されます。<br />
おわりに Virtex Block Select<strong>RAM</strong>+ のユニー<strong>ク</strong>な True Dual-Port 機能によって、高速な組み込み型 <strong>CAM</strong> をイ<br />
ンプリメントする革新的な手法が可能になります。複数のマ<strong>ク</strong>ロをカスケードして深さや幅がより大き<br />
い <strong>CAM</strong> <strong>ブロッ</strong><strong>ク</strong>を作成した場合でも、<strong>CAM</strong>16X8 マ<strong>ク</strong>ロは 1 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの ワンホット デコー<br />
ドされたアドレスを提供します。基本となる <strong>CAM</strong>16X8 マ<strong>ク</strong>ロはサイズが小さいので (16 ワード X 8<br />
ビット)、<strong>CAM</strong> のサイズを柔軟に選択できます。<br />
参照用のデザインは、エンコードされたアドレス出力、一致フラグ、高速な読み出しア<strong>ク</strong>セス、高速な<br />
2 <strong>ク</strong>ロッ<strong>ク</strong> サイ<strong>ク</strong>ルの消去/<strong>書き込み</strong>ア<strong>ク</strong>セスが含まれる完全なソリューションを示しています。<strong>CAM</strong><br />
の深さを拡張できるので、真の柔軟性が得られます。<br />
<strong>CAM</strong> は、メモリ データの検索を高速にします。<strong>CAM</strong> ベースのアプリケーションにはさまざまな必要<br />
条件があるので、ソリューションは柔軟でなければなりません。Block Select<strong>RAM</strong>+ によるソリューショ<br />
ンの他にも、Virtex ファミリのスライスに基づくアプローチとして XAPP202『ATM アプリケーション<br />
<strong>CAM</strong> (Content Adderssable Memory)』と XAPP203『Virtex ファミリ FPGA による柔軟で高速な<br />
<strong>CAM</strong> のデザイン』があります。<br />
XAPP204 (v1.2) 2000 年 5 月 2 日 www.xilinx.co.jp 13<br />
R
R<br />
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/<strong>書き込み</strong> <strong>CAM</strong><br />
付録 A : 合成可能な VHDL コードと Verilog コードの参照用のデザイン<br />
付録 A では、ワード幅が 8 ビットでメモリの深さがパラメータ化された <strong>CAM</strong> を Virtex デバイスでイ<br />
ンプリメントする階層的で合成可能なデザインを示します。完全な VHDL コードと Verilog コードは、<br />
参照用のデザインとして用意されています (ファイル : xapp204.zip または xapp204.tar.z)。<br />
モジュール :<strong>CAM</strong>_top.vhd<br />
--<br />
-- Module: <strong>CAM</strong>_Top / Top Level<br />
-- Design: <strong>CAM</strong>_Top<br />
-- VHDL code: Hierarchical wrapper<br />
-- Instantiate <strong>CAM</strong>_generic_8s (depth variable by 16X8bits word)<br />
--<br />
-- Synthesis Synopsys FPGA Express ver.3.2 - Option = Preserve Hierarchy<br />
-- Use of "pragma synthesis_off/on" and attributes<br />
--<br />
-- Description:Instantiate a <strong>CAM</strong> implementation<br />
-- Registered inputs and outputs (<strong>CAM</strong> internal timing analysis)<br />
--<br />
-- Device: VIRTEX Families<br />
--<br />
-- Created by:Jean-Louis BRELET / XILINX - VIRTEX Applications<br />
-- Date:July 29, 1999<br />
-- Version: 1.0<br />
--<br />
-- History:<br />
-- 1.<br />
--<br />
-- Disclaimer:THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY<br />
-- WHATSOEVER AND XILINX SPECIFICALLY DISCLAIMS ANY<br />
-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR<br />
-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.<br />
--<br />
-- Copyright (c) 1999 <strong>Xilinx</strong>, Inc. All rights reserved.<br />
---------------------------------------------------------------<br />
モジュール :<strong>CAM</strong>_generic_word.vhd<br />
--<br />
-- Module: <strong>CAM</strong>_generic_8s<br />
-- Design: <strong>CAM</strong>_Top<br />
-- VHDL code: Hierarchical RTL<br />
-- Instantiate <strong>CAM</strong>_<strong>RAM</strong>B4<br />
-- Instantiate INIT_<strong>RAM</strong>B4_S1_S16<br />
14 www.xilinx.co.jp XAPP204 (v1.2) 2000 年 5 月 2 日
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/<strong>書き込み</strong> <strong>CAM</strong><br />
-- Instantiate INIT_8_<strong>RAM</strong>16X1s<br />
-- Instantiate ENCODE_4_LSB<br />
-- Instantiate DECODE_X<br />
-- Instantiate ENCODE_X_MSB<br />
-- Choice the right ENCODE and DECODE modules according to the<br />
number of <strong>CAM</strong>16X8s<br />
-- If "nb_cam16X8s" = 2 then ENCODE_1_MSB and DECODE_1 must be<br />
used:1 bit to decode 2 <strong>CAM</strong>16X8s<br />
-- If "nb_cam16X8s" = 4 then ENCODE_2_MSB and DECODE_2 must be<br />
used:2 bits to decode 4 <strong>CAM</strong>16X8s<br />
-- If "nb_cam16X8s" = 8 then ENCODE_3_MSB and DECODE_3 must be<br />
used:3 bits to decode 8 <strong>CAM</strong>16X8s<br />
-- If "nb_cam16X8s" = 16 then ENCODE_4_MSB and DECODE_4 must be<br />
used:4 bits to decode 16 <strong>CAM</strong>16X8s<br />
-- Note:Configuration is not supported by synthesis tools<br />
--<br />
-- Synthesis Synopsys FPGA Express ver.3.2 - Option = Preserve Hierarchy<br />
-- Use of "pragma synthesis_off/on" and attributes<br />
--<br />
-- Description:Instantiate "nb_cam16X8s" <strong>CAM</strong>_<strong>RAM</strong>B4 (see generic)<br />
-- "nb_cam16X8s" X 16 words depth X 8 bits width<br />
-- 1 clock cycle Read (or Match),<br />
-- 2 clock cycles Write (Erase on the first clock then Store on the second)<br />
-- If only 1 clock cycle => Erase Only.<br />
-- MATCH_OK indicates one or more matches is/are found.<br />
-- MATCH_ADDR ouput the address of the match, if ONLY ONE is found<br />
-- ADDR_VALID indicates when MATCH_ADDR is a valid address (Optional)<br />
--<br />
-- Device:VIRTEX Families<br />
-- modules <strong>CAM</strong>_<strong>RAM</strong>B4 fits in 1 Block<strong>RAM</strong> column (+ CLB)<br />
-- If "nb_cam16X8s" = 4 then <strong>CAM</strong>64X8s (fits in 1 XCV50 BlockRam Column)<br />
-- If "nb_cam16X8s" = 8 then <strong>CAM</strong>128X8s (fits in 1 XCV300 BlockRam Column)<br />
-- If "nb_cam16X8s" = 16 then <strong>CAM</strong>256X8s (fits in 1 XCV1000 BlockRam Column)<br />
...<br />
---------------------------------------------------------------<br />
モジュール :<strong>CAM</strong>_<strong>RAM</strong>B4.vhd<br />
--<br />
-- Module: <strong>CAM</strong>_<strong>RAM</strong>B4<br />
-- Design: <strong>CAM</strong>_Top<br />
-- VHDL code: Hierarchical RTL<br />
-- Instantiate INIT_<strong>RAM</strong>B4_S1_S16<br />
XAPP204 (v1.2) 2000 年 5 月 2 日 www.xilinx.co.jp 15<br />
R
R<br />
-- Instantiate INIT_8_<strong>RAM</strong>16X1s<br />
--<br />
-- Synthesis Synopsys FPGA Express ver. 3.2<br />
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/<strong>書き込み</strong> <strong>CAM</strong><br />
-- Use of "pragma synthesis_off/on" and attributes<br />
--<br />
-- Description:Basic building block of a <strong>CAM</strong> using Select Block<strong>RAM</strong><br />
-- 16 words depth X 8 bits width<br />
-- 1 clock Read (or Match),<br />
2 clock Write (Erase on the first clock then Store on the second)<br />
-- If NO match is found the output MATCH = "0000000000000000"<br />
-- MATCH bus gives on 16 signals a binary address.<br />
-- Initialized <strong>RAM</strong>16X1s and <strong>RAM</strong>B4 in low level module<br />
--<br />
-- Device: VIRTEX Families<br />
...<br />
---------------------------------------------------------------<br />
モジュール :INIT_<strong>RAM</strong>B4_S1_S16.vhd<br />
--<br />
-- Module: INIT_<strong>RAM</strong>B4_S1_S16<br />
-- Design: <strong>CAM</strong>_Top<br />
-- VHDL code: VIRTEX primitives instantiation<br />
--<br />
-- Synthesis Synopsys FPGA Express ver. 3.2<br />
-- Use of "pragma synthesis_off/on" and attributes<br />
--<br />
-- Description: Basic building block of a <strong>CAM</strong> using Select Block<strong>RAM</strong><br />
-- 16 words depth X 8 bits width<br />
-- Instantiation <strong>RAM</strong>B4_S1_S16<br />
-- Initialization of <strong>RAM</strong>B4:attributes to constraint PAR and<br />
simulation<br />
--<br />
-- Device: VIRTEX Families<br />
-- 1 <strong>RAM</strong>B4<br />
...<br />
---------------------------------------------------------------<br />
モジュール :INIT_8_<strong>RAM</strong>16X1s.vhd<br />
--<br />
-- Module: INIT_8_<strong>RAM</strong>16X1s<br />
-- Design: <strong>CAM</strong>_Top<br />
-- VHDL code: VIRTEX primitives instantiation<br />
16 www.xilinx.co.jp XAPP204 (v1.2) 2000 年 5 月 2 日
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/<strong>書き込み</strong> <strong>CAM</strong><br />
--<br />
-- Synthesis Synopsys FPGA Express ver. 3.2<br />
-- Use of "pragma synthesis_off/on" and attributes<br />
--<br />
-- Description:Basic building block of a <strong>CAM</strong> using Select Block<strong>RAM</strong> & Select<strong>RAM</strong><br />
-- Instantiate 8 <strong>RAM</strong>16X1s_1 for ERASE operation<br />
-- Initialization of <strong>RAM</strong>16X1s:attributes to constraint PAR and simulation<br />
--<br />
-- Device: VIRTEX Families<br />
-- 8 X Select<strong>RAM</strong>16X1s_1<br />
...<br />
---------------------------------------------------------------<br />
モジュール :ENCODE_4_LSB.vhd<br />
--<br />
-- Module: ENCODE_4_LSB<br />
-- Design: <strong>CAM</strong>_Top<br />
-- VHDL code: RTL / Combinatorial<br />
--<br />
-- Synthesis Synopsys FPGA Express ver. 3.2<br />
-- Use of "pragma synthesis_off/on" and attributes<br />
--<br />
-- Description:Encode a 16 bits binary address into 4 bits and find if a<br />
match occurs<br />
-- if BINARY_ADDR = "0000000000100000" => MATCH_ADDR = "0101"/ MATCH_OK = 1<br />
-- Optional ADDR_VALID = 1 when only one Match (If simultaneous matches can<br />
occur)<br />
-- However, the ADDR_VALID generation double the size of the combinatorial<br />
logic !<br />
-- if no match found => MATCH_OK = 0 / ADDR_VALID = 0<br />
(MATCH_ADDR is not a valid address)<br />
-- if 2 or more matches found => MATCH_OK = 1 / ADDR_VALID = 0<br />
(MATCH_ADDR is not valid address)<br />
--<br />
-- Device: Virtex Families<br />
-- ...<br />
---------------------------------------------------------------<br />
モジュール :ENCODE_4_MSB.vhd<br />
このモジュールは、1 ビットの ENCODE_1_MSB (<strong>CAM</strong> 32 ワード)、2 ビットの ENCODE_2_MSB<br />
(<strong>CAM</strong> 64 ワード)、3 ビットの ENCODE_3_MSB (<strong>CAM</strong> 128 ワード)、4 ビットの ENCODE_4_MSB<br />
(<strong>CAM</strong> 256 ワード) で使用できます。このモデルに従えば、深さが異なる <strong>CAM</strong> についてのモジュール<br />
も容易に作成できます。<br />
--<br />
-- Module: ENCODE_4_MSB<br />
-- Design: <strong>CAM</strong>_Top<br />
-- VHDL code: RTL / Combinatorial<br />
--<br />
-- Synthesis Synopsys FPGA Express ver. 3.2<br />
-- Use of "pragma synthesis_off/on" and attributes<br />
--<br />
XAPP204 (v1.2) 2000 年 5 月 2 日 www.xilinx.co.jp 17<br />
R
R<br />
<strong>ブロッ</strong><strong>ク</strong> <strong>RAM</strong> <strong>を使用した高速読み出し</strong>/<strong>書き込み</strong> <strong>CAM</strong><br />
-- Description:Encode a 16 bits binary address into 4 bits, map with the LSB<br />
address and find if a match occurs<br />
-- if BINARY_ADDR = "0000000000100000" => MATCH_ADDR = "0101"/ MATCH_OK = 1<br />
-- Optional ADDR_VALID = 1 when only one Match<br />
(If simultaneous matches can occur)<br />
-- However, the ADDR_VALID generation double the size of the<br />
combinatorial logic !<br />
-- if no match found => MATCH_OK = 0 / ADDR_VALID = 0<br />
(MATCH_ADDR is not a valid address)<br />
-- if 2 or more matches found => MATCH_OK = 1 / ADDR_VALID = 0<br />
(MATCH_ADDR is not valid address)<br />
--<br />
-- Choice between GATES ONLY implementation or BUFT<br />
implementation.(See comments)<br />
-- Note:synthesis tools do not support Configuration<br />
--<br />
-- Device: Virtex Families<br />
-- ...<br />
---------------------------------------------------------------<br />
モジュール :DECODE_4.vhd<br />
このモジュールは、1 ビットの DECODE_1 (<strong>CAM</strong> 32 ワード)、2 ビットの DECODE_2 (<strong>CAM</strong> 64 ワー<br />
ド)、3 ビットの DECODE_3 (<strong>CAM</strong> 128 ワード)、4 ビットの DECODE_4 (<strong>CAM</strong> 256 ワード) で使用で<br />
きます。このモデルに従えば、深さが異なる <strong>CAM</strong> についてのモジュールも容易に作成できます。<br />
--<br />
-- Module: DECODE_4<br />
-- Design: <strong>CAM</strong>_Top<br />
-- VHDL code: RTL / Combinatorial<br />
--<br />
-- Synthesis Synopsys FPGA Express ver. 3.2<br />
-- Use of "pragma synthesis_off/on" and attributes<br />
--<br />
-- Description:Decode 4 bits address into 16 binary bits<br />
-- Generate an ENABLE bus<br />
--<br />
-- Device: Virtex Families<br />
-- ...<br />
---------------------------------------------------------------<br />
同様のモジュール ENCODE_3_MSB、ENCODE_2_MSB、ENCODE_1_MSB、DECODE_4、<br />
DECODE_3、DECODE_2、DECODE_1 が参照用のデザイン ファイルに含まれています。<br />
付録 A の終わり<br />
改訂履歴 次の表に、このドキュメントの改訂履歴を示します。<br />
日付 バージョン 改訂内容<br />
9/23/99 1.0 初期リリース<br />
10/1/99 1.1 いくつかのテキストの修正<br />
5/2/00 1.2 Virtex-E 拡張メモリ用にアップデート<br />
18 www.xilinx.co.jp XAPP204 (v1.2) 2000 年 5 月 2 日