ด้วย set_multicycle_path Synopsys® Design Constraint (SDC) และคําสั่ง 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[*] |
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