ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

FPGAプロトのベンチマーク

ベンチマークとは

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がそれほど速くない、という主旨でもないことも強調しておきます。