2-एफएफ सिंक्रोनाइजर उचित सिंक्रोनाइजेशन कैसे सुनिश्चित करता है?


9

घड़ी की सीमाओं को पार करने के लिए सिग्नल के लिए 2-एफएफ सिंक्रोनाइज़र का उपयोग करना एक मानक रहा है। और तंत्र को दर्शाने वाले बहुत सारे कागज / आंकड़े हैं, जैसे कि यह एक:यहां छवि विवरण दर्ज करें

ऐसा लगता है BCLK केवल की नब्ज का स्वाद ले सकते ADAT एक बार (के दूसरे बढ़ती किनारे पर BCLK , जिस पर उत्पादन metastability कारण बनता है) bq1_dat । अगले सक्रिय घड़ी किनारे पर bq1_dat को "उच्च" कैसे नमूना किया जा सकता है?


अपने सवाल के अलावा, मैं एक अन्य घड़ी डोमेन (सुरक्षित रूप से 2-FF MTBF की आवश्यकता को पूरा करने के लिए पर्याप्त है मान लीजिए) के माध्यम से जाने के लिए एक संकेत के लिए मुझे क्या जोड़ना है। यदि कोई गलती हो तो कृपया मुझे सुधारें।

यहां छवि विवरण दर्ज करें

पीएस: मेटास्टेबल राज्य "तरंग" के आसपास घूमते हुए प्रदर्शित नहीं करता है, लेकिन एक स्तर जो न तो '1' है और न ही '0' है। निम्नलिखित आंकड़ा मेटास्टेबल आउटपुट का एक उदाहरण दिखाता है।यहां छवि विवरण दर्ज करें

EJ108A, लेक्चर 13: मेटास्टेबिलिटी और सिंक्रोनाइज़ेशन फेल्योर (ओव जब गुड फ्लिप-फ्लॉप्स गो बैड) के लिए WJ डेली द्वारा लेक्चर नोट्स से ओरिजिनल फिगर आया ।


4
मैं सिर्फ यह कहना चाहता हूं कि मेटास्टेबल आउटपुट "इधर-उधर भटकने" वाले चित्र बेहद भ्रामक हैं। यही कारण है कि मेटास्टेबिलिटी बिल्कुल नहीं दिखती है। जब एक एफएफ मेटास्टेबल होता है, तो इसका आउटपुट एक एकल, विशिष्ट मध्यवर्ती वोल्टेज (मूल्य कार्यान्वयन प्रौद्योगिकी पर निर्भर करता है) पर जाता है और वहां रहता है। कुछ अप्रत्याशित समय के बाद, वोल्टेज तब या तो उच्च या निम्न स्विंग करेगा, और जिस तरह से यह जाता है वह भी अप्रत्याशित है।
डेव ट्वीड

@ डीड ट्वीड ♦ टिप्पणी के लिए धन्यवाद। मेटास्टेबिलिटी के विषय में मैंने जितने भी दस्तावेज पढ़े हैं, उनमें मैंने "तरंगों" को भटकते देखा। मैंने आसपास खोज की और एक पोस्ट पाया ( यदि एक फ्लिप फ्लॉप में सेटअप का उल्लंघन होता है और मेटास्टेबल हो जाता है, तो क्या मेटास्टेबल स्थिति पर कब्जा करने के साथ ओ-स्कोप से शूट किया जाता है ? आकृति के मूल संदर्भ की एक कड़ी उस पोस्ट में शामिल है।
fiedel

हां, यह मेरी बात को पूरी तरह से दिखाता है, और पावरपॉइंट प्रस्तुति से यह बहुत अच्छी जानकारी है।
डेव ट्वीड

जवाबों:


8

इसका सरल उत्तर यह है कि वे अपने दम पर नहीं हैं। सिंक्रोनाइज़र यह सुनिश्चित करने के लिए है कि डेटा भर में न हो, लेकिन यह सुनिश्चित करें कि आप मेटास्टेबल सिग्नलों के साथ समाप्त न हों और बहुत सारे सिग्नलों को खिलाएं। आरेख के रूप में दूसरा एफएफ मेटास्टेबल प्रथम एफएफ आउटपुट को पकड़ता है और इसे डिजाइन के माध्यम से आगे प्रचार करने से रोकता है।

विभिन्न प्रकार के सिग्नल हैं, और आप सिंक्रोनाइज़र को कैसे शामिल करते हैं, इस बात पर निर्भर करता है कि आप किस सिग्नल के बारे में बात कर रहे हैं। लेकिन सामान्य प्रकार के एक जोड़े को देखो:

  1. ट्रिगर सिग्नल - या कोई भी संकेत जो मूल रूप से एक नाड़ी है जिसे कुछ और शुरू करना चाहिए। ये आम तौर पर कोई डेटा नहीं रखते हैं, और आप सभी में रुचि रखते हैं कि एक और घड़ी डोमेन में कुछ शुरू करने के लिए एक बढ़ती बढ़त है, कहते हैं। इन्हें पार करने के लिए, आपको एक सिंक्रनाइज़र की आवश्यकता होगी (अनिवार्य रूप से वही करना जो आपके आरेख में दिखाया गया है), लेकिन आपको थोड़ी अधिक आवश्यकता है।

    सबसे आसान विकल्प पल्स का विस्तार करना है - अनिवार्य रूप से आप सुनिश्चित करते हैं कि इनपुट पल्स डेस्टिनेशन क्लॉक की 1 से अधिक अवधियों की अवधि है (यह कम से कम सेटअप के 1 चक्र से अधिक लंबा होना चाहिए और गंतव्य रजिस्टर के लिए कई बार पकड़ होना चाहिए) । उदाहरण के लिए यदि आप 20MHz घड़ी से 15MHz घड़ी तक जा रहे हैं, तो आप यह सुनिश्चित करेंगे कि इनपुट के समय आपकी नाड़ी दो घड़ी चक्र है जो यह सुनिश्चित करेगी कि यह गंतव्य घड़ी के लिए प्रस्तुत किया गया है और नहीं खो गया है। यह आपके प्रश्न का उत्तर भी देता है कि सिग्नल को कैसे पार करने की गारंटी है। यदि पल्स एक गंतव्य घड़ी की अवधि से अधिक व्यापक है, तो इसका मतलब है कि अगर यह पहली घड़ी के किनारे पर मेटास्टेबल है और समाप्त होता है, तो इसे 0 के रूप में देखा जा रहा है, तो यह निश्चित रूप से पल्स को पकड़ लेगा।

    क्योंकि इस प्रकार के सिग्नल के साथ आप केवल इस बात में रुचि रखते हैं कि पल्स को पार मिल गया है, इससे कोई फर्क नहीं पड़ता कि आउटपुट सिग्नल दो घड़ी चक्रों के साथ समाप्त होता है और कुछ समय उच्च और केवल एक चक्र बाकी है। यदि आपको यह सुनिश्चित करने की आवश्यकता है कि यह एक एकल चक्र नाड़ी है, तो आप एक साधारण किनारे डिटेक्टर सर्किट को तुरंत समाप्त कर सकते हैं।

  2. नियंत्रण बसें - या संभवतः डेटा बसों के प्रकार। ये यकीनन अधिक कठिन हैं क्योंकि यदि आपके पास बहु-बिट डेटा स्ट्रीम है जिसे सिंक्रनाइज़ रहने की आवश्यकता है। इस मामले में आप क्या करेंगे "हैंडशेकिंग" नामक कुछ को लागू करें। आप मूल रूप से अपने डेटा को सोर्स क्लॉक पर लोड करते हैं और उसे होल्ड करते हैं। फिर आप एक तुल्यकालन के माध्यम से एक अनुरोध संकेत (जैसे 1) भर में भेजते हैं। एक बार अनुरोध सिग्नल भर में आप जानते हैं कि गंतव्य डोमेन में डेटा बस भी स्थिर हो जाएगी। फिर आप इसे गंतव्य के रजिस्टर बैंक में देख सकते हैं। गंतव्य तब स्रोत को सूचित करने के लिए फिर से एक पल्स वापस भेजता है कि वह अगले शब्द को लोड कर सके।

    आप इस तरह की बस का उपयोग करेंगे यदि आपको गंतव्य घड़ी के लिए एक नियंत्रण शब्द भेजने की आवश्यकता है जिसके लिए आपको यह जानने की आवश्यकता है कि इससे पहले कि आप दूसरे को भेजें (जैसे कि यदि आप कुछ करने के लिए एक कमांड भेज रहे हैं)।

  3. डेटा बसें - डेटा के लिए जहां आपके पास एक स्रोत है जो लगातार या फटने वाले डेटा को बाहर निकालता है, आप सिंक्रोनाइज़र की तुलना में फीफो का उपयोग करके यकीनन बेहतर हैं। FIFO में डेटा कितना है, इस पर नजर रखने के लिए काउंटरों के साथ-साथ डेटा को होल्ड करने के लिए FIFO एक दोहरी-घड़ी मेमोरी का उपयोग करता है। आप FIFO में जगह होने पर डेटा लिखते हैं, और फिर लिखने का पता बढ़ाते हैं। यह पता आमतौर पर एक "ग्रे कोडिंग" योजना में एन्कोडेड है जो यह सुनिश्चित करता है कि पते में प्रत्येक वृद्धि केवल एक का कारण बनती हैबदलने के लिए पता बस में है (जिसका अर्थ है कि आपको कई बिट्स को सिंक्रनाइज़ करने की आवश्यकता नहीं है)। यह पता तब गंतव्य डोमेन (आपके सिंक्रोनाइज़र चेन के माध्यम से) में स्थानांतरित हो जाता है, जहां इसकी तुलना रीड एड्रेस से की जाती है। यदि FIFO में डेटा है, तो इसे गंतव्य क्लॉक पोर्ट का उपयोग करके मेमोरी से बाहर पढ़ा जा सकता है। पढ़ा हुआ पता इसी प्रकार ग्रे कोडित है और दूसरे सिंक्रोनाइज़र के माध्यम से वापस स्रोत पर भेजा जाता है ताकि लिखने का पोर्ट गणना कर सके कि फीफो में कोई जगह है या नहीं।

  4. सिग्नल रीसेट करें - ये आम तौर पर "असिंक्रोनस एसेसर, सिंक्रोनस डेज़र" के रूप में जाने जाने वाले सिंक्रोनाइजर के संशोधित संस्करण का उपयोग करते हैं। इस संशोधित संस्करण में, पहले फ्लिप फ्लॉप के लिए डेटा इनपुट GND से जुड़ा हुआ है, और इसके बजाय इनकमिंग रीसेट सिग्नल सिंक्रोनस में प्रत्येक फ्लिप-फ्लॉप के अतुल्यकालिक प्रीसेट सिग्नल से जुड़ा हुआ है। यह एक आउटपुट सिग्नल में परिणाम देता है जो उच्च होने पर पूरी तरह से अतुल्यकालिक होता है, लेकिन सिंक्रनाइज़र श्रृंखला यह सुनिश्चित करती है कि यह रजिस्टर श्रृंखला में शून्य के माध्यम से क्लॉकिंग के साथ गंतव्य घड़ी के साथ कम तुल्यकालिक रूप से जाता है।

    इस प्रकार का सिंक्रनाइज़र डेटा और नियंत्रण के लिए भयानक है, लेकिन संकेतों को रीसेट करने के लिए पूरी तरह से अनुकूल है। यदि सभी गंतव्य तर्क इस श्रृंखला के आउटपुट को डोमेन में किसी भी रजिस्टर के अतुल्यकालिक रीसेट इनपुट में फीड करते हैं, तो assert (भले ही यह अतुल्यकालिक है) पर मेटास्टेबिलिटी की थोड़ी चिंता है क्योंकि सभी रजिस्टरों को ज्ञात स्थिति में मजबूर किया जाता है। फिर जब रीसेट सिग्नल को सोर्स डोमेन में डीसेंसर किया जाता है, तो यह समकालिक रूप से डेस्टिनेशन डोमेन में डेज़र्ट करता है जिसका अर्थ है कि सभी रजिस्टर एक ही क्लॉक साइकिल पर रीसेट से बाहर आते हैं (बजाय +/- 1 चक्र के अगर यह एसिंक्रोनस डेज़र था)।


जैसा कि आप ऊपर से देख सकते हैं, सिग्नल पर सिर्फ 2 फ्लिप-फ्लॉप सिंक्राइज़र को छड़ी करने की तुलना में क्लॉक-डोमेन क्रॉसिंग करना बहुत अधिक जटिल है। उपयोग की गई सटीक विधि आवेदन पर निर्भर करती है।


टॉम के जवाब के अलावा, मैं PoC का एक संदर्भ जोड़ना पसंद करता हूं , जिसमें इन मामलों के लिए कार्यान्वयन है। सिन्क्रोनाइज़र डॉक्स RTD पर उपलब्ध हैं। बेसिक 2-एफएफ सिंक्रोनाइज़र के लिए 2 फ्लिप-फ्लॉप्स को चेंज करने के सिद्धांत के अतिरिक्त, PoC sync_Bitsने मेटास्टेबिलिटी व्यवहार को बेहतर बनाने के लिए Xilinx और Altera FPGAs के लिए समर्पित कार्यान्वयन ( ) प्रदान करता है। sync_Strobeदालों के लिए अधिक जटिल सिंक्रोनाइज़र बनाने के लिए 2-FF सिंक्रोनाइज़र का उपयोग उदाहरण के लिए किया जाता है ।
पैबेल्स

सिंक्रनाइज़ेशन रणनीतियों के विस्तृत परिचय के लिए धन्यवाद। यह तस्वीर क्लिफोर्ड ई। कमिंग्स द्वारा "क्लॉक डोमेन क्रॉसिंग (सीडीसी) डिजाइन एंड सिस्टमवर्क सिस्टम का उपयोग करके सत्यापन तकनीक" से आया है। मैं समझता हूं कि एक-बिट सिग्नल के लिए, चौड़ाई को कम से कम 1 घड़ी चक्र + सेटअप समय + होना चाहिए ताकि सुरक्षित रूप से प्राप्त करने के लिए इसे प्राप्त करने के लिए साइड का समय हो। इस तस्वीर में, यह मानदंड संतुष्ट नहीं है क्योंकि एडट की पल्स को इसके गिरने वाले किनारे पर केवल एक बार bclk नमूनों द्वारा नमूना किया जाता है, जो bq1_dat को मेटास्टेबल बनाता है।
fiedel

... परिणामस्वरूप, bkk के अगले बढ़ते किनारे पर bq1_dat का पढ़ना या तो '0' या '1' हो सकता है। तो चित्र में सिंक्रनाइज़ेशन असफल प्रतीत होता है। क्या मैं सही हू?
fiedel

@Pabbels संदर्भ के लिए धन्यवाद। देख लेंगे =)
fiedel

आपको इसे अपने प्रश्न में संपादित करना चाहिए, इसे उत्तर के रूप में पोस्ट नहीं करना चाहिए, लेकिन अनिवार्य रूप से, हाँ, आप उस उदाहरण में आउटपुट पर 1 प्राप्त कर सकते हैं या नहीं कर सकते हैं।
टॉम कारपेंटर

1

1) अपने ड्राइंग को एक उदाहरण के रूप में उपयोग करते हुए, एक्लेक और बक्कल एक दूसरे के लिए अतुल्यकालिक हैं। दूसरे शब्दों में, उनके पास घड़ी के अलग-अलग स्रोत हैं। वे adat को वैध डेटा के रूप में दिखा रहे हैं लेकिन केवल aclk के लिए सिंक्रनाइज़ किया गया है। यह वह जगह है जहाँ bclk सिंक्रोनाइज़र खेल में आता है।

2) यह ड्राइंग सबसे खराब स्थिति को मानता है, जहां bq1_dat एक गन्दा आउटपुट है क्योंकि bq1 FF ने डेटा के अंत का केवल एक हिस्सा पकड़ा है, जिससे मेटास्टेबल स्थिति बनती है जिस पर आउटपुट आमतौर पर कचरा होता है। यहाँ चाल है। Bq2 में bq1 के समान ही बक्कल है, लेकिन डेटा से गुजरने और bq2_dat पर दिखाई देने के लिए बक्कल के 2 घड़ी चक्र लगते हैं।

3) डेटा का पहला हिस्सा कब्जा कर लिया, जिसके परिणामस्वरूप गड़बड़ उत्पादन हुआ, लेकिन दूसरा घंटा एक बाद का चक्र है, जो उच्च या निम्न स्थिति में बसने के लिए bq1_dat से अस्पष्ट डेटा के लिए पर्याप्त समय है। गन्दा bq1_dat नाड़ी bq2 के लिए एक वैध तर्क '1' (तर्क उच्च) पर कब्जा करने के लिए, और इसे मान्य और अब सिंक्रनाइज़ डेटा (तर्क उच्च) के रूप में bq2_dat को पास करने के लिए बस लंबे समय तक चली।

4) डाउनस्ट्रीम, bclk का उपयोग करने वाली किसी भी घड़ी के साथ काम करने के लिए डेटा सिंक्रनाइज़ होगा। ध्यान दें कि केवल पहले bclk FF को एक मेटास्टेबल स्थिति से निपटना था । अगर एडिट सिर्फ पिको या नैनो सेकेंड बहुत देर से होता तो आउटपुट लॉजिक कम हो सकता था। याद रखें कि फ्लिप-फ्लॉप केवल घड़ी के बढ़ते किनारे पर डेटा इनपुट का नमूना लेते हैं। बढ़ती बढ़त से पहले या बाद में क्या होता है, इसकी अनदेखी की जाती है।


हालांकि, ध्यान दें कि bclk देरी केवल सुरक्षा का एक संभाव्य उपाय प्रदान करती है, और सटीक मात्रा FF तकनीक और bclk अवधि दोनों पर निर्भर करती है। कुछ हाय-रिले मामलों में 3 या उससे अधिक चरणों के लिए स्वीकार्य स्तर तक त्रुटि दर को प्राप्त करने की आवश्यकता हो सकती है।
3

@WhatRoughBeast। मुझे पता है कि सबसे खराब स्थिति में कई सिंक चरणों की आवश्यकता होती है, प्लस डिजिटल फ़िल्टरिंग। जाहिर है मेरा जवाब बहुत आसान था।
Sparky256

आपकी टिप्पणी में @ Sparky256 क्या पहेलियाँ 3 हैं)। Bq1_dat मेटास्टेबल अवस्था में होने पर bq2 '1' पर कैसे कब्जा कर सकता है?
fiedel

@fiedel, दो चीजें bq2 के लिए एक स्वच्छ इनपुट (कम से कम) पर कब्जा करने में सक्षम होने में योगदान करती हैं। पहले मेटास्टेबल राज्य को पूर्ण घड़ी चक्र के लिए बने रहने की आवश्यकता होती है। दूसरा, bq1 से मेटास्टेबल (छद्म-मध्य-रेल) मूल्य खिड़की में होने की संभावना (या बचने के लिए अनुकूलित) की संभावना नहीं हो सकती है जो bq2 को मेटास्टेबल होने का कारण बनेगा - लेकिन इसका मुख्य रूप से इनमें से पहला है। कहते हैं कि प्रौद्योगिकी 5% की संभावना अस्थिरता लंबे समय तक बनी रहती है। एक 3-FF सिंक चरण इसे 0.25% तक कम कर देगा क्योंकि दोनों कोशिकाओं को विफल होना है। मेसी लगभग स्थिर राज्य से एक अच्छी तरह से परिभाषित घातीय विचलन का अभ्यास कर रहे हैं।
सीन हुलिएन

@SeanHoulihane। स्पष्टीकरण के लिए धन्यवाद। Of राइजिंग एज ’शब्द कुछ को भ्रमित करता है क्योंकि डेटा को स्वीकार करने की खिड़की (मेटास्टेबल या स्थिर) बढ़ती बढ़त के आधे बिंदु पर है, केवल कुछ पिको या नैनो सेकंड तक चलती है। केवल उस इंस्टैंट पर एक लॉजिक '1' या '0' पर इनपुट डेटा है, चाहे वह मेटास्टेबल हो या स्थिर, तर्क 1 या 0. के लिए आईसी की सीमा की तुलना में उसके वोल्टेज स्तर पर निर्भर करता है
Sparky256
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.