FC2カウンター FPGAの部屋 ISE11.2iでのSpartan-3とSpartan-6の速度差
FC2ブログ

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

FPGAの部屋

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

ISE11.2iでのSpartan-3とSpartan-6の速度差

@eleでぐらろさんがSpartan-6はSpratan-2Eの2倍速いと書いておられたので、私もSpartan-3とSpartan-6でやってみた。比較する回路は、DDR2 SDRAMコントローラなどは、そのFPGAに固有のプリミティブを使っていたりするのでだめ。なので、ちょっとしょぼいがキャラクタ・ディスプレイ・コントローラでやってみることにした。使用したバージョンはISE11.2i。
これは本当は50MHzのクロックを入れて、それをDCMで1/2の25MHzに落として動作する。今回はDCMを取り除いて、入力したクロックで直接動作するように変更した。この入力周波数をを200MHz、周期5nsで動作するようにUCFを書き換え、入出力パッドの制約をコメントアウトした。

#PACE: Start of Constraints generated by PACE
#PACE: Start of PACE I/O Pin Assignments
#NET "clk" LOC = "T9";
#NET "reset" LOC = "L14";
#NET "VGA_BLUE" LOC = "R11" | DRIVE = 8 | SLEW = FAST ;
#NET "VGA_GREEN" LOC = "T12" | DRIVE = 8 | SLEW = FAST ;
#NET "VGA_HSYNC" LOC = "R9" | DRIVE = 8 | SLEW = FAST ;
#NET "VGA_RED" LOC = "R12" | DRIVE = 8 | SLEW = FAST ;
#NET "VGA_VSYNC" LOC = "T10" | DRIVE = 8 | SLEW = FAST ;
#PACE: Start of PACE Area Constraints
#PACE: Start of PACE Prohibit Constraints
#PACE: End of Constraints generated by PACE
NET "clk" TNM_NET = "clk";
TIMESPEC "TS_clk" = PERIOD "clk" 5 ns HIGH 50 %;


これでSpartan-3 (xc3s200-4ft256) で、ISEの設定をデフォルトの状態でインプリメントした。
PARのタイミングレポートを下に示す。

----------------------------------------------------------------------------------------------------------
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   
                                            |             |    Slack   | Achievable | Errors |    Score   
----------------------------------------------------------------------------------------------------------
* TS_clk = PERIOD TIMEGRP "clk" 5 ns HIGH 5 | SETUP       |    -1.829ns|     6.829ns|      35|       20907
  0%                                        | HOLD        |     0.806ns|            |       0|           0
------------------------------------------------------------------------------------------------------


クリティカルパスが6.829ns、146MHzと結構、頑張っている。
使用したロジックを下に示す。
spartan3_chardisp_ISE112_090701.png

次にSpartan-6 (xc6slx9-2csg225) に変更して、同じ条件でインプリメントしてみる。

----------------------------------------------------------------------------------------------------------
  Constraint                                |    Check    | Worst Case |  Best Case | Timing |   Timing   
                                            |             |    Slack   | Achievable | Errors |    Score   
----------------------------------------------------------------------------------------------------------
* TS_clk = PERIOD TIMEGRP "clk" 5 ns HIGH 5 | SETUP       |    -0.638ns|     5.638ns|      43|       12140
  0%                                        | HOLD        |     0.776ns|            |       0|           0
------------------------------------------------------------------------------------------------------


上のように通っていないが、5.638ns、177MHz動作となった。Spartan-3よりも速い。
使用したロジックを下に示す。
spartan6_chardisp_ISE112_090701.png

まだまだ、表示しきれないほどロジックがある。ISERDESやOSERDESなども見えた。
使用したLUT数はSpartan-3は129で、Spartan-6は88だった。
Spartan-6は楽しみなFPGAだと思う。FPGA Editorで見るといろいろ入っているようだ。

2009/07/04 追加:
Virtex-4, xc4vlx15-10sf363 で同様にやると、制約5nsパス、制約4nsもパス。制約を3nsにしたら、さすがに3.615ns、277MHzとなりました。
Virtex-5, xc5vlx30-1ff324 では、3.440ns、291MHz
Virtex-6, xc6vlx75-1ff484 では、3.330ns、300MHz
でした。
さすがにVirtexシリーズは速いようです。やはり配線の数が違うのでしょうか?
  1. 2009年07月01日 21:15 |
  2. Virtex-6, Spartan-6
  3. | トラックバック:0
  4. | コメント:10

コメント

こんにちは
私は試してないですが、その差だと、たいして出てない気がします。
S3はS3Aより低速ですが、S3AでDDR400がMAXで、S6だとDDR800ができると聞いていたので、てっきり、S3との比較なら、倍ぐらい早いのかと思いました。DDRプリミティブだけ高速で、一般ゲート遅延はそうでもないのかしら。それともたまたま差がでなかった?。もしV4より遅かったらがっかりします。
ISEの速度優先オプションとか何かS6に適したオプションがあるような気もします。
  1. 2009/07/02(木) 22:23:20 |
  2. URL |
  3. nsx #-
  4. [ 編集 ]

nsxさん、こんにちは。
なにも最適化しないで、20%程度早くなっているので、結構良いかな?と思っていました。
よくはわかりませんが、微細化でロジックは速くなっても、配線は相対的に遅くなるのでは?と思っています。
ISEのオプションはなにもいじっていませんが、Spartan-6に適したオプションはざっと見ただけだとないようです。FPGAをSpartan-6に設定した時点で、適したオプションを自動的に実行してくれるのではないでしょうか?
  1. 2009/07/03(金) 04:52:55 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

比較してみました

こんにちは。

再度比較してみました。
ターゲットデバイスと開発ツールは
・Cyclone3  EPC3C5E144C8    QuartusⅡ9.0SP2(無償版)
・ACEX1K   EP1K100QC208-3   QuartusⅡ9.0SP2(無償版)
・Spartan2E XC2S300E-6PQ208 WebpackISE10.1.03(無償版)
・Spartan3A XC3S200A-4VQ100 WebpackISE11.2(無償版)
・Spartan6  XC6SLX9-2TQG144 WebpackISE11.2(無償版)

デザインファイルは@eleの回路図データベースに登録してあるPCM音声再生回路です。
ファイルは全く弄っていません。
全て共通です。
開発ツールのオプションも何も弄っていません。
Xilinxでは制約としてCLKを50MHzとしています。

          Cyc3   Sp2E   Sp3A   Sp6
---------------------------------------------
FF使用数    698    692    686    634 
LUT使用数  1949    1939    1946   1430
FMAX(MHz) 105.06  64.416  99.810  138.903

こんな結果になりました。

memory controller blocks (MCBs)を使うと800Mb/sに対応するみたいですね。
  1. 2009/07/03(金) 15:37:35 |
  2. URL |
  3. ぐらろ #-
  4. [ 編集 ]

ぐらろさん、こんにちは
詳細な比較とても参考になりました。Sp3A:Sp6 が140%ということは、ぐらろさんの比較回路だとSp3比だと150%ぐらいなのでしょう。
LUTの入力数が増えているので、if文をある程度ネストする回路で比較しないと差がでにくいのかもと思います。
たぶん、S3<S3A≒V2p<V4<S6、こんな速度比較になるのでしょう。S6には期待していて、V4比で130%出て欲しいと思っています。結局、高速動作させるためにはプリミティブよりクリティカルパスで決まってしまうので。
>memory controller blocks (MCBs)を使うと800Mb/sに対応するみたいですね
勉強してみます。
  1. 2009/07/03(金) 17:25:32 |
  2. URL |
  3. nsx #-
  4. [ 編集 ]

ぐらろさん、データありがとうございます。
Xilinxでは制約としてCLKを50MHzにされているということですが、XilinxのPARは50MHz以上になった時点であきらめると思うので、無理そうな動作周波数例えば200MHzなどの制約を与えるとどうなりますでしょうか?もちろん、ロジックの遅延の総和が5nsを超えるとエラーですけど。。。
  1. 2009/07/03(金) 20:03:01 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

すみません。
最大動作周波数の見るところを今まで間違っていたようです。

今までSynthesis ReportのTiming SummaryのMaximum Frequencyを最大動作周波数と思っていました。
タイミング制約を変えても全く、ここの値が変化しなかったので見ていたところが違っていたということに気づきました。

タイミング制約を200MHzにしてPARを見ると・・・・・

何だか結果が・・・・・・

ちょっと時間をください。
すみません。
  1. 2009/07/04(土) 00:19:44 |
  2. URL |
  3. ぐらろ #-
  4. [ 編集 ]

もしかしてPARがエラーですか?
その場合には、制約を緩めることをお勧めします。エラーリポートに書いてある最大遅延よりも大きな値を設定します。そうするとPARが通るはずです。
  1. 2009/07/04(土) 02:19:41 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

え~~、Vertexの方が早いのですか。
実験
Sp3 LUT:271 136MHz
Sp6 LUT:213 190MHz
V4. LUT:275 241MHz

Sp6ってV4より遅いのか、いやはやがっかり。コピーでは、V6と共通コアだからV6並に早いとか聞いてました。V4の後継機に使用するつもりだったのに。たいそうにSp6とかつけているけど、Sp4でいいじゃないのかな。
DDR800対応って、DDRプリミティブだけ早いのか。ゲートのクリティカルパスと整合とる回路を作れるとはとても思えません。とほほ。
  1. 2009/07/05(日) 00:29:09 |
  2. URL |
  3. nsx #-
  4. [ 編集 ]

やはりVirtexの方がSpartanよりも速いようですね。
Spartan-6のDDRは専用のハードマクロですね。
  1. 2009/07/05(日) 06:24:03 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

再度色々なタイミング制約をかけてPost-PAR Static Timing Reporを見たんですが一番良い結果で比べると

Spartan2E 制約80MHz  79.466MHz
Spartan3A 制約100MHz 100.180MHz
Spartan6  制約150MHz  93.650MHz

とSpartan6がSpartan3Aより劣る結果に・・・・
まだ何かおかしいようです。
マニュアル見て勉強してみます。
  1. 2009/07/05(日) 17:35:04 |
  2. URL |
  3. ぐらろ #-
  4. [ 編集 ]

コメントの投稿


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

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