FC2カウンター FPGAの部屋 FPGAの非同期リセットと同期リセットの比較(DDR-SDRAMコントローラ)
FC2ブログ

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

FPGAの部屋

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

FPGAの非同期リセットと同期リセットの比較(DDR-SDRAMコントローラ)

FPGAの非同期リセットと同期リセットの比較(Verilog)でどたばたしてしまったが、無事にスパルタン3EスタータキットでDR-SDRAMコントローラが非同期リセットと同期リセットでインプリメントできたので、比べてみようと思う。(使用ツールはISE9.2iSP3、使用デバイスはスパルタン3E、xc3s500e-4fg320)
まずは非同期リセットのマップリポートは以下のようになった。

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:             512 out of   9,312    5%
Logic Distribution:
  Number of occupied Slices:                          582 out of   4,656   12%
    Number of Slices containing only related logic:     582 out of     582  100%
    Number of Slices containing unrelated logic:          0 out of     582    0%
      *See NOTES below for an explanation of the effects of unrelated logic
Total Number of 4 input LUTs:            800 out of   9,312    8%
  Number used as logic:                512
  Number used as a route-thru:          64
  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,940
Additional JTAG gate count for IOBs:  3,168
Peak Memory Usage:  161 MB
Total REAL time to MAP completion:  20 secs 
Total CPU time to MAP completion:   19 secs 


つぎは同期リセットのマップリポート。

Design Summary
--------------
Number of errors:      0
Number of warnings:    2
Logic Utilization:
  Number of Slice Flip Flops:         576 out of   9,312    6%
  Number of 4 input LUTs:             459 out of   9,312    4%
Logic Distribution:
  Number of occupied Slices:                          576 out of   4,656   12%
    Number of Slices containing only related logic:     576 out of     576  100%
    Number of Slices containing unrelated logic:          0 out of     576    0%
      *See NOTES below for an explanation of the effects of unrelated logic
Total Number of 4 input LUTs:            747 out of   9,312    8%
  Number used as logic:                459
  Number used as a route-thru:          64
  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,633
Additional JTAG gate count for IOBs:  3,168
Peak Memory Usage:  160 MB
Total REAL time to MAP completion:  20 secs 
Total CPU time to MAP completion:   19 secs 


Number of Slice Flip Flops:は非同期リセットが575に対して、同期リセットが576で1つ多い。
Number of 4 input LUTs: は非同期リセットが512に対して、同期リセットが459で53少ない。
Number of occupied Slices:は非同期リセットは582に対して、同期リセットは576で6少ない。
Number of Slice Flip Flops:が同期リセットの方が1つ増えているが、全体的には同期リセットのほうが使用リソースが低いという結果になった。
なお、ツールのデフォルトから、以下の項目を変更してある。
1.XSTのプロパティのOptimization EffortをHigh
2.MAPのプロパティのOptimization Strategy (Cover Mode)をSpeed
3.Place & RouteのプロパティのPlace & Route Effort Level (Overall)をHigh
4.Place & RouteのプロパティのExtra Effort (Highest PAR level only) をContinue on Impossible

最後に動作周波数の違いを比べてみようと思います。
通常は50MHzの水晶発振器を2倍の100MHzにして使っています。つまりDDR200名わけですが、これを66MHzの水晶発振器をつけたと仮定して、DDR266でいけるかどうかやってみました。
その結果、非同期リセットのP&Rリポートです。

------------------------------------------------------------------------------------------------------
  Constraint                                |  Check  | Worst Case |  Best Case | Timing |   Timing   
                                            |         |    Slack   | Achievable | Errors |    Score   
------------------------------------------------------------------------------------------------------
* TS_ddr_sdram_cont_inst_dcm_module_inst_cl | SETUP   |    -1.741ns|     9.241ns|      88|       60600
  k_node = PERIOD TIMEGRP         "ddr_sdra | HOLD    |     0.902ns|            |       0|           0
  m_cont_inst_dcm_module_inst_clk_node"     |         |            |            |        |            
       TS_dcm100_inst_CLK2X_BUF HIGH 50%    |         |            |            |        |            
------------------------------------------------------------------------------------------------------
* TS_dcm100_inst_CLK0_BUF = PERIOD TIMEGRP  | SETUP   |    -0.017ns|    15.034ns|       1|          17
  "dcm100_inst_CLK0_BUF" TS_clk HIGH        | HOLD    |     0.758ns|            |       0|           0
    50%                                     |         |            |            |        |            
------------------------------------------------------------------------------------------------------
  TS_dcm100_inst_CLK2X_BUF = PERIOD TIMEGRP | SETUP   |     0.056ns|     7.444ns|       0|           0
   "dcm100_inst_CLK2X_BUF" TS_clk / 2       | HOLD    |     1.369ns|            |       0|           0
     HIGH 50%                               |         |            |            |        |            
------------------------------------------------------------------------------------------------------
  TS_ddr_sdram_cont_inst_dcm_module_inst_cl | SETUP   |     0.298ns|     6.904ns|       0|           0
  k90_node = PERIOD TIMEGRP         "ddr_sd | HOLD    |     2.397ns|            |       0|           0
  ram_cont_inst_dcm_module_inst_clk90_node" |         |            |            |        |            
           TS_dcm100_inst_CLK2X_BUF PHASE 1 |         |            |            |        |            
  .875 ns HIGH 50%                          |         |            |            |        |            
------------------------------------------------------------------------------------------------------
  TS_ddr_sdram_cont_inst_clk1_161 = PERIOD  | SETUP   |     0.810ns|     4.952ns|       0|           0
  TIMEGRP         "ddr_sdram_cont_inst_clk1 | HOLD    |     1.431ns|            |       0|           0
  _161" TS_dcm100_inst_CLK2X_BUF * 16 HIGH  |         |            |            |        |            
  50%                                       |         |            |            |        |            


次に同期リセット。

------------------------------------------------------------------------------------------------------
  Constraint                                |  Check  | Worst Case |  Best Case | Timing |   Timing   
                                            |         |    Slack   | Achievable | Errors |    Score   
------------------------------------------------------------------------------------------------------
* TS_ddr_sdram_cont_inst_dcm_module_inst_cl | SETUP   |    -1.248ns|     8.748ns|      76|       41070
  k_node = PERIOD TIMEGRP         "ddr_sdra | HOLD    |     0.926ns|            |       0|           0
  m_cont_inst_dcm_module_inst_clk_node"     |         |            |            |        |            
       TS_dcm100_inst_CLK2X_BUF HIGH 50%    |         |            |            |        |            
------------------------------------------------------------------------------------------------------
* TS_dcm100_inst_CLK0_BUF = PERIOD TIMEGRP  | SETUP   |    -0.434ns|    15.868ns|       1|         434
  "dcm100_inst_CLK0_BUF" TS_clk HIGH        | HOLD    |     0.765ns|            |       0|           0
    50%                                     |         |            |            |        |            
------------------------------------------------------------------------------------------------------
  TS_ddr_sdram_cont_inst_dcm_module_inst_cl | SETUP   |     0.233ns|     7.034ns|       0|           0
  k90_node = PERIOD TIMEGRP         "ddr_sd | HOLD    |     2.449ns|            |       0|           0
  ram_cont_inst_dcm_module_inst_clk90_node" |         |            |            |        |            
           TS_dcm100_inst_CLK2X_BUF PHASE 1 |         |            |            |        |            
  .875 ns HIGH 50%                          |         |            |            |        |            
------------------------------------------------------------------------------------------------------
  TS_dcm100_inst_CLK2X_BUF = PERIOD TIMEGRP | SETUP   |     0.394ns|     7.106ns|       0|           0
   "dcm100_inst_CLK2X_BUF" TS_clk / 2       | HOLD    |     1.421ns|            |       0|           0
     HIGH 50%                               |         |            |            |        |            
------------------------------------------------------------------------------------------------------
  TS_ddr_sdram_cont_inst_clk1_161 = PERIOD  | SETUP   |     0.887ns|     4.959ns|       0|           0
  TIMEGRP         "ddr_sdram_cont_inst_clk1 | HOLD    |     1.382ns|            |       0|           0
  _161" TS_dcm100_inst_CLK2X_BUF * 16 HIGH  |         |            |            |        |            
  50%                                       |         |            |            |        |            


X1つまり66MHzのクリティカルパスは、非同期リセットの方が遅延が少ないが、同期リセットの方がX2つまり133MHzのクリティカルパスの遅延が少なくなっている。
やはり、LUTが少ないほうが遅延が少ないような気がするが、痛みわけだろうか?いろいろな要因で違ってくると思うし、コストテーブルを変更すると違った結果になるかもしれない。

このような結果と、いろいろ他の方からも同期リセットの方がよいと教えてもらいましたし、今度からは、すべての回路を同期リセットで書くようにしようと思います。
  1. 2007年12月19日 06:32 |
  2. FPGAのリセットについて
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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