Synopsys* Design Constraint (SDC) の set_multicycle_path および get_fanouts コマンドを使用して、イネーブルレジスターに基づくマルチサイクル例外を作成できます。
図 1 は、各レジスター din_a_reg[7..0]、din_b_reg[7..0]、din_x_reg[7..0]、din_y_reg[7..0]、a_times_b、x_times_y 用のレジスタード・イネーブルド信号を作成するのに、レジスター enable_reg を使用するシンプルな回路を示しています。
イネーブルレジスター enable_reg は、イネーブルパルスを生成します。これはレジスターのクロック周期の 2 倍で、このため、正確な解析のためマルチサイクル例外を適用する必要があります。レジスター enable_reg がフィードするイネーブル駆動のレジスターに、マルチサイクル設定 2、およびマルチサイクル・ホールド 1 を適用する必要があります。マルチサイクル例外は、デスティネーション・レジスターが enable_reg により制御される、レジスター間パスにのみ適用されます。
これを実行するため、すべてのイネーブル駆動レジスターに set_multicycle_path 例外を適用できます。この方法は一般に退屈になりがちです。すべてのイネーブル駆動レジスターを指定する必要があるからです。代わりに、set_multicycle_path および get_fanouts を組み合わせて、以下のように使用できます。
# 2 のマルチサイクルをイネーブルド駆動デスティネーション・レジスターにセットアップ
set_multicycle_path 2 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end -setup
# 1 のマルチサイクルをイネーブルド駆動デスティネーション・レジスターにホールド
set_multicycle_path 1 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end –hold
set_multicycle_path 例外のターゲットは、レジスターのイネーブルポートにフィードする、レジスター reg_en のすべてのファンアウトに限定されます。これは、以下のオプションにより実行します。
[get_fanouts [get_pins enable_reg|q*] -through [get_pins -hierarchical *|*ena*]]
表 1 は、マルチサイクル例外を適用した後、デザイン内にあるすべてのイネーブル駆動レジスター間パスの、新しいセットアップおよびホールドのリレーションシップを示しています。
表 1.イネーブル駆動のレジスター向けセットアップおよびホールドのリレーションシップ
ソースレジスター |
デスティネーション・レジスター |
セットアップ・リレーションシップ |
ホールド関係 |
---|---|---|---|
din_a[*] |
din_a_reg[*] |
2 倍 (ラッチ・エッジ・タイム) |
1 倍 (ラッチ・エッジ・タイム) |
din_x[*] |
din_x_reg[*] |
2 倍 (ラッチ・エッジ・タイム) |
1 倍 (ラッチ・エッジ・タイム) |
din_b[*] |
din_b_reg[*] |
2 倍 (ラッチ・エッジ・タイム) |
1 倍 (ラッチ・エッジ・タイム) |
din_y[*] |
din_y_reg[*] |
2 倍 (ラッチ・エッジ・タイム) |
1 倍 (ラッチ・エッジ・タイム) |
fast_mult:mult|* |
a_times_b[*] |
2 倍 (ラッチ・エッジ・タイム) |
1 倍 (ラッチ・エッジ・タイム) |
fast_mult:mult|* |
x_times_y[*] |
2 倍 (ラッチ・エッジ・タイム) |
1 倍 (ラッチ・エッジ・タイム) |
enable_reg |
din_a_reg[*],din_b_reg[*], a_times_b[*],x_times_y[*] |
2 倍 (ラッチ・エッジ・タイム) |
1 倍 (ラッチ・エッジ・タイム) |
表 1 では、レジスター enable_reg で始まり、任意のイネーブル駆動レジスターで終了する、セットアップのリレーションシップは 2、ホールドのリレーションシップは 1 であることに注目してください。これらのパスがセットアップおよびホールドのリレーションシップ変更を必要としない場合、以下のマルチサイクル例外を適用して、元のリレーションシップを適用できます。
set_multicycle_path 1 -from [get_pins enable_reg|q*] –end -setup
set_multicycle_path 0 -from [get_pins enable_reg|q*] –end –hold
回路例 clock_enable_multicycle.qar をダウンロード。