इसका सरल उत्तर यह है कि वे अपने दम पर नहीं हैं। सिंक्रोनाइज़र यह सुनिश्चित करने के लिए है कि डेटा भर में न हो, लेकिन यह सुनिश्चित करें कि आप मेटास्टेबल सिग्नलों के साथ समाप्त न हों और बहुत सारे सिग्नलों को खिलाएं। आरेख के रूप में दूसरा एफएफ मेटास्टेबल प्रथम एफएफ आउटपुट को पकड़ता है और इसे डिजाइन के माध्यम से आगे प्रचार करने से रोकता है।
विभिन्न प्रकार के सिग्नल हैं, और आप सिंक्रोनाइज़र को कैसे शामिल करते हैं, इस बात पर निर्भर करता है कि आप किस सिग्नल के बारे में बात कर रहे हैं। लेकिन सामान्य प्रकार के एक जोड़े को देखो:
ट्रिगर सिग्नल - या कोई भी संकेत जो मूल रूप से एक नाड़ी है जिसे कुछ और शुरू करना चाहिए। ये आम तौर पर कोई डेटा नहीं रखते हैं, और आप सभी में रुचि रखते हैं कि एक और घड़ी डोमेन में कुछ शुरू करने के लिए एक बढ़ती बढ़त है, कहते हैं। इन्हें पार करने के लिए, आपको एक सिंक्रनाइज़र की आवश्यकता होगी (अनिवार्य रूप से वही करना जो आपके आरेख में दिखाया गया है), लेकिन आपको थोड़ी अधिक आवश्यकता है।
सबसे आसान विकल्प पल्स का विस्तार करना है - अनिवार्य रूप से आप सुनिश्चित करते हैं कि इनपुट पल्स डेस्टिनेशन क्लॉक की 1 से अधिक अवधियों की अवधि है (यह कम से कम सेटअप के 1 चक्र से अधिक लंबा होना चाहिए और गंतव्य रजिस्टर के लिए कई बार पकड़ होना चाहिए) । उदाहरण के लिए यदि आप 20MHz घड़ी से 15MHz घड़ी तक जा रहे हैं, तो आप यह सुनिश्चित करेंगे कि इनपुट के समय आपकी नाड़ी दो घड़ी चक्र है जो यह सुनिश्चित करेगी कि यह गंतव्य घड़ी के लिए प्रस्तुत किया गया है और नहीं खो गया है। यह आपके प्रश्न का उत्तर भी देता है कि सिग्नल को कैसे पार करने की गारंटी है। यदि पल्स एक गंतव्य घड़ी की अवधि से अधिक व्यापक है, तो इसका मतलब है कि अगर यह पहली घड़ी के किनारे पर मेटास्टेबल है और समाप्त होता है, तो इसे 0 के रूप में देखा जा रहा है, तो यह निश्चित रूप से पल्स को पकड़ लेगा।
क्योंकि इस प्रकार के सिग्नल के साथ आप केवल इस बात में रुचि रखते हैं कि पल्स को पार मिल गया है, इससे कोई फर्क नहीं पड़ता कि आउटपुट सिग्नल दो घड़ी चक्रों के साथ समाप्त होता है और कुछ समय उच्च और केवल एक चक्र बाकी है। यदि आपको यह सुनिश्चित करने की आवश्यकता है कि यह एक एकल चक्र नाड़ी है, तो आप एक साधारण किनारे डिटेक्टर सर्किट को तुरंत समाप्त कर सकते हैं।
नियंत्रण बसें - या संभवतः डेटा बसों के प्रकार। ये यकीनन अधिक कठिन हैं क्योंकि यदि आपके पास बहु-बिट डेटा स्ट्रीम है जिसे सिंक्रनाइज़ रहने की आवश्यकता है। इस मामले में आप क्या करेंगे "हैंडशेकिंग" नामक कुछ को लागू करें। आप मूल रूप से अपने डेटा को सोर्स क्लॉक पर लोड करते हैं और उसे होल्ड करते हैं। फिर आप एक तुल्यकालन के माध्यम से एक अनुरोध संकेत (जैसे 1) भर में भेजते हैं। एक बार अनुरोध सिग्नल भर में आप जानते हैं कि गंतव्य डोमेन में डेटा बस भी स्थिर हो जाएगी। फिर आप इसे गंतव्य के रजिस्टर बैंक में देख सकते हैं। गंतव्य तब स्रोत को सूचित करने के लिए फिर से एक पल्स वापस भेजता है कि वह अगले शब्द को लोड कर सके।
आप इस तरह की बस का उपयोग करेंगे यदि आपको गंतव्य घड़ी के लिए एक नियंत्रण शब्द भेजने की आवश्यकता है जिसके लिए आपको यह जानने की आवश्यकता है कि इससे पहले कि आप दूसरे को भेजें (जैसे कि यदि आप कुछ करने के लिए एक कमांड भेज रहे हैं)।
डेटा बसें - डेटा के लिए जहां आपके पास एक स्रोत है जो लगातार या फटने वाले डेटा को बाहर निकालता है, आप सिंक्रोनाइज़र की तुलना में फीफो का उपयोग करके यकीनन बेहतर हैं। FIFO में डेटा कितना है, इस पर नजर रखने के लिए काउंटरों के साथ-साथ डेटा को होल्ड करने के लिए FIFO एक दोहरी-घड़ी मेमोरी का उपयोग करता है। आप FIFO में जगह होने पर डेटा लिखते हैं, और फिर लिखने का पता बढ़ाते हैं। यह पता आमतौर पर एक "ग्रे कोडिंग" योजना में एन्कोडेड है जो यह सुनिश्चित करता है कि पते में प्रत्येक वृद्धि केवल एक का कारण बनती हैबदलने के लिए पता बस में है (जिसका अर्थ है कि आपको कई बिट्स को सिंक्रनाइज़ करने की आवश्यकता नहीं है)। यह पता तब गंतव्य डोमेन (आपके सिंक्रोनाइज़र चेन के माध्यम से) में स्थानांतरित हो जाता है, जहां इसकी तुलना रीड एड्रेस से की जाती है। यदि FIFO में डेटा है, तो इसे गंतव्य क्लॉक पोर्ट का उपयोग करके मेमोरी से बाहर पढ़ा जा सकता है। पढ़ा हुआ पता इसी प्रकार ग्रे कोडित है और दूसरे सिंक्रोनाइज़र के माध्यम से वापस स्रोत पर भेजा जाता है ताकि लिखने का पोर्ट गणना कर सके कि फीफो में कोई जगह है या नहीं।
सिग्नल रीसेट करें - ये आम तौर पर "असिंक्रोनस एसेसर, सिंक्रोनस डेज़र" के रूप में जाने जाने वाले सिंक्रोनाइजर के संशोधित संस्करण का उपयोग करते हैं। इस संशोधित संस्करण में, पहले फ्लिप फ्लॉप के लिए डेटा इनपुट GND से जुड़ा हुआ है, और इसके बजाय इनकमिंग रीसेट सिग्नल सिंक्रोनस में प्रत्येक फ्लिप-फ्लॉप के अतुल्यकालिक प्रीसेट सिग्नल से जुड़ा हुआ है। यह एक आउटपुट सिग्नल में परिणाम देता है जो उच्च होने पर पूरी तरह से अतुल्यकालिक होता है, लेकिन सिंक्रनाइज़र श्रृंखला यह सुनिश्चित करती है कि यह रजिस्टर श्रृंखला में शून्य के माध्यम से क्लॉकिंग के साथ गंतव्य घड़ी के साथ कम तुल्यकालिक रूप से जाता है।
इस प्रकार का सिंक्रनाइज़र डेटा और नियंत्रण के लिए भयानक है, लेकिन संकेतों को रीसेट करने के लिए पूरी तरह से अनुकूल है। यदि सभी गंतव्य तर्क इस श्रृंखला के आउटपुट को डोमेन में किसी भी रजिस्टर के अतुल्यकालिक रीसेट इनपुट में फीड करते हैं, तो assert (भले ही यह अतुल्यकालिक है) पर मेटास्टेबिलिटी की थोड़ी चिंता है क्योंकि सभी रजिस्टरों को ज्ञात स्थिति में मजबूर किया जाता है। फिर जब रीसेट सिग्नल को सोर्स डोमेन में डीसेंसर किया जाता है, तो यह समकालिक रूप से डेस्टिनेशन डोमेन में डेज़र्ट करता है जिसका अर्थ है कि सभी रजिस्टर एक ही क्लॉक साइकिल पर रीसेट से बाहर आते हैं (बजाय +/- 1 चक्र के अगर यह एसिंक्रोनस डेज़र था)।
जैसा कि आप ऊपर से देख सकते हैं, सिग्नल पर सिर्फ 2 फ्लिप-फ्लॉप सिंक्राइज़र को छड़ी करने की तुलना में क्लॉक-डोमेन क्रॉसिंग करना बहुत अधिक जटिल है। उपयोग की गई सटीक विधि आवेदन पर निर्भर करती है।