入出力タイミング制約
FPGAの入出力ピンと内部FFとの間は、仮想的な外部FFを置いて計算するので、外部FFのクロックを仮想クロックとして定義する。
内部FFのクロックが入力クロックと同一周波数のときは、外部FFのクロックとして入力クロックを指定してもよいが、レポート上で「外部FF−内部FF間」と「内部FF同士」のパスが区別できなくなるので、あえて仮想クロックを定義した方がよい。
構文は、基本クロックと同じコマンドを使うが、対応するportやpinは存在しない。
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を指定するのでなく、外部FFのtCOを指定するので、次のように変数と計算式で書いた方がわかりやすい。変数はsetで値を代入し、$変数名で値を参照する。計算はexprコマンドで実行する。
例1) 入力ポートdatin[7:0]のtSU=2ns, tH=1ns
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]のtCO=max 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 ←起点(入力ポート,クロック,FFのCLKピン)のオブジェクト名 -to outputPortName ←終点(出力ポート,クロック,FFのD/RSTピン)のオブジェクト名 delayValue ←伝搬遅延時間(ns単位) |
例1) 入力ポートthruinから出力ポートthruoutまでのtPD=max 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 ←起点(入力ポート,クロック,FFのCLKピン)のオブジェクト名 -to outputPortName ←終点(出力ポート,クロック,FFのD/RSTピン)のオブジェクト名 |
例1) 入力ポートrstから内部FFまでのパスを解析しない
set_false_path -from [get_ports {rst}] -to [all_registers] |