อุปกรณ์ลอจิกดิจิทัลที่ทันสมัยมักใช้ (*) ที่ออกแบบด้วย "แบบฝึกหัดการออกแบบแบบซิงโครนัส": รูปแบบการออกแบบการถ่ายโอนลงทะเบียนแบบโอนย้ายขอบแบบซิงโครนัสทั่วโลก (RTL): วงจรเรียงลำดับทั้งหมด และตรรกะเชิงผสมที่บริสุทธิ์
สไตล์การออกแบบนั้นช่วยให้ผู้คนสามารถออกแบบระบบลอจิกดิจิทัลได้อย่างรวดเร็วโดยไม่คำนึงถึงเวลา ระบบของพวกเขาจะ "ทำงาน" ตราบใดที่มีเวลาเพียงพอจากขอบนาฬิกาหนึ่งไปยังอีกนาฬิกาหนึ่งสำหรับสถานะภายในที่จะชำระ
ด้วยสไตล์การออกแบบนี้ความเบ้ของนาฬิกาและปัญหาเกี่ยวกับเวลาอื่น ๆนั้นไม่เกี่ยวข้องยกเว้นในการหา "อัตรานาฬิกาสูงสุดสำหรับระบบนี้คืออะไร"
นาฬิกาเอียงคืออะไร?
ตัวอย่างเช่น:
...
R1 - register 1 R3
+-+
->| |------>( combinational ) +-+
...->| |------>( logic )->| |--...
->|^|------>( )->|^|
+-+ ( ) +-+
| +--->( ) |
CLK | +->( ) CLK
| |
R2: | |
+-+ | |
...->| |->+ |
->|^|->--+
+-+
|
CLK
ในฮาร์ดแวร์จริง "CLK" สัญญาณไม่เคยจริงๆสวิตช์ตรงพร้อมกันทุกครั้งที่ลงทะเบียน นาฬิกาลาด Tskew ความล่าช้าของนาฬิกาญาติปลายน้ำเพื่อนาฬิกาต้นน้ำ ( ):
Tskew (ต้นทางปลายทาง) = destination_time - source_time
โดยที่ source_time เป็นเวลาของขอบนาฬิกาที่แอ็คทีฟที่การลงทะเบียนซอร์สอัพสตรีม (ในกรณีนี้ R1 หรือ R2) และ destination_time เป็นเวลาของขอบนาฬิกาแอคทีฟ "เดียวกัน" ที่รีจิสเตอร์ปลายทางดาวน์สตรีมบางส่วน (ในกรณีนี้ R3) .
- นาฬิกาเชิงลบเอียง: CLK ที่ R3 จะสลับก่อนนาฬิกาที่ R1
- สัญญาณนาฬิกาเป็นบวก: CLK ที่ R3 จะสลับหลังจากนาฬิกาที่ R1
ผลของการเอียงนาฬิกาเป็นอย่างไร
(อาจเป็นแผนภาพเวลาที่นี่จะทำให้ชัดเจนขึ้น)
สำหรับสิ่งที่ทำงานได้อย่างถูกต้องแม้ในกรณีที่เลวร้ายที่สุดอินพุตของ R3 จะต้องไม่เปลี่ยนแปลงในช่วงเวลาการตั้งค่าหรือเวลาค้าง R3 ที่แย่กว่านั้นสำหรับสิ่งที่จะทำงานอย่างถูกต้องเราต้องออกแบบสิ่งต่าง ๆ เช่น:
Tskew (R1, R3) <Tco - Th
Tclk_min = Tco + Tcalc + Tsu - Tskew (R1, R3)
ที่อยู่:
- Tcalc เป็นเวลาการตกตะกอนสูงสุดที่เลวร้ายที่สุดของบล็อกใด ๆ ของตรรกะเชิงผสมที่ใดก็ได้ในระบบ (บางครั้งเราสามารถออกแบบบล็อกของตรรกะเชิงผสมที่อยู่บนเส้นทางวิกฤติผลักชิ้นส่วนต้นน้ำหรือปลายน้ำหรือแทรกขั้นตอนการวางท่ออีกขั้นดังนั้นการออกแบบใหม่จึงมีขนาดเล็กกว่า Tcalc ซึ่งช่วยให้เราเพิ่มอัตรานาฬิกาได้) .
- Tclk_min เป็นช่วงเวลาต่ำสุดจากขอบนาฬิกาที่ใช้งานหนึ่งไปยังขอบนาฬิกาที่ใช้งานถัดไป เราคำนวณจากสมการข้างต้น
- Tsu คือเวลาการตั้งค่าการลงทะเบียน ผู้ผลิตที่ลงทะเบียนคาดว่าเราจะใช้นาฬิกาช้าพอที่จะตอบสนองความต้องการนี้ได้เสมอ
- Th คือเวลาพักการลงทะเบียน ผู้ผลิตที่ลงทะเบียนคาดหวังให้เราควบคุมนาฬิกาไม่ให้เพียงพอที่จะตอบสนองความต้องการนี้ได้เสมอ
- Tco คือการหน่วงเวลาการส่งสัญญาณนาฬิกา (เวลาแพร่กระจาย) หลังจากแต่ละขอบนาฬิกาที่ใช้งานอยู่ R1 และ R2 ยังคงขับค่าเก่าไปยังตรรกะเชิงผสมสำหรับช่วงเวลาสั้น ๆ Tco ก่อนที่จะเปลี่ยนเป็นค่าใหม่ นี้ถูกกำหนดโดยฮาร์ดแวร์และรับประกันโดยผู้ผลิต แต่ตราบใดที่เรามีคุณสมบัติตรงตามข้อกำหนดของ Tsu และ Th และข้อกำหนดอื่น ๆ ที่ผู้ผลิตระบุสำหรับการทำงานปกติ
การเอียงเชิงบวกมากเกินไปเป็นความหายนะ การเอียงเชิงบวกมากเกินไปสามารถ (ด้วยการรวมข้อมูลบางอย่าง) ทำให้เกิด "เส้นทางการแอบ" เช่นนั้นแทนที่จะ R3 ล็อก "ข้อมูลที่ถูกต้อง" ที่นาฬิกา N + 1 (ฟังก์ชั่นที่กำหนดขึ้นของข้อมูลก่อนหน้านี้เข้า R1 และ R2 ที่นาฬิกา N) ข้อมูลใหม่ที่ล็อกเข้ากับ R1 และ R2 ที่นาฬิกา N + 1 สามารถรั่วไหลผ่านทำให้เสียตรรกะเชิงผสมและทำให้ข้อมูลที่ไม่ถูกต้องเข้าสู่ R3 ที่ "นาฬิกา" ที่ขอบเดียวกัน N + 1
จำนวนเอียงเชิงลบใด ๆ สามารถ "คงที่" ได้โดยการชะลอความเร็วของนาฬิกา มันเป็นเพียง "ไม่ดี" ในแง่ที่ว่ามันบังคับให้เราเรียกใช้ระบบในอัตรานาฬิกาที่ช้าลงเพื่อให้อินพุตของ R3 เวลาในการชำระหลังจาก R1 และ R2 สลักข้อมูลใหม่ที่ขอบนาฬิกา N และจากนั้น R3 ในภายหลัง latches ผลลัพธ์ที่ขอบนาฬิกา "ถัดไป" N + 1
ระบบจำนวนมากใช้เครือข่ายการกระจายสัญญาณนาฬิกาที่พยายามลดความเบ้เป็นศูนย์ ตอบโต้โดยการเพิ่มความล่าช้าตามเส้นทางนาฬิกา - เส้นทางจากตัวกำเนิดสัญญาณนาฬิกาไปยังอินพุต CLK ของแต่ละรีจิสเตอร์ - เป็นไปได้ที่จะเพิ่มความเร็วที่ชัดเจนที่ขอบคลื่นนาฬิกาจะเดินทางจากอินพุต CLK ของรีจิสเตอร์หนึ่งไปยัง อินพุต CLK ของรีจิสเตอร์ถัดไปจะเร็วกว่าความเร็วแสง
เอกสาร Alteraกล่าว
"หลีกเลี่ยงการใช้ตรรกะเชิงผสมในเส้นทางนาฬิกาเพราะมันก่อให้เกิดการเอียงของนาฬิกา"
นี่คือความจริงที่ว่าคนจำนวนมากเขียน HDL ที่รวบรวมไปยัง FPGA ในลักษณะที่ทำให้เกิดสิ่งอื่นที่ไม่ใช่สัญญาณ CLK ทั่วโลกเพื่อขับเคลื่อนอินพุต CLK ท้องถิ่นของการลงทะเบียนบางอย่าง (นี่อาจเป็นตรรกะ "สัญญาณนาฬิกา" เพื่อให้ค่าใหม่ถูกโหลดเข้าสู่รีจิสเตอร์เมื่อตรงตามเงื่อนไขบางอย่างเท่านั้นหรือตรรกะ "ตัวแบ่งสัญญาณนาฬิกา" ที่ปล่อยให้นาฬิกา N 1 ตัวผ่านหรือ ฯลฯ เท่านั้น) CLK ในพื้นที่นั้นมักจะได้รับมาจาก CLK ทั่วโลกไม่ว่าจะเป็น CLK ทั่วโลกและจากนั้น CLK ท้องถิ่นจะไม่เปลี่ยนแปลงหรือ (ล่าช้าเล็กน้อยหลังจาก CLK ทั่วโลกสำหรับสัญญาณที่จะแพร่กระจายผ่าน "สิ่งอื่น") CLK โลคัลเปลี่ยนหนึ่งครั้ง
เมื่อ "สิ่งอื่น" นั้นขับเคลื่อน CLK ของดาวน์สตรีมรีจิสเตอร์ (R3) มันทำให้ความเบ้เป็นบวกมากขึ้น เมื่อนั้น "อย่างอื่น" ไดรฟ์ CLK ของ upstream register (R1 หรือ R2) มันทำให้ความเบ้เป็นลบมากขึ้น บางครั้งสิ่งใดก็ตามที่ผลักดัน CLK ของทะเบียนต้นน้ำและอะไรก็ตามที่ผลักดัน CLK ของทะเบียนล่องนั้นมีความล่าช้าในทางปฏิบัติเช่นเดียวกัน
เครือข่ายการกระจายสัญญาณนาฬิกาภายใน ASIC บางตัวได้รับการออกแบบโดยมีจำนวนนาฬิกาบวกเล็กน้อยในการลงทะเบียนบางครั้งซึ่งจะทำให้ตรรกะเชิงผสมทางต้นน้ำมีเวลามากขึ้นในการชำระและทำให้ระบบทั้งหมดสามารถทำงานได้ในอัตรานาฬิกาที่เร็วขึ้น นี้เรียกว่า "นาฬิกาเพิ่มประสิทธิภาพเอียง" หรือ "นาฬิกาการตั้งเวลาเอียง" และมีความเกี่ยวข้องกับ " retiming "
ฉันยังคงประหลาดใจกับset_clock_uncertainty
คำสั่ง - ทำไมฉันถึงต้องการ "ระบุด้วยตนเอง" เอียง
(*) ยกเว้น:
ระบบไม่ตรงกัน