入出力タイミング制約

[] [] []


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

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

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

create_clock

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

-period periodValue                  周期(ns単位)

[-waveform {riseValue fallValue}]  立上がりと立下がりエッジの位相(ns単位)。省略すると立上がりが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を指定するのでなく、外部FFのtCOを指定するので、次のように変数と計算式で書いた方がわかりやすい。

変数は、setで値を代入し、$変数名で値を参照する。計算は、exprコマンドで実行する。

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

set PERIOD 10

set SU 2

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 3ns, min 2ns

set PERIOD 10

set COMAX 7

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)入力ポートdatinから出力ポートdatoutまでのtPDmax 5ns, min 3ns

set PDMAX 5

set PDMIN 3

set_max_delay -from [get_ports {datin}] -to [get_ports {datin}] $PDMAX

set_min_delay -from [get_ports {datin}] -to [get_ports {datin}] $PDMIN

◇◇◇◇

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

set_false_path

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

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

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

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


[] [] []