入出力タイミング制約

[] [] []


FPGAの入出力ピンと内部FFとの間は、仮想的な外部FFを置いて計算するので、外部FFのクロックを仮想クロックとして定義する

内部FFのクロックが入力クロックと同一周波数のときは、外部FFのクロックとして入力クロックを指定してもよいが、レポート上で「外部FF−内部FF間」と「内部FF同士」のパスが区別できなくなるので、あえて仮想クロックを定義した方がよい。

構文は、基本クロックと同じコマンドを使うが、対応するportpinは存在しない。

create_clock

-name clockName    仮想クロックのオブジェクト名

-period periodValue   周期(ns単位)

[-waveform {rise fall}] エッジの位相(ns単位)。省略するとrise=0ns,Duty=50%

1)内部FFのクロックと同じ周波数の仮想クロックを定義する

create_clock -name clkin -period 30 [get_ports {clkin}]

create_clock -name clkvir -period 10

入力タイミング制約は、セットアップ(tSU)とホールド(tH)を次の構文で指定する

set_input_delay

-clock clockName 外部FFのクロックのオブジェクト名

[-clock_fall]   外部FFのクロックの立下りエッジ基準。省略すると立上りエッジ基準

[-max|min]      ←delayValueが最大値か最小値か。省略すると最大値

delayValue      外部FFのクロックツーアウトプット時間(ns単位)

{inputPortList} 入力ポートのオブジェクト名

delayValueとして、直接tSU,tHを指定するのでなく、外部FFtCOを指定するので、次のように変数と計算式で書いた方がわかりやすい。変数はsetで値を代入し、$変数名で値を参照する。計算はexprコマンドで実行する。

1) 入力ポートdatin[7:0]tSU2ns, tH1ns

set PERIOD 10

set SU 2  このSU,H値よりFPGAの実力値が小さければMETする

set H 1

create_clock -name clkvir -period $PERIOD

set_input_delay -clock clkvir -max [expr $PERIOD - $SU] [get_ports {datin[*]}]

set_input_delay -clock clkvir -min [expr $H] [get_ports {datin[*]}]

◇◇

出力タイミング制約は、クロックツーアウトプット(tCO)の最大最小を次の構文で指定する

set_output_delay

-clock clockName 外部FFのクロックのオブジェクト名

[-clock_fall]   外部FFのクロックの立下りエッジ基準。省略すると立上りエッジ基準

[-max|min]      ←delayValueが最大値か最小値か。省略すると最大値

delayValue      外部FFの入力セットアップ時間(ns単位)

{outputPortList} 出力ポートのオブジェクト名

1) 出力ポートdatout[7:0]tCOmax 4ns, min 2ns

set PERIOD 10

set COMAX 4 このCOMIN,COMAX値の範囲にFPGAの実力値が入っていればMETする

set COMIN 2

create_clock -name clkvir -period $PERIOD

set_output_delay -clock clkvir -max [expr $PERIOD - $COMAX] [get_ports {datout[*]}]

set_output_delay -clock clkvir -min [expr -$COMIN] [get_ports {datout[*]}]

◇◇◇

入力から出力への伝搬遅延(tPD)は次の構文で指定する。この構文は、ポート間だけでなく内部のパスでも使える。

set_max_delay

-from inputPortName 起点(入力ポート,クロック,FFCLKピン)のオブジェクト名

-to outputPortName  終点(出力ポート,クロック,FFD/RSTピン)のオブジェクト名

delayValue            伝搬遅延時間(ns単位)

1) 入力ポートthruinから出力ポートthruoutまでのtPDmax 5ns, min 3ns

set PDMAX 5 このPDMIN,PDMAX値の範囲にFPGAの実力値が入っていればMETする

set PDMIN 3

set_max_delay -from [get_ports {thruin}] -to [get_ports {thruout}] [expr $PDMAX]

set_min_delay -from [get_ports {thruin}] -to [get_ports {thruout}] [expr $PDMIN]

◇◇◇◇

非同期入力は、タイミング解析の対象から外すように次の構文で指定する(フォールスパスという)。この構文は、ポート間だけでなく内部のパスでも使える。

set_false_path

-from inputPortName 起点(入力ポート,クロック,FFCLKピン)のオブジェクト名

-to outputPortName  終点(出力ポート,クロック,FFD/RSTピン)のオブジェクト名

1) 入力ポートrstから内部FFまでのパスを解析しない

set_false_path -from [get_ports {rst}] -to [all_registers]


[] [] []