透過 Synopsys® 設計限制 (SDC) set_multicycle_path和get_fanouts指令,您可以根據啟用的收款器建立多週期例外。
圖 1 顯示一個簡單的 enable_reg電路,用於為註冊 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 產生一個使能脈衝,該脈衝是寄存器時鐘週期的兩倍,因此,必須應用多周期異常才能進行正確的分析。多週期設定為 2 和多週期保持為 1 必須套用於寄存器enable_reg饋送的使能驅動 寄存器。多週期異常僅適用於目標寄存器由 enable_reg 控制的寄存器到寄存 器路徑。
為此,您可以將 set_multicycle_path 異常應用於所有使能驅動的寄存器。此方法通常很繁瑣,因為必須指定所有使能驅動寄存器。或者 ,set_multicycle_path 和 get_fanouts 的組合可以按如下方式使用:
#Setup 2 個多週期到啟用的驅動目標寄存器
set_multicycle_path 2 -to [get_fanouts [get_pins enable_reg|q*] \
-through [get_pins -hierarchical *|*ena*]] -end -setup
#Hold 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[*] |
2x(閂鎖邊緣時間) |
1x(閂鎖邊緣時間) |
din_x[*] |
din_x_reg[*] |
2x(閂鎖邊緣時間) |
1x(閂鎖邊緣時間) |
din_b[*] |
din_b_reg[*] |
2x(閂鎖邊緣時間) |
1x(閂鎖邊緣時間) |
din_y[*] |
din_y_reg[*] |
2x(閂鎖邊緣時間) |
1x(閂鎖邊緣時間) |
fast_mult:多|* |
a_times_b[*] |
2x(閂鎖邊緣時間) |
1x(閂鎖邊緣時間) |
fast_mult:多|* |
x_times_y[*] |
2x(閂鎖邊緣時間) |
1x(閂鎖邊緣時間) |
enable_reg |
din_a_reg[*],din_b_reg[*],a_times_b[*],x_times_y[*] |
2x(閂鎖邊緣時間) |
1x(閂鎖邊緣時間) |
從表 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。