16.バックアノテーション
FPGAの開発フローと論理合成、ゲートレベルシミュレーションについて御参照ください。
ここでは、SDFファイルについて説明します。
SDFとは、Standard Delay Formatの略で、その名の通り業界標準の遅延フォーマットファイルです。
SDFはVerilogに限定されるものではありません。VHDLでも利用可能なフォーマットになっています。
例として、Quartusの出力の一部を下記に示します。
//
// Device: Altera EP1C4F400C8 Package FBGA400
//
//
// This SDF file should be used for Custom Verilog HDL only
//
(DELAYFILE
(SDFVERSION "2.1")
(DESIGN "big_counter")
(DATE "05/09/2004 21:02:37")
(VENDOR "Altera")
(PROGRAM "Quartus II")
(VERSION "Version 4.0 Build 190 1/28/2004 SJ Full Version")
(DIVIDER .)
(TIMESCALE 1 ps)
(CELL
(CELLTYPE "cyclone_asynch_io")
(INSTANCE clock\~I.asynch_inst)
(DELAY
(ABSOLUTE
(IOPATH padio combout (1469:1469:1469) (1469:1469:1469))
)
)
)
(CELL
(CELLTYPE "cyclone_asynch_io")
(INSTANCE reset\~I.asynch_inst)
(DELAY
(ABSOLUTE
(IOPATH padio combout (1475:1475:1475) (1475:1475:1475))
)
)
)
(CELL
(CELLTYPE "cyclone_asynch_io")
(INSTANCE A\[4\]\~I.asynch_inst)
(DELAY
(ABSOLUTE
(IOPATH padio combout (1475:1475:1475) (1475:1475:1475))
)
)
)
(CELL
(CELLTYPE "cyclone_asynch_lcell")
(INSTANCE a\[4\]\~I.lecomb)
(DELAY
(ABSOLUTE
(PORT datac (5397:5397:5397) (5397:5397:5397))
(PORT datad (5005:5005:5005) (5005:5005:5005))
(IOPATH datac regin (478:478:478) (478:478:478))
(IOPATH datad regin (309:309:309) (309:309:309))
)
)
)
(CELL
(CELLTYPE "cyclone_lcell_register")
(INSTANCE a\[4\]\~I.lereg)
(DELAY
(ABSOLUTE
(PORT aclr (898:898:898) (898:898:898))
(PORT clk (1643:1643:1643) (1643:1643:1643))
(IOPATH (posedge clk) regout (224:224:224) (224:224:224))
(IOPATH (posedge aclr) regout (283:283:283) (283:283:283))
)
)
(TIMINGCHECK
(SETUP datain (posedge clk) (37:37:37))
(HOLD datain (posedge clk) (15:15:15))
)
)
|
SDFの役割としては、遅延パス、とタイミングチェックSPEC.の提示があります。
たとえば、一番上のCELLの例ですと、
(IOPATH padio combout (1469:1469:1469) (1469:1469:1469))
になっています。 padio combout間の遅延が1469psであることを示しています。括弧内は、(立ち上がり:立下り:Zへの遷移)です。括弧が二つあるのは、Min,Maxを示しています。この例では、Min,Max同じになっています。
この他にPORTの記述がありますが、これは、当該ポートの前段にDelayが入ることを示します。
(PORT datac (5397:5397:5397) (5397:5397:5397))
の場合、datacの前に5397psのDelayが挿入されます。
また、次の例は、CLKエッジの立ち上がりを検出したらregoutは、224ps後に結果がDelayすることを示しています。
(IOPATH (posedge clk) regout (224:224:224) (224:224:224))
次の例は、FFのセットアップ、ホールドタイムのSPEC.提示です。セットアップ37ps、ホールドタイム15psになっています。
(TIMINGCHECK (SETUP datain (posedge clk) (37:37:37))
(HOLD datain (posedge clk) (15:15:15)) )
それでは、SDFファイルは、どの時点で読み込むのでしょうか?コンパイラにより、様々のようですが、Veritakの場合、素直に
$sdf_annotateで読み込んでいます。つまり、通常のVerilogの構文解析、Elaboration、コード生成をした後のRUNTIME時に読み込んでいます。読むといっても、SDFファイルの構文解析に始まり、パスの探索、Delay素子やTiming Check素子の挿入を全ての掲載パスについて行わなければならないので、大規模になると時間がかかる作業になります。
quartusの論理合成したファイルには、*.voです。このファイルのどこかに、
initial $sdf_annotate("big_counter_v.sdo");//上記SDFファイルの場合
という文がある筈です。逆にこの文をコメントアウトするとSDFファイルは読み込まれずにDelayなしのゲートシミュレーションをすることができます。