Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
www.xilinx.co.jp 1
© 2002 Xilinx, Inc. All rights reserved. すべての Xilinx の商標、 登録商標、 特許、 免責条項は、 http://www.xilinx.com/legal.htm にリスト されています。 他のすべての商標および登録商標は、 それぞれの所有者が所有しています。 すべての仕様は通知なしに変更される可能性があります。
保証否認の通知 : Xilinx ではデザイン、 コード、 その他の情報を 「現状有姿の状態」 で提供しています。 この特徴、 アプリケーシ ョ ンまたは規格の一実施例としてデザイン、 コード、 その他の情報を提供しておりますが、 Xilinx はこの実施例が権利侵害のクレームを全く受けないという ことを表明するものではありません。 お客様がご自分で実装される場合には、 必要な権利の許諾を受ける責任があります。 Xilinx は、 実装の妥当性に関するいかなる保証を行なうものではありません。 この保証否認の対象となる保証には、 権利侵害のクレームを受けないことの保証または表明、 および市場性や特定の目的に対する適合性についての黙示的な保証も含まれます。
概要 SRL16 は、16 ビッ ト シフ ト レジスタ と して使用されるルッ クアップ テーブルの代替モードです。 この
シフ ト レジスタ LUT (SRL) モードの使用によ り、 パフォーマンスの向上と大規模なコス ト削減ができ
ます。 SRL16 はソフ ト ウェア ツールで自動的に推論できますが、効率的な使用でさ らにコス ト を抑えた
デザインが実現できます。
はじめに Spartan-3 FPGA は、 SLICEM スライスのルッ クアップ テーブル (LUT) をフ リ ップフロ ップ リ ソース
を使用しない 16 ビッ ト シフ ト レジスタ と して設定できます。 シフ ト イン オペレーシ ョ ンはク ロ ッ ク
と同期しており、 出力幅はダイナミ ッ クに選択できます。 独立した専用出力によ り、 16 ビッ ト シフ ト
レジスタを何個でもカスケードできるため、 必要なサイズのシフ ト レジスタを生成できます。 各 CLBリ ソースでは、 8 個の LUT のうち 4 個を 65 ビッ ト シフ ト レジスタ と して設定できます。
このアプ リ ケーシ ョ ン ノートは、 16 から 64 ビッ ト までのシフ ト レジスタのインプ リ メンテーシ ョ ン
に必要な一般的な VHDL と Verilog のサブモジュール、およびリ ファレンス コードの例を紹介します。
これらのサブモジュールは、 16 ビッ ト シフ ト レジスタ プリ ミ ティブ、および専用 MUXF5、MUXF6、MUXF7 マルチプレクサから構成されています。
これらのシフ ト レジスタによ り、遅延やレイテンシの補正を必要とするアプ リケーシ ョ ンの効果的なデ
ザインを展開します。 また、 同期 FIFO および内容参照可能メモ リ (CAM) デザインにおいてもシフ ト
レジスタは有効です。 フ リ ップフロ ップ (SRL16 エレ メン ト など) を使用しない Spartan-3 シフ ト レジ
スタを素早く生成するには、 CORE Generator RAM-based Shift Register モジュールを使用します。
シフ ト レジスタ アーキテクチャ
SRL16 構造についての説明は、 基本的なシフ ト レジスタから始め FPGA 構造の周辺構築へと展開して
いきます。
LUT 構造ルッ クアップ テーブルは、 バイナリ セレク ト ラ イン と して機能する 4 入力の 16:1 マルチプレクサで
す。 ルッ クアップ テーブルにプログラムされた値が選択されたデータになり ます (図 1 を参照)。
SRL16 は、 アドレス指定可能なシフ ト レジスタの代わりに固定した LUT 値が設定されます (図 2 を参
照)。 シフ ト レジスタの入力は LUT の同期 RAM 設定と同様に、データ入力、 ク ロ ッ クおよびクロ ッ ク
イネーブル (図2 に表示されていません) があ り ます。 シフ ト レジスタの 後のフ リ ップフロ ップには特
Application Note: Spartan-3
XAPP465 (v1.0) 04.10.03
Spartan-3 デバイスでのシフ ト レジスタ (SRL 16) と してのルックアップ テーブルの使用
R
図 1: 16:1 マルチプレクサとして設計された LUT
x465_01_040203
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
1 0 1 1 1 0 0 0
D
A[3:0]
1 1 1 0 1 0 0 1
2 www.xilinx.co.jp
R
別な出力があ り ます。 ラ イブラ リ プリ ミ ティブではこれを Q15、 また FPGA Editor では MC15 と表示
します。 LUT 入力は、 シフ ト レジスタの 16 記憶装置エレ メン トの中から非同期 (またはダイナミ ッ ク )に 1 つ選択します。
ダイナミ ッ ク レングス調整
アドレスでシフ ト レジスタの長さをダイナミ ッ クに変更できます。 Q15 の代わりに D をシフ ト レジス
タ出力と して使用する場合は、アドレスに 7 (0111) を入力して出力を Q7 に設定し、8 ビッ ト シフ ト レジスタをエ ミ ュレート します。 アドレス ラ インは mux を制御しているため、 出力に非同期パスが与え
られます。
ロジック セル構造
各 SRL16 LUT には関連したフ リ ップフロ ップがあ り、これらがすべてのロジッ ク セルを構成していま
す。 シフ ト レジスタのアドレス指定可能なビッ トは同期出力のため、フ リ ップフロップに格納できます。
また CLB の組み合わせ出力へ直接接続もできます。 レジスタを使用する場合は、 固定シフ ト レジスタ
長を選択している固定アドレス ラ インが必要です。 フ リ ップフロ ップのクロ ッ クから出力の遅延はシフ
ト レジスタの遅延よ り短いため、 パフォーマンス向上には 期から 2 番目のビッ ト をアドレ ッシング
し、 シフ ト レジスタの 後にフ リ ップフロ ップを使用します。 フ リ ップフロ ップの使用によ り、 出力の
非同期または同期セッ ト / リ セッ ト も可能になり ます。
専用 SHIFTIN 信号がシフ ト レジス タ入力にな り、 期のシフ ト レジス タの Q15/MC15 信号が
SHIFTOUT 出力を駆動します。 アドレス指定可能な D 出力は、すべての SRL プリ ミ ティブにあ り ます
が、 SHIFTOUT を駆動する Q15/MC15 信号は、 カスケード可能な SRLC16 プ リ ミ ティブのみに存在
します。
図 2: アドレス指定可能なシフ ト レジスタと して設定した LUT
図 3: ロジック セル SRL 構造
x465_02_040203
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
D
A[3:0]
DIN
CLK
D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q
Q15 orMC15
A[3:0]
SHIFTIN
SHIFTOUTor YB
DI (BY)
D
MC15
DI
WSG
CE (SR)CLK
SRLC16
D Q
SHIFT-REG
WECK
A[3:0] Output
RegisteredOutput
(optional)
4
X465_03_040203
WS
www.xilinx.co.jp 3
R
スライス構造
ス ラ イ ス内の 2 つのロジ ッ ク セルは、 大 32 ビ ッ ト のシフ ト レジス タ をカスケードするため、
SHIFTOUT および SHIFTIN 信号で接続されます (図 4 を参照)。 この信号は、前にあるシフ ト レジスタ
の Q15/MC15 と次のシフ ト レジスタの DI (または Q0 フ リ ップフロ ップ) を接続します。
ダイナミ ッ ク アドレッシング (または、ダイナミ ッ ク レングス調整) を行う場合、各 SRL16 からの 2 つの独立したデータ出力は多重化します。 F5MUX によ り、2 つの SRL16 ビッ トのう ち片方が選択されま
す (図 5 を参照)。
CLB 構造
Spartan-3 の CLB には 4 つのスライスがあ り、 各スライスに 2 つのルッ クアップ テーブルがあ り ます
が、 その中の 2 つのスライスのみ、 ルッ クアップ テーブルを SRL16 コンポーネン トおよび分散 RAMと して使用できます。 左側に位置する 2 つの SLICEM コンポーネン トは、 2 つの LUT を 16 ビッ ト シフ ト レジスタ と して設定できます。 LUT 間のカスケード と同様に、 SHIFTOUT から SHIFTIN への
SLICEM コンポーネン ト間のカスケード もできます。 ひとつの CLB の 左側に位置する 4 個の LUT をカスケードする と、 大 64 ク ロ ッ ク周期の遅延を生成します (図 6 を参照)。
図 4: スライスのロジック セル間のシフ ト レジスタ接続
図 5: F5MUX を使用した複数 SRL16 コンポーネン トのアドレッシング
SHIFTIN
SLICEM
SHIFTOUT
X465_04_040203
MC15
SRL16LC
DI
SRL16LC
F5MUX
X465_05_040203
SRL16
A[3:0]
A4
LC
SRL16LC
4 www.xilinx.co.jp
R
SLICEM にある 2 つの LUT を接続するのと同様に、 複数の SLICEM をアドレス指定するにはマルチ
プレクサを使用します。 F6MUX を使用して CLB 内の SRL16 コンポーネン ト を 3 つまたは 4 つ選択
し、 大 64 ビッ ト までのアドレス指定可能なシフ ト レジスタができます (図 7 を参照)。
図 6: CLB のシフ ト レジスタ LUT のカスケード
図 7: F6MUX を使用した 64 ビッ ト シフ ト レジスタのアドレス指定
SLICEM S0
SLICEM S1
1 Shift Chainin CLB
X465_06_040503
SRLC16MC15
MC15
D
SRLC16
DI
DI
SHIFTIN
IN
OUT
CASCADABLE OUT
FF
FFD
SRLC16MC15
MC15
D
SRLC16DI
SHIFTOUT
FF
FFD
DI
X465_07_040203
LUT
SLICEM S1
D
LUT
LUT
SLICEM S0
F6
LUT
F5
F5
CLB
www.xilinx.co.jp 5
R
ライブラリ プリミテ ィ ブ
ライブラ リ プリ ミ ティブは 8 個あ り、 オプシ ョ ンでク ロ ッ ク イネーブル (CE)、 反転クロ ッ ク (CLK)、およびカスケード可能な出力 (Q15) の組み合わせがあ り ます。
合成およびシ ミ ュレーシ ョ ンで使用できるすべてのプリ ミ ティブを 表 1 に示します。
表 2: VHDL および Verilog コードによる初期化
シフ ト レジスタは、 合成およびシ ミ ュレーシ ョ ンにおいて VHDL または Verilog コードで初期化でき
ます。 合成を行う場合、 16 ビッ ト シフ ト レジスタ インスタンシエーシ ョ ンに INT 属性があるので、
Alliance シ リーズ ツールでコンパイルできるよ うに、 INT 属性を EDIF 出力ファイルにコピーします。
VHDL コード シ ミ ュレーシ ョ ンは、 generic パラ メータを使用して属性を渡します。 Verilog コード
シ ミ ュレーシ ョ ンは、 defparam パラ メータを使用して属性を渡します。 S3_SRL16E シフ ト レジスタ インスタンシエーシ ョ ン コードの例 (VHDL および Verilog) を用いて、
これらのテクニッ クを説明します (VHDL および Verilog テンプレート を参照)。 S3_SRL16E.vhd およ
び .v ファ イルに関する説明はあ り ません。
表 1: シフ ト レジスタ プリ ミテ ィブ
プ リ ミ ティブ 長さ 制御 アドレス入力 出力
SRL16 16 ビッ ト CLK A3、 A2、 A1、A0
Q
SRL16E 16 ビッ ト CLK、 CE A3、 A2、 A1、A0
Q
SRL16_1 16 ビッ ト CLK A3、 A2、 A1、A0
Q
SRL16E_1 16 ビッ ト CLK、 CE A3、 A2、 A1、A0
Q
SRLC16 16 ビッ ト CLK A3、 A2、 A1、A0
Q、 Q15
SRLC16E 16 ビッ ト CLK、 CE A3、 A2、 A1、A0
Q、 Q15
SRLC16_1 16 ビッ ト CLK A3、 A2、 A1、A0
Q、 Q15
SRLC16E_1 16 ビッ ト CLK、 CE A3、 A2、 A1、A0
Q、 Q15
図 8: SRLC16E プリ ミテ ィブ
D
CE
CLK
Q
Q15
A0
A1
A2
A3
SRLC16E
X465_19_040503
6 www.xilinx.co.jp
R
ポート信号
クロック ― CLK同期シフ ト インでは、 クロ ッ クの立ち上がりエッジ、 または立ち下がりエッジのどちらか片方を使用し
ます。 データおよびクロ ッ ク イネーブル入力ピンのセッ ト アップ タイムは、 選択したクロ ッ ク エッジ
が基準になり ます。
データ入力 — D データ入力は、 シフ ト レジスタへ移動する新しいデータ (1 ビッ ト ) を与えます。
クロック イネーブル — CE ( オプシ ョ ン )ク ロ ッ ク イネーブル ピンは、 シフ ト機能に影響を与えます。 非アクティブなク ロ ッ ク イネーブル ピン
は、 シフ ト レジスタへデータを移動しません。 また、 新しいデータの書き込みも行いません。 ク ロ ッ ク
イネーブルをアクティブにした場合、 data in (D) が 初のロケーシ ョ ンに書き込まれ、 すべてのデータ
が 1 つのロケーシ ョ ンに移動します。 このオプシ ョ ンを使用した場合、 新しいデータは出力ピン (Q)
およびカスケード可能な出力ピン (Q15) から出力されます。
アドレス — A3、 A2、 A1、 A0アドレス入力は、読み出されるビッ ト (0 から 15 まで) を選択します。 選択された n 番目のビッ トは、出
力ピン (Q) から出力されます。 カスケード可能な出力ピン (Q15) は、 常にシフ ト レジスタの 後の
ビッ ト (ビッ ト 15) を出力するためアドレス入力の影響は受けません。
データ出力 — Qデータ出力 Q は、 アドレス入力で選択されたデータ値 (1 ビッ ト ) を出力します。
データ出力 — Q15 ( オプシ ョ ン )データ出力 Q15 は、16 ビッ ト シフ ト レジスタの 後のビッ ト を出力します。 各シフ ト インの動作が終
了する と毎回新しいデータが出力されます。
制御ピンの反転
2 つの制御ピン (CLK、 CE) には、 反転オプシ ョ ンがあ り ます。 デフォルトでは、 ク ロ ッ クは立ち上が
りエッジで、 CE はアクティブ high です。
GSRグローバル セッ ト / リセッ ト (GSR) は、 シフ ト レジスタに影響を与えません。
属性
内容の初期化 — INITINIT 属性は、シフ ト レジスタ内容の初期値を定義したものです。 INIT 属性は 4 桁 (0000) の 16 進数で
エンコード されたビッ ト ベクタです。 一番左の数字が 上位ビッ ト (MSB) です。 デバイス設定シーケ
ンスで、シフ ト レジスタはデフォルトですべての数字が 0 に初期化されますが、その他の設定値を指定
するこ と もできます。
ロケーシ ョ ン制約
CLB 内部のスラ イス レイアウ トは 図 9 に示します。 各 CLB に 4 つのスライスがあ り ますが、 左下 2つのスライスのみシフ ト レジスタ と して使用できます。 CLB で S0 および S1 に位置するこの 2 つのス
ライスは、SLICEM と表示されます。 各座標は、XOYO および X0Y1 です。 配置制約を行う場合、SRLプリ ミ ティブの LOC プロパティでこの座標を使用します。 専用 CLB シフ ト チェーンは上下に渡って
いますが、 始めと終わりは 4 つの SLICEM LUT のどこを選んでもチェーンを作成できます。
www.xilinx.co.jp 7
R
シフ ト レジスタの動作
データ フロー
各シフ ト レジスタ (SR16 プリ ミ ティブ) は、 次をサポート します。
• 同期シフ ト イン
• アドレスがダイナミ ッ クに変更する場合の非同期 1 ビッ ト出力
• アドレスが固定の場合の同期シフ ト アウ ト
その他、カスケード可能なシフ ト レジスタ (SRLC16) は、 期 (16 番目) のビッ トの同期シフ ト アウ ト
出力をサポート します。 この出力には、 CLB リ ソース内で次の SRLC16 の入力への専用接続があ り ま
す。 2 つのプリ ミ ティブを 図 10 に示します。
図 9: CLB 内部のスライス レイアウト
図 10: シフ ト レジスタとカスケード可能なシフ ト レジスタ
X465_08_040203
Interconnectto Neighbors
Left-Hand SLICEM(Logic or Distributed RAM
or Shift Register)
Right-Hand SLICEL(Logic Only)
CIN
SLICEX0Y1
SLICEX0Y0
SwitchMatrix
COUT
CLB
COUT
SHIFTOUTSHIFTIN
CIN
SLICEX1Y1
SLICEX1Y0
X465_09_040603
D Q
Address
CE
CLK
SRL16E
D Q
Address
CE
CLK
SRLC16E
D Q
Q15
Q15
Address
CE
CLK
SRLC16E
8 www.xilinx.co.jp
R
シフ ト オペレーシ ョ ン
シフ ト オペレーシ ョ ンは、CE がアクティブ High でシングル ク ロ ッ ク エッジです。 イネーブルが Highのと き、入力 (D) はシフ ト レジスタの 初のビッ トにロード され、各ビッ トが順に次のポジシ ョ ンへと
移動します。 カスケード可能なシフ ト レジスタ (SRLC16 など) では、 期のビッ トが Q15 から出力さ
れます。
4 ビッ ト アドレスで選択されたビッ トは、 Q から出力されます。
ダイナミ ッ ク リード オペレーシ ョ ン
Q 出力は、 4 ビッ ト アドレスで決定します。 4 入力ピンに新しいアドレスが与えられるたびに、 LUT へのアクセス時間を経て Q 出力に新しいビッ ト ポジシ ョ ンの値が出力されます。 このオペレーシ ョ ンは、
ク ロ ッ クおよびクロ ッ ク イネーブル信号とは非同期で単独の動作です。
シフ トおよびダイナミ ッ ク リード オペレーシ ョ ンを 図 11 に示します。
スタテ ィ ッ ク リード オペレーシ ョ ン
4 ビッ ト アドレスが固定されている場合、Q 出力は常に同じビッ ト ポジシ ョ ンを使用します。 このモー
ドは、1 つの LUT に 1 から 16 ビッ ト までどの長さのシフ ト レジスタでもインプ リ メン トできます。 シフ ト レジスタ長は (N+1) です。 (N = 入力アドレス)Q 出力は、 各シフ ト オペレーシ ョ ンに同期して変化します。 前のビッ トは次のポジシ ョ ンに移動し、 Qから出力されます。
特性
• シフ ト オペレーシ ョ ン 1 回につき、 ク ロ ッ ク エッジが 1 つ必要です。
• ダイナミ ッ ク レングス リード オペレーシ ョ ンは非同期です。 (Q 出力 )• スタティ ッ ク レングス リード オペレーシ ョ ンは同期です。 (Q 出力 )• データ入力には、 セッ ト アップからク ロ ッ ク間のタイ ミ ング仕様があ り ます。
図 11: シフ トおよびダイナミ ック レングス タイ ミング ダイアグラム
tshift
taccess
7
Position (7) Position (10)
10
taccess
CLK
CE
D
Q
Q15
Q
Address
Shift Timing Diagram
Dynamic Length Timing Diagram
X465_10_040203
www.xilinx.co.jp 9
R
• カスケード可能なコンフ ィギュレーシ ョ ンでは、 Q15 出力に常に 期のビッ ト値が出力されます。
• Q15 出力は、 各シフ ト オペレーシ ョ ンの後に同期して変化します。
シフ ト レジスタ推論
一般的な HDL コードでシフ ト レジスタを記述した場合、 合成ツールは SRL16 コンポーネン トの使用を推論します。 SRL16 には、 同期または非同期セッ ト / リセッ ト入力のどちら もないため、 同時にすべてのビッ トにアクセスできません。 この機能は SRL16 を使用する上で妨げとなるため、 フ リ ップフロ ップの方にこの機能をインプ リ メン ト します。 シフ ト レジスタが 16 ビッ ト以上の場合、 または Q15 のみ使用した場合は、 カスケード可能なシフ ト レジスタ (SRLC16) が推論される可能性があ り ます。
SRL16 シフ ト レジスタはパラレル ロードできませんが、ロード したいデータをシフ ト インする と同等
の機能をインプ リ メン トできます。 ロード コマンドには一定のタイ ミ ングが必要です。
VHDL 推論コード
次は、 SRL16 を推論する VHDL コードです。
architecture Behavioral of srl16 is
signal Q_INT: std_logic_vector(15 downto 0);
begin
process(C)beginif (Cíevent and C=’1’) thenQ_INT <= Q_INT(14 downto 0) & D;
end if;end process;
Q <= Q_INT(15);
end Behavioral;
反転クロ ッ ク (SRL16_1) を推論させる場合は、 C='1' を C='0' に変更します。 ク ロ ッ ク イネーブル
(SRL16E) を推論させる場合は、 初の if-then 文の後に if (CE='1') then を挿入します。
Verilog 推論コード
次は、 SRL16 を推論する Verilog コードです。
always @ (posedge C)beginQ_INT <= {Q_INT[14:0],D};
end
always @(Q_INT)beginQ <= Q_INT[15];
end
反転クロ ッ ク (SRL16_1) を推論させる場合は、(posedge C) を (negedge C) に変更します。 ク ロ ッ ク
イネーブル (SRL16E) を推論させる場合は、 begin 文の後に if(CE) を挿入します。
10 www.xilinx.co.jp
R
シフ ト レジスタ サブモジュール
16 ビッ ト プリ ミ ティブのほかにも、 32 ビッ ト と 64 ビッ トのカスケード可能なシフ ト レジスタをイン
プ リ メン トする 2 つのサブモジュールが VHDL および Verilog コードであ り ます。このサブモジュール
を 表 3 に示します。
サブモジュールは、 SRLC16E プリ ミ ティブが基本とな り、 専用マルチプレクサ (MUXF5、 MUXF6 など) があ り ます。 このインプ リ メ ンテーシ ョ ンは、 大規模なシフ ト レジスタの場合でも、 高速なスタ
ティ ッ ク レングス モードおよびダイナミ ッ ク レングス モードができます。
表 3: シフ ト レジスタ サブモジュール
サブモジュール 長さ 制御 アドレス入力 出力
SRLC32E_SUBM 32 ビット
CLK、CE
A4、 A3、 A2、 A1、 A0 Q、 Q31
SRLC64E_SUBM 64 ビット
CLK、CE
A5、 A4、 A3、 A2、 A1、 A0 Q、 Q63
www.xilinx.co.jp 11
R
表 3 のサブモジュールでインプ リ メ ン ト したカスケード可能なシフ ト レジスタ (32 ビ ッ トおよび 64ビッ ト ) を 図 12 に示します。
1 つのサブモジュールにつき、 すべてのクロッ ク イネーブル (CE) と ク ロ ッ ク (CLK) 入力は、 1 つのグ
ローバル ク ロ ッ ク イネーブルと 1 つのクロ ッ ク信号に接続しています。 グローバルなスタテ ィ ッ クま
たはダイナミ ッ ク レングス モードを必要と しない場合は、マルチプレクサなしで SRLC16E プリ ミ ティ
ブをカスケードできます。
完全同期シフ ト レジスタ
すべてのシフ ト レジスタ プリ ミ ティブおよびサブモジュールは、 同じスラ イス内のレジスタを使用し
ません。 完全同期リード /ラ イ ト シフ ト レジスタをインプ リ メン トする と きは、 出力ピン Q をフ リ ップ
図 12: シフ ト レジスタ モジュール (32 ビッ トおよび 64 ビッ ト )
SRLC16E
X465_11_040603
SRLC16E
32-bit Shift Register
64-bit Shift Register
4
4
MUXF5
SRLC16E
D D
4
5
A3, A2, A1, A0
A4
Add.
4
A[3:0]
CE
Q
Q
Q15
Q15
D
A[3:0]
CE
Q
MUXF5
Q31
D
4
4
6
A3, A2, A1, A0
A5, A4 A5
A4
Add.
MUXF5
D
A[3:0]
CE
Q
Q15
Q15
D
A[3:0]
CE
Q
SRLC16E
D
A[3:0]
CE
Q
Q15
Q15
SRLC16E
D
A[3:0]
CE
Q
SRLC16E
MUXF6
Q
Q63
12 www.xilinx.co.jp
R
フロ ップに接続する必要があ り ます。 図 13 で示すよ うに、 シフ ト レジスタ とフ リ ップフロ ップは同じ
ク ロ ッ クを共有しています。
この設定では、 タ イ ミ ングが向上しデザインが簡略化します。 フ リ ップフロ ップは、 シフ ト レジスタ
チェーンの 後のレジスタになるので、 スタティ ッ クまたはダイナミ ッ ク アドレスは、要求する長さか
らフ リ ップフロ ップの分を 1 ビッ ト引いて考えます。 必要な場合は、 カスケード された出力をフ リ ップ
フロ ップにレジスタするこ と もできます。
スタテ ィ ッ ク シフ ト レジスタ
カスケード可能な 16 ビッ ト シフ ト レジスタは、専用マルチプレクサ (MUXF5、 MUXF6 など) を使用
しない、 あらゆる長さのスタティ ッ ク レングス モード レジスタをインプ リ メン トできます。 40 ビッ ト
シフ ト レジスタを 図 14 に示します。 期の SRLC16E プリ ミ ティブのみ、 アドレス入力を 0111 に固
定する方法、 およびシフ ト レジスタの長さを 39 ビッ ト (アドレスを 0110 に固定) に制限して、 フ リ ッ
プフロ ップを 期のレジスタ と して使用する方法があ り ます。 (SRLC16E プリ ミ ティブの場合、 シフ ト
レジスタの長さはアドレス入力 + 1 です。 )
VHDL および Verilog インスタンシエーシ ョ ン
すべてのプ リ ミ テ ィブおよびモジュールの、 VHDL および Verilog のインスタンシエーシ ョ ン テンプ
レートがあ り ます。
図 13: 完全同期シフ ト レジスタ
D Q
Q15
Address
CE (Write Enable)
CLK
SRLC16E QD Synchronous Output
X465_12_040203
FF
図 14: 40 ビッ トスタティ ッ ク シフ ト レジスタ
DD
Q15SRLC16
LUT
D
Q15SRLC16
LUT
D Q OUT(40-bit SRL)A[3:0]
Q15SRLC16
LUT
"0111" 4
DD
Q15SRLC16
LUT
D
Q15SRLC16
LUT
D Q OUT(40-bit SRL)A[3:0]
Q15SRLC16
D Q
LUT
FF
"0110"
X465_13_040603
www.xilinx.co.jp 13
R
VHDL の場合、各テンプレートに component declaration および architecture section があ り ます。 VHDLデザイン ファ イルにテンプレートの各パート を挿入して ください。 architecture section の port map には
デザイン信号名が必要です。
ShiftRegister_C_x (x = 16、 32、 および 64) テンプレートはカスケード可能なモジュールで、 対応する
SRLCxE プリ ミ ティブ (16)、 またはサブモジュール (32 および 64) をインスタンシエート します。 ShiftRegister_16 テンプレート を使用して、 SRL16 プリ ミ ティブをインスタンシエートできます。
VHDL および Verilog テンプレート
テンプレート名の数字はビッ ト数を表しています (例 : SHIFT_SELECT_16 は、 16 ビッ ト シフ ト レジ
スタ)。 C はカスケード可能を意味します。
次は、 プ リ ミ ティブのテンプレートです。
• SHIFT_REGISTER_16• SHIFT_REGISTER_16_C次は、 サブモジュールのテンプレートです。
• SHIFT_REGISTER_32_C (submodule: SRLC32E_SUBM)• SHIFT_REGISTER_64_C (submodule: SRLC64E_SUBM)対応するサブモジュールは、 デザインと合成する必要があ り ます。
例と して、SHIFT_REGISTER_16_C モジュールのテンプレート を VHDL および Verilog コードで示し
ます。
VHDL テンプレート
-- Module: SHIFT_REGISTER_C_16-- Description: VHDL instantiation template-- CASCADABLE 16-bit shift register with enable (SRLC16E)-- Device: Spartan-3 Family ----------------------------------------------------------------------- Components Declarations:--component SRLC16E -- pragma translate_off generic (-- Shift Register initialization ("0" by default) for functional simulation: INIT : bit_vector := X"0000");
-- pragma translate_on port ( D : in std_logic; CE : in std_logic; CLK : in std_logic; A0 : in std_logic; A1 : in std_logic; A2 : in std_logic; A3 : in std_logic; Q : out std_logic; Q15 : out std_logic);
end component;-- Architecture Section:---- Attributes for Shift Register initialization ("0" by default):attribute INIT: string;--attribute INIT of U_SRLC16E: label is "0000";---- ShiftRegister Instantiation
14 www.xilinx.co.jp
R
U_SRLC16E: SRLC16E port map (D => , -- insert input signal CE => , -- insert Clock Enable signal (optional)CLK => , -- insert Clock signalA0 => , -- insert Address 0 signalA1 => , -- insert Address 1 signalA2 => , -- insert Address 2 signalA3 => , -- insert Address 3 signalQ => , -- insert output signalQ15 => -- insert cascadable output signal);
Verilog テンプレート
// Module: SHIFT_REGISTER_16// Description: Verilog instantiation template// Cascadable 16-bit Shift Register with Clock Enable (SRLC16E)// Device: Spartan-3 Family//-------------------------------------------------------------------// Syntax for Synopsys FPGA Express// synopsys translate_off
defparam
//Shift Register initialization ("0" by default) for functional simulation:U_SRLC16E.INIT = 16'h0000;
// synopsys translate_on
//SelectShiftRegister-II Instantiation SRLC16E U_SRLC16E ( .D(),
.A0(),
.A1(),
.A2(),
.A3(),
.CLK(),
.CE(),
.Q(),
.Q15() );
// synthesis attribute declarations /* synopsys attribute INIT "0000"
*/
CORE Generator システム
ザイ リ ンクス Core Generator システムは、SRL16 を使用して高速で小型の FIFO スタイル シフ ト レジ
スタ、 遅延ライン、 およびタイム スキュー バッファを生成します。 大幅 256、 ワード数 1024 の非常
に効率的なシフ トがある、 RAM-based Shift Register モジュールを 図 15 に示します。 スタティ ッ ク レングス シフ ト レジスタおよびダイナミ ッ ク レングス シフ ト レジスタを生成できます。 また、モジュー
ルの出力をレジスタするオプシ ョ ンもあ り ます。 出力をレジスタするオプシ ョ ンを使用する場合、 次の
よ う な追加オプシ ョ ンがあ り ます。 Clock Enable、 Asynchronous Set/Clear/Init、 および SynchronousSet/Clear/Init。 相対配置マク ロ (RPM) または未配置ロジッ ク と してモジュールを作成するオプシ ョ ン
もあ り ます。
www.xilinx.co.jp 15
R
アプリケーシ ョン
遅延ライン
レジスタが豊富なザイ リ ンクス FPGA アーキテクチャは、パイプライン ステージを追加できるため、高
処理能力が得られます。 要求する機能を維持するため、 データ パスを均等にする必要があ り ます。 遅延
の追加クロ ッ ク サイクルが必要な場合は、 SRL16 を使用します (図 16 を参照)。
図 15: CORE Generator RAM-Based Shift Register モジュール
x465_14_040203
D[N:0]
ASET SSET
ACLR SCLR AINIT SINIT
A[M:0]
CE
CLK
Q[N:0]
図 16: 遅延ラインとして SRL16 を使用
4 Cycles 8 Cycles
Operation BOperation A
3 Cycles
3 Cycles
Operation C
4 Cycles 8 Cycles
Operation B
9 Cyclesusing SRL16
Pipeline
Operation A
3 Cycles
12 Cycles
Operation C
12 Cycles
12 Cycles
9-cycle imbalance
Paths staticallybalanced
X465_20_040603
16 www.xilinx.co.jp
R
リニア フ ィードバック シフ ト レジスタ
リ ニア フ ィードバッ ク シフ ト レジスタ (LFSR) のシーケンスは、 2n-1 (n = フ リ ップフロ ップの数)
の連続です。 特定のビッ ト を XOR または XNOR ゲート を通ってフ ィードバッ クするこ とでシーケン
スができます。 カウン ト シーケンスがあま り重要でないアプリ ケーシ ョ ン (例 : FIFO) に関しては、従
来のバイナリ カウンタの代わりに LFSR を使用できます。 また、 擬似ランダム ナンバー ジェネレータ
と しても使用します。 LFSR は、 アルゴ リズムの暗号化および解読に重要な構築ブロ ッ クです。
長 LFSR は、 シフ ト レジスタ内の特定の場所からビッ ト をタ ップする必要があ り ます。 SRL16 には
さまざまなタ ップ方法があ り ます。 1 つ目は、 Q15 と次の SRL16 をカスケードする一方で SRL16 で必
要なビッ ト をアドレッシングする方法です。 2 つ目は、 タ ップ ポイン トにアクセスするためにフ リ ップ
フロ ップを使用して SRL16 を拡張する方法です。 たとえば、 ビッ ト 49 とビッ ト 52 のフ ィードバッ ク
で 1 つの CLB に 52 ビッ ト LFSR が インプ リ メンテーシ ョ ンされる様子を 図 17 に示します。 3 つ目
は、 複数 SRL の LFSR を複製し、 各 SRL に異なるビッ ト をアドレス指定する方法です。 4 つ目は、 複
数のビッ ト ポジシ ョ ンを得るために 1 つの SRL ク ロ ッ ク サイクルに複数のアドレスを生成する方法で
す。 LFSR に必要な XNOR ゲー ト は、 CLB の SLICEL にあ らかじめ配置されています。 詳細は、
XAPP210 を参照してください。
Gold コード ジェネレータ
優れた相関プロパティを持つコード シーケンスを生成するには、 CDMA システムで Gold コード ジェ
ネレータを使用します (図 18 を参照)。 要素コードを持つ 2 つの LFSR の結果を足したモジュロ 2 によ
り小さな相関コードのセッ ト を生成するこ とを R.Gold 氏は提唱しています。 たく さんのコード信号が
混じったスペク トルの中で各コードのセッ ト を識別できるよ うにな り ます。 Gold コード ジェネレータ
を図 18 に示します。 LFSR を完成してフ ィードバッ クを行うのに必要なロジッ クは、 CLB の SLICELの中に配置されています。 詳細は、 XAPP217 を参照してください。
図 17: 1つの CLB にある 52 ビッ ト LFSR
XNOR
x465_15_040203
D Q
D Q
Bit 1
Bit 52
Bit 52
Bit 49
Bit 49
OutputDSRL16
Address = 15
QBit 17
DSRL16
Address = 15
QBit 33
DSRL16
Address = 15
Q
D QBit 51
D QBit 50
www.xilinx.co.jp 17
R
FIFOSRL16 コンポーネン トから同期 FIFO を生成できます。 他のリ ソースが不足している場合には、 この方
法が非常に有効です。1 つの CLB に対して 大 64 ビッ ト まで可能です。 よ り大規模な FIFO の場合は、
も効果的な リ ソースと してブロ ッ ク RAM を使用します。 詳細は、 XAPP256 を参照して ください。
カウンタ
SRL16 の各出力をフ ィードバッ クするこ とによ り、 16 ステートのシーケンスができます。 SRL16 をカ
スケード した場合、 さ らに長い不定カウン ト シーケンスができます。 ターミナル カウン トは、 通常の
キャ リー チェーンを使用して生成できます (図 19 を参照)。
図 18: Gold コード ジェネレータ
図 1: SRL16 シフ ト レジスタを使用した同期 FIFO
LFSR 1
LFSR 2
Gold Code Out
x465_16_040203
x465_17_040203
CLK
AddressCounter
DATA_OUT
FULL
EMPTY
SINIT
DATA_IN
RD_EN
SRL16BasedFIFO
WR_ENFIFO_COUNTFIFO
Count
StatusFlag
Generation
18 www.xilinx.co.jp
R
関連資料およびリファレンス
• XAPP210 : Virtex デバイスのリニア フ ィードバック シフ ト レジスタ
リ ニア フ ィードバッ ク シフ ト レジスタは FPGA アーキテクチャで非常に有効なカウンタです。 シフ ト レジスタの基本と して SRL16 を使用した場合、 1 つのスライスには 15 ビッ ト カウンタ、 2 つのスライスには 52 ビッ ト カウンタが入り ます。
• XAPP211 : SRL マクロを使用した PN ジェネレータ
擬似ランダム雑音シーケンスを使用し、 スペク ト ラム拡散の変調のために信号をコード化して幅広い伝送周波に信号を拡散します。 PN ジェネレータは LFSR がベースであ り、 SRL16 コンポーネントで効率的に生成できます。
• XAPP217 : Virtex デバイスの Gold コード ジェネレータ
PN シーケンスの特殊なタイプと して Gold コード ジェネレータがあ り ます。 これは、 SRL16 ベースの LFSR で生成できます。
• XAPP220 : ワイアレス アプリケーシ ョ ンの機能ブロックと しての LFSRCDMA などのアプリ ケーシ ョ ンにおける LFSR ( 例 : Gold コード ジェネレータ ) の使用に関する詳細について
• XAPP256 : Virtex-II シフ ト レジスタを使用した FIFO小規模な同期 FIFO を構築するには SRL16 が 適です。 どんな幅の FIFO でも作成でき、 1 ビッ トの解像度が得られます。 カスケード可能な SRL16 シフ ト レジスタ (SRLC16) でフレキシブルな深度が 16 得られます。 これらのテクニッ クは、 ブロ ッ ク RAM リ ソースが不足している場合の大規模 FIFO の生成に有益です。
• TechXclusive : The SRL16E : How Using this Exciting Mode Can Lead to Cost Saving of an Order of MagnitudeSRL16 の機能および次の項目におけるアプリケーシ ョ ンについて説明します。 パイプライン補正、擬似ランダム ノ イズ ジェネレータ、 シ リ アル フレーム同期装置、 ランニング アベレージ、 パルス生成と ク ロ ッ ク分割、 パターン生成、 ステート マシン、 動的アドレス指定可能シフ ト レジスタ、FIFO、 および RS232 レシーバ。
• DS228 : RAM-Based Shift Register LogiCORE ModuleSRL16 を使用して、 高速で小型な FIFO スタイルのシフ ト レジスタ、 遅延ライン、 およびタイム スキュー バッファを生成します。
• SRL16 Primitives in Libraries GuideSRL16 プリ ミ ティブとその変形の使用方法および機能について説明します。
おわりに Sprtan 3 ルッ ク アップ テーブルの SRL16 は、 16 個のフ リ ップフロ ップを使用しない空間効率のよい
シフ ト レジスタです。 小規模シフ ト レジスタが HDL コードで記述された場合、自動的にこの機能が推
論されます。 このアプ リケーシ ョ ン ノートで説明する SRL16 の使用を積極的に取り入れるこ とによ り、
その他のアプリケーシ ョ ンにおいても優れた効果が得られます。
図 19: ターミナル カウン ト付きの SRL-Based カウンタ
0
Q3
1SRL
0
Q2
TC
VCC
1SRL
0
Q1
1SRL
0
Q0
1SRL
x465_18_040503
www.xilinx.co.jp 19
R
改訂履歴 次の表に、 この文書の改訂履歴を示します。
日付 バージョ ン 改訂内容
04/10/03 1.0 初版リ リース