階層構造を意識した設計スタイルとは?:触って学ぼう FPGA開発入門(5)(4/4 ページ)
大規模回路の場合、1つのモジュールで設計を行うことは難しい。ここでは、大規模回路で用いられる階層構造での記述について解説します
論理合成のログの見方
続いて、論理合成のログを見てみましょう。論理合成の結果のログは、図4-1のようにしてレポートを参照します。
画面左中央の「Processes」ウィンドウの「Synthesize − XST」を展開して、「View Synthesis Report」をダブルクリックしてください。
図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)。
ログには、まだ配置配線していないものの、仮の配線長を想定して一番長い遅延と検出された部分を表示しています。今回はそれぞれ、
- 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進のアップ・ダウンカウンタを作成します。かなり設計のエッセンスが含まれた題材となりますので、そのエッセンスを中心にお話ししたいと思います。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.



いまさら聞けない FPGA入門