आधुनिक डिजिटल लॉजिक डिवाइस आमतौर पर (*) "सिंक्रोनस डिज़ाइन प्रैक्टिस" के साथ डिज़ाइन किए जाते हैं: एक विश्व स्तर पर सिंक्रोनस एज-ट्रिगर रजिस्टर-ट्रांसफर डिज़ाइन स्टाइल (आरटीएल): सभी अनुक्रमिक सर्किट वैश्विक घड़ी सिग्नल सीएलके से जुड़े एज-ट्रिगर रजिस्टरों में टूट जाते हैं। और शुद्ध संयोजन तर्क।
वह डिजाइन शैली लोगों को समय के संबंध में बिना डिजिटल लॉजिक सिस्टम को डिजाइन करने की अनुमति देती है। उनका सिस्टम "बस काम करेगा" जब तक कि आंतरिक राज्य के निपटान के लिए एक घड़ी के किनारे से दूसरे तक पर्याप्त समय नहीं हो जाता।
इस डिजाइन शैली के साथ, घड़ी तिरछा और अन्य समय-संबंधित मुद्दे अप्रासंगिक हैं, यह पता लगाने के अलावा कि "इस प्रणाली के लिए अधिकतम घड़ी दर क्या है?"।
क्या वास्तव में घड़ी तिरछा है?
उदाहरण के लिए:
...
R1 - register 1 R3
+-+
->| |------>( combinational ) +-+
...->| |------>( logic )->| |--...
->|^|------>( )->|^|
+-+ ( ) +-+
| +--->( ) |
CLK | +->( ) CLK
| |
R2: | |
+-+ | |
...->| |->+ |
->|^|->--+
+-+
|
CLK
वास्तविक हार्डवेयर में, "सीएलके" संकेत वास्तव में हर रजिस्टर पर वास्तव में एक साथ स्विच नहीं करता है । घड़ी तिरछा Tskew नदी के ऊपर घड़ी के नीचे की ओर घड़ी रिश्तेदार की देरी (है एक ):
Tskew (स्रोत, गंतव्य) = गंतव्य_ समय - source_time
जहां source_time अपस्ट्रीम स्रोत रजिस्टर (इस मामले में, R1 या R2) में एक सक्रिय घड़ी के किनारे का समय है, और गंतव्य_टाइम कुछ डाउनस्ट्रीम गंतव्य रजिस्टर (इस मामले में, R3) में "समान" सक्रिय घड़ी बढ़त का समय है ।
- नकारात्मक घड़ी तिरछा: R1 पर CLK R1 में घड़ी से पहले स्विच करता है ।
- सकारात्मक घड़ी तिरछा: R1 पर CL3 R1 में घड़ी के बाद स्विच करता है ।
घड़ी के तिरछेपन का क्या प्रभाव है?
(शायद यहाँ एक समय आरेख यह स्पष्ट कर देगा)
चीजों को ठीक से काम करने के लिए, यहां तक कि सबसे खराब स्थिति में भी, आर 3 के सेटअप समय या होल्ड समय के दौरान आर 3 के इनपुट में बदलाव नहीं करना चाहिए। अन्य चीजों में, ठीक से काम करने के लिए, हमें ऐसी चीजों को डिजाइन करना चाहिए:
Tskew (R1, R3) <Tco - Th।
Tclk_min = Tco + Tcalc + Tsu - Tskew (R1, R3)।
कहाँ पे:
- Tcalc, सिस्टम में कहीं भी कॉम्बिनेशन लॉजिक के किसी भी ब्लॉक का सबसे खराब केस है। (कभी-कभी हम दहनशील तर्क के ब्लॉक को फिर से डिज़ाइन कर सकते हैं जो महत्वपूर्ण पथ पर है, भागों को ऊपर या नीचे की ओर धकेलता है, या पाइपलाइनिंग का एक और चरण सम्मिलित करता है, इसलिए नए डिज़ाइन में एक छोटा Tcalc है, जो हमें घड़ी दर को बढ़ाने की अनुमति देता है) ।
- Tclk_min एक सक्रिय घड़ी के किनारे से अगले सक्रिय घड़ी के छोर तक की न्यूनतम समयावधि है। हम इसकी गणना उपरोक्त समीकरण से करते हैं।
- त्सू रजिस्टर सेटअप समय है। रजिस्टर निर्माता हमसे अपेक्षा करता है कि हम इस आवश्यकता को पूरा करने के लिए एक घड़ी की धीमी गति का उपयोग करें।
- Th रजिस्टर होल्ड टाइम है। रजिस्टर निर्माता ने हमसे अपेक्षा की है कि हम इस आवश्यकता को पूरा करने के लिए घड़ी की तिरछी गति को नियंत्रित करें।
- Tco, क्लॉक-टू-आउटपुट देरी (प्रचार समय) है। प्रत्येक सक्रिय घड़ी बढ़त के बाद, आर 1 और आर 2 नए मूल्यों पर स्विच करने से पहले थोको समय के लिए पुराने मूल्यों को कॉम्बिनेशन लॉजिक के लिए जारी रखते हैं। यह हार्डवेयर द्वारा निर्धारित किया जाता है और निर्माता द्वारा इसकी गारंटी दी जाती है, लेकिन जब तक हम त्सू और गु को पूरा करते हैं और अन्य आवश्यकताओं के अनुसार निर्माता सामान्य ऑपरेशन के लिए निर्दिष्ट करता है।
बहुत अधिक सकारात्मक तिरछा एक असामयिक आपदा है। बहुत अधिक सकारात्मक तिरछा (कुछ डेटा संयोजनों के साथ) "स्नीक पाथ" का कारण बन सकता है जैसे कि, R3 के बजाय घड़ी N + 1 पर "सही डेटा" को लागू करना (डेटा का एक निर्धारक कार्य जो पहले N 1 में R1 और R2 में लेट गया था) , नया डेटा R1 और R2 को घड़ी N + 1 में लैच किया गया, कॉम्बिनेशन लॉजिक को परेशान कर सकता है, और गलत डेटा को R3 में "समान" क्लॉक एज N + 1 पर ले जाने का कारण बन सकता है।
घड़ी की दर को धीमा करके नकारात्मक तिरछी किसी भी राशि को "निश्चित" किया जा सकता है। यह केवल इस अर्थ में "बुरा" है कि यह हमें सिस्टम को धीमी घड़ी की दर पर चलाने के लिए मजबूर करता है, ताकि आर 1 और आर 2 के बाद व्यवस्थित करने के लिए आर 3 समय के इनपुट को घड़ी के किनारे एन पर नया डेटा दिया जा सके, और फिर बाद में आर 3 "अगले" घड़ी के किनारे N + 1 पर परिणाम लाच करता है।
कई सिस्टम एक घड़ी वितरण नेटवर्क का उपयोग करते हैं जो तिरछा शून्य को कम करने की कोशिश करता है। काउंटर-सहजता से, घड़ी पथ के साथ देरी को ध्यान से जोड़कर - प्रत्येक रजिस्टर के सीएलके इनपुट के लिए घड़ी जनरेटर से पथ - यह स्पष्ट गति को बढ़ाने के लिए संभव है कि घड़ी के किनारे की तरंग शारीरिक रूप से एक रजिस्टर के सीएलके इनपुट से यात्रा करती है अगले रजिस्टर सीएलके इनपुट प्रकाश की गति से तेज करने के लिए।
Altera प्रलेखन का उल्लेख है
"घड़ी के रास्तों में दहनशील तर्क का उपयोग करने से बचें क्योंकि यह घड़ी के तिरछेपन में योगदान देता है।"
यह इस तथ्य का उल्लेख है कि बहुत से लोग एचडीएल लिखते हैं जो एक FPGA पर एक तरह से संकलित हो जाता है जो किसी तरह से कुछ रजिस्टरों के स्थानीय सीएलके इनपुट को चलाने के लिए वैश्विक सीएलके सिग्नल के अलावा कुछ और का कारण बनता है। (यह "क्लॉक गेटिंग" लॉजिक हो सकता है ताकि नए मान केवल एक रजिस्टर में लोड हो जाएं जब कुछ शर्तें पूरी हों, या "क्लॉक डिवाइडर" लॉजिक जो केवल N घड़ियों में से 1 को, या आदि से बाहर जाने दें। वह स्थानीय सीएलके आमतौर पर किसी भी तरह से वैश्विक सीएलके से प्राप्त होता है - वैश्विक सीएलके टिक जाता है, और फिर स्थानीय सीएलके नहीं बदलता है, या (उस "कुछ अन्य" के माध्यम से प्रचार के लिए संकेत के लिए वैश्विक सीएलके के बाद एक छोटी देरी) स्थानीय सीएलके एक बार बदल जाता है।
जब वह "कुछ अन्य" डाउनस्ट्रीम रजिस्टर (आर 3) के सीएलके को चलाता है, तो यह तिरछा को अधिक सकारात्मक बनाता है। जब वह "कुछ अन्य" अपस्ट्रीम रजिस्टर (आर 1 या आर 2) के सीएलके को चलाता है, तो यह तिरछा अधिक नकारात्मक बनाता है। कभी-कभी, अपस्ट्रीम रजिस्टर के सीएलके को जो भी ड्राइव करता है और जो भी डाउनस्ट्रीम रजिस्टर के सीएलके को ड्राइव करता है, व्यावहारिक रूप से एक ही देरी होती है, जिससे उनके बीच तिरछा व्यावहारिक रूप से शून्य हो जाता है।
कुछ ASIC के अंदर क्लॉक डिस्ट्रीब्यूशन नेटवर्क को जानबूझकर कुछ रजिस्टरों पर सकारात्मक क्लॉक तिरछी मात्रा में डिज़ाइन किया गया है , जो कॉम्बीनेशन लॉजिक को व्यवस्थित करने के लिए थोड़ा अधिक समय देता है और इसलिए पूरे सिस्टम को तेज क्लॉक रेट पर चलाया जा सकता है। इसे "क्लॉक स्क्यू ऑप्टिमाइज़ेशन" या "क्लॉक स्क्यू शेड्यूलिंग" कहा जाता है, और " रिटिमिंग " से संबंधित है ।
मैं अभी भी set_clock_uncertainty
कमान द्वारा चकित हूं - मैं कभी भी तिरछा "मैन्युअल रूप से निर्दिष्ट" क्यों करना चाहूंगा?
(*) एक अपवाद:
अतुल्यकालिक प्रणाली ।