FC2カウンター FPGAの部屋 Virtex-6とSpartan-6のスライス構造とパスの比較
FC2ブログ

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

FPGAの部屋

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

Virtex-6とSpartan-6のスライス構造とパスの比較

どうもRubyプログラムに手間取っていてキャラクタ・ジェネレータのデータを移行出来ないでいるので、Virtex-6とSpartan-6のスライス構造とパスの比較をしてみたいと思う。

まずはVirtex-6から、使用する回路は以前の”ISE11.2iでのSpartan-3とSpartan-6の速度差”で使用したキャラクタ・ディスプレイ・コントローラ。
まずは、Virtex-6 (xc6vlx75-1ff484) でインプリメントした結果をFPGA Editorで見る。
V6_S6_1_090705.png

全体図はこんな感じ。SLICEを見てみよう。最初にSLICEMから、SLICEMは分散RAMにもなるSLICEだ。
V6_S6_2_090705.png

FFの数が多い。Virtex-5の倍の数が入っている。以前のVirtex-5のSLICEの図は”Virtex5, Virtex4, Spartan3Eのインプリメント結果2(分散RAM)”を参照のこと。
次はSLICEL。SLICELは分散RAMの機能がないSLICE。
V6_S6_3_090705.png

SLICEMに比べてLUTが簡素化されている。
次にクリティカルパスを下に示す。

================================================================================
Timing constraint: TS_clk = PERIOD TIMEGRP "clk" 3 ns HIGH 50%;
 2859 paths analyzed, 605 endpoints analyzed, 23 failing endpoints
 23 timing errors detected. (23 setup errors, 0 hold errors, 0 component switching limit errors)
 Minimum period is   3.754ns.
--------------------------------------------------------------------------------
Slack:                  -0.754ns (requirement - (data path - clock path skew + uncertainty))
  Source:               CharDispCtrler_inst/frame_buffer_inst/FRAME_BUFFER_GEN[4].FRAME_BUFFER (RAM)
  Destination:          CharDispCtrler_inst/red_node (FF)
  Requirement:          3.000ns
  Data Path Delay:      3.589ns (Levels of Logic = 1)
  Clock Path Skew:      -0.130ns (1.393 - 1.523)
  Source Clock:         clk_BUFGP rising at 0.000ns
  Destination Clock:    clk_BUFGP rising at 3.000ns
  Clock Uncertainty:    0.035ns

  Clock Uncertainty:          0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
    Total System Jitter (TSJ):  0.070ns
    Total Input Jitter (TIJ):   0.000ns
    Discrete Jitter (DJ):       0.000ns
    Phase Error (PE):           0.000ns

  Maximum Data Path at Slow Process Corner: CharDispCtrler_inst/frame_buffer_inst/FRAME_BUFFER_GEN[4].FRAME_BUFFER to CharDispCtrler_inst/red_node
    Location             Delay type         Delay(ns)  Physical Resource
                                                       Logical Resource(s)
    -------------------------------------------------  -------------------
    RAMB18_X0Y16.DO17    Trcko_DOB             2.073   CharDispCtrler_inst/frame_buffer_inst/FRAME_BUFFER_GEN[4].FRAME_BUFFER
                                                       CharDispCtrler_inst/frame_buffer_inst/FRAME_BUFFER_GEN[4].FRAME_BUFFER
    SLICE_X2Y36.A6       net (fanout=2)        0.691   CharDispCtrler_inst/display_dout<9>
    SLICE_X2Y36.A        Tilo                  0.075   CharDispCtrler_inst/n0084
                                                       CharDispCtrler_inst/Mmux_n008411
    OLOGIC_X0Y36.D1      net (fanout=1)        0.240   CharDispCtrler_inst/n0084
    OLOGIC_X0Y36.CLK     Todck                 0.510   CharDispCtrler_inst/red_node
                                                       CharDispCtrler_inst/red_node
    -------------------------------------------------  ---------------------------
    Total                                      3.589ns (2.658ns logic, 0.931ns route)
                                                       (74.1% logic, 25.9% route)


3.589nsとさすがに速い。

次に同じキャラクタ・ディスプレイ・コントローラをSprtan-6 (xc6slx9-2csg225) でインプリメントして、同様にFPGA Editorで見ると。
V6_S6_4_090705.png

チップが小さいのだが、Virtex-6よりもロジックが分散しているような気がする。
SlICEMを見てみる。この回路はSLICEMは使用されていないので未使用のもの。
V6_S6_5_090705.png

Virtex-6と同じよう。
次にSLICEL。これは使用されているもの。
V6_S6_6_090705.png

これもまたVirtex-6と同じような気がする。
次にSpartan-6で新しく搭載されたSLICEX。これはSLICELからキャリーチェーンが除かれている。
V6_S6_7_090705.png

次にクリティカルパスを下に示す。

================================================================================
Timing constraint: TS_clk = PERIOD TIMEGRP "clk" 3 ns HIGH 50%;
 2859 paths analyzed, 605 endpoints analyzed, 23 failing endpoints
 23 timing errors detected. (23 setup errors, 0 hold errors, 0 component switching limit errors)
Timing constraint: TS_clk = PERIOD TIMEGRP "clk" 5 ns HIGH 50%;
 2858 paths analyzed, 708 endpoints analyzed, 43 failing endpoints
 43 timing errors detected. (43 setup errors, 0 hold errors, 0 component switching limit errors)
 Minimum period is   5.638ns.
--------------------------------------------------------------------------------
Slack:                  -0.638ns (requirement - (data path - clock path skew + uncertainty))
  Source:               CharDispCtrler_inst/disp_timing_inst/v_point_1 (FF)
  Destination:          CharDispCtrler_inst/disp_timing_inst/v_point_9 (FF)
  Requirement:          5.000ns
  Data Path Delay:      5.631ns (Levels of Logic = 5)
  Clock Path Skew:      -0.007ns (0.099 - 0.106)
  Source Clock:         clk_BUFGP rising at 0.000ns
  Destination Clock:    clk_BUFGP rising at 5.000ns
  Clock Uncertainty:    0.000ns

  Maximum Data Path: CharDispCtrler_inst/disp_timing_inst/v_point_1 to CharDispCtrler_inst/disp_timing_inst/v_point_9
    Location             Delay type         Delay(ns)  Physical Resource
                                                       Logical Resource(s)
    -------------------------------------------------  -------------------
    SLICE_X8Y12.BQ       Tcko                  0.628   CharDispCtrler_inst/disp_timing_inst/v_point<3>
                                                       CharDispCtrler_inst/disp_timing_inst/v_point_1
    SLICE_X9Y13.C3       net (fanout=9)        0.780   CharDispCtrler_inst/disp_timing_inst/v_point<1>
    SLICE_X9Y13.CMUX     Tilo                  0.580   CharDispCtrler_inst/disp_timing_inst/n0065_inv
                                                       CharDispCtrler_inst/disp_timing_inst/n0065<10>_SW1
    SLICE_X9Y13.A4       net (fanout=5)        0.969   N16
    SLICE_X9Y13.A        Tilo                  0.487   CharDispCtrler_inst/disp_timing_inst/n0065_inv
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_lut<0>
    SLICE_X8Y12.A4       net (fanout=1)        0.651   CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_lut<0>
    SLICE_X8Y12.COUT     Topcya                0.832   CharDispCtrler_inst/disp_timing_inst/v_point<3>
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_lut<0>_rt
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_cy<3>
    SLICE_X8Y13.CIN      net (fanout=1)        0.024   CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_cy<3>
    SLICE_X8Y13.COUT     Tbyp                  0.098   CharDispCtrler_inst/disp_timing_inst/v_point<7>
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_cy<7>
    SLICE_X8Y14.CIN      net (fanout=1)        0.024   CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_cy<7>
    SLICE_X8Y14.CLK      Tcinck                0.558   CharDispCtrler_inst/disp_timing_inst/v_point<10>
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_xor<10>
                                                       CharDispCtrler_inst/disp_timing_inst/v_point_9
    -------------------------------------------------  ---------------------------
    Total                                      5.631ns (3.183ns logic, 2.448ns route)
                                                       (56.5% logic, 43.5% route)


上のパスと同様のパスをVirtex-6のパスから検索したので下に示す。

--------------------------------------------------------------------------------
Slack (setup path):     0.246ns (requirement - (data path - clock path skew + uncertainty))
  Source:               CharDispCtrler_inst/disp_timing_inst/v_point_1 (FF)
  Destination:          CharDispCtrler_inst/disp_timing_inst/v_point_9 (FF)
  Requirement:          3.000ns
  Data Path Delay:      2.704ns (Levels of Logic = 5)
  Clock Path Skew:      -0.015ns (0.100 - 0.115)
  Source Clock:         clk_BUFGP rising at 0.000ns
  Destination Clock:    clk_BUFGP rising at 3.000ns
  Clock Uncertainty:    0.035ns

  Clock Uncertainty:          0.035ns  ((TSJ^2 + TIJ^2)^1/2 + DJ) / 2 + PE
    Total System Jitter (TSJ):  0.070ns
    Total Input Jitter (TIJ):   0.000ns
    Discrete Jitter (DJ):       0.000ns
    Phase Error (PE):           0.000ns

  Maximum Data Path at Slow Process Corner: CharDispCtrler_inst/disp_timing_inst/v_point_1 to CharDispCtrler_inst/disp_timing_inst/v_point_9
    Location             Delay type         Delay(ns)  Physical Resource
                                                       Logical Resource(s)
    -------------------------------------------------  -------------------
    SLICE_X12Y36.BQ      Tcko                  0.381   CharDispCtrler_inst/disp_timing_inst/v_point<3>
                                                       CharDispCtrler_inst/disp_timing_inst/v_point_1
    SLICE_X13Y37.D5      net (fanout=8)        0.331   CharDispCtrler_inst/disp_timing_inst/v_point<1>
    SLICE_X13Y37.D       Tilo                  0.075   N16
                                                       CharDispCtrler_inst/disp_timing_inst/n0065<10>_SW1
    SLICE_X13Y37.C2      net (fanout=1)        0.501   N16
    SLICE_X13Y37.C       Tilo                  0.075   N16
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_lut<0>
    SLICE_X12Y36.A2      net (fanout=1)        0.753   CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_lut<0>
    SLICE_X12Y36.COUT    Topcya                0.417   CharDispCtrler_inst/disp_timing_inst/v_point<3>
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_lut<0>_rt
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_cy<3>
    SLICE_X12Y37.CIN     net (fanout=1)        0.000   CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_cy<3>
    SLICE_X12Y37.COUT    Tbyp                  0.078   CharDispCtrler_inst/disp_timing_inst/v_point<7>
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_cy<7>
    SLICE_X12Y38.CIN     net (fanout=1)        0.000   CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_cy<7>
    SLICE_X12Y38.CLK     Tcinck                0.093   CharDispCtrler_inst/disp_timing_inst/v_point<10>
                                                       CharDispCtrler_inst/disp_timing_inst/Mcount_v_point_xor<10>
                                                       CharDispCtrler_inst/disp_timing_inst/v_point_9
    -------------------------------------------------  ---------------------------
    Total                                      2.704ns (1.119ns logic, 1.585ns route)
                                                       (41.4% logic, 58.6% route)


全体的にスピードが全く違う。
例えば最初のCharDispCtrler_inst/disp_timing_inst/v_point<3>のTckoもVirtex-6の0.381nsに対して、Spartan-6は0.628nsと倍近い。やはり半導体プロセスが違うのか?そうなると消費電力には大きな差が出てくるのかもしれない???

最後に、上の書いたのはVirtex-6 (xc6vlx75-1ff484)ですが、これをVirtex-6 (xc6vlx75-3ff484) スピードグレード3でインプリメントしてみると、クリティカルパスは2.959ns、最大動作周波数は338MHzとなりました。
  1. 2009年07月05日 06:15 |
  2. Virtex-6, Spartan-6
  3. | トラックバック:0
  4. | コメント:2

コメント

Xpowerで見てみました。clk=181M
V6 0.89W
V4 0.37W
S6 0.036W
Xpower慣れてないので合っているは自信ありませんが。S6すごい低い。ここにS6の意義があるのかもしれません。
ただ、V4より遅いゲート遅延となると、MCB使ってもDDR500も難しい気がします。

  1. 2009/07/06(月) 00:43:37 |
  2. URL |
  3. nsx #-
  4. [ 編集 ]

Virtex-6とSpartan-6で規模も違うと思いますが、かなり大きな消費電力の差になっていますね。やはり、Spartan-6は省電力のプロセスなのかもしれませんね。
DDR2-500というと、普通だったら250MHzということですが、たぶん厳しいですね。やるとすれば、DDR2の幅が16bitとすると64bitにすれば、125MHzになるので、そういう方向になっているのかもしれませんね?MIGを使ってみればわかりますね。後は、スピードグレードがあがれば、少しは速くなると思います。
  1. 2009/07/06(月) 12:17:12 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1164-eb5f6b46
この記事にトラックバックする(FC2ブログユーザー)