Dengan set_multicycle_path Synopsys® Design Constraint (SDC) dan perintah get_fanouts, Anda dapat membuat pengecualian multicycle berdasarkan register aktif.
Gambar 1 menunjukkan sirkuit sederhana di mana enable_reg register digunakan untuk membuat sinyal yang diaktifkan terdaftar untuk register din_a_reg[7..0], din_b_reg[7..0], din_x_reg[7..0], din_y_reg[7..0], a_times_b, dan x_times_y.
Register aktifkan enable_reg menghasilkan pulsa aktif yang dua kali periode clock register dan, karenanya, pengecualian multicycle harus diterapkan untuk analisis yang benar. Pengaturan multicycle 2 dan multicycle hold 1 harus diterapkan ke register enable-driven yang diberikan oleh register enable_reg. Pengecualian multicycle diterapkan hanya untuk jalur register-to-register di mana register tujuan dikontrol oleh enable_reg.
Untuk mencapainya, Anda dapat menerapkan pengecualian set_multicycle_path untuk semua register yang didukung aktif. Metode ini biasanya membosankan, karena semua register enable-driven harus ditentukan. Atau, kombinasi set_multicycle_path dan get_fanouts dapat digunakan sebagai berikut:
#Setup multicycle 2 untuk register tujuan driven yang diaktifkan
set_multicycle_path 2 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end -setup
#Hold multicycle dari 1 register tujuan yang didukung
set_multicycle_path 1 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end –hold
Target pengecualian set_multicycle_path terbatas pada semua kipas register reg_en yang memberi umpan ke port pemberdayaan register, yang dilakukan dengan opsi berikut:
[get_fanouts [get_pins enable_reg|q*] -through [get_pins -hierarchical *|*ena*]]
Tabel 1 menunjukkan hubungan pengaturan dan penahanan baru dari semua jalur register-to-register yang didorong aktif dalam desain setelah pengecualian multicycle diterapkan.
Tabel 1. Mengatur dan Menahan Hubungan untuk Register Yang Didukung Aktif
Daftar Sumber |
Register Tujuan |
Hubungan Pengaturan |
Menahan Hubungan |
---|---|---|---|
din_a[*] |
din_a_reg[*] |
2x (waktu edge kait) |
1x (waktu edge kait) |
din_x[*] |
din_x_reg[*] |
2x (waktu edge kait) |
1x (waktu edge kait) |
din_b[*] |
din_b_reg[*] |
2x (waktu edge kait) |
1x (waktu edge kait) |
din_y[*] |
din_y_reg[*] |
2x (waktu edge kait) |
1x (waktu edge kait) |
fast_mult:mult|* |
a_times_b[*] |
2x (waktu edge kait) |
1x (waktu edge kait) |
fast_mult:mult|* |
x_times_y[*] |
2x (waktu edge kait) |
1x (waktu edge kait) |
enable_reg |
din_a_reg[*],din_b_reg[*], a_times_b[*],x_times_y[*] |
2x (waktu edge kait) |
1x (waktu edge kait) |
Dari Tabel 1, perhatikan bahwa hubungan pengaturan dan penahanan yang dimulai dari register enable_reg dan berakhir di register yang didukung aktif secara beruratan masing-masing adalah 2 dan 1. Jika jalur ini tidak memerlukan hubungan pengaturan dan penahanan untuk dimodifikasi, Anda dapat menerapkan pengecualian multicycle berikut untuk menerapkan hubungan asli:
set_multicycle_path 1 -from [get_pins enable_reg|q*] –end -setup
set_multicycle_path 0 -from [get_pins enable_reg|q*] –end –hold
Unduh contoh sirkuit clock_enable_multicycle.qar.