AR# 16996

|

Vivado/ISE - ビットストリームの圧縮方法 (MFWR = Multiple Frame Write Register) および圧縮のレベルについて

説明

ツールの資料では、ビットストリームの圧縮オプションがはっきりと説明されていません。 

デフォルト値は何ですか。このコマンドの引数は何ですか。どのように機能しますか。どれぐらい圧縮されますか。

ソリューション

ISE :

圧縮 :

BIT ファイルだけではなく、ビットストリームのサイズを縮小するため、ビットストリームの複数フレーム書き込み (MFWR) 機能が使用されます。この圧縮オプションを使用しても、ビットストリームのサイズが縮小されるとは限りません。 

圧縮は、BitGen の -g compress を設定することでイネーブルになり、このオプションを設定していなければ、ディスエーブルになります。

注記 : BitGen の「-r」または「-g Partial Mask」で生成されたパーシャル ビット ファイルは、自動的に複数フレーム書き込み (MFWR) 機能を使用し、ビットストリームは圧縮されます。

詳細は、(Xilinx XAPP290) :『Two Flows for Partial Reconfiguration: Module Based or Small Bit Manipulations』を参照してください。


アーキテクチャ : Virtex、Virtex-E、Virtex-II、Virtex-II Pro、Spartan-II、Spartan-IIE、Spartan-3

設定 : None

デフォルト : Off


BitGen の「-g compress」の機能

-g compress では、個々のフレームを書き込むのではなく、全く同じコンフィギュレーション フレームが 1 度に書き込まれます。複数のフレームに同じデータがある場合、フレームはコンフィギュレーション ロジックに読み込まれ、複数フレームの書き込みレジスタを使用して複数のアドレスに書き込まれます。 

デバイスの使用率によりますが、これにより、ビットストリームのサイズが著しく縮小される可能性があります。同じデータで複数のフレームを書き込むため、BitGen は次のコマンドでビットストリームを構築します。

  1. CMD レジスタに WCFG コマンドを書き込みます (WCFG コマンド = 書き込みパケット データ; CMD = コマンド レジスタ)。
  2. 目的のフレームを FDRI に書き込みます (FDRI = Frame Data Register Input)。
  3. 最初の目的のアドレスで FAR レジスタに書き込みます (FAR = Frame Address Register)。
  4. MFWR コマンドを CMD レジスタに書き込みます。
  5. ダミーワードを 2 つ MFWR レジスタに書き込みます。
  6. 2 番目の目的のアドレスで FAR レジスタに書き込みます。
  7. ダミーワードを 2 つ MFW に書き込みます。
  8. 最終アドレスまで、手順 7 および 8 を繰り返します。


注記 :

  1. -g compress を使用したビットストリーム生成方法の詳細を気にする必要はありません。参考のために記載しています。
  2. Virtex ビットストリーム生成のバックグラウンド情報に関しては、(Xilinx XAPP151) : 『Virtex Series Configuration Architecture User Guide』を参照してください。
    Virtex-II および Virtex-II Pro のビットストリームは類似しています。この 2 つのアーキテクチャに関する情報は、該当する FPGA ユーザー ガイドの「コンフィギュレーションの詳細」のセクションを参照してください。


http://japan.xilinx.com/xlnx/xweb/xil_publications_index.jsp?category=User+Guides

コンフィギュレーション レジスタ (CMD、FAR、MFWR など) はこれらのガイドで説明されています。

-g compress でビットストリームをどの程度圧縮できるか

-g compress では、同じコンフィギュレーション フレームが 1 度に書き込まれます (複数回に分けて書き込まれるのではなく)。コンフィギュレーション フレームは垂直に並べられます。

このため、デザインが垂直方向に少ない数の列にまたがっていれば、デバイスの幅いっぱいに水平方向に広がるデザインよりも、圧縮率が高くなります。

同じフレームは、通常、同じ値で初期化されるブロック RAM の列にあるか、または未使用の CLB またはブロック RAM の列にあります。どれぐらい圧縮できるかを予測するには、次の手順に従ってください。


1) 同じ CLB またはブロック RAM の列の数を確認します。 たいていの場合、CLB の列は未使用の場合にのみ同じであるため、特定するのは困難になります。 

ブロック RAM の列は、ブロック RAM の複数列で同じ初期化値が使用されている場合にのみ、同じです。


2) 列タイプのコンフィギュレーション フレームの数を計算します。

コンフィギュレーション フレーム数 = (列ごとのフレーム数) x (列数)

列ごとのフレーム数は Virtex-II の場合、次のようになります。


CLB : 列ごとのフレーム数 22

BRAM : 列ごとのフレーム数 64


Virtex の場合のこの情報は、(Xilinx XAPP151) : 『Virtex Series Configuration Architecture User Guide』を参照してください。

列数を決定するには、FPGA Editor または Floorplanner を使用します。たとえば、xc2v40 にはブロック RAM が 2 列あります (ブロック RAM が 2 つの列が 2 つで、合計 4 つのブロック RAM)。


3) 保存されたコンフィギュレーション フレームの数は、同じフレームの合計数 (2) から 1 を引いた数です。 


4) 保存されたコンフィギュレーション ビットの数を計算します。

= (保存されたコンフィギュレーションフレーム数) x (フレームごとのビット数)

フレームごとのビット数は Virtex-II/-II Pro のユーザー ガイドまたは (Xilinx XAPP151) で説明されています。


例 :

すべてのブロック RAM 値を 0 に初期化する xc2v40 デザインでは、これらの列をプログラムするのに MFWR を使用してどれぐらい圧縮できますか。


2v40 のブロック RAM の列数 (FPGA Editor からの値) : 2

(2v40 には、ブロック RAM が 2 つある列 2 列に 4 つのブロック RAM があります。)


2v40 にあるブロック RAM コンフィギュレーション フレームの数 :

= (64 フレーム / ブロック RAM 列) x (BRAM 2 列) = 128 個のブロック RAM コンフィギュレーション フレーム


ビットストリームに明示的に表示される必要のないブロック RAM コンフィギュレーション フレームの数 (圧縮されたフレームなど) :

= (128 個のブロック RAM コンフィギュレーション フレーム) - (1 個のブロック RAM コンフィギュレーション フレーム) = 127 個のブロック RAM コンフィギュレーション フレーム


保存されたコンフィギュレーション ビット数 :

= (127 個のブロック RAM コンフィギュレーション フレーム) x (832 ビット/フレーム (Virtex-II ユーザー ガイドの表 3-15 より)

= 105,664 ビット


2v40 の圧縮されていないビットストリームのサイズ : 360,096

およその圧縮率 : 105,664/360,096 = 30%

注記 : この値は見積もりのためのものです。


Vivado :

Vivado では、圧縮をイネーブルにするために次のビットストリーム プロパティが使用されます。

set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]

上記に説明されている複数フレーム書き込み (圧縮) アルゴリズムは Vivado でも使用でき、Vivado でサポートされている新しいデバイス ファミリ用に生成されるビットストリームの圧縮結果を予測するために使用可能です。

AR# 16996
日付 04/27/2016
ステータス アクティブ
種類 一般
デバイス 詳細 概略
People Also Viewed