Mit der set_multicycle_path Synopsys® Design Constraint (SDC) und den get_fanouts Befehlen können Sie basierend auf einem Aktivierungsregister eine Multizyklen-Ausnahme erstellen.
Abbildung 1 zeigt einen einfachen Schaltkreis, bei dem Register enable_reg verwendet wird, um ein registriertes aktiviertes Signal für Register din_a_reg[7.0], din_b_reg[7.0], din_x_reg[7..0], din_y_reg[7.0], a_times_b und x_times_yzu erstellen.
Der Enable Register enable_reg generiert einen Enable-Pulse, der zwei Mal die Taktzeit des Registers beträgt. Daher muss für die korrekte Analyse eine Multizyklen-Ausnahme angewendet werden. Ein Multizyklen-Setup von 2 und ein Multicycle-Hold von 1 müssen auf das vom Register enable_reggespeiste aktivierte Register angewendet werden. Die Multizyklen-Ausnahme wird nur auf Register-zu-Register-Pfade angewendet, bei denen das Zielregister durch enable_regkontrolliert wird.
Um dies zu erreichen, können Sie die set_multicycle_path-Ausnahme auf alle aktivierten Register anwenden. Diese Methode kann in der Regel langwierig sein, da alle aktivierten Register angegeben werden müssen. Alternativ kann die Kombination aus set_multicycle_path und get_fanouts wie folgt verwendet werden:
#Setup Mehrerezyklus von 2 aktivierten zielgesteuerten Registern
set_multicycle_path 2 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end -setup
#Hold Mehrerezyklus von 1 bis aktivierten zielgesteuerten Registern
set_multicycle_path 1 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end –hold
Das Ziel der set_multicycle_path-Ausnahme ist auf alle Fanouts des Registers beschränkt, reg_en die den Enable-Port eines Registers füttern. Dies erfolgt mit der folgenden Option:
[get_fanouts [get_pins enable_reg|q*] -through [get_pins -hierarchical *|*ena*]]
Tabelle 1 zeigt die neuen Setup- und Hold-Beziehungen aller aktivierten Register-zu-Register-Pfade im Design, nachdem die Multizyklen-Ausnahmen angewendet wurden.
Tabelle 1. Einrichten und Halten von Beziehungen für aktivierte Register
Quellenregister |
Zielregister |
Einrichtungsbeziehung |
Beziehung halten |
---|---|---|---|
din_a[*] |
din_a_reg[*] |
2x (Verriegelungenrandzeit) |
1x (Verriegelungenrandzeit) |
din_x[*] |
din_x_reg[*] |
2x (Verriegelungenrandzeit) |
1x (Verriegelungenrandzeit) |
din_b[*] |
din_b_reg[*] |
2x (Verriegelungenrandzeit) |
1x (Verriegelungenrandzeit) |
din_y[*] |
din_y_reg[*] |
2x (Verriegelungenrandzeit) |
1x (Verriegelungenrandzeit) |
fast_mult:mult|* |
a_times_b[*] |
2x (Verriegelungenrandzeit) |
1x (Verriegelungenrandzeit) |
fast_mult:mult|* |
x_times_y[*] |
2x (Verriegelungenrandzeit) |
1x (Verriegelungenrandzeit) |
enable_reg |
din_a_reg[*], din_b_reg[*], a_times_b[*], x_times_y[*] |
2x (Verriegelungenrandzeit) |
1x (Verriegelungenrandzeit) |
In Tabelle 1 beachten Sie, dass die Einrichtung und Das Halten von Beziehungen, die bei register enable_reg beginnen und an einem aktivierungsgesteuerten Register enden, 2 bzw. 1 sind. Wenn für diese Pfade keine Einrichtungs- und Hold-Beziehung erforderlich ist, können Sie die folgenden Multizyklen-Ausnahmen anwenden, um die ursprünglichen Beziehungen anzuwenden:
set_multicycle_path 1 -from [get_pins enable_reg|q*] –end -setup
set_multicycle_path 0 -from [get_pins enable_reg|q*] –end –hold
Laden Sie die Beispielleitung clock_enable_multicycle.qar herunter.