それではサンプル・デザイン(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つの項目があります。
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)。
◆3.「Use register packing」を検証
今回使用したサンプル・デザインでは、組み合わせ論理だけで構成されているLogic Elementの比率が多そうです。これは、[Compilation Report]の“Resource Utilization by Entity”で紹介した「LUT - only LCs」と「Register - only LCs」の個数で確認できます(図14)。
[Compilation Report]の結果(図14)から、この設定が有効であると判断できます。よって、「Stage1」では“Use register packing”の設定を施します。
“Use register packing”を開くと、Recommendedの設定は「Minimize Area with Chains」となっています(図15)。
図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)。
では、この状態でもう一度コンパイルして、結果を比較してみましょう。
今回のコンパイル結果は図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)。
「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”の内容について解説する予定です。
Copyright © ITmedia, Inc. All Rights Reserved.