03.08.2013 Views

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

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

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

SHOW MORE
SHOW LESS

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 日

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!