Top Banner
WP231 (1.1) 2006 1 6 www.xilinx.co.jp 1 © 2005–2006 Xilinx, Inc. All rights reserved. XILINX, the Xilinx logo, and other designated brands included herein are trademarks of Xilinx, Inc. All other trademarks are the property of their respective owners. いかなる FPGA 設計においても、最高のパフォーマンスを得 るために欠かせない要因の つが、 デザイ ンの適切な RTL 記述です。 RTL レベルの設計中に、ち ょ っ と し た工夫をする こ と が、 100MHz 未満で動作するデザインか 400MHz 以上 で動作するデザインかの明暗を分ける こ とにつながり ます。 安定したデザイン パフォーマンスとは、 デザイン プロセス における様々な要因を熟慮した結果にほかな り ません。 まず は、デザインに最も適したハードウェア プラットフォームを 選択し な く てはな り ません。 そして、 選んだデバイス アーキ テクチャと、インプリメンテーション ツールの設定や機能を 検討する必要があ り ます。 さ ら に、 こ れは本稿の目的で も あ り ますが、 ターゲ ッ ト デバイ ス上に効果的に配置でき る HDL コードを記述しなくてはなりません。 これらの各項目 の詳細を記載したリ ソースは、ウェブ サ イ ト に多数掲載 さ れ ています。 本稿では、 デザインのパフォーマンスを向上させ るコードの記述方法とそのヒントに焦点を当てて紹介しま す。 適切な FPGA コーディ ング方法を繰り返し述べつつ、 あ まり知られていないながらも、最新のザイリンクス FPGA アーキテクチャにそのまま応用可能な技術を紹介します。 ホワ イ ト ペーパ : Virtex-4、 Spartan-3/3L および Spartan-3E FPGA WP231 (1.1) 2006 1 6 デザイン パフォーマンス向上の ための HDL コーディング法 R
22

デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

May 26, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 1

© 2005–2006 Xilinx, Inc. All rights reserved. XILINX, the Xilinx logo, and other designated brands included herein are trademarks of Xilinx, Inc. All other trademarks are the property of their respective owners.

いかなる FPGA 設計においても、最高のパフォーマンスを得るために欠かせない要因の 1 つが、 デザインの適切な RTL記述です。 RTL レベルの設計中に、ちょっと した工夫をするこ とが、 100MHz 未満で動作するデザインか 400MHz 以上で動作するデザインかの明暗を分けるこ とにつながり ます。

安定したデザイン パフォーマンス とは、 デザイン プロセスにおける様々な要因を熟慮した結果にほかな り ません。 まずは、デザインに最も適したハード ウェア プラ ッ ト フォームを選択しなくてはなり ません。 そして、 選んだデバイス アーキテクチャ と、インプ リ メンテーシ ョ ン ツールの設定や機能を検討する必要があ り ます。 さ らに、 これは本稿の目的でもあり ますが、 ターゲッ ト デバイ ス上に効果的に配置でき るHDL コードを記述しな く てはな り ません。 これらの各項目の詳細を記載した リ ソースは、ウェブ サイ トに多数掲載されています。 本稿では、 デザインのパフォーマンスを向上させるコードの記述方法とそのヒ ン ト に焦点を当てて紹介しま

す。 適切な FPGA コーディング方法を繰り返し述べつつ、 あま り知られていないながら も、 最新のザイ リ ン ク ス FPGAアーキテクチャにそのまま応用可能な技術を紹介します。

ホワイ ト ペーパ : Virtex-4、 Spartan-3/3L および Spartan-3E FPGA

WP231 (1.1) 2006 年 1 月 6 日

デザイン パフォーマンス向上のための HDL コーディング法

R

Page 2: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

2 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

リセッ トの使用とパフォーマンス

システム規模のオプシ ョ ンのうち、 パフォーマンスやエリ ア、 消費電力に大きな影響をおよぼすオプシ ョ ンが リセッ トです。 システム設計者の中には、 グローバル非同期リセッ トの使用を電源投入時の回路の初期化に限定する設計者もいますが、 これは FPGA 設計にとっては不要なこ とです。 ザイ リ ンクスの FPGA アーキテクチャでは、 リセッ トの使用とそのタイプがデザインのパフォーマンス と密接に関係しているため、 次のよ うな リセッ ト ス ト ラテジがあ り ます。• シフ ト レジスタ ルッ クアップ テーブル (SRL) のよ うな、デバイスのライブラ リ コンポーネン トの使用を抑制する。

• 専用のハードウェア ブロ ッ クの同期エレ メン トの使用を控える。• ファブ リ ッ ク内のロジッ クを最適化しない。

• リ セッ ト信号のファンアウ トは大き くなる場合があるため、 配置配線を厳し く制約する。

SRLすべての最新ザイ リ ンクス FPGA アーキテクチャでは、 ルッ クアップ テーブル (LUT) エレ メン ト をロジッ ク、 ROM/RAM あるいは SRL と してコンフ ィギュレーシ ョ ンできます。 合成ツールでは、 RTL コードからどの構造が使用されているかが推論できます。 ただし、 SRL のライブラ リ コンポーネン トが リセッ ト機能を持たないため、 パフォーマンスを最適化したシフ ト レジスタ (SRL) を使用する場合にリセッ トがコーディングできません。 リ セッ ト をコーディングしてシフ ト レジスタを推論する場合には、 数個のフ リ ップフロ ップ、 あるいはロジッ クを周辺に追加してリセッ ト を機能させる必要があ り ます。 図 1に示すよ うに、 シフ ト レジスタで リセッ ト を使用しないコーディングでは、 通常、 出力で形成されるレジスタは 1 つなので、 エ リ アおよびパフォーマンスは最適とな り ます。

リ セッ ト を使用しない場合に比べ、 使用した場合にエリアと消費電力に及ぼす効果は明らかですが、 パフォーマンスに与える影響はそれほど明確ではあ り ません。 通常、 レジスタ間のタイ ミ ング パス ( フ リ ップフロ ップの Clock-to-Out、 配線遅延、次のフ リ ップフロ ップのセッ ト アップ タイム ) はデザイン内の最長パスにならないため、 フ リ ップフロ ップで構築したシフ ト レジスタのパフォーマンスがク リ ティカルになるこ とはあ り ません。 ただし、 リ ソースの追加使用 ( フ リ ップフロ ップおよび配線 ) がデザインの他の部分の配置配線にマイナスの影響を与え、 配線遅延が長くなる場合があ り ます。 SRL にさらにロジッ クを追加して リセッ ト機能を持たせる と、追加したロジッ ク部分が SRL の Clock-to-Out に影響を与え、 データが目的のロジッ クに到達するまで時間がかかり、 パフォーマンスが低下します。

ヒ ン ト

• 最適化した SRL ラ イブラ リ セルのエリ アおよびパフォーマンスへの影響を避

図 1 : パフォーマンスを最適化したシフ ト レジスタ

D Q

Q15

Address

CE (Write Enable)

CLK

SRLC16E QD Synchronous Output

WP231_01_110905

FF

Page 3: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 3

R

け、 シフ ト レジスタの リセッ ト を使用しない。

乗算器と RAM最新のザイ リ ンクス FPGA アーキテクチャでは、 すべてに専用の演算リ ソースがあり ます。 この リ ソースは、 多数の DSP アルゴ リズムなどで乗算に使用できますが、バレル シフタなどのアプリ ケーシ ョ ンでも使用できます。同様に、 さまざまなサイズの RAM が、 ほぼすべての FPGA で、 アプリ ケーシ ョ ンを問わず使用されています。 すべてのザイ リ ンクス FPGA には、 RAM、 ROM、 大規模 LUT、 さ らには汎用ロジッ ク と して使用できるブロ ッ ク RAM エレ メン トがあり ます。 乗算器と RAM リ ソースの両方を利用するこ とで、 よ り コンパク トで高性能なデザインが実現できます。 パフォーマンスにおいては、 選択する リセッ トのタイプによってデザインに与える影響が違います。 乗算器ブロ ッ クおよび RAM レジスタは、 共に同期リセッ トだけを有しますので、 これらの機能に対して非同期リセッ ト をコーディングする と、 ブロ ッ ク内のレジスタが使用できなくな り ます。 これによって、 パフォーマンスに多大な影響を及ぼします。 たとえば、 最高速の VirtexTM-4 をターゲッ ト デバイス と して、 完全にパイプライン化された乗算器で非同期リセッ ト を使用する と、 パフォーマンスは、 約 200MHz に下がり ます。 同期リセッ ト を使う よ う再コーディングすると、 パフォーマンスは 2 倍以上の 500MHz に向上します。 Virtex-4 のブロ ッ ク RAM は、 乗算器と同様にオプシ ョ ンのレジスタを備えています。 これらの出力レジスタを使用する と、 RAM のクロ ッ クから出力までの時間が短縮し、 デザイン全体の処理速度が向上します。 オプシ ョ ンのレジスタにはリセッ ト ポートがないため、 リセッ トのビヘイビアをコーディングしても、 結果的に出力レジスタはイネーブルされません。 また、 RAM を LUT あるいは汎用ロジッ ク と して使用する際に派生する問題があ ります。 時には、 エ リ アとパフォーマンスの理由から、 ROM や汎用ロジッ ク と してコンフ ィギュレーシ ョ ンした複数の LUT を 1 個のブロ ッ ク RAM に圧縮するこ とが有効な場合があ り ます。 方法と しては、 これらの構造をマニュアルで指定するか、 もし くは、 合成ツールに制約を加え、 自動的にロジッ ク デザインのその部分を未使用のブロ ッ ク RAM リ ソースにマップするかのいずれかです。 ブロ ッ ク RAM のリセット コンフ ィギュレーシ ョ ンによ り、 同期リセッ ト を使用する場合や、 リセッ ト を全く使用しない場合には、デザイン機能を変更せずに、汎用ロジッ クが配置できます。 ヒ ン ト

• レジスタを専用リ ソースにパッ クできな くな り、 パフォーマンス、 使用率、 ツールの最適化に影響を与えるため、 非同期リセッ トの使用は避ける。

汎用ロジック

非同期リセッ トの影響は、汎用ロジッ ク構造のパフォーマンスにも現れます。 FPGA のすべての汎用レジスタがセッ トおよびリセッ ト を同期または非同期のいずれにでもプログラムできるため、 非同期リセッ ト を使用しても問題がないよ うに思えますが、 それは得てして誤りです。 非同期リセッ トがどのよ うに最適化を妨げるか、 図 2 にコード例を示します。 非同期リセッ ト を使用しない場合、 信号が必要とする リソースが利用できるため、 レジスタを駆動している他の同期パスが最適化できます (図 3 の FDRSE を参照 ) 。例 1 :非同期リセッ ト コードをインプリ メン トする場合には、 ロジッ ク生成に 5 つの信号が使用されるため、 合成ツールでデータ パスに対する 2 つの LUT の推論が必要になり ます。 このコードは、 図 2 のよ うにインプリ メ ン トできます。

Page 4: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

4 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

例 2 :同期リセッ ト を使用してこのコードを書き換える と、 合成ツールでは、 機能のインプリ メン トによ り柔軟に対応できます。 このコードは、 図 3 のよ うにインプリ メントできます。

図 2 : 非同期リセッ トのインプリ メン ト

A

B

C

D

E

LUT4

LUT4

CLK

RST

CLR

FDCE

WP231_02_112105

process (CLK, RST)begin if (RST = '1') then Q <= '0'; elsif (rising_edge(clk)) then Q <= A or (B and C and D and E); end if;end process;

always @(posedge CLK, posedge RST) if (RESET) Q <= 1'b0; else Q <= A | (B & C & D & E);

VHDL Verilog

Q

Page 5: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 5

R

図 3 で示したインプリ メン トでは、 合成ツールは A がアクティブ High のと き、 Q が常にロジッ ク 1 である と認識します (OR ファンクシ ョ ン )。 FDRSE レジスタは同期セッ ト あるいはリセッ ト と してコンフ ィギュレーシ ョ ンされているため、 セッ トは同期データ パスの一部と して自由に使用できます。 例 3 :非同期セッ ト あるいはリセッ トがパフォーマンスに深く関わりがあるこ とを示す、 8 つの信号を使用したさ らに複雑な機能を見てみます。 この機能のインプリ メン トには、 最低でも 3 つの LUT が必要です。 このコードは、 図 4 のよ うにインプリ メン トできます。

図 3 : 同期リセッ トのインプリ メン トでパフォーマンスが改善

C

B

E

D

LUT4

CLK

RST

Q

R

S

FDRSE

WP231_03_112105

A

VHDL Verilog

process (CLK)begin if (rising_edge(clk)) then if (RST = '1') then Q <= '0'; else Q <= A or (B and C and D and E); end if; end if;end process;

always @(posedge CLK) if (RESET) Q <= 1'b0; else Q <= A | (B & C & D & E);

Page 6: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

6 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

例 4このコードは、 同期リセッ ト を使用して 図 5 のよ うに書き換え、 インプ リ メン トできます。

図 4 : 8 つの入力機能を使用した非同期リセッ トのインプリ メン ト

B

A

C

D

E

LUT4

F

G

H

LUT4

LUT4

CLK

RST

Q

CLR

FDCE

WP231_04_112105

VHDL Verilog

process (CLK, RST)begin if (RST = '1') then Q <= '0'; elsif (rising_edge(clk)) then Q <= (F or G or H) and (A or (B and C and D and E)); end if;end process;

always @(posedge CLK, posedge RST) if (RESET) Q <= 1'b0; else Q <= (F | G | H) & (A | (B & C & D & E));

Page 7: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 7

R

図 5 のインプリ メン ト結果が示すよ うに、 同じロジッ ク ファンクシ ョ ンのインプリメン トに使用する LUT が少なくて済むうえ、 このファンクシ ョ ンを生成する各信号でロジッ ク レベルが減少するため、 デザインがよ り高速化されます。 デザイン内のロジッ クの多くは同期なので、 同期を使用する場合、 あるいはリセッ ト をまったく使用しない場合には、 デザインをさ らに最適化し、 エ リ アを縮小させ、 パフォーマンスが向上できます。

ヒ ン ト • グローバル リ セッ トが必要かど うかを確認する。• 非同期制御信号の使用を控える。

加算器ツリーではな く加算器チェーンを使用する

多くの信号処理アルゴ リズムでは、 サンプルの入力ス ト リームに四則演算を実行後、この四則演算のすべての出力の和を求めます。 FPGA のよ うなパラレル アーキテクチャでは、 和をインプリ メ ン トするため、 加算器には一般的にツ リー構造が使われます。 加算器ツ リーの使用で懸念されるのは、 サイズが変化する点です。 加算器の数は、 加算器ツ リーの入力数で決ま り ます。 加算器ツ リーの入力数が多いほど、 必要な加算器の数も増え、 ロジッ ク リ ソースや消費電力も増加します。 また、 大きなツリーほどツ リーの末端に進むにしたがい、 加算器の規模が大型化し、 ロジッ ク レベ

図 5 : 同期制御信号でロジックレベル数が削減できる

LUT4CLK

A

B

C

D

E

RST

F

G

H

QS

R

LUT4

FDRSE

WP231_05_112105

VHDL Verilog

process (CLK)begin if (rising_edge(clk)) then if (RST = '1') then Q <= '0'; else Q <= (F or G or H) and (A or (B and C and D and E)); end if; end if;end process;

always @(posedge CLK) if (RESET) Q <= 1'b0; else Q <= (F | G | H) & (A | (B & C & D & E));

Page 8: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

8 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

ル数が増え、 システム パフォーマンスの悪化を招きます。 デバイスの使用率と消費電力をできるだけ抑え、 加算器ツ リーのパフォーマンスを維持するには、 加算器ツリーを専用のシ リ コン リ ソース と してインプリ メン ト します (図 6 参照 )。 しかし、シ リ コン エリアを縮小し、 かつ加算器ツ リーの大半を専用リ ソース内にインプリ メン トするのは、 FPGA の製造メーカには不可能です。 Virtex-4 デバイス ファ ミ リは、 DSP48 専用シ リ コンの列を使用する という別の手段で和をインプリ メン ト します。 図 7 に示すよ うに、 加算器ツ リーではなく、 チェーン型の加算器を使用して和をインク リ メ ン ト させ、 算出します。 この方法は、 従来の FPGA とは一線を画し、 ロジッ ク と インターコネク トの両者全体が専用シ リ コン内に存在するこ とから、 DSP アルゴ リ ズムのパフォーマンスの最大化および消費電力の低減につながり ます。 また、 パイプライン化する と、 DSP48 ブロ ッ クのパフォーマンスは、 加算器の数にかかわらず、 最速のスピードグレードで 500MHz とな り ます。 48 ビッ トの加算器あるいはアキュムレータを組み合わせたポート をカスケード接続する と、 現在のサンプルの算出に加え、 それまでに算出したすべてのサンプルの和も計算できます。

Page 9: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 9

R

図 6 : 加算器のツリー構造がパフォーマンスを低下させ、 消費電力を増加させる

48

48

y(n-6)

18

18 48

48

×

+

+ 18

18

18

18

18

18

h0(n)

X(n)

h1(n)

48

48

18

18 48

48

×

+ × 18

18

×

18

18

18

18

h2(n)

X(n)

h3(n)

h4(n)

X(n-2)

X(n-4)

h5(n)

h6(n)

h7(n)

+

+

Z-2

Z-2

Z-2

×

×

×

× +

The final stages of the post addition are implemented outside the dedicated blocks and are the performance bottleneck that consume more power.

WP231_06_111505

+

Page 10: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

10 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

Virtex-4 の加算器のチェーン構造を利用するには、 加算器ツ リーの記述を加算器チェーンの記述に置き換えます。 ダイレク ト フォーム フ ィルタから転置フ ィルタへの変換、 あるいはシス ト リ ッ ク フォーム フ ィルタへの変換方法は、 UG073: 『FPGA の XtremeDSP ユーザーガイ ド』 を参照してください。 通常、 この変換によって、 デザインにレイテンシが追加されます。 変換終了後、 アルゴ リ ズムはアプリ ケーシ ョ ンの要求する以上に高速で動作します。 その場合、 マルチチャネ リ ングやフォールディングなどのいずれかの手法を使用して、 デバイスの使用率や消費電力をさらに向上できます。 いずれの手法も、 小型デバイスへのデザインのインプリ

図 7 : チェーン型の加算器でパフォーマンスが予測できる

Slice 7

Slice 8

Slice 6

Slice 5

48

48

48

18

18 48

48

48

48

×

× +

×

18

18

18

18

× 18

18

48 Y(n–10)

h0(n)

X(n)

h1(n-1)

Slice 3

Slice 4

Slice 2

Slice 1

Zero

48

48

48

18

18 48

48

48

48

×

×

×

18

18

18

18

× 18

18

h2(n-2)

h3(n-3)

h4(n-4)

h5(n-5)

h6(n-6)

h7(n-7)

48

The post adders are contained wholly in dedicated silicon for highest performance and lowest power.

+

+

+

+

+

+

+

Sign Extended from 36 Bits to 48 Bits WP231_07_110905

Page 11: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 11

R

メ ン ト時、 あるいは空いた リ ソースを使用して、 デザインに機能を追加する場合に有効です。

• マルチチャネ リ ングとは、 非常に高速な演算エレ メン ト を利用して、 はるかに低いサンプル率で複数入力ス ト リーム (チャネル ) を処理するこ とです。 この手法は、 シ リ コン効率をチャネル数とほぼ等倍に高めます。 マルチチャネル フ ィルタリ ングは、 時分割多重化単一チャネル フ ィルタ と して見るこ とができます。 たとえば、 一般的なマルチチャネル フ ィルタ リ ングでは、 各チャネルに個別のデジタル フ ィルタを使用して、 複数入力チャネルがフ ィルタ リ ングされます。 Virtex-4 の DSP48 スライスを利用する と、 8 倍クロ ッ クの単一フ ィルタでクロ ッキングできるため、 単一デジタル フ ィルタで 8 つすべての入力チャネルがフ ィルタ リ ングできます。 したがって、 FPGA に必要な リ ソース数が約 1/8 に削減できます。

• フォールディングは同様の概念で動作します。 時分割多重化複数入力ス ト リームを使用せずに、 個別フ ィルタのタ ップを時分割多重化する と、 フ ィルタが使用する リ ソースが少なくな り ます。 空いた リ ソースは別の用途に使用できます。

ヒ ン ト

• Virtex-4 の加算器をツ リー構造にせず、 カスケード接続した記述を使用する。

ブロック RAM のパフォーマンスを最大化メモ リ エレ メン ト を効率的に推論する場合、 パフォーマンスに影響を与える次の要因を考慮する必要があ り ます。

• 専用ブロ ッ ク RAM と分散 RAM のどちらを使用するか。• 出力パイプライン レジスタを使用する。• 非同期リセッ トの使用を控える。

他の要因と しては、 HDL のコーディング スタイルと合成ツールの設定がメモリのパフォーマンスに大き く影響します。

HDL コーディング スタイルデュアル ポート ブロ ッ ク メモ リ を推論する場合、 2 つのポートが同じ メモ リ セルに同時にアクセスするこ とが考えられます。 たとえば、 両ポートが、 異なる値を同時に同じ メモ リ セルに書き込みする と、 競合が発生し、 メモ リ セルの内容が不安定になり ます。 また、 メモ リのコンフ ィギュレーシ ョ ンで懸念される例には、 ターゲッ ト デバイスによってメモ リの出力値が異なる点があ り ます。 最新の Virtex および SpartanTM ファミ リは、 プログラマブルな 3 種の動作モードによって、 書き込み中のメモ リ出力が管理できます。 デバイスのユーザーガイ ドに、 これらの動作モードの詳細が記載されています。 例 5 :合成ツールは、 表 1 に示したよ うに、 コーディング スタイルによってこれらのモードのいずれかを推論できます。

Page 12: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

12 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

ヒ ン ト

• 「書き込み前に読み出し」 モードを使用せず、 ブロ ッ ク RAM のパフォーマンスの最大化を実現する。

合成ツールの設定

ブロ ッ ク メモ リのパフォーマンスに大きな影響を与える要因で、 次に重要なのは合成ツールの設定です。 合成ツール (Synplicity社の Synplify など ) によっては、RAM の周囲にバイパス ロジッ クを挿入し、 RTL とハード ウェア間で発生するおそれのある ミ スマッチを回避します。 この余剰ロジッ クには、 読み出しおよび書き込みが同じ メモ リ セルで実行される場合の既知の値への RAM 出力を強化する目的があ り ます。 同じ メモ リ セルで絶対に読み出し と書き込みが同時に実行されない設計であれば、 合成ツールでアプリ ケーシ ョ ンにバイパス ロジッ クが追加されないよ う設定できます (表 2 を参照 )。 余剰ロジッ クには、 メモ リのすべての出力パス上にオーバーヘッ ド ロジッ クを追加するため、 メモ リ パフォーマンスへのマイナスの影響もあ り ます。 追加ロジッ クを回避、 あるいは使用しないこ とが、 メモ リ パフォーマンスの維持につながり ます。

表 1 : ブロック RAM オペレーテ ィング モード インターフェイスの用例VHDL Verilog

-- 'write first' or transparent modeprocess (clk)begin

if (rising_edge(clk)) thenif (we = '1') then

mem(conv_integer(addr)) <= di ; do <= di;

else do <= mem(conv_integer(addr));

end if; end if;

end process;

-- 'read first' or read before write(slower)process (clk)begin

if (rising_edge(clk)) thenif (we = '1') then

mem(conv_integer(addr)) <= di;end if;do <= mem(conv_integer(addr));

end if;end process;

-- 'no change' modeprocess (clk)begin

if (rising_edge(clk)) thenif (we = '1') then

mem(conv_integer(addr)) <= di ;else

do <= mem(conv_integer(addr));end if;

end if;end process;

// 'write first' or transparent modealways @(posedge clk) begin if(we) begin do <= data; mem[address] <= data; end else do <= mem[address];end

// 'read first' or read before write mode(slower)always @(posedge clk) begin if (we) mem[address] <= data; do <= mem[address]; end

// 'no change' mode always @(posedge clk) if (we) mem[address] <= data; else do <= mem[address]; end

Page 13: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 13

R

ヒ ン ト

• 合成ツールの設定、 テンプレートの推論、 メモ リ ブロ ッ クのパフォーマンスを最大化するための制限事項を確認する。

レジスタの一般的な使用方法

FPGA アーキテクチャでは、各 LUT に 1 つのレジスタがあ り、 I/O には、 メモ リ エレ メン トや DSP エレ メン トのよ う な専用ブロ ッ クや追加レジスタがあ り ます。 このよ う な リ ソースを使用するこ とが、 パフォーマンスの最大化の実現に不可欠とな ります。 レジスタには、デザイン パフォーマンスを向上させる複数の目的があ り ます。 これらのレジスタは、 ク リ ティカル パス、 ク リ ティカル ネッ トのファンアウ ト、セッ ト アップ、 I/O あるいは専用ブロ ッ クからの Clock-to-Out で、 ロジッ ク レベル数の削減に使用されます。 使用可能なレジスタを最適化するためのガイ ド ラ インは後述します。

専用ブロック レジスタの使用FPGA には、 メモ リや DSP といった、 ほぼすべてのデザインで使用する機能の専用回路があ り ます。 これらのブロ ッ クにはオプシ ョ ンのレジスタがあ り ます。 これらのレジスタをイネーブルにする と、 セッ ト アップ、 Clock-to-Out とブロ ッ ク ク ロ ッ ク速度のいずれかあるいは両方のブロ ッ ク パフォーマンスが向上できます。 合成ツールは、 エ リ アを最小限に抑え、 消費電力を削減し、 パフォーマンスを最大に引き上げるため、 これらのブロ ッ クにレジスタを自動的にパッ ク しよ う と します。 設計者は、 合成ツールで制約を与えて、 推論したコンポーネン トのマッピングを制御できます。 これらのブロ ッ クをインスタンシエートする際、 アプリ ケーシ ョ ンのパフォーマンスを最大化するレジスタをイネーブルにする必要があ り ますが、 合成ツールのデフォルト設定では、 ユーザーがインスタンシエート したアキテクチャのコンポーネン トが最適化されません。 最高のパフォーマンスを導くためにすべてのレジスタをイネーブルにするこ とが理想的ですが、 レイテンシの要件を常に満たすとは限り ません。 その場合は、 設計者の責任において適切なレジスタの集合をイネーブルにする必要があ り ます。 たとえば、 乗算器 (MREG) と入力レジスタ (AREGおよび BREG) だけが使用される場合、 Virtex-4 DSP48 のセル (高速のスピードグレード ) は 1.8ns、 Clock-to-Output が 2.3ns とな り ます。 同じ機能とレイテンシを維持しながら、 MREG ではなくアキュムレータの出力レジスタ (PREG) をイネーブルにする と、 セッ ト アップ タイムが 3ns に延び、 Clock-to-Out は 0.6ns に短縮します。 詳細は、 図 8 を参照してください。

表 2 : 競合を避けるグルー ロジックの挿入をディスエーブルにするVHDL Verilog

type mem_type is array (127 downto 0) ofstd_logic_vector (7 downto 0);

signal mem : mem_type;

-- disable conflict avoidance logicattribute syn_ramstyle of mem : signal is

"no_rw_check";

// disable conflict avoidance logicreg [7:0] mem [127:0] /* synthesis

syn_ramstyle=no_rw_check*/;

Page 14: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

14 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

次の項目を考慮するこ とが重要です。

• 駆動するロジッ クのタイ ミ ング、 あるいは専用ブロ ッ クで駆動されるロジッ クのタイ ミ ング

• HDL コード内のレジスタの位置ヒン ト

• 専用ブロ ッ クを推論する場合、 合成ツールが、 パフォーマンスを最良にするレジスタのセッ ト をイネーブルにしない場合に合成制約を使用する ( インスタンシエーシ ョ ンについて考慮が必要 )。

• インスタンシエート したコンポーネン トにどのレジスタをイネーブルにするか選択する場合、 レジスタの最大数が使用されるこ とを確認し、 ブロ ッ ク内のレジスタからレジスタへの遅延、 およびレジスタ間の遅延を考慮する。

I/O レジスタを使用するザイ リ ンクスのすべての FPGA は、 FPGA の入力パスと出力パスに専用のレジスタを備えています。 このレジスタを利用して、 入力パスのセッ ト アップ タイムおよび出力パスの Clock-to-Out を短縮し、 外部デバイスへのデータ供給のタイ ミ ング要件を容易に満たすこ とができます。 ただし、場合によっては専用の I/O レジスタを使用するこ とで、 FPGA 内のタイ ミ ングにマイナスの影響が出る場合があ り ます。 内部ロジッ クへの配線遅延を促すケースです。 これらのレジスタは、 I/O のタイ ミ ングを満たすこ とが不可欠な場合には I/O 内に配置し、 そ うでない場合は FPGA ファブリ ッ ク内に配置すべきです。 Synplify のよ うな合成ツールでは、 タイ ミ ング仕様にしたがって、 ファブ リ ッ ク内あるいは I/O 内に自動的にレジスタが配置されます。 合成ツールが自動配置をサポート していない場合、 あるいはレジスタを手動で制御しながら配置したい場合は、 次の手順を実行してください。

1. 合成ツール (合成ツール資料を参照 ) のグローバル I/O レジスタ配置オプシ ョ ンをディ スエーブルにする。

2. IOB=TRUE を UCF ファ イルあるいはソース HDL コードに追加して、 レジスタを I/O に配置指定する (制約ガイ ドの IOB 制約を参照 )。

3. ISE Project Navigator で Map オプシ ョ ン [Pack I/O Registers/Latches into IOBs]をディ スエーブルにする ( あるいは、 コマンド ラ インから -pr スイ ッチを使用しない )。 この設定によって、 レジスタは I/O に自動的に配置されません。 図 9 を参照してください。

図 8 : DSP48 内部レジスタ

AREG

BREG WP231_08_111405

× +MREG PREG

48

Page 15: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 15

R

I/O レジスタの使用を制御するこ とで、 FPGA 内部のタイ ミ ング仕様を満たす必要のある FPGA への入出力のデータパスのタイ ミ ングのバランスを取り ます。 また、画期的な方法と して、 FPGA へのすべての入出力ポート上のレジスタが最上位の HDL コードで記述できます。 コードの最上位階層でレジスタを指定する と、 FPGA のインプリ メン トに階層デザイン手法を使用した場合の配置の競合が回避できます。 また、 ボード基板のキャプチャ ツールで使用できない場合があるポートの記述用の階層名を作成する必要もあ り ません。

ヒ ン ト

• I/O セルへのレジスタのグローバル パッ クをディ スエーブルにする。 その代わり、 回路基板上でタイ ミ ングがク リ ティカルなレジスタだけは、 FPGA の I/O セルにパッ ク されるよ う制約します。

ファンアウトの大きいレジスタを複製する

レジスタの複製手法を使用する と、 複製されたレジスタが信号のファンアウ ト を小さ く し、 ク リ テ ィカル パスの動作速度を向上できます。 この方法によって、 インプリ メンテーシ ョ ン ツールで異なるロード信号や関連ロジッ クの配置配線にゆと りができます。 合成ツールでは、 この手法が頻繁に用いられます。 タイ ミ ング レポートで、 配線遅延の長い、 ファンアウ トの小さいネッ トがク リ ティカル パスと された場合には、 合成ツールでの複製制約あるいは手動複製レジスタを考慮する必要があ ります。 表 3に、 64 ロード信号を手動で一度に複製する方法を HDL コードで示します。

図 9 : レジスタが I/O セルに無差別にパックされないようにする

WP231_09_110905

Page 16: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

16 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

例 6 :通常、 手動で複製したレジスタが合成ツールで自動的に最適化されないよ う、 合成制約をさ らに追加する必要があ り ます。 上記の例では、 XST 構文 (EQUIVALENT_REGISTER_REMOVAL) が使用されています。合成ツールの多くは、 ファンアウ トのしきい値を利用して、 レジスタを複製するかど うかを自動的に判別します。 しきい値をグローバルに調整するこ とで、 ファンアウ トの大きいネッ ト を自動的に複製するこ とができますが、 どのレジスタを複製すべきかを設計者が制御できるほど高機能ではあ り ません。 さ らなる措置と して、 特定のレジスタか階層レベルに属性を与えるか、 どのレジスタを複製し、 どのレジスタを複製すべきでないかを指定してください。

ヒ ン ト

• 配置配線ツールのレポートで、 ファンアウ トの大きい信号がデザインのパフォーマンスに影響を与えている場合、 複製を考慮する。

パイプラインのレベルを追加する

パフォーマンスを向上させる他の手段と しては、 複数レベルのロジッ クを持つ長いデータ パスを再構築し、 複数クロ ッ ク サイクルに再分配する方法があ り ます。 この手法では、 レイテンシおよびパイプライン化されたオーバーヘッ ド ロジッ クが増加しますが、 データのスループッ トが向上し、 ク ロ ッ ク サイクルが高速化します。 FPGA には優れたレジスタが豊富にあるので、 追加レジスタやオーバーヘッ ド ロ

表 3 : レジスタの複製例VHDL Verilog

attribute EQUIVALENT_REGISTER_REMOVAL : string;attribute EQUIVALENT_REGISTER_REMOVAL of

ce1 : signal is "NO";attribute EQUIVALENT_REGISTER_REMOVAL of

ce2 : signal is "NO";

begin

-- Clock enable register with 64 fanout-- replicated onceprocess (clk) begin

if (rising_edge(clk)) then ce1 <= ce; ce2 <= ce;

end if;end process;

process (clk) beginif (rising_edge(clk)) then

if (ce1='1') then res(31 downto 0) <= a_data(31 downto 0);

end if; if (ce2='1') then res(63 downto 32) <= a_data(63 downto 32);

end if;end if;

end process;

(*EQUIVALENT_REGISTER_REMOVAL="NO"*) reg ce1,ce2;

// Clock enable register with 64 fanout// replicated oncealways @(posedge clk) begin

ce1 = ce;ce2 = ce;

end

always @(posedge clk) begin

if (ce1)res[31:0] <= a_data[31:0];

if (ce2)res[63:32] <= a_data[63:32];

end

Page 17: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 17

R

ジッ クがそれほど問題にはなり ません。 この手法を用いる と、 データパスは複数クロ ッ クに分散されるため、 他のデザイン部分においては、 追加したパスのレイテンシを反映させたデザインを特に考慮する必要があ り ます。 表 4 に、 6 レベルのレジスタを 32 X 32 乗算器に加えた場合のコーディング方法を示します。 合成ツールでは、最適化された Virtex-4 DSP48 のレジスタ と これらのレジスタをパイプライン化し、データのスループッ ト を最大にします。

可能であれば、 デザインの検証方法およびツール セッ トで リ タイ ミ ングとパイプラインをま とめて、 デザイン パフォーマンスを向上させるよ う考慮すべきです。 リ タイ ミ ングとは、 組み合わせロジッ クのレジスタを調整して自動的に移動する合成や配置配線のアルゴ リズムで、 デザインの主要な入出力において同等のビヘイビアを維持しながら、 タイ ミ ングを向上させます。 リ タイ ミ ングによって、 コード変更をせずにパフォーマンスを向上させ、 RTL デザインを簡略化できます。 ただし、 リ タイ ミ ングによってデザイン検証をよ り複雑化させてしま う場合があ り ます。 レジスタ名、 その位置、 機能が RTL との記述に合致しなくなるこ とが理由です。 そのため、 リ タイ ミ ングを使用しない設計者もいます。 リ タイ ミ ングを使用しない場合には、 デバイスに関する設計者の知識を活かして RTL でレジスタを記述し、 使用可能なデバイス リ ソースのレジスタを効率的に配置できます。 パフォーマンスにおいて、 内在するアーキテクチャのロジッ クのインプリ メンテーシ ョ ンは常に考慮すべきです。 また、 ロジッ クのレベル数と信号の見込まれるファンアウ ト数に該当する各コード も考慮すべきでし ょ う。 RTL コードでは、ロジッ クのレベルやファンアウ トに偏りが出ないよ う、 レジスタの均等配置を選択する必要があ り ます。 このガイ ド ラ インにそってロジッ クを配置すれば、 可能な限りデザイン パフォーマンスを向上させるこ とができます。ヒ ン ト

• レジスタ間のロジッ ク レベルを調整する と、 デザインのパフォーマンスが向上します。 RTL コードでパイプラインのレベルを追加するか、 合成ツールにリ タイ ミ ングのオプシ ョ ンを適切に適用するか、 あるいはその両方を実行してください。

表 4 : パイプラインのレベルを追加するVHDL Verilog

type regbank6x64 is array(PIPE-1 downto 0) ofstd_logic_vector(63 downto 0);

signal prod: regbank6x64;

-- 32x32 multiplier with 4 DSP48 (PIPE=6)prod(0) <= a * b;

regbank: for i in 1 to PIPE generate begin process (clk) begin if (rising_edge(clk)) then prod(i) <= prod(i-1); end if; end process; end generate;

mult_out <= prod(PIPE);

parameter PIPE = 6;

reg signed [63:0] prod [PIPE-1:0];

// 32x32 multiplier with 4 DSP48 (PIPE=6)always @(posedge clk) begin prod[0] <= a * b; for (i=1; i<=PIPE-1; i=i+1) prod[i] <= prod[i-1];endassign mult_out = prod[PIPE-1];

Page 18: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

18 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

推論かインスタンシエートかの選択

通常、 ビヘイビアからデザインを記述し、 FPGA で使用可能なゲートに、 合成ツールでコードをマッピングするこ とが望ましいと されています。 コードを移植しやすくするには、 推論したロジッ クすべてを合成ツールで可視し、 機能同士の最適化が実行できるよ うにします。 この最適化に含まれるのは、 ロジッ クの複製、 結合と再構築、 レジスタ間のロジッ ク遅延を調整するためのリ タイ ミ ングです。 デバイスのライブラ リ セルをインスタンシエート しても、 合成ツールではデフォルトで最適化されません。 したがって、 デバイスのライブラ リ セルの最適化を命令しても、 合成ツールでは RTL を使用した同レベルでの最適化は通常実行できません。 そのため、合成ツールではセルを介した最適化ではなく、 パスへ、 もし くはパスからのセルの最適化を実行します。 たとえば、 SRL をインスタンシエート した結果、 この SRL が駆動するロジッ クのコーンが長い場合には、 このパスがボ トルネッ ク となる可能性があ り ます (前述の SRL を参照してください )。 SRL の Clock-to-Out は、 一般的なレジスタよ り も遅延が長くな り ます。 Clock-to-Out 遅延を改善させつつ SRL が使用するエリ アの縮小を妨げないよ うにする と、 一般的なフ リ ップフロ ップで最終的にインプリ メン ト される SRL の遅延が、 実際の遅延よ り短く生成されるこ とにな り ます。 とはいえ、 インスタンシエーシ ョ ンに都合のいい場合もあ り ます。 合成ツールでマッピングする と、 タイ ミ ング、 消費電力、 エ リ ア制約が満たされない場合や、FPGA 内のある特別な機能が推論できなくなる場合です。 インスタンシエーシ ョ ンにおいては、 設計者が合成ツール全体を管理します。 たとえば、 設計者はパフォーマンスを向上させるために、 合成ツールが通常実行する LUT とキャ リー チェーンのエレ メン ト結合を選択せずに、 LUT だけを使用したコンパレータをインプ リ メントできます。 その他の場合、 インスタンシエーシ ョ ンだけがデバイスの複雑な リソースを使用可能にする手段とな り ます。 理由は次の通りです。• HDL 言語に限界があ り ます。 具体例では、 ダブル データ レート (DDR) 出力信号を駆動するのに 2 つの異なるプロセスが必要となるため、 VHDL で記述できません。

• ハード ウェアが複雑化します。 Virtex-4 の I/O の SerDes エレ メン ト をインスタンシエートする方が、 ビヘイビアを記述するよ り容易です。

• 合成ツールでの推論には限度があ り ます。 たとえば、 現状の合成ツールでは、Virtex-4 の FIFO あるいは DSP48 対称型丸め込みやサチュレートのビヘイビアの記述からの推論ができません。 つま り、 設計者がインスタンシエート しない限り、 それらの回路の使用はできないという こ とです。

ヒ ン ト

• デザインのビヘイビアを最大限に記述する。

• ビヘイビアのコードを合成してもタイ ミ ングが満たされない場合には、 合成ツールのタイ ミ ング制約や設定を確認してから、 デバイスのライブラ リ コンポーネン ト をインスタンシエーシ ョ ンするコード と交換する。

• 一般的な Verilog や VHDL のビヘイビア構築では、 言語テンプレート を考慮して記述する。

• COREGeneratorTM、 Architecture Wizard、 ISE の言語テンプレート を考慮して、デバイスのライブラ リ コンポーネン ト をインスタンシエートする。

クロック イネーブルとゲート付きクロックの違いザイ リ ンクスでは、 CLB レジスタには通常、 ク ロ ッ ク ポート をゲートするのではなく、 専用のクロ ッ ク イネーブル ポートの使用を推奨しています。 ゲート付きク ロ ックはグ リ ッチが発生しやすく、 ク ロ ッ ク遅延、 ク ロ ッ ク スキュー、 その他の悪影響

Page 19: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 19

R

を招きます。 ク ロ ッ ク イネーブルを使用する と、 ク ロ ッ ク リ ソースの使用を抑え、タイ ミ ング特性、 デザイン解析への効果が高ま り ます。 デバイスで使用できるクロ ッ ク イネーブル リ ソースの使用には、 いくつかの方法があ り ます。 消費電力の削減と してクロ ッ ク ド メ イン全体のゲートに望ましいのは、 BUFGCE という ク ロ ック イネーブルのグローバル バッファ リ ソースを使用する方法です (図 10 を参照してください )。

デザインの特定の狭いエリアで、 ク ロ ッ クを数サイクル間停止させるこ とのみを目的と したアプリ ケーシ ョ ンに適しているのは、 FPGA レジスタのクロ ッ ク イネーブルピンを使用する方法です。 まず、 図 11 に示してあるのが、 ク ロ ッ ク信号の不適切なゲート方法の例です。 次に、 図 12に示すのが、 コードを書き直して、 ク ロ ッ ク イネーブルピンを効果的にマップしたものです。

図 10 : BUFGCE

BUFGCE

WP231_10_110905

OI

CE

図 11 : ゲート付きクロック - ザイリンクスで推奨しないコーディング方法

D

DATA

LOAD

IN1

IN2

CLK

AND3

GATECLK

OUT1

DFF

CE

C

Q

WP231_11_112105

VHDL Verilog

GATECLK <= (IN1 and IN2 and CLK); process (GATECLK) begin if (rising_edge(GATECLK)) then if (LOAD = '1') then OUT1 <= DATA; end if; end if; end process;

assign GATECLK = (IN1 & IN2 & CLK); always @(posedge GATECLK) begin if (LOAD) OUT1 <= DATA; end

Page 20: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

20 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

ヒ ン ト

• ゲート付きク ロ ッ クを使用しない。

• グローバル ク ロ ッ ク バッファのクロ ッ ク イネーブル ポート を使用して、 ク ロ ック ド メ イン全体のクロ ッ クを停止する。

• ローカルにクロ ッ クをディ スエーブルにする場合は、 レジスタのクロ ッ ク イネーブル ポート を使用する。

• ク ロ ッ ク イネーブル信号の複製は、 パスの一部がタイ ミ ング要件を満たさない場合に考慮する。

ネスト した If-Then-Else、 Case 構文および組み合わせ For ループif 構文および case 構文のネス トや他の構文中に構文と して含めるこ とは避け、 コード中に含むネッ ト数を最小限に抑えてください。 if 構文中に if 構文を入れすぎる と、行が長くな り、 構文の最適化に支障をきたします。 構文のネス ト を最小限にすることで、 一般的にはコードが読みやすく、 移植しやすくな り、 プ リ ン トする場合にもフォーマッ トが容易になり ます。

HDL で for ループ を記述する場合、 特に演算ロジッ ク、 特定のオペレーシ ョ ンのロジッ クに対して望ましいのは、 データパスに最低 1 つのレジスタを配置するこ とです。 する と、 コンパイル中に、 合成ツールではループが展開されません。 これらの同期エレ メン トがないと、 合成ツールは各ループの反復で生成されたロジッ クを連結するので、 組み合わせパスが非常に長くな り、 結果と してデザイン パフォーマンスに影響をきたします。

ヒ ン ト

• シーケンシャルな構文のネス ト数を最小限にする。

• 長い組み合わせパスを作成する場合には、 for ループにレジスタを追加する。

図 12 : クロック イネーブル - クロック信号のゲートに効果的な手法

D

DATA

IN1

IN2

LOAD

CLOCK

ENABLE

AND3

OUT1

DFF

CE

C

Q

WP231_12_112105

ENABLE <= IN1 and IN2 and LOAD; process begin if (rising_edge(CLOCK)) then if (ENABLE = '1') then DOUT <= DATA; end if; end if; end process;

assign ENABLE = (IN1 & IN2 & LOAD); always @(posedge CLOCK) begin if (ENABLE) DOUT <= DATA; end

VHDL Verilog

Page 21: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法

WP231 (1.1) 2006 年 1 月 6 日 www.xilinx.co.jp 21

R

階層

デザインの階層分離の選択では、 HDL コード記述の容易性に左右されるケースがたびたび発生します。 ただし、 デザイン過程に費やす時間を短縮しつつ、 パフォーマンスの観点からデザイン階層全体を最高の状態にするには、 デザインの最適化、 インプリ メン ト方法、 検証を熟考するこ とが、 よ り重要となる場合もあ り ます。 最適化という点から見る と、 合成ツールの多くは論理的なデザイン階層を 「ソフ ト 」 として扱い、 それは、 階層をできるだけ維持するこ と、 最適化に影響が出ない範囲での階層を分離するこ と、 または階層下のフッ トプ リ ン トおよびロジッ ク内容を変更するこ とを意味します。 インク リ メ ンタル デザインや階層維持を検証対象とするような階層的デザイン手法を用いる と、 論理的境界に跨る最適化は実行できません。 ガイ ド ラ インに適切に従わない場合には、 ロジッ ク レベルあるいは配置制約が多くな り、 デザインの最適化に影響を与えます。 非階層デザインのインプリ メンテーシ ョ ン フローを使用したと しても、 ガイ ド ラ インに従う こ とで、 よ り容易に実行ができ、 配置配線ツールでも、 ロジッ クの最適化、 および配置にとって最良の選択がなされます。 次にガイ ド ラインを説明します。1. 階層内のすべての入出力にレジスタを付けてください。 それが難しい場合には、出力だけでも必ずレジスタを付けてください。 一般的なロジッ クの最適化において、 階層の影響を受けなくな り ます。

2. インスタンシエート した I/O バッファ、 レジスタ、 DDR 回路、 SerDes、 遅延エレ メン ト を含むすべての I/O コンポーネン ト をデザインの最上位に配置してください。 最上位にすべてを配置できない場合には、 1 階層にすべてを収めるよ うにして ください。

3. FPGA の共有機能やリ ソースに配置する必要のあるレジスタまたはロジッ クのセッ トは、 同位層に収めてください。 たとえば、 Virtex-4 の DSP48 に乗算器、アキュムレータ、 関連レジスタを配置する必要のあるデザインでは、 これらすべてのエレ メン ト を同層のモジュールに収めなければなり ません。

4. リ ソースを共有している合成ツールのロジッ クは、 同位に配置してください。5. 階層境界でファンアウ トの大きいレジスタは、 手動で複製してください。以上の簡単なガイ ド ラ インを遵守するならば、 選択した階層がデザインの最適化や、デザインのパフォーマンスに影響を及ぼすこ とはあ り ません。 この規定に従えない場合には、 インプリ メン ト したデザインのク リ ティカル パスを確認して、 階層に変更を加えるこ とが最終的なデザインのパフォーマンスに影響があるかを判断するようお勧めします。

まとめ 合成および配置配線アルゴ リズムにおける昨今の進歩がもたらした影響で、 特定のデバイスから最大のパフォーマンスを引き出すこ とが、 よ り容易になり ました。 合成ツールでは、 複雑な演算やメモ リ記述を推論し、 専用のハード ウェア ブロ ッ クにマッピングできますし、 リ タイ ミ ングのよ うな最適化や、 ロジッ クやレジスタの複製もできます。 また、 配置配線の輻輳を緩和するため、 タイ ミ ング制約に基づいて、配置配線ツールでネッ ト リ ス ト を再構築し、 タイ ミ ング ド リブン パッ クや配置ができるよ うにな り ました。 とはいえ、 特定の RTL の記述では、 ツールが最大化できるパフォーマンスは限られています。 デザインのパフォーマンスをさ らに改善する必要のある場合には、 ターゲッ ト デバイス、 ツールの制約やオプシ ョ ンによ り一層精通し、 本稿で説明したコーディングのガイ ド ラ インに従うのが非常に効率的な方法といえます。

その他のリソース

デザイン パフォーマンスを最大化させるための、 さ らなる ヒ ン トが記載された リソースを紹介します。

Page 22: デザイン パフォーマンス向上の ための HDL コー …...ホワイト ペーパ: デザイン パフォーマンス向上のための HDL コーディング法 WP231

22 www.xilinx.co.jp WP231 (1.1) 2006 年 1 月 6 日

ホワイ ト ペーパ : デザイン パフォーマンス向上のための HDL コーディング法R

『合成シ ミ ュレーシ ョ ン デザイン ガイ ド』 http://www.xilinx.co.jp/support/software_manuals.htm

ザイ リ ンクス TechXclusives http://www.xilinx.co.jp/xlnx/xweb/xil_tx_home.jsp

『XST ガイ ド』 http://www.xilinx.co.jp/support/software_manuals.htm

Sunburst Design社の Verilog コーディング スタイルおよび資料http://www.sunburst-design.com/papers/

『ステートマシン設計を最適化する StateCAD XE』http://www.xilinx.co.jp/xcell/xl38/xcell38_24.pdf

改訂履歴 次に、 この資料の改訂履歴を示します。

日付 リビジ ョ ン 改訂内容

2005/12/05 1.0 初版リ リース

2006/01/06 1.1 誤字の修正。