ข้อ จำกัด การจับเวลา ASIC ผ่าน SDC: วิธีการระบุนาฬิกามัลติเพล็กอย่างถูกต้อง?


10

บทนำ

เมื่อพบข้อมูลหลายอย่างที่ขัดแย้งหรือไม่ครบถ้วนบนอินเทอร์เน็ตและในบางคลาสฝึกอบรมเกี่ยวกับวิธีสร้างข้อ จำกัด เวลาในรูปแบบ SDCอย่างถูกต้องฉันต้องการขอความช่วยเหลือจากชุมชน EE สำหรับโครงสร้างการสร้างนาฬิกาทั่วไปที่ฉันพบ

ฉันรู้ว่ามีความแตกต่างในวิธีที่จะใช้ฟังก์ชั่นบางอย่างใน ASIC หรือ FPGA (ฉันได้ทำงานกับทั้งคู่) แต่ฉันคิดว่าควรมีวิธีทั่วไปที่ถูกต้องในการ จำกัด เวลาของโครงสร้างที่กำหนดโดยไม่ขึ้นกับ เทคโนโลยีพื้นฐาน - โปรดแจ้งให้เราทราบหากฉันทำผิดในสิ่งนั้น

นอกจากนี้ยังมีความแตกต่างบางอย่างระหว่างเครื่องมือต่าง ๆ สำหรับการใช้งานและการวิเคราะห์เวลาของผู้ขายต่าง ๆ (แม้จะมี Synopsys ที่เสนอซอร์สโค้ดตัวแยกวิเคราะห์ SDC) แต่ฉันหวังว่าพวกเขาส่วนใหญ่จะมีปัญหาเกี่ยวกับไวยากรณ์ซึ่งสามารถค้นหาได้ในเอกสาร

คำถาม

นี่คือโครงสร้างนาฬิกามัลติเพล็กเซอร์ต่อไปนี้ซึ่งเป็นส่วนหนึ่งของโมดูลclkgenซึ่งเป็นส่วนหนึ่งของการออกแบบที่มีขนาดใหญ่ขึ้นอีกครั้ง: วงจรนาฬิกามัลติเพล็กเซอร์

ในขณะที่ext_clkอินพุตถูกสร้างขึ้นจากการออกแบบภายนอก (การป้อนผ่านอินพุตพิน), clk0และclk4สัญญาณยังถูกสร้างและใช้งานโดยโมดูลclkgen (ดูคำถามนาฬิการะลอกของฉันที่เกี่ยวข้องสำหรับรายละเอียด) และมีข้อ จำกัด เกี่ยวกับนาฬิกาชื่อbaseclkและdiv4clk, ตามลำดับ

คำถามคือวิธีการระบุข้อ จำกัด เช่นที่วิเคราะห์เวลา

  1. ถือว่าcpu_clkเป็นนาฬิกาแบบมัลติเพล็กซ์ซึ่งสามารถเป็นหนึ่งในนาฬิกาแหล่งที่มา ( fast_clkหรือslow_clkหรือext_clk) โดยคำนึงถึงความล่าช้าผ่านประตู AND และ OR ที่แตกต่างกัน
  2. ในขณะเดียวกันก็ไม่ตัดเส้นทางระหว่างนาฬิกาต้นทางที่ใช้ในที่อื่นในการออกแบบ

ในขณะที่กรณีที่ง่ายที่สุดของมัลติเพล็กเซอร์นาฬิกาบนชิปดูเหมือนจะต้องการเพียงแค่set_clock_groupsคำสั่ง SDC :

set_clock_groups -logically_exclusive -group {baseclk} -group {div4clk} -group {ext_clk}

... ในโครงสร้างที่กำหนดสิ่งนี้มีความซับซ้อนเนื่องจากข้อเท็จจริงที่ว่าclk0(ผ่านทางfast_clkเอาต์พุต) และclk4(ผ่านslow_clk) ยังคงใช้ในการออกแบบแม้ว่าcpu_clkจะถูกกำหนดค่าให้เป็นext_clkเมื่อuse_extถูกยืนยันเท่านั้น

ตามที่อธิบายไว้ที่นี่ที่set_clock_groupsคำสั่งดังกล่าวจะทำให้เกิดความต่อไปนี้:

คำสั่งนี้เทียบเท่ากับการเรียก set_false_path จากแต่ละนาฬิกาในทุกกลุ่มไปยังนาฬิกาในแต่ละกลุ่มและในทางกลับกัน

... ซึ่งจะไม่ถูกต้องเนื่องจากนาฬิกาอื่น ๆ ยังคงใช้ที่อื่น

ข้อมูลเพิ่มเติม

use_clk0, use_clk4และuse_extปัจจัยการผลิตที่ถูกสร้างขึ้นในลักษณะดังกล่าวว่ามีเพียงหนึ่งของพวกเขาอยู่ในระดับสูงในเวลาใดก็ตาม ในขณะที่สิ่งนี้สามารถใช้เพื่อหยุดนาฬิกาทั้งหมดหากuse_*อินพุตทั้งหมดต่ำโฟกัสของคำถามนี้อยู่ที่คุณสมบัติการทำมัลติเพิลนาฬิกาของโครงสร้างนี้

X2อินสแตนซ์ (บัฟเฟอร์ง่าย) ในวงจรเป็นเพียงสถานที่ที่ผู้ถือเพื่อเน้นปัญหาของสถานที่และเส้นทางอัตโนมัติเครื่องมือถูกมักจะฟรีเพื่อบัฟเฟอร์สถานที่ใดก็ได้ (เช่นระหว่างand_cpu_1/zและor_cpu1/in2หมุด) ตามหลักการแล้วข้อ จำกัด เรื่องเวลาควรไม่ได้รับผลกระทบจากสิ่งนั้น


คุณลองทำสิ่งที่กระชับกว่านี้โดย จำกัด ให้แคบลงเป็นคำถามที่เจาะจงและแคบมาก ๆ ได้ไหม? มันยากสำหรับฉันที่จะเข้าใจว่าอะไรคือข้อมูลที่สำคัญและสิ่งที่คุณตามมาจริงๆ
travisbartley

@ trav1s: ฉันปรับโครงสร้างคำถาม โปรดแจ้งให้เราทราบหากคุณต้องการคำชี้แจงใด ๆ
FriendFX

คำตอบ:


3

กำหนดหารด้วย 1 นาฬิกาบน and_ * nets และประกาศว่ามันเป็นเอกสิทธิ์ทางร่างกาย คอมไพเลอร์ RTL ของ Cadence จัดการกับสถานการณ์อย่างถูกต้องโดยการสร้างเส้นทางเวลา 3 เส้นทางสำหรับการลงทะเบียนแบบ clocked โดย cpu_clk (หนึ่งเส้นทางแต่ละเส้นทางสำหรับหนึ่งนาฬิกา) รีจิสเตอร์ขับเคลื่อนโดยตรงโดย clk0, clk4 และ clk_ext มีช่วงเวลาของตัวเอง

create_generated_clock -source [get_ports clk0] \
-divide_by 1 -name and_clk0    [get_pins and_cpu_1/Y]

create_generated_clock -source [get_ports clk4] \
-divide_by 1 -name and_clk4    [get_pins and_cpu_2/Y]

create_generated_clock -source [get_ports clk_ext] \
-divide_by 1 -name and_clk_ext [get_pins and_cpu_ext1/Y]

set_clock_groups \
-physically_exclusive \
-group [get_clocks and_clk0] \
-group [get_clocks and_clk4] \
-group [get_clocks and_clk_ext]

ขอบคุณสำหรับคำแนะนำของคุณ น่าเสียดายที่ฉันไม่สามารถยืนยันสิ่งนี้ได้ในขณะนี้ แต่แนวคิดของคุณดูเหมือนจะให้คำสัญญา คุณสามารถตรวจสอบว่าเส้นทางระหว่างcast_clk, cpu_clkและslow_clkยังคงมีการตรวจสอบ (คือไม่ได้ยกเว้นเนื่องจากการที่กลุ่มนาฬิกาพิเศษ) ในขณะที่ในเวลาเดียวกันถูก จำกัด โดยนาฬิกาใส่ของพวกเขานั้น? ท้ายที่สุดฉันกำลังมองหาคำตอบที่เชื่อถือได้สำหรับคำถามนี้
FriendFX

@FriendFX ฉันได้ทดสอบโค้ดในคอมไพเลอร์ RTL และเส้นทางได้รับการอนุมานอย่างถูกต้อง
Revanth Kamaraj

เพียงเพื่อให้คุณรู้ว่าฉันได้เพิ่มข้อมูลบางอย่างเกี่ยวกับมัลติเพล็กเซอร์นาฬิกาเซลล์เดียวและวิธีแก้ปัญหา (อย่างน้อยสำหรับเครื่องมือบางอย่าง)
FriendFX

1

แม้ว่านี่จะเป็นเธรดเก่าที่ยังไม่ได้รับคำตอบ ... มันครอบคลุมความเข้าใจพื้นฐานบางอย่างของการซิงค์ vs นาฬิกา async

  • โดยทั่วไปนาฬิกาแบบซิงโครนัสจะยังคงอยู่ในเฟสที่มีการเพิ่มความล่าช้าเล็กน้อยเพื่อให้ Mux'ing ไม่สร้างความผิดพลาด
    • สิ่งนี้สามารถทำได้โดยการสุ่มสัญญาณแหล่งสัญญาณนาฬิการั้วรอบขอบชิดอีกครั้งที่นาฬิกาความเร็วเต็ม
  • นาฬิกา Asynch ไม่สำคัญสำหรับการกำหนดเวลาดังนั้นจึงอนุญาตให้เกิดความล่าช้าได้ เช่น Ripple Counters

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณที่มองคำถามเก่านี้ ในกรณีของฉันฉันไม่ต้องการซิงโครไนซ์นาฬิกากับนาฬิกาความเร็วเต็มอีกครั้งดังที่แสดงในวงจร ยังขาดหายไป แต่เป็นส่วนหลักของคำถามของฉันคืองบ SDC ที่ถูกต้องเพื่อ จำกัด วงจรนี้โดยคำนึงถึง synchronicity ของนาฬิกาแหล่งที่มาเช่นเดียวกับพวกเขาถูกนำมาใช้ในการออกแบบซิงโครนัสเดียวกันตั้งแต่การset_clock_groupsเชื่อมโยงตัวอย่างดังกล่าวอ้างว่า เส้นทางระหว่างนาฬิกาเหล่านี้
FriendFX
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.