連載
» 2007年09月25日 00時00分 公開

集積効率のよい結果を引き出すには?FPGA開発テクニック、チューニングの心得(2)(2/2 ページ)

[島田順二(アルティマ),@IT MONOist]
前のページへ 1|2       

Resource Optimization Advisorを使用してみる

 それではサンプル・デザイン(des.lzh)を利用して、Resource Optimization Advisorを使用してみましょう。

 サンプル・デザインをコンパイル([Processing]−[Start Compilation])してください。コンパイルした結果は図10のとおりです。




図10 [Compilation Report] “Summary”の画面でコンパイル結果を確認

 この結果を見るとTotal Logic Elementsの使用個数が「4531個」、使用率が「88%」と高いことが分かります。

 では、「この状態でこのデバイスに“さらに新たな回路を追加”することは可能でしょうか?」

 以降で追加できるのかできないのかを見極めていきます。

 まず、Resource Optimization AdvisorをQuartus IIの[Tools]−[Advisor]−[Resource Optimization Advisor]から開きます。

 [Resource Optimization Advisor]の画面では、以下のようなリソースごとに分かれたAdvisorが表示されます(図11)

- Logic Element Usage
- Memory Block Usage
- DSP Block Usage
- I/O Usage
- Routing Resource Usage

図11 [Resource Optimization Advisor]の内容

 今回は、「Logic Elementをどの程度まで減らせるのか」を確認したいので“Logic Element Usage”を開きます。

 すると、前回と同様に「Stage1」「Stage2」「Stage3」という項目が表示されます(図12)

図12 “Logic Element Usage”の内容

 それでは、「Stage1」の設定内容から見ていきましょう。「Stage1」には、以下のような4つの項目があります。

  1. Perform WYSIWYG primitive resynthesis
    サードパーティ・ツールで作成した論理合成結果をさらにQuartus IIにて最適化を行う
  2. Turn on auto ROM/RAM/DSP/Shift Register Replacement
    ROMやRAM、DSPブロックへ置き換える
    デコーダ回路をROMへ、演算をDSPブロックへ、シフト・レジスタをメモリ・ブロックへ配置する
  3. Use register packing
    組み合わせ回路とレジスタのみの回路を同一のLogic Elementで構成する
  4. Remove location/LogicLock region assignment
    配置制約、LogicLock設定を解除する

 4.「Remove location/LogicLock region assignment」は、すでに(チェックマーク)になっていますが、これ以外はすべて(アラートマーク)になっています。では、これらの設定はロジック・エレメントを減らすために活用できるものなのでしょうか? 以降で確認していきます。

1.「Perform WYSIWYG primitive resynthesis」を検証

 この項目は、サードパーティ・ツールで合成した結果(中間ファイル)を用いたときに反映される設定です。今回のデザインは中間ファイルを用いていないので効果はなさそうです。

2.「Turn on auto ROM/RAM/DSP/Shift Register Replacement」を検証

 この項目を見ると、メモリ・ブロックやDSPブロックが余っているのでよさそうに思えますが、ほとんどの設定が「Recommended」と同じ「ON」になっています(図13)

図13 “Turn on auto ROM/RAM/DSP/Shift Register Replacement”の内容 (画像をクリックすると拡大します)

3.「Use register packing」を検証

 今回使用したサンプル・デザインでは、組み合わせ論理だけで構成されているLogic Elementの比率が多そうです。これは、[Compilation Report]の“Resource Utilization by Entity”で紹介した「LUT - only LCs」と「Register - only LCs」の個数で確認できます(図14)

図14 “LUT - only LCs”と“Register - only LCs”の個数 (画像をクリックすると拡大します)

 [Compilation Report]の結果(図14)から、この設定が有効であると判断できます。よって、「Stage1」では“Use register packing”の設定を施します。

 “Use register packing”を開くと、Recommendedの設定は「Minimize Area with Chains」となっています(図15)

図15 “Use register packing”の“Recommended”の内容 (画像をクリックすると拡大します)

 図15の[List all Registers]ボタンをクリックすると、すべてのレジスタがリスト化されます。しかし、各レジスタに最適な設定を施していては非常に手間が掛かってしまいます。

 そこで、[List all Registers]ボタンではなく「Open Setting dialog box - More Fitter Settings dialog box」のリンクをクリックします。すると、[More Fitter Settings]ダイアログが開き、“Auto Packed Registers”の設定を変更できます。

 ここで、推奨となる「Minimize Area with Chains」を選択します(図16)

図16 “Minimize Area with Chains”の設定を行う

 [OK]ボタンを押して、再度[Resource Optimization Advisor]を見ると設定が反映され(チェックマーク)になっていることが確認できます(図17)

図17 設定後の“Use register packing”の内容 (画像をクリックすると拡大します)

 では、この状態でもう一度コンパイルして、結果を比較してみましょう。

 今回のコンパイル結果は図18のようになります。

図18 設定後のコンパイル結果

 Total Logic Elementsの使用個数が「4531個(図10)から「3922個」へと609個減少、使用率が「88%(図10)から「76%」へと12%減少しました。

 次に、“Register Packing”の設定が正しく反映されているかどうかを確認してみます。

 再度[Compilation Report]の“Resource Utilization by Entity”で、「LUT - only LCs」と「Register - only LCs」の個数を確認してみましょう(図19)

図19 コンパイル後の“LUT - only LCs”と“Register - only LCs”の個数

 「LUT - only LCs」は「2687個(図14)から「2078個」へ、「Register - only LCs」は「667個(図14)から「58個」へと減少しました。

 つまり、“組み合わせ論理だけ”のLogic Elementも“Registerだけ”のLogic Elementも減少したので、Logic Elementを効率よく使用したコンパイル結果になったといえます。

 いかがでしょうか? 「Stage1」の設定項目の1つ“Use register packing”を見直しただけでも、これだけの集積効率のアップにつながりました。

 もちろん回路構成によっては“Use register packing”では効果が表れない場合もあります。しかし、開発ツールQuartus IIの数ある設定の中から、苦労して的確な設定を見付け出すよりもはるかに少ない工数で、この結果にたどり着けることを今回の内容で実感できたと思います。

 今回は具体的な回路を用いて、Resource Optimization Advisorの設定方法や考え方などを解説し、実際に集積効率を上げる手順を紹介しました。次回は、今回紹介し切れなかった“Logic Element Usage”の「Stage2」以降と“Memory Block Usage”“DSP Block Usage”の内容について解説する予定です。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.