Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT...

19
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 ビット シフト レジスタ プ リ ミ テ ィ ブ、 お よ び専用 MUXF5MUXF6MUXF7 マルチプレクサから構成されています。 これらのシフト レジスタによ り、遅延やレイテンシの補正を必要とするアプリケーショ ンの効果的なデ ザインを展開します。 また、 同期 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

Transcript of Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT...

Page 1: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 2: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 3: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 4: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 5: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 6: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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 のどこを選んでもチェーンを作成できます。

Page 7: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 8: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 9: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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) を挿入します。

Page 10: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 11: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 12: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 13: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 14: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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) または未配置ロジッ ク と してモジュールを作成するオプシ ョ ン

もあ り ます。

Page 15: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 16: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 17: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 18: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

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

Page 19: Application Note: Spartan-3 Spartan-3 - Xilinx · 2019-10-16 · 4 R SLICEM にある 2 つの LUT を接続するのと同様に、複数の SLICEM をアドレス指定するにはマルチ

www.xilinx.co.jp 19

R

改訂履歴 次の表に、 この文書の改訂履歴を示します。

日付 バージョ ン 改訂内容

04/10/03 1.0 初版リ リース