FC2カウンター FPGAの部屋 2007年03月18日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Virtex5, Virtex4, Spartan3Eのインプリメント結果

Virtex5, Virtex4, Spartan3EのDDR SDRAMコントローラのインプリメント(MAP)結果を比較してみることにした。
まずは Virtex5 でDDR SDRAMコントローラをインプリメントしてみた。ここで Virtex4, Virtex5 用にインプリメントしたものは、ターゲット基板がないので、DQの遅延値は0となっているので、実際には動作しない。比較のためにインプリメントするだけである。
Spartan3Eは Spartan3E Stater Kit 用にパッドを固定してあるが、Virtex5,Virtex4ではパッドは固定していない。クロックの最大遅延のみを20ns, デューティ比を50%に設定してある。
おまけに、Virtex5でインプリメントを行った時に、dcm100.xawを入れたらプロジェクトがおかしくなってしまった。具体的にはXSTの論理合成が終わったよ。というチェックマークがどうやってもつかなくなってしまった。もう一度作り直してもだめだったので、下のようなVerilogファイルを作って3つのFPGAのインプリメントを行った。

// dcm100.v

`default_nettype none
`timescale 1ns / 1ps

module dcm100 (CLKIN_IN, RST_IN, CLK0_OUT, CLK2X_OUT, LOCKED_OUT);

    input CLKIN_IN;
    input RST_IN;
    output CLK0_OUT;
    output CLK2X_OUT;
    output LOCKED_OUT;
    
    wire CLKIN_IN;
    wire RST_IN;
    wire CLK0_OUT;
    wire CLK2X_OUT;
    wire LOCKED_OUT;
    wire clk_node, clk_bufg;
    wire clk2x_node;
    
    DCM DCM_INST1 (
        .CLKIN(CLKIN_IN),
        .CLKFB(clk_bufg),
        .DSSEN(1'b0),
        .PSINCDEC(1'b0),
        .PSEN(1'b0),
        .PSCLK(1'b0),
        .RST(1'b0), // リセットごとにDCMのロックが外れないようにgndにしておく
        .CLK0(clk_node),
        .CLK90(),
        .CLK180(),
        .CLK270(),
        .CLK2X(clk2x_node),
        .CLK2X180(),
        .CLKDV(),
        .CLKFX(),
        .CLKFX180(),
        .LOCKED(LOCKED_OUT),
        .PSDONE(),
        .STATUS()
    );
    defparam DCM_INST1.CLKIN_PERIOD = 20.0;
    defparam DCM_INST1.DLL_FREQUENCY_MODE = "LOW";
    defparam DCM_INST1.DUTY_CYCLE_CORRECTION = "TRUE";
    defparam DCM_INST1.CLKDV_DIVIDE = 16.0;
    defparam DCM_INST1.PHASE_SHIFT = 0;
    defparam DCM_INST1.CLKOUT_PHASE_SHIFT = "NONE";
    defparam DCM_INST1.STARTUP_WAIT = "FALSE";
    defparam DCM_INST1.FACTORY_JF = 16'hFFFF;
    
    BUFG CLK_BUFG_INST (
        .I(clk_node),
        .O(clk_bufg)
    );
    assign CLK0_OUT = clk_bufg;
    
    BUFG CLK_BUF_2X_INST (
        .I(clk2x_node),
        .O(CLK2X_OUT)
    );
endmodule


インプリメント(MAP)結果を見るとSpartan3Eは、下の結果になった。

Target Device  : xc3s500e
Target Package : fg320
Target Speed   : -4
Mapper Version : spartan3e -- $Revision: 1.36 $
Mapped Date    : SUN 18 MAR 20:14:54 2007

Design Summary
--------------
Number of errors:      0
Number of warnings:    2
Logic Utilization:
  Number of Slice Flip Flops:         575 out of   9,312    6%
  Number of 4 input LUTs:             517 out of   9,312    5%
Logic Distribution:
  Number of occupied Slices:                          581 out of   4,656   12%
    Number of Slices containing only related logic:     581 out of     581  100%
    Number of Slices containing unrelated logic:          0 out of     581    0%
      *See NOTES below for an explanation of the effects of unrelated logic
Total Number of 4 input LUTs:            804 out of   9,312    8%
  Number used as logic:                517
  Number used as a route-thru:          63
  Number used for Dual Port RAMs:      172
    (Two LUTs used per Dual Port RAM)
  Number used for 32x1 RAMs:            52
    (Two LUTs used per 32x1 RAM)
  Number of bonded IOBs:               66 out of     232   28%
    IOB Flip Flops:                    49
  Number of ODDR2s used:               38
    Number of DDR_ALIGNMENT = NONE     38
  Number of Block RAMs:                1 out of      20    5%
  Number of GCLKs:                     6 out of      24   25%
  Number of DCMs:                      3 out of       4   75%

Total equivalent gate count for design:  113,976
Additional JTAG gate count for IOBs:  3,168
Peak Memory Usage:  165 MB


次にVirtex4は下のようになった。

Target Device  : xc4vlx15
Target Package : sf363
Target Speed   : -10
Mapper Version : virtex4 -- $Revision: 1.36 $
Mapped Date    : SUN 18 MAR 12:50:36 2007

Design Summary
--------------
Number of errors:      0
Number of warnings:    4
Logic Utilization:
  Number of Slice Flip Flops:         577 out of  12,288    4%
  Number of 4 input LUTs:             609 out of  12,288    4%
Logic Distribution:
  Number of occupied Slices:                          608 out of   6,144    9%
    Number of Slices containing only related logic:     608 out of     608  100%
    Number of Slices containing unrelated logic:          0 out of     608    0%
      *See NOTES below for an explanation of the effects of unrelated logic
Total Number of 4 input LUTs:            896 out of  12,288    7%
  Number used as logic:                609
  Number used as a route-thru:          63
  Number used for Dual Port RAMs:      172
    (Two LUTs used per Dual Port RAM)
  Number used for 32x1 RAMs:            52
    (Two LUTs used per 32x1 RAM)
  Number of bonded IOBs:               66 out of     240   27%
  Number of BUFG/BUFGCTRLs:             6 out of      32   18%
    Number used as BUFGs:                6
    Number used as BUFGCTRLs:            0
  Number of FIFO16/RAMB16s:             1 out of      48    2%
    Number used as FIFO16s:              0
    Number used as RAMB16s:              1
  Number of DCM_ADVs:                   3 out of       4   75%

Total equivalent gate count for design:  93,429
Additional JTAG gate count for IOBs:  3,168
Peak Memory Usage:  210 MB


最後にVirtex5は下のようになった。

Target Device  : xc5vlx30
Target Package : ff324
Target Speed   : -1
Mapper Version : virtex5 -- $Revision: 1.36 $
Mapped Date    : SUN 18 MAR 13:10:3 2007

Design Summary
--------------
Number of errors:      0
Number of warnings:    3
Slice Logic Utilization:
  Number of Slice Registers:                   584 out of  19,200    3%
    Number used as Flip Flops:                 584
  Number of Slice LUTs:                        692 out of  19,200    3%
    Number used as logic:                      561 out of  19,200    2%
      Number using O6 output only:             476
      Number using O5 output only:              56
      Number using O5 and O6:                   29
    Number used as Memory:                     124 out of   5,120    2%
      Number used as Dual Port RAM:            106
        Number using O6 output only:             6
        Number using O5 output only:            34
        Number using O5 and O6:                 66
      Number used as Single Port RAM:           18
        Number using O6 output only:            18
    Number used as exclusive route-thru:         7
  Number of route-thrus:                        64 out of  38,400    1%
    Number using O6 output only:                63
    Number using O5 output only:                 1

Slice Logic Distribution:
  Number of occupied Slices:                   306 out of   4,800    6%
  Number of LUT Flip Flop pairs used:          881
    Number with an unused Flip Flop:           297 out of     881   33%
    Number with an unused LUT:                 189 out of     881   21%
    Number of fully used LUT-FF pairs:         395 out of     881   44%
    Number of unique control sets:              47

  A LUT Flip Flop pair for this architecture represents one LUT paired with
  one Flip Flop within a slice.  A control set is a unique combination of
  clock, reset, set, and enable signals for a registered element.
  The Slice Logic Distribution report is not meaningful if the design is
  over-mapped for a non-slice resource or if Placement fails.

IO Utilization:
  Number of bonded IOBs:                        66 out of     220   30%
    IOB Flip Flops:                             70

Specific Feature Utilization:
  Number of BlockRAM/FIFO:                       1 out of      32    3%
    Number using BlockRAM only:                  1
    Total primitives used:
      Number of 18k BlockRAM used:               1
    Total Memory used (KB):                     18 out of   1,152    1%
  Number of BUFG/BUFGCTRLs:                      6 out of      32   18%
    Number used as BUFGs:                        6
  Number of DCM_ADVs:                            3 out of       4   75%

Total equivalent gate count for design:  119,969
Additional JTAG gate count for IOBs:  3,168
Peak Memory Usage:  403 MB


下の各FPGAごとの占有領域数などの比較表を示す。
FPGA3_table_070318.png

この表を見るとSpartan3よりもVirtex4の方がLUTを使っているようだ。Virtex5は4入力LUTから6入力LUTに変更されているので、LUT数が減っている。Virtex5は一番占有スライス数が少ないが、1スライスにLUTとFFのペアが4組あるので、(Spartan3EとVirtex4は2組)スライスの使用率は他の2つよりも低いようだ。
ピークメモリ使用率はSpartan3Eは165MBだったが、Virtex5は403MBと倍以上だった。容量も倍以上のようだが、やはりメモリを使うようである。
次は、各FPGAをFPGA Editorで見たときの様子を書いてみたい。
  1. 2007年03月18日 14:35 |
  2. Virtex5のお勉強
  3. | トラックバック:0
  4. | コメント:0