ソース・シンクロナス・インターフェイスの制約を学ぶ必修! FPGAタイミング解析の基礎(4)(4/4 ページ)

» 2009年02月13日 00時00分 公開
[小原成介(日本アルテラ),@IT MONOist]
前のページへ 1|2|3|4       

エッジ・アラインのDDR出力制約

 では、次にエッジ・アラインのDDR出力の外部タイミング・スペックを図10に示します。

 やはり、SDRと考え方は同じですが、最大データ遅延時間にクロック周期の半分の値を使うので注意が必要です。


<最大データ遅延時間> = Tck / 2 − Tskew_max + Tdata_max − Tclk_min
<最小データ遅延時間> = Tskew_min + Tdata_min − Tclk_max 

create_clock -name clkin -period <クロック周期> [get_ports CLKIN]
create_generated_clock -name clkout -source [get_ports CLKIN] [get_ports CLKOUT]
 
set_output_delay -clock clkout -max <最大データ遅延時間> [get_ports DATAOUT]
set_output_delay -clock clkout -max <最大データ遅延時間> [get_ports DATAOUT] \
        -clock_fall -add_delay
set_output_delay -clock clkout -min <最小データ遅延時間> [get_ports DATAOUT]
set_output_delay -clock clkout -min <最小データ遅延時間> [get_ports DATAOUT] \
        -clock_fall -add_delay 

DDRエッジ・アライン出力 図10 DDRエッジ・アライン出力

センター・アラインのDDR出力制約

 最後はセンター・アラインのDDR出力です。

 図11に示す外部タイミング・スペックの場合、タイミング制約は以下のようになります。

<最大データ遅延時間> = Tsu + Tdata_max − Tclk_min
<最小データ遅延時間> = −Th + Tdata_min − Tclk_max 

create_clock -name clkin -period <クロック周期> [get_ports CLKIN]
create_generated_clock -name clkout -source [get_ports CLKIN] [get_ports CLKOUT]
 
set_output_delay -clock clkout -max <最大データ遅延時間> [get_ports DATAOUT]
set_output_delay -clock clkout -max <最大データ遅延時間> [get_ports DATAOUT] \
        -clock_fall -add_delay
set_output_delay -clock clkout -min <最小データ遅延時間> [get_ports DATAOUT]
set_output_delay -clock clkout -min <最小データ遅延時間> [get_ports DATAOUT] \
        -clock_fall -add_delay 

DDRセンター・アライン出力 図11 DDRセンター・アライン出力

応用例(MII/GMII出力のタイミング制約)

 これまでの連載で、主なSDCコマンドと制約の方法を解説してきました。本稿の最後に復習を兼ねて、少し実用的な例を取り上げることにします。

 図12に示すEthernet PHYとのインターフェイスのタイミング制約を考えてみましょう。

MII/GMII送信回路 図12 MII/GMII送信回路

 1G/100M/10Mbpsで動作するEthernet PHYデバイスは、1Gbpsのときは「GMII(Gigabit Media Independent Interface)」、100Mbpsと10Mbpsのときは「MII(Media Independent Interface)」でFPGAと通信します。GMIIはセンター・アラインのSDRソース・シンクロナス方式です。MIIは少し変則的ですが、共通クロック方式です。

 まず、MIIモードのクロックを定義します。PHYからFPGAへ供給される「TX_CLK」と、I/O制約のための仮想クロックです。10Mbps動作ではクロック周波数は2.5MHzですが、100Mbps動作の場合だけを考えれば十分なので、省略します。

create_clock -name tx_clk -period 40 [get_ports TX_CLK]
create_clock -name tx_vclk -period 40 

 次に、GMIIモードのクロックを定義します。FPGAへの入力クロック「CLKIN」、それを5逓倍した「PLLの出力」、さらにPLL出力を基に作られる出力クロック「GTX_CLK」の3つがあります。

create_clock -name clkin -period 40 [get_ports CLKIN]
create_generated_clock -name pllout -multiply_by 5 -source [get_ports CLKIN] \
         [get_pins PLL|clkout]
create_generated_clock -name gtx_clk -source [get_pins PLL|clkout] [get_ports GTX_CLK] 

 次に、クロック間の関係を定義します。MII用のクロックと、GMII用のクロックは、互いに非同期関係として扱えます。

set_clock_groups -asynchronous -group {tx_clk tx_vclk} -group {clkin pllout gtx_clk} 

 出力制約はMIIモードでは「tx_vclk」を基準に、GMIIモードでは「gtx_clk」を基準にします。2種類の制約を並べるだけですが、上書きされないように、後に書く方には「-add_delay」オプションを付け忘れないようにします。

set_output_delay -clock tx_vclk -max <MII最大データ遅延時間> \
         [get_ports TXD[*] TX_EN TX_ER]
set_output_delay -clock tx_vclk -min <MII最小データ遅延時間> \
         [get_ports TXD[*] TX_EN TX_ER]
 
set_output_delay -clock gtx_clk -max <GMII最大データ遅延時間> \
         [get_ports TXD[*] TX_EN TX_ER] -add_delay
set_output_delay -clock gtx_clk -min <GMII最小データ遅延時間> \
         [get_ports TXD[*] TX_EN TX_ER] -add_delay 

 MIIのデータ遅延時間は、前回紹介した、FPGAスペックが決まっている場合の出力制約から、以下の値を入力します。

<MII最大データ遅延時間> = Tck − Tco_max = 40 − 25 = 15
<MII最小データ遅延時間> = −Tco_min = 0 

 GMIIのデータ遅延時間は、センター・アラインのSDR出力制約から、以下の値を入力します。

<最大データ遅延時間> = Tsu + Tdata_max − Tclk_min = 4 + 0.45 − 0.35 = 4.1
<最小データ遅延時間> = −Th + Tdata_min − Tclk_max = 0 + 0.35 − 0.45 = −0.1 



 次回は実際のツールを使った、タイミング解析方法を紹介します。ちなみに、タイミング解析ツールには、アルテラ社の「TimeQuest」を使います。お楽しみに!(次回に続く)


関連キーワード

FPGA関連 | 回路 | FPGA | 設計 | ASIC | 半導体


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.