これは、利用可能なすべてのロジックリソース(LUTS + FFS)を消費することにより、FPGAの利用をストレステストできるシンプルな設計です。この設計は、修正されたGalois LFSRを実装して、多くの「カオス」スイッチングアクティビティ /動的消費電力を生成し、FPGA電源をストレステストします。
最大利用 /電力要件のテストのためのほとんどの概念は、各FF(フリップフロップ /レジスタ)がすべてのサイクルで切り替える単純なシフトレジスタを使用します。これらの種類の概念は、完全にFFSに基づいていますが、最大の切り替えアクティビティも提供します(FFSのみ)。 fpga_torture 、利用可能なすべてのFFSの消費にも基づいています。さらに、FPGAのすべての汎用ロジックリソースを利用して、より現実的なユースケースを作成するために、利用可能なすべてのLUT(ルックアップテーブル)も含まれています。さらに、結果として生じるスイッチングアクティビティは、より混oticとしています(単調な切り替えはありません)、より現実的な行動も提供します。
VHDLコードは、プリミティブ、属性、またはその他のデバイス/プラットフォーム固有の要素を使用しないテクノロジーに依存しない説明を提供します。格子(Radiant、Sinplifypro)およびIntel(Quartus Prime)FPGAでテストされています。
fpga_torture設計は、基本的に「円形」改変Galois LFSR(線形フィードバックシフトレジスタ)を実装するレジスタチェーンに基づいています。チェーンのサイズは、Designs NUM_CELLS Genericによって定義されます。各セルはFFとLUTで構成されています。チェーン位置のLUT Iは、以前の3つのFFSからの出力を使用して、セルのFFの次の値を計算します。
chain(i) <= combine_f(chain(i-3), chain(i-2), chain(i-1));
すべての入力の論理XORは、コンビネーション関数( combine_f() )として使用されます。
テクノロジービュー(カットアウト、Quartus Prime):以前の3つのレジスタチェーンchain[3] 、 chain[4] 、 chain[5]の状態を使用して、1つのLUTを介したレジスタチェーンchain[6]の次の値の計算とXORを介してそれらを組み合わせます。
チェーンの開始では、追加のFFを使用して、すべてのクロックサイクルを切り替えてチェーンを「開始」します。短い「初期化」時間の後、チェーンは非常に高い混oticとしたスイッチングアクティビティと動的な消費電力を生成する擬似ランダムの方法で振動します。
トップエンティティはrtl/fpga_torture.vhdです。
entity fpga_torture is
generic (
NUM_CELLS : positive -- number of LUT3+FF elements
);
port (
clk_i : in std_ulogic ; -- clock input
rstn_i : in std_ulogic ; -- low-active async reset
out_o : out std_ulogic -- dummy output (LED or unconnected FPGA pin)
);
end fpga_torture ;ターゲットFPGAがBitStream経由のFF初期化をサポートする場合、リセット信号rstn_iオプションです。この場合、 rstn_i信号を1に結び付けることができます。合成ツールが設計ロジック全体を削除しないようにするには、 out_o出力信号が必要です。この信号を、LEDまたは接続されていないFPGAピンのような批判的でないFPGA出力ピンに接続します。
合成を行う前に、testbenchを使用してNUM_CELLSの構成をシミュレート/テストします。一部のNUM_CELLS値(32など)は、最大の切り替えアクティビティになります(すべてのサイクルですべてのFFSが切り替えられます)。
プロジェクトは、Simple TestBench( sim/ghdl.sh sim/fpga_torture_tb.vhd )を提供します。
fpga_torture/sim$ sh ghdl.sh
シミュレーションは、100MHzクロックを使用して1MSで実行されます。波形データはsim/fpga_torture.vcdに保存されるため、 gtkwaveを使用して表示できます。
fpga_torture/sim$ gtkwave fpga_torture.vcd
チェーンの合計サイズは、 NUM_CELLS genericによって定義されます。設計にはNUM_CELLS+1 ffs(レジスタ)およびNUM_CELLS+2 lut3s(ルックアップテーブル、それぞれ3入力)が必要です。一部のFPGA/ツールチェーンは、いくつかの追加のルートスルーLUTを導入する場合があります。
マッピングの例:Lattice iCE40UP5K-UWG30ITR FPGA、SINPLIFIPRO、 NUM_CELLS = 5278
Number of slice registers: 5279 out of 5280 (100%)
Number of I/O registers: 0 out of 63 (0%)
Number of LUT4s: 5280 out of 5280 (100%)
Number of logic LUT4s: 5280
Number of ripple logic: 0 (0 LUT4s)
Number of IO sites used: 3 out of 21 (14%)
Number of Clocks: 1
Net clk_i_c: 5279 loads, 5279 rising, 0 falling (Driver: Port clk_i)
Number of LSRs: 1
Net rstn_i_c_i: 5279 loads, 5279 SLICEs