連載
» 2007年05月18日 00時00分 公開

階層構造を意識した設計スタイルとは?触って学ぼう FPGA開発入門(5)(4/4 ページ)

[鳥海佳孝 設計アナリスト,@IT MONOist]
前のページへ 1|2|3|4       

論理合成のログの見方

 続いて、論理合成のログを見てみましょう。論理合成の結果のログは、図4-1のようにしてレポートを参照します。

 画面左中央の「Processes」ウィンドウの「Synthesize − XST」を展開して、「View Synthesis Report」をダブルクリックしてください。


「View Synthesis Report」をダブルクリック 図4-1 「View Synthesis Report」をダブルクリック

 図4-2のように合成結果のログが表示されます。

合成結果のログが表示される 図4-2 合成結果のログが表示される

 レポートの内容としては、

  • 1) 使用した合成オプションの一覧
  • 2) HDLのコンパイル結果
  • 3) HDLの解析
  • 4) HDLの合成
  • 4.1) HDLの合成のレポート
  • 5) アドバンスドHDLの合成
  • 5.1) アドバンスドHDLの合成のレポート
  • 6) 下位階層レベル合成
  • 7) 最終レポート
  • 7.1) 使用したデバイスの占有率の一覧
  • 7.2) タイミングレポート

となっています。この中で興味深いところだけをピックアップすると、まずはHDLの合成(HDL Synthesis)の部分です。ここを見てみると、

Synthesizing Unit <DECODER7>.
    Related source file is "DECODER7.v".
    Found 16x8-bit ROM for signal <LED>.
    Found 3-bit tristate buffer for signal <SA<3:1>>.
    Summary:
        inferred   1 ROM(s).
        inferred   3 Tristate(s).
Unit <DECODER7> synthesized.
Synthesizing Unit <UPDOWN>.
    Related source file is "UPDOWN10-2.v".
    Found 4-bit 4-to-1 multiplexer for signal <$n0000>.
    Found 4-bit addsub for signal <$n0001>.
    Found 4-bit register for signal <COUNT_TMP>.
    Found 23-bit up counter for signal <tmp_count>.
    Summary:
        inferred   1 Counter(s).
        inferred   4 D-type flip-flop(s).
        inferred   1 Adder/Subtractor(s).
        inferred   4 Multiplexer(s).
Unit <UPDOWN> synthesized.

となっていて、デコーダの部分はROMとして推定され、SA[3:1]の信号に関してはトライステートの回路として推定されています。また、カウンタの方ではアップ・ダウンさせるため加減算器(addsub)が推定されており、23bitフリーランのアップカウンタ(tmp_count)が推定されています。

 次に注目したいところは、最終レポートの使用したデバイスの占有率の一覧とタイミングレポートです。占有率としては、

Selected Device : 2s15vq100-5 
 Number of Slices:                      35  out of    192    18%  
 Number of Slice Flip Flops:            27  out of    384     7%  
 Number of 4 input LUTs:                64  out of    384    16%  
 Number of bonded IOBs:                 15  out of     64    23%  
 Number of GCLKs:                        1  out of      4    25%  

となっており、この中で特に重要なのはFlip FlopとLUT(Look Up Table)の部分です。ボード上のFPGAデバイスには、384個のフリップフロップとLUTが載っています。この数を超えてしまうとデバイスに収まらないことになります。上記の結果では、23bitのフリーランのカウンタと4bitの10進カウンタでフリップフロップがそれぞれ使われていますので、23+4で確かに27個のフリップフロップが使用されていることが確かめられます。

 最後にタイミングレポートですが、以下のようになっています。

Timing Detail:
--------------
All values displayed in nanoseconds (ns)
======================================================================
Timing constraint: Default period analysis for Clock 'CLK'
  Clock period: 9.275ns (frequency: 107.817MHz)
  Total number of paths / destination ports: 918 / 31
----------------------------------------------------------------------
Delay:               9.275ns (Levels of Logic = 8)
  Source:            i0/tmp_count_8 (FF)
  Destination:       i0/tmp_count_0 (FF)
  Source Clock:      CLK rising
  Destination Clock: CLK rising
  Data Path: i0/tmp_count_8 to i0/tmp_count_0
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
     FDC:C->Q              2   1.292   1.340  i0/tmp_count_8 (i0/tmp_count_8)
     LUT3_L:I0->LO         1   0.653   0.000  i0/_n0003_wg_sel (N01)
     MUXCY:S->O            1   0.784   0.000  i0/_n0003_wg_cy (i0/_n0003_wg_cy)
     MUXCY:CI->O           1   0.050   0.000  i0/_n0003_wg_cy_rn_0 (i0/_n0003_wg_cy1)
     MUXCY:CI->O           1   0.050   0.000  i0/_n0003_wg_cy_rn_1 (i0/_n0003_wg_cy2)
     MUXCY:CI->O           1   0.050   0.000  i0/_n0003_wg_cy_rn_2 (i0/_n0003_wg_cy3)
     MUXCY:CI->O           1   0.050   0.000  i0/_n0003_wg_cy_rn_3 (i0/_n0003_wg_cy4)
     MUXCY:CI->O          27   0.050   3.550  i0/_n0003_wg_cy_rn_4 (i0/_n0003_wg_cy5)
     LUT2_L:I0->LO         1   0.653   0.000  i0/tmp_count_Eqn_211 (i0/tmp_count_Eqn_21)
     FDC:D                     0.753          i0/tmp_count_21
    ----------------------------------------
    Total                      9.275ns (4.385ns logic, 4.890ns route)
                                       (47.3% logic, 52.7% route)
======================================================================
Timing constraint: Default OFFSET IN BEFORE for Clock 'CLK'
  Total number of paths / destination ports: 6 / 3
----------------------------------------------------------------------
Offset:              4.555ns (Levels of Logic = 3)
  Source:            DEC (PAD)
  Destination:       i0/COUNT_TMP_1 (FF)
  Destination Clock: CLK rising
  Data Path: DEC to i0/COUNT_TMP_1
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
     IBUF:I->O             6   0.924   1.850  DEC_IBUF (DEC_IBUF)
     LUT4_L:I1->LO         1   0.653   0.000  i0/_n0000<1>1111_F (N511)
     MUXF5:I0->O           1   0.375   0.000  i0/_n0000<1>1111 (i0/_n0000<1>)
     FDCE:D                    0.753          i0/COUNT_TMP_1
    ----------------------------------------
    Total                      4.555ns (2.705ns logic, 1.850ns route)
                                       (59.4% logic, 40.6% route)
======================================================================
Timing constraint: Default OFFSET OUT AFTER for Clock 'CLK'
  Total number of paths / destination ports: 28 / 7
----------------------------------------------------------------------
Offset:              11.152ns (Levels of Logic = 2)
  Source:            i0/COUNT_TMP_1 (FF)
  Destination:       LED<7> (PAD)
  Source Clock:      CLK rising
  Data Path: i0/COUNT_TMP_1 to LED<7>
                                Gate     Net
    Cell:in->out      fanout   Delay   Delay  Logical Name (Net Name)
    ----------------------------------------  ------------
     FDCE:C->Q            13   1.292   2.500  i0/COUNT_TMP_1 (i0/COUNT_TMP_1)
     LUT4:I1->O            1   0.653   1.150  Mrom_data_i1/Mrom_LED6 (LED_7_OBUF)
     OBUF:I->O                 5.557          LED_7_OBUF (LED<7>)
    ----------------------------------------
    Total                     11.152ns (7.502ns logic, 3.650ns route)
                                       (67.3% logic, 32.7% route)

 3種類出力されていますが、それぞれ

  • 1)フリップフロップからフリップフロップ間(Default period analysis for Clock 'CLK')
  • 2)入力ピンからフリップフロップまで(Default OFFSET IN BEFORE for Clock 'CLK')
  • 3)フリップフロップから出力ピンまで(Default OFFSET OUT AFTER for Clock 'CLK')

を表しています(図5)。

タイミングレポートで出力される遅延解析の定義 図5 タイミングレポートで出力される遅延解析の定義。※青丸:組み合わせ回路/緑四角:フリップフロップ

 ログには、まだ配置配線していないものの、仮の配線長を想定して一番長い遅延と検出された部分を表示しています。今回はそれぞれ、

  • 1)tmp_countの8bit目からtmp_countの0bit目の間が9.275nsかかっている
  • 2)DECの入力信号からCOUNT_TMPの1bit目までが4.555nsかかっている
  • 3)COUNT_TMPの1bit目からLEDの7bit目までが11.152nsかかっている

ものが最長パスとして検出されています。いずれも6MHz(約166ns以下)で動作させることを考えれば、結果的には十分満足していると考えてよいと思います。

 実際の回路設計では、これらの結果を見ながらパフォーマンスが上がるようにHDLを修正したり、制約条件(どのくらいのスピードで動作してほしいかの定義など)を駆使して作業を進めています。



 今回は、階層構造を利用して10進のアップ・ダウンカウンタの動作を7セグメントLEDに出力しました。

 回路が大規模化してくると、1つのモジュールだけで設計することが困難になってくるので、今回のような階層構造を保って設計することが必要となります。このくらいの規模だと、わざわざ階層構造にするのはちょっと面倒に感じるかもしれませんが、ぜひこの設計スタイルに慣れておく方がよいでしょう。

 さて、次回はいよいよ最終回となります。ここまでで10進のアップ・ダウンカウンタが作成できたので、次は60進のアップ・ダウンカウンタを作成します。かなり設計のエッセンスが含まれた題材となりますので、そのエッセンスを中心にお話ししたいと思います。(次回に続く)


関連キーワード

FPGA | 回路 | 配線 | 設計 | 組み込み


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.