ベンチマークとは
FPGAプロトタイピングを行う場合、一番最初に「ベンチマークを取る」という作業をします。「ベンチマーク」という表現は、一緒に仕事をした人しか使っていなかったので、一般的な言葉かどうかは分かりません。ベンチマークだけでなく、他のプロトをしている人たちが、どういう順番で作業をしているのかは全然分からなかったりします。
ベンチマークでは、「どんな形でも良いのでFPGAの配置配線まで終わらせる」事が目標になります。
これにより、
・FPGAの規模
・動作速度
・RTLを修正してから、実機で動かすまでの1サイクルの時間
・マッピングの作業量(工数)
の見積もりができるようになります。実際に動かすわけではないので、メモリの場合はアドレスとデータ幅だけ合わせる、ブラックボックスは適当にカウンターでも入れておく、と言ったような処理を行います。ビヘイバーなモデルであっても、合成が通るならそのまま使います。CLKやResetが固定になって、最適化でごっそり消えるようなことさえ無ければ大丈夫です。
このベンチマークの結果によって、FPGAをどれを選ぶのか、CADが何台いるのか、人を何人確保すればよいのかを見積もります。
ベンチマークのためにやったこと
s1_coreをそのまま論理合成をしたところ、dff、dffeがアルテラのプリミティブと名前がぶつかっていました。dff_ny、dffe_nyとモジュール名を変更しました。_nyは長門有希から取りました。作業したところが簡単にgrepで探せるように名前をつけます。
今回はほとんど完成品のRTLなのですんなり行きますが、実際マッピングの場合は開発中のRTLを使うので論理合成が通らないとか、契約が次の段階に行かないと開示できない等の理由で、すんなりとは行きません。そういうのも踏まえた上で、どんな形でも良いので配置配線まで終わらせます。
Stratix3 ベンチマーク結果
Stratix3を使ったベンチマーク結果です。
Fitter Status : Successful - Thu Feb 05 23:17:12 2009 Quartus II Version : 8.1 Build 163 10/28/2008 SJ Full Version Revision Name : s1_top Top-level Entity Name : s1_top Family : Stratix III Device : EP3SL340F1517C3 Timing Models : Final Logic utilization : 30 % Combinational ALUTs : 47,678 / 270,400 ( 18 % ) Memory ALUTs : 5,278 / 135,200 ( 4 % ) Dedicated logic registers : 51,310 / 270,400 ( 19 % ) Total registers : 51310 Total pins : 270 / 976 ( 28 % ) Total virtual pins : 0 Total block memory bits : 264,992 / 16,662,528 ( 2 % ) DSP block 18-bit elements : 8 / 576 ( 1 % ) Total PLLs : 0 / 12 ( 0 % ) Total DLLs : 0 / 4 ( 0 % )
動作速度30MHzで制約をかけたところ、fmax=36.71 MHzで配置配線が終わりました。
1サイクルは約4時間でした。最適化などをかけていくと、1サイクルの時間が短くなることはあまりないので、6時間くらいを見ておけばよいと思います。1日2回が限度のようです。
Stratix4 ベンチマーク結果
Stratix4の実力を知りたかったので、Stratix4もベンチマークを取りました。
Fitter Status : Successful - Sat Feb 07 14:44:23 2009 Quartus II Version : 8.1 Build 163 10/28/2008 SJ Full Version Revision Name : s1_top Top-level Entity Name : s1_top Family : Stratix IV Device : EP4SE530F43C4 Timing Models : Preliminary Logic utilization : 18 % Combinational ALUTs : 45,037 / 424,960 ( 11 % ) Memory ALUTs : 2,536 / 212,480 ( 1 % ) Dedicated logic registers : 48,258 / 424,960 ( 11 % ) Total registers : 48258 Total pins : 270 / 976 ( 28 % ) Total virtual pins : 0 Total block memory bits : 267,040 / 21,233,664 ( 1 % ) DSP block 18-bit elements : 8 / 1,024 ( < 1 % ) Total GXB Receiver Channels : 0 Total GXB Transmitter Channels : 0 Total PLLs : 0 / 12 ( 0 % ) Total DLLs : 0 / 4 ( 0 % )
Stratix4ではClassic Timing Analyzerがサポートされなくなるようで、そこさえ除けば無事配置配線終了しました。ちなみに、エラーメッセージはこれです。
Error: Device family Stratix IV is not supported by the Classic Timing Analyzer
しょうがないので、TimeQuestで30MHzの制約を加えました。結果はfmax=34.62MHzで、Stratix3と比べると若干下がっています。
Virtex4ベンチマーク結果
ISE10.1をダウンロードして、同じ事をしてみました。
FPGAをVirtex5にしても、Virtex4 LX200にしてもこのようなエラーが出て途中で配置配線が止まってしまいます。
Phase 4.33
ERROR:Portability:3 - This Xilinx application has run out of memory or has
encountered a memory conflict. Current memory usage is 2089224 kb. You can
try increasing your system's physical or virtual memory. For technical
support on this issue, please open a WebCase with this project attached at
http://www.xilinx.com/support.
Virtex4でデバイスをxc4vlx160-11ff1513にして、メモリの使用量を抑え配置配線まで終了させました。
Device Utilization Summary [-] Logic Utilization Used Available Utilization Note(s) Number of Slice Flip Flops 37,533 135,168 27% Number of 4 input LUTs 78,745 135,168 58% Logic Distribution Number of occupied Slices 49,191 67,584 72% Number of Slices containing only related logic 49,191 49,191 100% Number of Slices containing unrelated logic 0 49,191 0% Total Number of 4 input LUTs 79,079 135,168 58% Number used as logic 74,831 Number used as a route-thru 334 Number used for Dual Port RAMs 1,516 Number used for 32x1 RAMs 1,888 Number used as Shift registers 510 Number of bonded IOBs 269 960 28% Number of BUFG/BUFGCTRLs 3 32 9% Number used as BUFGs 3 Number of FIFO16/RAMB16s 113 288 39% Number used as RAMB16s 113 Number of DSP48s 8 96 8%
制約は30MHzとし、fmax=30.47 MHzの結果になりました。
Virtex5ベンチマーク結果(2月11日追記)
xc5vlx110-3ff1153までデバイスを小さくすることで、エラー無しに配置配線まで完了しました。
Device Utilization Summary [-] Slice Logic Utilization Used Available Utilization Note(s) Number of Slice Registers 37,386 69,120 54% Number used as Flip Flops 37,380 Number used as Latch-thrus 6 Number of Slice LUTs 54,247 69,120 78% Number used as logic 52,481 69,120 75% Number using O6 output only 51,973 Number using O5 output only 157 Number using O5 and O6 351 Number used as Memory 1,595 17,920 8% Number used as Dual Port RAM 582 Number using O6 output only 78 Number using O5 output only 178 Number using O5 and O6 326 Number used as Single Port RAM 472 Number using O6 output only 472 Number used as Shift Register 541 Number using O6 output only 541 Number used as exclusive route-thru 171 Number of route-thrus 471 138,240 1% Number using O6 output only 284 Number using O5 output only 143 Number using O5 and O6 44 Slice Logic Distribution Number of occupied Slices 16,314 17,280 94% Number of LUT Flip Flop pairs used 60,718 Number with an unused Flip Flop 23,332 60,718 38% Number with an unused LUT 6,471 60,718 10% Number of fully used LUT-FF pairs 30,915 60,718 50% Number of unique control sets 3,151 IO Utilization Number of bonded IOBs 269 800 33% Specific Feature Utilization Number of BlockRAM/FIFO 100 128 78% Number using BlockRAM only 100 Total primitives used Number of 36k BlockRAM used 90 Number of 18k BlockRAM used 19 Total Memory used (KB) 3,582 4,608 77% Number of BUFG/BUFGCTRLs 3 32 9% Number used as BUFGs 3 Number of DSP48Es 8 64 12%
fmaxは34.67MHzでした。
ベンチマーク結果
ベンチマークの結果ですが、Stratix3の方がStratix4よりも速いという結果がでました。いろいろと事情はあるのでしょうが、このデザインにおいては、Stratix3をStratix4にしたからといって劇的に速度が上がるわけでは無い事がわかりました。EP3SL340F1517C3の場合、リソースの使用率が20%を切ってます。もとのOpen sparc T1を動かす場合は、sparcのコアが2個は入り3個目は厳しいという見積もりが出ます。
今回の場合はメモリ不足でISEが途中で止まってしまいました。根本的な原因を解決できない限り、アルテラとザイリンクスを選べる状態にあるのであれば、アルテラを選ぶ方が無難という事になります。
念のためフォローしておきますが、ISEのメモリ不足は2年前でも発生しており既知の問題です。64bit環境を使うなど回避策もあるので、この結果だけで「アルテラの方が常によい」というわけでは無い事を強調しておきます。あくまで、ベンチマークの雰囲気と、こういう問題がおきますよ、という例でしかありません。同じく、Stratix4がそれほど速くない、という主旨でもないことも強調しておきます。